如何解决如何在谷歌地球上一条线的两个已知点之间生成坐标
我在谷歌地球上有一条管道的首尾坐标,所以我可以生成一条线并计算管道的距离。
现在我想要一个点,比如这条线上的每 2 米,我该如何使用 python 脚本来做到这一点?
问题:
所以,假设我有两点 [lat,long]:
[-33.8824219918503,151.206686052582] 和 [-33.8815434600467,151.206556440037]
给定这两个点,我可以计算它们之间的距离。为了争论,说它是1公里。
所以我们可以想象在这两点之间有一条假想的直线。
我如何为那条假想线生成坐标,比如每 2 米?
解决方法
要实现这一点,您需要:
-
找到起点和终点之间的方位角(方位角)。这可以使用
pyproj
模块完成。在此处查看答案:enter link description here -
一旦计算了方位角,就可以从方位角和起始坐标计算下一个点坐标。为此,请参阅此处的答案:enter link description here
-
继续计算点直到结束,只用刚刚计算的坐标替换起点坐标。方位将保持不变。
您也可以使用 Haversine formula 并根据需要手动计算。
编辑:
我刚刚发现 Geod
的 pyproj
类可以一步完成。特别是您需要使用 inv_intermediate()
方法并执行以下操作:
from pyproj import Geod as gd
N_PTS = 100 # or however many points you need in between
lon,lat,az = gd.inv_intermediate(start_lon,start_lat,end_lon,end_lat,n_pts=N_PTS)
该方法将返回三个数组,分别代表点的经度、纬度和方位角。
编辑 2: 根据下面的评论补充。
为了使用坐标创建 kml 文件,您只需要执行类似下面的代码即可。
注意:我还没有测试过,所以你可能需要更改一些小地方,但原则上应该可以:
lons = [] # your array of longitudes
lats = [] # your array of latitudes
# assuming elevation is 0 everywhere
with open('blabla.kml','w') as f:
header = """<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">"""
body = ''
for lon,lat in zip(lons,lats):
pt = f"""<Placemark>
<Point>
<name></name>
<description></description>
<coordinates>{lon},{lat},0</coordinates>
</Point>
</Placemark>"""
body += pt
f.writelines([header,body,'</kml>'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。