Google 作为背景的地图与我的 sharpmap 地图没有正确对齐

Google map as background to my sharpmap map not aligning correctly

我从事此工作已有一段时间了。 我在这里想要实现的是将 Google 地图作为背景层添加到我的 Sharpmap 中,我能够实现这一点,但我现在面临的问题是我的地图始终以格陵兰岛附近的一个点为中心Google地图中的海,好像不占我的中心点坐标。

我正在使用 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;

即使我手动给出地理坐标也只是指向海中的同一个点

请看下面的Google地图地理点,这是我的地图显示为中心的点。每次我生成,无论我做什么,它都以这个点为中心。

71.946088, -3.956171

非常感谢任何帮助。谢谢和干杯!

我发现 Google 地图层没有居中的问题。 原因是我使用 QGIS 将我的 ESRI shapefile 从 WGS84(EPSG:4326) 格式转换为 Spherical Mercator(EPSG:900913) 并且它改变了坐标格式但是

Google Maps use Google Maps Global Mercator (Spherical Mercator).

当我使用在线转换器对此进行测试时,您可以找到 here。当我给出结果坐标时,结果很好。现在我要做的就是找到一种方法来转换 Google Maps Global Mercator (Spherical Mercator)。 感谢您的帮助@pauldendulk。

我 运行 遇到了同样的问题,在他们的Examples 中他们提供了一个 LatLongToGoogle 转换函数

public static ICoordinateTransformation LatLonToGoogle()
    {
        CoordinateSystemFactory csFac = new CoordinateSystemFactory();
        CoordinateTransformationFactory ctFac = new CoordinateTransformationFactory();
        IGeographicCoordinateSystem sourceCs = csFac.CreateGeographicCoordinateSystem(
            "WGS 84",
            AngularUnit.Degrees,
            HorizontalDatum.WGS84,
            PrimeMeridian.Greenwich,
            new AxisInfo("north", AxisOrientationEnum.North),
            new AxisInfo("east", AxisOrientationEnum.East));

        List<ProjectionParameter> parameters = new List<ProjectionParameter>
        {
            new ProjectionParameter("semi_major", 6378137.0),
            new ProjectionParameter("semi_minor", 6378137.0),
            new ProjectionParameter("latitude_of_origin", 0.0),
            new ProjectionParameter("central_meridian", 0.0),
            new ProjectionParameter("scale_factor", 1.0),
            new ProjectionParameter("false_easting", 0.0),
            new ProjectionParameter("false_northing", 0.0)
        };
        IProjection projection = csFac.CreateProjection("Google Mercator", "mercator_1sp", parameters);
        IProjectedCoordinateSystem targetCs = csFac.CreateProjectedCoordinateSystem(
            "Google Mercator",
            sourceCs,
            projection,
            LinearUnit.Metre,
            new AxisInfo("East", AxisOrientationEnum.East),
            new AxisInfo("North", AxisOrientationEnum.North));
        ICoordinateTransformation transformation = ctFac.CreateFromCoordinateSystems(sourceCs, targetCs);
        return transformation;