我现在有一个问题,使我在某个项目上退缩了一段时间。
我基本上是想用我写的一些脚本绘制的x,y点来捕捉多边形。 lat1,lon1是多边形的中心gps线,im正在查找其周围的多边形。
下面是我用python编写的代码的一部分:
def getcords(lat1,lon1,dr,bearing): lat2=asin(sin(lat1)*cos(dr)+cos(lat1)*sin(dr)*cos(bearing)) lon2=lon1+atan2(sin(bearing)*sin(dr)*cos(lat1),cos(dr)-sin(lat1)*sin(lat2)) return [lat2,lon2]
我的输入如下: lat1,lon1-以十进制度数表示。 -dr是通过将以英里为单位的距离除以地球的raiuds(=3958.82)计算出的角度 -方位角在0-360度之间。
但是对于输入getcorsds1(42.189275,-76.85823,0.5/3958.82,30) 我得到的答案是[1.3485899508698462,-76.8576637627568],但是[42.25166666666667,-76.809722222222]是正确的。
至于角距离,我简单地用地球的raiuds(=3958.82)除以以英里为单位的距离来计算。
有人吗?
为什么不使用nice libraries?
对于lat1,lon1,distMiles,轴承=42.189275,-76.85823,0.5,30返回42.1955489,-76.853359。
更新版本的geopy(公里而不是英里)
结果是
sin和cos函数期望它们的参数是弧度而不是度数。asin和atan2函数产生的结果是弧度,而不是度数。通常,需要使用
math.radians()
将输入角度(lat1、lon1和bearing)从度转换为弧度,并使用math.degrees()
将输出角度(lat2和lon2)从弧度转换为度。请注意,代码还有两个问题:
(1)它不允许穿越经度的180度子午线;您需要限制您的答案,使-180<;=经度lt;=+180。
(2)如果要广泛使用此函数,可能需要删除冗余计算:sin(lat1)、cos(dr)、cos(lat1)和sin(dr)各计算两次。
相关问题 更多 >
编程相关推荐