예제 #1
0
        /// <inheritdoc cref="IOverpassApi"/>
        public OsmNode[] GetOsmNodes(OSMPointsLayer osmLayer, Area area)
        {
            string query = _queryBuilder.BuildQueryForNodes(osmLayer, area.YStart, area.YEnd, area.XStart, area.XEnd);
            var    nodes = LoadNodesFromOverpass(query);

            return(CleanFromToFarAwayEntries(nodes, area.Center, osmLayer.MaxDistanceToCity, osmLayer.MaxDistaToTag).ToArray());
        }
예제 #2
0
        public string BuildQuery(OSMPointsLayer osmLayer, double latitude, double longitude, double maxDistance = 0)
        {
            if (osmLayer == null)
            {
                return("");
            }
            var nodesToLoad = GetNodesToLoad(osmLayer, maxDistance);

            return(BuildQueryForNodes(nodesToLoad.ToArray(), latitude, longitude));
        }
예제 #3
0
        /// <inheritdoc cref="IOverpassApi"/>
        public OsmNode[] GetOsmNodes(OSMPointsLayer osmLayer, double latitudeStart, double latitudeEnd, double longitudeStart, double longitudeEnd)
        {
            Area area = new Area();

            area.XStart = longitudeStart;
            area.XEnd   = longitudeEnd;
            area.YStart = latitudeStart;
            area.YEnd   = latitudeEnd;

            return(GetOsmNodes(osmLayer, area));
        }
예제 #4
0
        /// <inheritdoc cref="IOverpassApi"/>
        public OsmNode[] GetOsmNodes(OSMPointsLayer osmLayer, PointLatLng point, int maxDistance)
        {
            PointLatLng start = WSG84Math.GetDestinationPoint(point, 315, maxDistance);
            PointLatLng end   = WSG84Math.GetDestinationPoint(point, 135, maxDistance);

            Area area = new Area();

            area.XStart = start.Longitude;
            area.YStart = start.Latitude;
            area.XEnd   = end.Longitude;
            area.YEnd   = end.Latitude;

            return(GetOsmNodes(osmLayer, area));
        }
예제 #5
0
        public string BuildQueryForNodes(OSMPointsLayer osmLayer, double latitudeStart, double latitudeEnd, double longitudeStart, double longitudeEnd)
        {
            if (osmLayer == null)
            {
                return("");
            }

            double latitude            = latitudeStart + (latitudeEnd - latitudeStart) / 2;
            double longitude           = longitudeStart + (longitudeEnd - longitudeStart) / 2;
            double maxDistanceInMeters = WSG84Math.GetDistanceInMeters(latitudeStart, longitudeStart, latitudeEnd, longitudeEnd);

            var nodesToLoad = GetNodesToLoad(osmLayer, maxDistanceInMeters);

            return(BuildQueryForNodes(nodesToLoad.ToArray(), latitude, longitude));
        }
예제 #6
0
        private IEnumerable <Tuple <string, string, int> > GetNodesToLoad(OSMPointsLayer osmLayer, double maxDistanceInMeters = 0)
        {
            int maxDistanceToCity = (int)maxDistanceInMeters;

            if (osmLayer.MaxDistanceToCity > 0)
            {
                maxDistanceToCity = osmLayer.MaxDistanceToCity;
            }

            int maxDistanceToTag = (int)maxDistanceInMeters;

            if (osmLayer.MaxDistaToTag > 0)
            {
                maxDistanceToTag = osmLayer.MaxDistaToTag;
            }

            if (osmLayer.CityTypeCity)
            {
                yield return(new Tuple <string, string, int>("place", "city", maxDistanceToCity));
            }

            if (osmLayer.CityTypeTown)
            {
                yield return(new Tuple <string, string, int>("place", "town", maxDistanceToCity));
            }

            if (osmLayer.CityTypeSuburb)
            {
                yield return(new Tuple <string, string, int>("place", "suburb", maxDistanceToCity));
            }

            if (osmLayer.CityTypeVillage)
            {
                yield return(new Tuple <string, string, int>("place", "village", maxDistanceToCity));
            }

            if (osmLayer.CityTypeNeighbourhood)
            {
                yield return(new Tuple <string, string, int>("place", "neighbourhood", maxDistanceToCity));
            }

            foreach (var nodeTag in osmLayer.NodeTags)
            {
                yield return(new Tuple <string, string, int>(nodeTag.Key, nodeTag.Value, maxDistanceToTag));
            }
        }
예제 #7
0
        public void TestGetCities()
        {
            var client = new OverpassApi();

            OSMPointsLayer layer = new OSMPointsLayer();

            layer.CityTypeNeighbourhood = true;
            layer.CityTypeCity          = true;
            layer.CityTypeSuburb        = true;
            layer.CityTypeTown          = true;
            layer.CityTypeVillage       = true;

            layer.MaxDistanceToCity = 40000;
            layer.MaxDistaToTag     = 2000;

            var result = client.GetOsmNodes(layer, new PointLatLng(51.4894273, 9.1421818), 10000);

            //if the city isn't found, it throws an exception -> Test failed :-)
            result.First(x => x.Name.Equals("Warburg"));
            result.First(x => x.Name.Equals("Nörde"));
            result.First(x => x.Name.Equals("Hohenwepel"));
            result.First(x => x.Name.Equals("Menne"));
        }
예제 #8
0
 /// <inheritdoc cref="IOverpassApi"/>
 public OsmNode[] GetOsmNodes(OSMPointsLayer layer, double latitude, double longitude, int maxDistance)
 {
     return(GetOsmNodes(layer, new PointLatLng(latitude, longitude), maxDistance));
 }