【发布时间】:2016-08-22 12:31:41
【问题描述】:
我在这方面已经有一段时间了。 我在这里想要实现的是将谷歌地图作为背景图层添加到我的 Sharpmap 中,我能够做到这一点,但我现在面临的问题是我的地图总是以谷歌地图中格陵兰海附近的一个点为中心,就好像它不会占用我的中心点坐标。
我正在使用 Sharpmap 1.1 和 BruTile 0.7.4.4
到目前为止,我已经完成了以下操作。
SharpMap.Map _map = new SharpMap.Map();
SharpMap.Layers.VectorLayer layer = new SharpMap.Layers.VectorLayer("parcel");
SharpMap.Data.Providers.MsSqlSpatial DBlayer = new SharpMap.Data.Providers.MsSqlSpatial(_connectionString, "XXXXXX", "XXXX", "XXX");
layer.Style.Fill = new SolidBrush(Color.Transparent);
layer.Style.Outline = new Pen(Color.Black);
layer.Style.EnableOutline = true;
layer.MaxVisible = 13000;
layer.DataSource = DBlayer;
ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory ctFact = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory();
layer.CoordinateTransformation = ctFact.CreateFromCoordinateSystems(ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84, ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator);
layer.ReverseCoordinateTransformation = ctFact.CreateFromCoordinateSystems(ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator, ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84);
//SharpMap.Layers.TileLayer layerBackground = new TileLayer(new BingTileSource(BingRequest.UrlBing, "", BingMapType.Aerial), "TileLayer");
SharpMap.Layers.TileLayer layerBackground = new TileLayer(new GoogleTileSource(GoogleMapType.GoogleMap), "googlemaps");
_map.Layers.Add(layerBackground);
_map.Layers.Add(layer);
_map.BackColor = Color.White;
//-98.526890,29.411539
_map.Center = new GeoAPI.Geometries.Coordinate(0,0);
return _map;
即使我手动提供地理坐标,它也只是指向海中的同一地点。
请查看下面的谷歌地图地理点,这是我的地图显示为中心的点。每次我生成时,无论我做什么,它都会以这个点为中心。
71.946088,-3.956171
非常感谢任何帮助。谢谢和干杯!
【问题讨论】:
-
您确定 DBLayer 提供程序在 WGS84 中吗?如果删除该层会发生什么? DBLayer 覆盖哪个区域?使用 bing 层的 OSM 背景是否也有同样的效果?
-
是的,图层在 WGS84 中,我使用 QGIS 对其进行了转换。我没有尝试过使用 OSM,但使用 bing 也会发生同样的情况。同一个地方居中。
-
如果你删除这一行会发生什么?:_map.Layers.Add(layer);
-
如果我删除它,我只会得到没有我的 shapefile 的谷歌地图,并再次固定到同一位置。我怀疑问题出在坐标变换上,但不知道出了什么问题。
-
这让我很吃惊。转换仅在图层上。如果您不将图层添加到地图,则图层及其所有属性(转换、数据库提供程序)可能根本不起作用。似乎问题的原因不在您粘贴的代码中。您是否在其他地方设置了 CRS?如果您从一个全新的项目开始,添加一个 google 图层并以 (0,0) 为中心怎么办?当然它必须正确居中。然后添加你在上面代码中配置的层。
标签: google-maps gis sharpmap