- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 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) 在我交换 coordX
和 coordY
时出现。这会让您进入也门沙漠,而不是德累斯顿。
也许您隐含地假设轴的顺序错误。可以说,将纬度放在经度之前以某种方式违反了笛卡尔坐标将 X 放在 Y 之前的一般协议(protocol)。
虽然我无法重现您的问题,但 this tutorial 中的解决方法之一,其中讨论了轴的排序可能会对您有所帮助。
关于java - 使用 GeoTools 的 Gauss-Kruger 坐标变换不正确 - WGS84,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284407/
? 1 2
我的代码对所有值都返回零,我不确定为什么。我应该使用 Gauss-Jordan 消元来解决。有人有什么建议吗? #include #define N 10 int main() { double
我正在制作一个将使用高斯赛德尔法求解 A*x=b 的函数。当我运行该函数时,我收到以下错误消息: main.cpp:28:40: 错误:数组下标的类型 'double[int]' 无效 总和[i] =
我得到了一个用 GAUSS 编写的 MLE 估计器,我正在尝试将其重新编码为 R。我没有使用,也从未使用过 GAUSS 本身(并且无权访问它)。在代码中,有一行让我有点困惑。 在经过验证的 GAUSS
重要修改 问题解决了。请看一下我自己在这个 StackOverflow 问题中的回答,以了解如何做。 但是,这是新的(并且可以正常工作的)代码: 显示 显示器同下。 我正确且有效的实现 /** *
我有一个关于根据其创建日期修改乐谱文档的问题。我试过高斯函数和 field_value_factor。 第一个是(所有查询子句): @search_definition[:query] = {
我的任务是开发一个程序来计算 3 个线性方程组:该程序必须允许用户输入系数和常数、迭代次数和可接受的误差水平。我似乎无法同时包含迭代次数和错误级别作为参数来停止循环并显示变量的最终值。这是我到目前为止
有没有线性代数库实现迭代Gauss-Seidel来求解线性系统?或者可能是预条件梯度求解器? 谢谢 编辑:最后我用了一种粗略但正确的方法来解决它。因为无论如何我都必须创建矩阵 A(对于 Ax=b),所
在“黑皮书”Numerical Recipes 第 3 版中,给出了求解线性方程组的 Gauss-Jordan 算法。紧随其后的部分是计算 LU 分解,然后使用它来求解线性方程组(请参阅第 53 页的
我在 C++ 中使用 Gauss-Jordan 消去法求解线性方程组。代码工作正常。想知道为什么 void gauss() 中的第 1、2、3 行不能被第 4 行替换(这样做后得到不正确的输出)? #
random.normalvariate() 和有什么区别?和 random.gauss() ? 它们采用相同的参数并返回相同的值,执行基本相同的功能。 我从 previous answer 了解到那
我正在努力解决以下问题。简而言之:两个不同的软件包(Aptech 和 R 的 Gauss)在最大似然过程中产生完全不同的 Hessian 矩阵。我使用相同的程序(BFGS),完全相同的数据,相同的最大
在 python 中实现 Gauss Jacobi 算法时,我发现两种不同的实现需要截然不同的迭代次数才能收敛。 第一个实现是我最初想出的 import numpy as np def GaussJa
我正在尝试反转由复数组成的矩阵,其中我对“用户”在以下链接中发布的实数使用矩阵反转代码 cuda matrix inverse gaussian jordan 代码编译,没有错误,但问题是输出错误!我
我打算以并行方式计算大量数值正交,最终使用一组通用数据进行所有计算(相当大的根和权重数组占用大约 25 Kb 的内存)。 Gauss-Legendre 求积法非常简单,可以作为入门。我想通过声明 de
我用 C++ 编写了一个例程,使用高斯-赛德尔方法求解方程组 Ax = b。但是,我想将此代码用于稀疏的特定“A”矩阵(大多数元素为零)。这样,该求解器花费的大部分时间都忙于将一些元素乘以零。 例如,
我为拉普拉斯方程(一个简单的加热板问题)在我的红黑 Gauss-Seidel 求解器中添加了 OpenACC 指令,但是 GPU 加速的代码并不比 CPU 快,即使对于大问题也是如此。 我还编写了一个
我在 GeoTools 的帮助下遇到心爱的坐标转换问题:我想将一组坐标从 Gauss-Kruger(5 区,EPSG 31469)转换为普通 WGS84 坐标(EPSG 4326)。 我用一个简单的示
我正在尝试使用 Boost 提供的 Gauss-Kronrod 正交在 C++ 中以数字方式在域 [0, 5] 上集成具有实参数和复数返回值的函数,例如 f(x) = 1 + i。 我已经使用 boo
本文整理了Java中org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler.gauss()方法的一
我是一名优秀的程序员,十分优秀!