如何解决通过 2 个纬度/经度坐标计算直线之间的最短距离并转换为英里
我无法使用纬度/经度确定点和 2 个地理坐标之间的距离(以英里为单位)。
# line segment point 1
x1 = -75.9667128 # longitude
y1 = 41.66279222 # latitude
# line segment point 2
x2 = -75.96248381 # longitude
y2 = 41.65800548 # latitude
# point to measure the orthogonal distance to
x3 = -75.96017288 # latitude
y3 = 41.67049662 # latitude
d = abs((x2-x1)*(y1-y3) - (x1-x3)*(y2-y1)) / np.sqrt(np.square(x2-x1) + np.square(y2-y1))
这产生了 0.010002193890447786
当我使用 69.2 的比例因子(我在网上找到的)将其从度数转换为英里时,我得到的答案与在 GIS 站点上使用标尺测量线和点之间进行仔细检查时得到的答案不同我自己。
我在这里遗漏了什么吗?当我绘制出以下内容时:
plt.plot([x1,x1+0.010002193890447786],[y1,y1])
那条线的长度与正确的距离相匹配。
解决方法
这里 40000 是地球的周长,以公里为单位,40000/2π 是地球的半径 - 我不记得以英里为单位的测量值,
In [221]: # your points,in degrees
...: deg1,deg2,deg3 = (-75.96671280,41.66279222),(-75.96248381,41.65800548),(-75.96017288,41.67049662)
...: # in radians
...: rad1,rad2,rad3 = ((lon*np.pi/180,lat*np.pi/180) for lon,lat in (deg1,deg3))
...: # an approximation of the location of the centre of the three points
...: lon_ctr,lat_ctr = (sum(rads)/3 for rads in zip(rad1,rad3))
...: # the position of the points wrt the centre
...: drad1,drad2,drad3 = ((lon-lon_ctr,lat-lat_ctr) for lon,lat in (rad1,rad3))
...: # an approximation to the Earth radius,and the radius of the parallel
...: rkm_lat = 40000/2/np.pi ; rkm_lon = rkm_lat*np.cos(lat_ctr)
...: # the position of the points,in km,wrt the centre
...: km1,km2,km3 = ((rkm_lon*dlon,rkm_lat*dlat) for dlon,dlat in (drad1,drad3))
...: #
...: print("; ".join("p%d = %9.5f km,%9.5f km"%(i,x,y) for i,(x,y) in enumerate((km1,km3),1)))
p1 = -0.29796 km,-0.10806 km; p2 = 0.05307 km,-0.63992 km; p3 = 0.24489 km,0.74798 km
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。