找出两个地理数据点之间的交点

2024-04-29 15:47:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两对lat/lon(以十进制度数表示)及其半径(以米表示)。我要做的是找出这两个点之间是否存在交集(当然,这显然不成立,但计划是在许多其他数据点上尝试这种算法)。为了检查这一点,我使用了Shapely的intersects()函数。但我的问题是我应该如何处理不同的单位?我应该先做些变换投影吗(纬度和半径的单位相同)?在

48.180759,11.518950,19.0
47.180759,10.518950,10.0

编辑:

我在这里找到了这个库(https://pypi.python.org/pypi/utm),这似乎很有帮助。但是,我不能百分之百确定我是否正确地应用它。有什么想法吗?在

^{pr2}$

解决方案:

所以,我终于解决了我的问题。以下是两种不同的实现,它们都解决了相同的问题:

X = from_latlon(48.180759, 11.518950)
Y = from_latlon(47.180759, 10.518950)

print(latlonbuffer(48.180759, 11.518950, 19.0).intersects(latlonbuffer(47.180759, 10.518950, 19.0)))
print(latlonbuffer(48.180759, 11.518950, 100000.0).intersects(latlonbuffer(47.180759, 10.518950, 100000.0)))

X = from_latlon(48.180759, 11.518950)
Y = from_latlon(47.180759, 10.518950)

print(geometry.Point(X[0], X[1]).buffer(19.0).intersects(geometry.Point(Y[0], Y[1]).buffer(19.0)))
print(geometry.Point(X[0], X[1]).buffer(100000.0).intersects(geometry.Point(Y[0], Y[1]).buffer(100000.0)))

Tags: frompypibuffer半径单位latlon计划point
1条回答
网友
1楼 · 发布于 2024-04-29 15:47:57

Shapely只使用Cartesian coordinate system,因此为了理解公制距离,您需要:

  1. 将坐标投影到使用以米为单位的距离单位的局部投影系统中,例如UTM分区。在
  2. 从(0,0)缓冲一个点,并使用以lat/lon点为中心的动态azimuthal equidistant projection投影到地理坐标。在

{a3}如何使用^ 3}

import pyproj
from shapely.geometry import Point
from shapely.ops import transform
from functools import partial

WGS84 = pyproj.Proj(init='epsg:4326')

def latlonbuffer(lat, lon, radius_m):
    proj4str = '+proj=aeqd +lat_0=%s +lon_0=%s +x_0=0 +y_0=0' % (lat, lon)
    AEQD = pyproj.Proj(proj4str)
    project = partial(pyproj.transform, AEQD, WGS84)
    return transform(project, Point(0, 0).buffer(radius_m))

A = latlonbuffer(48.180759, 11.518950, 19.0)
B = latlonbuffer(47.180759, 10.518950, 10.0)
print(A.intersects(B))  # False

你的两个缓冲点不相交。但这些确实:

^{pr2}$

如绘制lon/lat坐标(扭曲圆圈)所示:

img

相关问题 更多 >