/// <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)); }
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])); } } }
public Task DeletePointOfInterestById(string id, string source) { var fullId = GeoJsonExtensions.GetId(source, id); return(_elasticClient.DeleteAsync <Feature>(fullId, d => d.Index(OSM_POIS_ALIAS))); }
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); }
public async Task DeleteHighwaysById(string id) { var fullId = GeoJsonExtensions.GetId(Sources.OSM, id); await _elasticClient.DeleteAsync <Feature>(fullId, d => d.Index(OSM_HIGHWAYS_ALIAS)); }