gpt4 book ai didi

java - 使用 GeoTools 的 Gauss-Kruger 坐标变换不正确 - WGS84

转载 作者:搜寻专家 更新时间:2023-10-31 20:30:03 24 4
gpt4 key购买 nike

我在 GeoTools 的帮助下遇到心爱的坐标转换问题:我想将一组坐标从 Gauss-Kruger(5 区,EPSG 31469)转换为普通 WGS84 坐标(EPSG 4326)。

我用一个简单的示例构建了一个代码(只需尝试一对坐标):

double coordX = 5408301.53; 
double coordY = 5659230.5;
double[] punt = new double[2];

CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:31469");
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4326");

MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true);

DirectPosition expPt = new GeneralDirectPosition(coordX, coordY);
expPt = transform.transform(expPt, null);
punt = expPt.getCoordinate();

System.out.println(punt[0] + ", " + punt[1]); //lon, lat

调试后的结果如下:48.791886921764345、17.16525096311777

然后当我检查我获得的 WGS84 坐标(只需将它们输入 Google map )时,我最终在捷克共和国靠近奥地利的某个地方,尽管这对坐标应该在德国东部的某个地方(当然,我检查过它通过一些 html 解码器):

---> 应该是结果:51.0609167, 13.6900142.

我无法想象发生此故障的任何原因。 GeoTools 获得了两个想要的 CRS(我附上了来自 Java 控制台的响应的摘录)

有人能解释一下吗?我很感激任何帮助!

很多问候,塞巴斯蒂安


**sourceCRS:**
PROJCS["DHDN / 3-degree Gauss-Kruger zone 5",
GEOGCS["DHDN",
DATUM["Deutsches Hauptdreiecksnetz",
SPHEROID["Bessel 1841", 6377397.155, 299.1528128, AUTHORITY["EPSG","7004"]],
TOWGS84[612.4, 77.0, 440.2, -0.054, 0.057, -2.797, 2.55],
AUTHORITY["EPSG","6314"]],
PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
UNIT["degree", 0.017453292519943295],
AXIS["Geodetic latitude", NORTH],
AXIS["Geodetic longitude", EAST],
AUTHORITY["EPSG","4314"]],
PROJECTION["Transverse_Mercator", AUTHORITY["EPSG","9807"]],
PARAMETER["central_meridian", 15.0],
PARAMETER["latitude_of_origin", 0.0],
PARAMETER["scale_factor", 1.0],
PARAMETER["false_easting", 5500000.0],
PARAMETER["false_northing", 0.0],
UNIT["m", 1.0],
AXIS["Northing", NORTH],
AXIS["Easting", EAST],
AUTHORITY["EPSG","31469"]]

**targetCRS:**
GEOGCS["WGS 84",
DATUM["World Geodetic System 1984",
SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
UNIT["degree", 0.017453292519943295],
AXIS["Geodetic latitude", NORTH],
AXIS["Geodetic longitude", EAST],
AUTHORITY["EPSG","4326"]]
CONCAT_MT[PARAM_MT["Affine",
PARAMETER["num_row", 3],
PARAMETER["num_col", 3],
PARAMETER["elt_0_0", 0.0],
PARAMETER["elt_0_1", 1.0],
PARAMETER["elt_1_0", 1.0],
PARAMETER["elt_1_1", 0.0]],
INVERSE_MT[PARAM_MT["Transverse_Mercator",
PARAMETER["semi_major", 6377397.155],
PARAMETER["semi_minor", 6356078.962818189],
PARAMETER["central_meridian", 15.0],
PARAMETER["latitude_of_origin", 0.0],
PARAMETER["scale_factor", 1.0],
PARAMETER["false_easting", 5500000.0],
PARAMETER["false_northing", 0.0]]],
PARAM_MT["Ellipsoid_To_Geocentric",
PARAMETER["dim", 2],
PARAMETER["semi_major", 6377397.155],
PARAMETER["semi_minor", 6356078.962818189]],
PARAM_MT["Position Vector transformation (geog2D domain)",
PARAMETER["dx", 612.4],
PARAMETER["dy", 77.0],
PARAMETER["dz", 440.2],
PARAMETER["ex", -0.054],
PARAMETER["ey", 0.057],
PARAMETER["ez", -2.797],
PARAMETER["ppm", 2.5500000000455714]],
PARAM_MT["Geocentric_To_Ellipsoid",
PARAMETER["dim", 2],
PARAMETER["semi_major", 6378137.0],
PARAMETER["semi_minor", 6356752.314245179]],
PARAM_MT["Affine",
PARAMETER["num_row", 3],
PARAMETER["num_col", 3],
PARAMETER["elt_0_0", 0.0],
PARAMETER["elt_0_1", 1.0],
PARAMETER["elt_1_0", 1.0],
PARAMETER["elt_1_1", 0.0]]]

最佳答案

当我尝试使用您的代码和最新的 Geotools (8.0) 重现问题时,我得到了正确的结果 (13.690015717822922, 51.06089012028224)。交换 lon,lat 后,即。

错误的结果 (17.16525096311777, 48.791886921764345) 在我交换 coordXcoordY 时出现。这会让您进入也门沙漠,而不是德累斯顿。

也许您隐含地假设轴的顺序错误。可以说,将纬度放在经度之前以某种方式违反了笛卡尔坐标将 X 放在 Y 之前的一般协议(protocol)。

虽然我无法重现您的问题,但 this tutorial 中的解决方法之一,其中讨论了轴的排序可能会对您有所帮助。

关于java - 使用 GeoTools 的 Gauss-Kruger 坐标变换不正确 - WGS84,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com