微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在谷歌地球上一条线的两个已知点之间生成坐标

如何解决如何在谷歌地球上一条线的两个已知点之间生成坐标

我在谷歌地球上有一条管道的首尾坐标,所以我可以生成一条线并计算管道的距离。

现在我想要一个点,比如这条线上的每 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 并根据需要手动计算。

编辑: 我刚刚发现 Geodpyproj 类可以一步完成。特别是您需要使用 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 举报,一经查实,本站将立刻删除。