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

问题描述

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

现在我想要一个点,比如这条线上的每 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>'])      

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...