Google maps Google地图作为我的sharpmap地图的背景未正确对齐

Google maps Google地图作为我的sharpmap地图的背景未正确对齐,google-maps,gis,sharpmap,Google Maps,Gis,Sharpmap,我已经做了很长时间了。 我在这里试图实现的是将谷歌地图作为背景层添加到我的Sharpmap中,我能够实现这一点,但我现在面临的问题是,在谷歌地图中,我的地图始终位于格陵兰海附近的一个点上,就像它不会取我的中心点坐标一样 我正在使用Sharpmap 1.1和BruTile 0.7.4.4 到目前为止,我已经完成了以下工作 SharpMap.Map\u Map=new SharpMap.Map(); SharpMap.Layers.VectorLayer=新的SharpMap.Layers.Vect

我已经做了很长时间了。 我在这里试图实现的是将谷歌地图作为背景层添加到我的Sharpmap中,我能够实现这一点,但我现在面临的问题是,在谷歌地图中,我的地图始终位于格陵兰海附近的一个点上,就像它不会取我的中心点坐标一样

我正在使用Sharpmap 1.1和BruTile 0.7.4.4

到目前为止,我已经完成了以下工作

SharpMap.Map\u Map=new SharpMap.Map();
SharpMap.Layers.VectorLayer=新的SharpMap.Layers.VectorLayer(“地块”);
SharpMap.Data.Providers.MsSqlSpatial DBlayer=新的SharpMap.Data.Providers.MsSqlSpatial(_connectionString,“XXXXXX”,“XXXX”,“XXX”);
layer.Style.Fill=新的SolidBrush(颜色.透明);
layer.Style.Outline=新笔(颜色为黑色);
layer.Style.EnableOutline=true;
layer.MaxVisible=13000;
layer.DataSource=DBlayer;
ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory ctFact=新建ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory();
layer.CoordinateTransformation=ctFact.CreateFromCoordinateSystems(ProjNet.CoordinateSystems.GeographyCoordinateSystem.WGS84,ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator);
layer.ReverseCoordinationTransformation=ctFact.CreatefromCoordinationSystems(ProjNet.CoordinationSystems.ProjectedCoordinationSystem.WebMercator,ProjNet.CoordinationSystems.GeographicalCoordinationSystem.WGS84);
//SharpMap.Layers.TileLayerLayerBackground=新TileLayer(新的BingTileSource(BingRequest.UrlBing,”,BingMapType.Aeror),“TileLayer”);
SharpMap.Layers.TileLayerLayerBackground=新TileLayer(新GoogleTileSource(GoogleMapType.GoogleMap),“googlemaps”);
_map.Layers.Add(layerBackground);
_map.Layers.Add(层);
_map.BackColor=Color.White;
//-98.526890,29.411539  
_map.Center=新的GeoAPI.Geometrics.Coordination(0,0);
返回图;
即使我手动给出地理坐标,它也只是指向海洋中的同一个点

请看下面的谷歌地图地理点,这是我的地图显示为中心的点。每次我生成,不管我做什么,它都显示这一点为中心

71.946088,-3.956171


非常感谢您的帮助。谢谢,干杯

我发现谷歌地图图层不居中的问题。 原因是我使用QGIS将ESRI shapefile从WGS84(EPSG:4326)格式转换为球形墨卡托(EPSG:900913),它更改了坐标格式,但

谷歌地图使用谷歌地图全球墨卡托(球形墨卡托)

当我用一个在线转换器来测试这个的时候,你可以找到。当我给出结果坐标时,结果很好。现在我要做的就是找到一种方法来转换谷歌地图全球墨卡托(球形墨卡托)。
感谢您的帮助@pauldendulk。

我遇到了同样的问题,在他们的应用程序中,他们提供了一个
latlongtogole
转换功能

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;
publicstaticicoogle()
{
CoordinateSystemFactory csFac=新的CoordinateSystemFactory();
CoordinateTransformationFactory ctFac=新的CoordinateTransformationFactory();
IGeographicCoordinateSystem sourceCs=csFac.CreateGeographicCoordinateSystem(
“工作组84”,
角度单位,度,
HorizontalDatum.WGS84,
本初子午线,格林威治,
新AxisInfo(“北”,AxisOrientum.north),
新AxisInfo(“东”,AxisOrientum.east));
列表参数=新列表
{
新的ProjectionParameter(“semi_major”,6378137.0),
新的ProjectionParameter(“semi_minor”,6378137.0),
新的投影参数(“原点的纬度”,0.0),
新的投影参数(“中央子午线”,0.0),
新的投影参数(“比例系数”,1.0),
新的ProjectionParameter(“假东距”,0.0),
新的ProjectionParameter(“假北距”,0.0)
};
IProjection projection=csFac.CreateProjection(“谷歌麦卡托”、“麦卡托1sp”,参数);
IProjectedCoordinateSystem targetCs=csFac.CreateProjectedCoordinateSystem(
“谷歌墨卡托”,
sourceCs,
投影,
每米,
新AxisInfo(“东”,AxisOrientum.East),
新AxisInfo(“北”,AxisOrientum.North));
ICoordinationTransformation=ctFac.createFromCoordinationSystems(sourceCs、targetCs);
回报转化;

您确定DBLayer提供程序在WGS84中吗?如果删除该层会发生什么?DBLayer的覆盖区域是哪个区域?如果使用bing层的OSM背景,是否会产生相同的效果?是的,该层在WGS84中,我已使用QGIS对其进行了转换。我没有尝试使用OSM,但使用bing时会发生相同的情况。相同的位置居中。发生了什么如果删除这一行?:\u map.Layers.Add(layer);如果我删除它,我只会得到没有shapefile的google地图,然后再次固定到同一位置。我怀疑问题出在坐标变换上,但无法找出问题所在。这让我感到惊讶。变换仅在图层上。如果不将图层添加到地图中,则图层及其所有属性都会发生变化(转换,db provider)可能根本没有效果。问题的原因似乎不在您粘贴的代码中。您是否在其他地方设置了CRS?如果您从一个全新的项目开始,添加一个google层并以(0,0)为中心会怎么样?它肯定必须正确居中。然后添加您在上面代码中配置的层。