Пример #1
0
 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("");
 }
Пример #2
0
        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()
            });
        }
Пример #3
0
        /***************************************************/

        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);
        }