/// <inheritdoc />
        public async Task <PointOfInterestExtended> UpdatePointOfInterest(PointOfInterestExtended pointOfInterest, TokenAndSecret tokenAndSecret, string language)
        {
            var             osmGateway     = CreateOsmGateway(tokenAndSecret);
            var             id             = pointOfInterest.Id;
            ICompleteOsmGeo completeOsmGeo = await osmGateway.GetCompleteElement(GeoJsonExtensions.GetOsmId(id), GeoJsonExtensions.GetOsmType(id));

            var featureBeforeUpdate = ConvertOsmToFeature(completeOsmGeo, pointOfInterest.Title);
            var oldIcon             = featureBeforeUpdate.Attributes[FeatureAttributes.POI_ICON].ToString();
            var oldTags             = completeOsmGeo.Tags.ToArray();

            SetWebsiteUrl(completeOsmGeo.Tags, pointOfInterest);
            SetTagByLanguage(completeOsmGeo.Tags, FeatureAttributes.NAME, pointOfInterest.Title, language);
            SetTagByLanguage(completeOsmGeo.Tags, FeatureAttributes.DESCRIPTION, pointOfInterest.Description, language);
            SyncImages(completeOsmGeo.Tags, pointOfInterest.ImagesUrls);
            if (pointOfInterest.Icon != oldIcon && pointOfInterest.Icon != SEARCH_ICON)
            {
                RemoveTagsByIcon(completeOsmGeo.Tags, oldIcon);
                AddTagsByIcon(completeOsmGeo.Tags, pointOfInterest.Icon);
            }
            RemoveEmptyTags(completeOsmGeo.Tags);
            if (AreTagsCollectionEqual(oldTags, completeOsmGeo.Tags.ToArray()))
            {
                return(pointOfInterest);
            }

            var changesetId = await osmGateway.CreateChangeset($"Updated {pointOfInterest.Title} using IsraelHiking.osm.org.il");

            await osmGateway.UpdateElement(changesetId, completeOsmGeo);

            await osmGateway.CloseChangeset(changesetId);

            var featureToReturn = await UpdateElasticSearch(completeOsmGeo, pointOfInterest.Title);

            return(await FeatureToExtendedPoi(featureToReturn, language));
        }
Example #2
0
        private void MergeTitles(IFeature target, IFeature source)
        {
            if (!(target.Attributes[FeatureAttributes.POI_NAMES] is AttributesTable targetTitlesByLanguage))
            {
                return;
            }
            if (!(source.Attributes[FeatureAttributes.POI_NAMES] is AttributesTable sourceTitlesByLanguage))
            {
                return;
            }

            foreach (var attributeName in sourceTitlesByLanguage.GetNames())
            {
                if (targetTitlesByLanguage.Exists(attributeName))
                {
                    targetTitlesByLanguage[attributeName] = GeoJsonExtensions.GetStringListFromAttributeValue(targetTitlesByLanguage[attributeName])
                                                            .Concat(GeoJsonExtensions.GetStringListFromAttributeValue(sourceTitlesByLanguage[attributeName])).Distinct().ToArray();
                }
                else
                {
                    targetTitlesByLanguage.Add(attributeName, GeoJsonExtensions.GetStringListFromAttributeValue(sourceTitlesByLanguage[attributeName]));
                }
            }
        }
Example #3
0
        public Task DeletePointOfInterestById(string id, string source)
        {
            var fullId = GeoJsonExtensions.GetId(source, id);

            return(_elasticClient.DeleteAsync <Feature>(fullId, d => d.Index(OSM_POIS_ALIAS)));
        }
Example #4
0
        public async Task <Feature> GetExternalPoiById(string id, string source)
        {
            var response = await _elasticClient.GetAsync <Feature>(GeoJsonExtensions.GetId(source, id), r => r.Index(EXTERNAL_POIS));

            return(response.Source);
        }
Example #5
0
 public async Task DeleteHighwaysById(string id)
 {
     var fullId = GeoJsonExtensions.GetId(Sources.OSM, id);
     await _elasticClient.DeleteAsync <Feature>(fullId, d => d.Index(OSM_HIGHWAYS_ALIAS));
 }