public static string ToQLString(this IOpenStreetMapRegion region) { if (region is BoundingBox) { BoundingBox box = region as BoundingBox; return(string.Format("({0},{1},{2},{3});", box.South, box.West, box.North, box.East)); } if (region is Polygon) { Polygon polygon = region as Polygon; return(string.Format("(poly:{0});", polygon.ToLatLonString(" ", "'"))); } if (region is CentreRadius) { //https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Relative_to_other_elements_.28around.29 CentreRadius circle = region as CentreRadius; return(string.Format("(around:{0},{1},{2});", circle.Radius, circle.Centre.Latitude, circle.Centre.Longitude)); } if (region is LineStringRadius) { //https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Relative_to_other_elements_.28around.29 LineStringRadius lineRad = region as LineStringRadius; return(string.Format("(around:{0},{1});", lineRad.Radius, lineRad.Polygon.ToLatLonString(",", ""))); } if (region is TaggedArea) { TaggedArea taggedArea = region as TaggedArea; string keyValues = ToQLString(taggedArea.KeyValues); return(string.Format("area{0};", keyValues)); } return(""); }
public static QueryBuilder QueryBuilder(IOpenStreetMapRegion region, List <IOpenStreetMapElement> elements) { StringBuilder q = new StringBuilder(); q.Append(BaseUri()); if (region is TaggedArea) { q.Append(region.ToQLString()); } q.Append("("); q.Append(GetElementAndRegion(elements, region)); q.Append(");"); q.Append("(._;"); q.Append(">;"); q.Append(");"); q.Append("out body;"); return(new QueryBuilder() { QueryString = q.ToString() }); }
/***************************************************/ private static string GetElementAndRegion(List <IOpenStreetMapElement> elements, IOpenStreetMapRegion region) { if (elements == null) { return(""); } string elementQuery = ""; string regionQuery = ""; if (region is TaggedArea) { regionQuery = "(area);"; } else { regionQuery = region.ToQLString(); } foreach (IOpenStreetMapElement element in elements) { elementQuery += element.ToQLString() + regionQuery; } return(elementQuery); }