将局部坐标转换为 WGS84 并在 C# 中返回

Transform local coordinates to WGS84 and back in C#

一些在建筑工地上工作的人使用当地自定义坐标系。我得到了这样的 proj4 字符串:

+proj=merc +lat_0=46.325454996 +lonc=7.99050231 +alpha=60.4026421358 +gamma=90 +k=1 +x_0= 350 +y_0=200 +datum=WGS84 +units=m +no_defs +type=crs

而 x,y 坐标是这样的 429.079425606807, 261.126436507318

我需要将它们的坐标转换成 WGS84 并返回

我尝试使用 DotSpatial 进行转换。可以接受 C# 中的任何其他库。

 string proj4_custom = "+proj=omerc +lat_0=46.325454996 +lonc=7.99050231 +alpha=60.4026421358 +gamma=90 +k=1 +x_0=350 +y_0=200 +datum=WGS84 +units=m +no_defs +type=crs";

 DotSpatial.Projections.ProjectionInfo src = DotSpatial.Projections.ProjectionInfo.FromProj4String(proj4_custom);
 int googleEPSGCode = 4326;
 DotSpatial.Projections.ProjectionInfo trg = DotSpatial.Projections.ProjectionInfo.FromEpsgCode(googleEPSGCode);

 double[] xy = new[] { 429.079425606807, 261.126436507318 };
 double[] z = new[] { 0d };
 DotSpatial.Projections.Reproject.ReprojectPoints(xy, z, src, trg, 0, 1);

但是xy的结果不对,在地图上大概是50到100米远。我应该得到一个非常接近这个正确结果的结果

Local coordinates: 429.07942560 261.1264365
WGS84: 7.99100318 46.326284519

我做错了什么??如果问题与库中的错误有关,我还可以使用哪些其他库来正确执行此操作? 提前致谢!

我终于用上了GDAL,nuget包MaxRev.Gdal.WindowsRuntime.Minimal。

string proj = "+proj=omerc +lat_0=46.325454996 +lonc=7.99050231+alpha=60.4026421358 +gamma=90 +k=1 +x_0=350 +y_0=200 +datum=WGS84 +units=m +no_defs +type=crs";  
SpatialReference local = new SpatialReference("");
local.ImportFromProj4(proj);
    
SpatialReference wgs84Reference = new SpatialReference("");
wgs84Reference.ImportFromProj4("+proj=latlong +datum=WGS84 +no_defs");
    
CoordinateTransformation coordinateTransform = new CoordinateTransformation(wgs84Reference, local);
double[] xy = new[] { lon, lat };
double[] z = new[] { alt };
coordinateTransform.TransformPoint(xy);
lon = xy[0];
lat = xy[1];