/* * /// <summary> * /// Get a description of the design for logging * /// </summary> * /// <param name="designDescriptor">The design</param> * /// <returns>A descriptive string of the design properties</returns> * public static string DesignDescriptionForLogging(DesignDescriptor designDescriptor) * { * if (designDescriptor == null) * return string.Empty; * * if (designDescriptor.file != null) * return $"{designDescriptor.file.filespaceId}:{designDescriptor.file.path}/{designDescriptor.file.fileName}"; * * return designDescriptor.id.ToString(); * } */ /// <summary> /// Determines if a polygon lies outside a bounding box. /// </summary> /// <param name="bbox">The bounding box</param> /// <param name="points">The polygon</param> /// <returns>True if the polygon is completely outside the bounding box otherwise false</returns> public static bool Outside(MapBoundingBox bbox, List <WGSPoint> points) { return(points.Min(p => p.Lat) > bbox.maxLat || points.Max(p => p.Lat) < bbox.minLat || points.Min(p => p.Lon) > bbox.maxLng || points.Max(p => p.Lon) < bbox.minLng); }
[InlineData(4096, 4096, false, 4096, 4096, 1.5269, 1.1341, -1.4009, 1.1341)]//tile larger than bbox public void TestZeroAreaBoundingBoxes(int tileWidth, int tileHeight, bool addMargin, int expectedWidth, int expectedHeight, double expectedMinLat, double expectedMinLng, double expectedMaxLat, double expectedMaxLng) { var minLat = 0.63137; //36.175° var minLng = -2.00748; //-115.020° var maxLat = 0.63137; //36.178° var maxLng = -2.00748; //-115.018° MapBoundingBox bbox = new MapBoundingBox { minLat = minLat, minLng = minLng, maxLat = maxLat, maxLng = maxLng }; var service = new BoundingBoxService(loggerFactory); //numTiles = 1048576 for Z10 MapParameters parameters = new MapParameters { bbox = bbox, numTiles = 1048576, zoomLevel = 10, mapWidth = tileWidth, mapHeight = tileHeight, addMargin = addMargin }; service.AdjustBoundingBoxToFit(parameters); parameters.mapWidth.Should().Be(expectedWidth); parameters.mapHeight.Should().Be(expectedHeight); parameters.bbox.minLat.Should().BeApproximately(expectedMinLat, 0.0001); parameters.bbox.minLng.Should().BeApproximately(expectedMinLng, 0.0001); parameters.bbox.maxLat.Should().BeApproximately(expectedMaxLat, 0.0001); parameters.bbox.maxLng.Should().BeApproximately(expectedMaxLng, 0.0001); }
public AwsBoundingBox BuildBoundingBox(MapBoundingBox mapBox) { var awsMapBoundingBox = new AwsBoundingBox { UpperLeftCoordinates = new GeoCoordinates(mapBox.UpperLeftLat, mapBox.UpperLeftLng), BottomRightCoordinates = new GeoCoordinates(mapBox.BottomRightLat, mapBox.BottomRightLng) }; return(awsMapBoundingBox); }
public void PolygonOutsideBoundingBox() { var bbox = new MapBoundingBox { minLat = 36.0, minLng = -115.9, maxLat = 36.5, maxLng = -115.0 }; var points = new List <WGSPoint> { new WGSPoint(35.0, -116.0), new WGSPoint(35.5, -116.0), new WGSPoint(35.5, -116.5), new WGSPoint(35.0, -116.5), new WGSPoint(35.0, -116.0), }; Assert.True(TileServiceUtils.Outside(bbox, points)); }
public void PolygonIntersectsBoundingBox() { var bbox = new MapBoundingBox { minLat = 36.0, minLng = -115.9, maxLat = 36.5, maxLng = -115.0 }; var points = new List <WGSPoint> { new WGSPoint(35.9, -115.5), new WGSPoint(36.3, -115.5), new WGSPoint(36.3, -115.7), new WGSPoint(35.9, -115.7), new WGSPoint(35.9, -115.5), }; Assert.False(TileServiceUtils.Outside(bbox, points)); }
public void PolygonInsideBoundingBox() { var bbox = new MapBoundingBox { minLat = 36.0, minLng = -115.9, maxLat = 36.5, maxLng = -115.0 }; var points = new List <WGSPoint> { new WGSPoint(36.1, -115.5), new WGSPoint(36.3, -115.5), new WGSPoint(36.3, -115.7), new WGSPoint(36.1, -115.7), new WGSPoint(36.1, -115.5) }; Assert.IsFalse(Outside(bbox, points)); }
public void PolygonEnvelopsBoundingBox() { var bbox = new MapBoundingBox { minLat = 36.0, minLng = -115.9, maxLat = 36.5, maxLng = -115.0 }; var points = new List <WGSPoint> { new WGSPoint(35.9, -116.0), new WGSPoint(36.6, -116.0), new WGSPoint(36.6, -114.9), new WGSPoint(35.9, -114.9), new WGSPoint(35.9, -116.0) }; Assert.IsFalse(Outside(bbox, points)); }
/// <summary> /// Get the map parameters for the report tile /// </summary> public MapParameters GetMapParameters(string bbox, int width, int height, bool addMargin, bool adjustBoundingBox) { log.LogDebug($"GetMapParameters: bbox={bbox}, width={width}, height={height}, addMargin={addMargin}, adjustBoundingBox={adjustBoundingBox}"); var bboxRadians = boundingBoxHelper.GetBoundingBox(bbox); MapBoundingBox mapBox = new MapBoundingBox { minLat = bboxRadians.BottomLeftLat, minLng = bboxRadians.BottomLeftLon, maxLat = bboxRadians.TopRightLat, maxLng = bboxRadians.TopRightLon }; int zoomLevel = TileServiceUtils.CalculateZoomLevel(mapBox.maxLat - mapBox.minLat, mapBox.maxLng - mapBox.minLng); long numTiles = TileServiceUtils.NumberOfTiles(zoomLevel); MapParameters parameters = new MapParameters { bbox = mapBox, zoomLevel = zoomLevel, numTiles = numTiles, mapWidth = width, mapHeight = height, addMargin = addMargin }; if (adjustBoundingBox) { boundingBoxService.AdjustBoundingBoxToFit(parameters); } parameters.pixelTopLeft = TileServiceUtils.LatLngToPixel(mapBox.maxLat, mapBox.minLng, parameters.numTiles); log.LogDebug("MapParameters: " + JsonConvert.SerializeObject(parameters)); return(parameters); }
public void ImportNodes(OsmStreamSource source, bool forceIfTableEmpty = false, MapBoundingBox mapBoundingBox = null) { if (source is null) { throw new ArgumentNullException(nameof(source)); } if (_liteDB is null) { throw new ArgumentNullException(nameof(_liteDB)); } if (_liteDB.GetAllNodes().Count() != 0 || !forceIfTableEmpty) { return; } Func <double, double, bool> isInBoundingBox; if (mapBoundingBox == null) { isInBoundingBox = (_a, _b) => true; } else { isInBoundingBox = (lon, lat) => { return (mapBoundingBox.MinLon <= lon && lon <= mapBoundingBox.MaxLon && mapBoundingBox.MinLat <= lat && lat <= mapBoundingBox.MaxLat); } }; var allNodes = from osmGeo in source where osmGeo.Type == OsmGeoType.Node let nd = ((Node)osmGeo) where nd.Id != null && nd.Latitude != null && nd.Longitude != null && isInBoundingBox(nd.Longitude.Value, nd.Latitude.Value) select new GeoNode { OSMId = osmGeo.Id.Value, Latitude = nd.Latitude.Value, Longitude = nd.Longitude.Value }; _liteDB.InsertNodes(allNodes); }
public void ImportOSM(string pathToOSM, DBLayer dal, bool forceIfTableEmpty = false, MapBoundingBox mapBoundingBox = null) { using (var fileStream = File.OpenRead(pathToOSM)) { // create source stream. OsmStreamSource source; if (Path.GetExtension(pathToOSM).ToLower().Contains("pbf")) { source = ImportOSMPBF(fileStream); } else { source = ImportOSMXML(fileStream); } dal.ImportNodes(source, true, mapBoundingBox); dal.ImportWays(source); dal.ClearUnboundNodes(); } }