我有一个 GeoJson 文件,其几何形状为 3857。 我想使用 C# 读取它并将其行插入到 postgres 表中,并且我希望其中的几何图形位于 4326 中。 另外,我在其他 SRID(例如 7991)中还有一些其他文件。
如何将所有几何图形转换为 4326?
Geometry ConverteTo4326(Geometry geometry, string sourceSrid)
{
// What to do here?
}
首先,您需要获取每个 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);