7he*_*ing 0 java android geolocation geospatial kotlin
我有一个以十进制度数给出的位置(x.xxxxxxxx 和 y.yyyyyyyy)。我需要在它周围画一个矩形。矩形的中心与位置匹配。矩形的尺寸以米为单位,它的旋转范围为 0-360 度。
问题
如何计算矩形的四个角并将结果返回为四个十进制度值?喜欢arrayOf<LatLon> getRectangle(LatLon position, int rectWidthCm, int rectLengthCm, double rectRotation)。
例子
注意:项目设置是一个支持 Kotlin 和谷歌地图图表的 Android 应用程序。我对解决这个问题的现代方法很感兴趣。关于精度损失,它最多应该在厘米以内。
我了解您正在寻找geo_rect(x,y,w,h,a)具有以下参数的函数
x是根据WGS84的经度y 是纬度w 是矩形的宽度(以米为单位)h 是以米为单位的矩形的高度a是矩形从w水平方向转向的角度(意思是正好从西到东)。我建议允许在开放区间(-90°,90°)范围内的值,因为这使得数学要么理解。 你的功能getRectangle(LatLon position, int rectWidthCm, int rectLengthCm, double rectRotation)提供所有必要的信息,你需要一个小包装函数,确定w,h以及a从rectWidthCm,rectLengthCm并rectRotation与内后者[0°,360°)。
该函数geo_rect()将返回arrayOf<LatLon>长度为 4 的一个,即所有四个角的坐标,从左上角开始,然后顺时针方向。我们将参考点作为P_NE,P_NW,P_SE,和P_SW分别。
为了使事情在数学上可行,我们做了一些假设
w ~ h << r有r = 6378 km是地球的半径。该算法的结构可以如下:
确定距离d从(x,y)所有四个端点。由于我们的第一个假设,我们可以使用简单的欧几里得几何而不是复杂的球面几何。毕达哥拉斯认为:d^2 = (w/2)^2 + (h/2)^2。
我们还需要四个方位角,例如b_NW指向北极的向量和指向指向(x,y)点的向量之间的角度P_NW。
给定前面步骤中的信息 ( x, y, d, b_NW, b_NE, b_SW, b_SE),我们现在可以按照Get lat/long 给定当前点、距离和方位来计算所有四个点的位置。这是我建议使用完善且经过测试的库的数学上的困难部分。
最后但并非最不重要的一点,让我们通过评估一些或所有点对之间的大圆距离来仔细检查计算是否顺利。比如d(P_NE,P_NW)应该近似是w,d(P_NW,P_SW)应该近似是h。如果确实存在差异,请不要感到惊讶 - 这些错误是由于我们所做的假设造成的。通常情况下的普通 GPS 无论如何都不允许你确定你的位置到厘米,你需要DPGS。
在https://www.movable-type.co.uk/scripts/latlong-vectors.html 上,您可以在线进行实验,在给定距起点的距离和方位的情况下确定沿大圆的目的地点(在我们的例子中:矩形的中心)。
用于地理应用程序的旧的,但记录丰富且经过良好测试的工具包通常是https://www.generic-mapping-tools.org/ - 您可能想查看命令gmtvector。
如果您正在寻找 java 实现,我发现例如
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |