You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dealul Piscului 1970转WGS84坐标异常问题求助

罗马尼亚Dealul Piscului 1970坐标系转WGS-84的问题

需要将罗马尼亚过时的Dealul Piscului 1970坐标系下的多边形转换为WGS-84坐标系,使用.NET的projnet类库转换时,几何形状正确但位置完全错误。

现有转换代码

string wkt25831 = "PROJCS[\"Dealul Piscului 1970/ Stereo 70\",GEOGCS[\"Dealul Piscului 1970\",DATUM[\"Dealul_Piscului_1970\",SPHEROID[\"Krassowsky 1940\",6378245,298.3],TOWGS84[28,-121,-77,0,0,0,0]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4317\"]],PROJECTION[\"Oblique_Stereographic\"],PARAMETER[\"latitude_of_origin\",46],PARAMETER[\"central_meridian\",25],PARAMETER[\"scale_factor\",0.99975],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",500000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"31700\"]]";

var gcsWgs84 = GeographicCoordinateSystem.WGS84;

var cf = new CoordinateSystemFactory();
var f = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory();
var sys32639 = cf.CreateFromWkt(wkt25831);

var transformTo3857 = f.CreateFromCoordinateSystems(sys32639, gcsWgs84);
double[] fromPoint = { latitude, longitude };
double[]? xy = transformTo3857.MathTransform.Transform(fromPoint);

return new CoordinatePoint(xy[0], xy[1]);

注:忽略部分字段名称的编号错误,本人对该领域较陌生

错误现象

测试坐标:longitude: 605057.24196916714,latitude: 361091.237746394

  • 代码转换结果:long: 46.930562111606726,lat: 23.173950579639786
  • 正确结果:long: 26.325139519105466,lat: 44.741816543663873

偏差极大,转换后的多边形不在罗马尼亚,反而位于卢森堡附近。

其他尝试

  • 使用epsg.io的1970坐标系XML创建坐标系时,抛出未实现异常
  • 在线转换工具可得到正确结果

咨询问题

  1. 是否可通过projnet解决该问题?
  2. 若projnet无法解决,是否有手动计算的方法实现坐标转换得到WGS84坐标?

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:56:55