Python 几何图形之间的测地距离

Python 几何图形之间的测地距离,python,distance,geopandas,shapely,geodesic-sphere,Python,Distance,Geopandas,Shapely,Geodesic Sphere,具有一个dfA,该dfA具有一个称为“几何体”的柱,该柱具有以下几何形状: d = {'id': [1, 2], 'geometry': ['POINT (-70.66000 -33.45000)', 'POINT (-74.08000 4.60000)']} dfA = pd.DataFrame(data=d) dfA | | id | geometry | |---|----|-----------------------| | 0 | 1 | POINT

具有一个dfA,该dfA具有一个称为“几何体”的柱,该柱具有以下几何形状:

d = {'id': [1, 2], 'geometry': ['POINT (-70.66000 -33.45000)', 'POINT (-74.08000 4.60000)']}
dfA = pd.DataFrame(data=d)
dfA

|   | id | geometry              |
|---|----|-----------------------|
| 0 | 1  | POINT (-70.66 -33.45) |
| 1 | 2  | POINT (-74.08 4.6)    |
我想计算dfB几何柱的每个几何形状的最小测地距离:

d = {'id': [1, 2, 3], 'geometry': ['LINESTRING (-58.66000 -34.58000, -59.66000 -35.58000)', 'LINESTRING (-47.91000 -15.78000, -48.91000 -16.78000)', 'POINT (-66.86000 10.48000)']}
dfB = pd.DataFrame(data=d)
dfB

|   | id | geometry                                  |
|---|----|-------------------------------------------|
| 0 | 1  | LINESTRING (-58.66 -34.58, -59.66 -35.58) |
| 1 | 2  | LINESTRING (-47.91 -15.78, -48.91 -16.78) |
| 2 | 3  | POINT (-66.86 10.48)                      |
我尝试使用Python shapely和geopandas库,通过以下步骤进行此计算:

from shapely import wkt
import geopandas as gpd

dfA['geometry'] = dfA['geometry'].apply(wkt.loads)
dfA = gpd.GeoDataFrame(dfA, geometry='geometry')
dfB['geometry']= dfB['geometry'].apply(wkt.loads)
for i, value in dfB.iterrows():
    e = dfB.iloc[i]['id']
    dfA[str(e)] = dfA['geometry'].distance(dfB.iloc[i]['geometry'])
dfA

|   | id | geometry              | 1           | 2           | 3           |
|---|----|-----------------------|-------------|-------------|-------------|
| 0 | 1  | POINT (-70.66 -33.45) | 11,20432506 | 27,40349248 | 44,09404608 |
| 1 | 2  | POINT (-74.08 4.6)    | 42,10521108 | 33,0247377  | 9,311433832 |
不幸的是,shapely距离函数计算的是欧几里德距离,而不是测地距离

另一种策略是使用一个函数,计算从点a到线B[B1、B2、B3,…]上所有点的测地距离,并保持最小距离。也就是说: dist_A-B=min(测地仪(A,B1)、测地仪(A,B2)、测地仪(A,B3),…)

这个解决方案是可行的,但计算起来非常昂贵,因为我们讨论的是从数千个点到数千条线的计算。
任何其他执行此计算的最佳方法都会有很大帮助。

如果您可以将问题简化为计算到一组点的测地距离,那么a将为您提供一个有效的解决方案。看看我对一个类似问题的回答;这包括python中的解决方案。

请注意:您可以使用
pyproj
geopy
计算点之间的测地距离,但我不知道线串或多边形之间有效的测地距离方法。我想这就是OP在问题的后半部分所指的,这里的问题是,它们基本上是计算第一条线串中所有点与第二条线串中所有点之间的距离。