- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在实现此处描述的功能时遇到问题 here .
这是我的 Java 实现:
private static double[] pointRadialDistance(double lat1, double lon1,
double radianBearing, double radialDistance) {
double lat = Math.asin(Math.sin(lat1)*Math.cos(radialDistance)+Math.cos(lat1)
*Math.sin(radialDistance)*Math.cos(radianBearing));
double lon;
if(Math.cos(lat) == 0) { // Endpoint a pole
lon=lon1;
}
else {
lon = ((lon1-Math.asin(Math.sin(radianBearing)*Math.sin(radialDistance)/Math.cos(lat))
+Math.PI) % (2*Math.PI)) - Math.PI;
}
return (new double[]{lat, lon});
}
在调用函数之前,我将度方位角转换为弧度并将距离 (km) 转换为弧度距离 - 所以这不是问题所在。
但是,当我输入如下坐标时:经纬度 = 49.25705;lon = -123.140259;方位225(西南),距离1km
我得到这个返回:纬度:-1.0085434360125864经度:-3.7595299668539504
这显然不正确,谁能看出我做错了什么?
谢谢
最佳答案
看起来这些是您的代码中的问题:
lat1
和 lon1
在调用您的函数之前转换为弧度。radialDistance
不正确。abs(x-y) < threshold
比 x == y
更安全用于测试两个 float x
和 y
为了平等。lat
和 lon
从弧度到度数。这是我用 Python 实现的代码:
#!/usr/bin/env python
from math import asin,cos,pi,sin
rEarth = 6371.01 # Earth's average radius in km
epsilon = 0.000001 # threshold for floating-point equality
def deg2rad(angle):
return angle*pi/180
def rad2deg(angle):
return angle*180/pi
def pointRadialDistance(lat1, lon1, bearing, distance):
"""
Return final coordinates (lat2,lon2) [in degrees] given initial coordinates
(lat1,lon1) [in degrees] and a bearing [in degrees] and distance [in km]
"""
rlat1 = deg2rad(lat1)
rlon1 = deg2rad(lon1)
rbearing = deg2rad(bearing)
rdistance = distance / rEarth # normalize linear distance to radian angle
rlat = asin( sin(rlat1) * cos(rdistance) + cos(rlat1) * sin(rdistance) * cos(rbearing) )
if cos(rlat) == 0 or abs(cos(rlat)) < epsilon: # Endpoint a pole
rlon=rlon1
else:
rlon = ( (rlon1 - asin( sin(rbearing)* sin(rdistance) / cos(rlat) ) + pi ) % (2*pi) ) - pi
lat = rad2deg(rlat)
lon = rad2deg(rlon)
return (lat, lon)
def main():
print "lat1 \t lon1 \t\t bear \t dist \t\t lat2 \t\t lon2"
testcases = []
testcases.append((0,0,0,1))
testcases.append((0,0,90,1))
testcases.append((0,0,0,100))
testcases.append((0,0,90,100))
testcases.append((49.25705,-123.140259,225,1))
testcases.append((49.25705,-123.140259,225,100))
testcases.append((49.25705,-123.140259,225,1000))
for lat1, lon1, bear, dist in testcases:
(lat,lon) = pointRadialDistance(lat1,lon1,bear,dist)
print "%6.2f \t %6.2f \t %4.1f \t %6.1f \t %6.2f \t %6.2f" % (lat1,lon1,bear,dist,lat,lon)
if __name__ == "__main__":
main()
这是输出:
lat1 lon1 bear dist lat2 lon2
0.00 0.00 0.0 1.0 0.01 0.00
0.00 0.00 90.0 1.0 0.00 -0.01
0.00 0.00 0.0 100.0 0.90 0.00
0.00 0.00 90.0 100.0 0.00 -0.90
49.26 -123.14 225.0 1.0 49.25 -123.13
49.26 -123.14 225.0 100.0 48.62 -122.18
49.26 -123.14 225.0 1000.0 42.55 -114.51
关于algorithm - 计算给定方位和距离的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877524/
是否有机会为标记设置旋转?现在,我将 map 方位设置为一个标记的 Angular ,但其他标记应该有自己的标记方位。 目前,我正在使用这样的标记定义: var marker_el = documen
我正在尝试根据起点纬度/经度、方位角和距离找到目的地点。下面这个网站的计算器给出了我想要的结果。 http://www.movable-type.co.uk/scripts/latlong.html
大家好,我需要在我的 iPhone 应用程序中查找高度、方位和 GPS 精度。我已经在我的 Android 应用程序上完成了此操作。在android中,我是这样做的: public void onLo
第一次张贴在这里。 我正在对为桥梁检查 ROV 八旋翼飞行器收集的 GPS 数据进行一些数据分析。我们的八旋翼机在 ROS 上运行使用 3D 扫描激光雷达、立体视觉、INS 和其他一些巧妙的技术。我目
我试图通过仅以度数和距离(相对于另一个已放置的标记)指定其航向来放置标记 Google Maps API V.3。 无法在 SO 上找到任何类似的东西,在此先感谢。 最佳答案 最简单的方法是编写一个函
我是一名优秀的程序员,十分优秀!