首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >几何形状之间的测地线距离Python

几何形状之间的测地线距离Python
EN

Stack Overflow用户
提问于 2020-05-22 20:28:36
回答 1查看 974关注 0票数 3

具有名为dfA的列的几何体,具有以下几何形状:

代码语言:javascript
运行
复制
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的几何列的每个几何形状计算最小测地距离:

代码语言:javascript
运行
复制
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库完成此计算:

代码语言:javascript
运行
复制
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(geodist(A,B1),geodist(A,B2),geodist(A,B3),...)

这种解决方案有效,但在计算上非常昂贵,因为我们讨论的是从数千个点对数千条线进行计算。执行此计算的任何其他更优化的方法都会有很大帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-05-25 02:14:09

如果您可以将问题简化为计算到一组点的测地距离,那么vantage point tree将为您提供一个有效的解决方案。请参阅我对类似问题的回答here;其中包含了python中的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61955079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档