1

私はかなり長い間これに取り組んできました。ここで達成しようとしているのは、Google マップを背景レイヤーとして Sharpmap に追加することです。これを達成することはできますが、現在直面している問題は、マップの中心が常に Google マップのグリーンランド海の近くのポイントにあることです。 、それは私の中心点の座標を取らないようなものです。

BruTile 0.7.4.4でSharpmap 1.1を使用しています

これまでのところ、私は以下を行いました。

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

どんな助けでも大歓迎です。ありがとう、乾杯!

4

2 に答える 2

1

Google マップ レイヤーが中央に配置されないという問題が見つかりました。その理由は、QGIS を使用して ESRI シェープファイルを WGS84(EPSG:4326) 形式から Spherical Mercator(EPSG:900913) 形式に変換し、座標形式を変更したためですが、

Google マップは、Google マップ グローバル メルカトル (球状メルカトル) を使用します。

これをテストするためにオンライン コンバーターを使用したときは、ここで見つけることができます。結果の座標を指定すると、うまくいきました。あとは、Google Maps Global Mercator (Spherical Mercator) を変換する方法を見つけるだけです。助けてくれてありがとう@pauldendulk。

于 2016-08-26T06:18:24.063 に答える
0

私は同じ問題に遭遇していましたが、その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;
于 2019-10-16T13:32:06.020 に答える