在 NetTopologySuite 中将几何图形转换为 4326

问题描述 投票:0回答:1

我有一个 GeoJson 文件,其几何形状为 3857。 我想使用 C# 读取它并将其行插入到 postgres 表中,并且我希望其中的几何图形位于 4326 中。 另外,我在其他 SRID(例如 7991)中还有一些其他文件。

如何将所有几何图形转换为 4326?

Geometry ConverteTo4326(Geometry geometry, string sourceSrid)
{
   // What to do here?
}
c# geometry gis geojson nettopologysuite
1个回答
0
投票

首先,您需要获取每个 epsg 代码的投影。这是

PROJCS["WGS 84 / Pseudo-Mercator",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Mercator_1SP"],
    PARAMETER["central_meridian",0],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["Easting",EAST],
    AXIS["Northing",NORTH],
    EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"],
    AUTHORITY["EPSG","3857"]]

对于

EPSG:3857

GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0,
        AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.0174532925199433,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]]

for

EPSG:4326
(只需查看 https://epsg.io)。

现在您可以轻松进行转换了:

CoordinateSystemFactory csFact = new CoordinateSystemFactory();
CoordinateTransformationFactory ctFact = new CoordinateTransformationFactory();

ICoordinateSystem epsg3857 = csFact.CreateFromWkt(epsg3857String);

IProjectedCoordinateSystem epsg4326 = csFact.CreateFromWkt(epsg4326String); 
// actually it's more conventiont to directly use ProjectedCoordinateSystem.WGS84_UTM(33, true);

ICoordinateTransformation trans = ctFact.CreateFromCoordinateSystems(epsg3857, epsg4326);

var result = trans.MathTransform.TransformList(myCoordinates);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.