python - 如何使用 Python 检查纬度/经度坐标是否在多边形内。(考虑到大圆。)
问题描述
我有这个数据框,其中包含纬度/经度坐标:
Lat Lon
29.39291 -98.50925
29.39923 -98.51256
29.40147 -98.51123
29.38752 -98.52372
29.39291 -98.50925
29.39537 -98.50402
29.39343 -98.49707
29.39291 -98.50925
29.39556 -98.53148
这些是构成多边形的坐标:
Lat Lon
29.392945 -98.507696
29.406167 -98.509074
29.407234 -98.517039
29.391325 -98.517166
我想检查每个坐标(来自第一个数据帧)是否在多边形内,使用 Python,并考虑到大圆。
预期结果:
Lat Lon Within
29.39291 -98.50925 1
29.39923 -98.51256 1
29.40147 -98.51123 1
29.38752 -98.52372 0
29.39291 -98.50925 1
29.39537 -98.50402 0
29.39343 -98.49707 0
29.39291 -98.50925 1
29.39556 -98.53148 0
解决方案
从这里检查点是否在 python 中的多边形内的最快方法是什么,假设您的多边形数据框是df_poly并且点是df_points:
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
polygon = Polygon([tuple(x) for x in df_poly[['Lat', 'Lon']].to_numpy()])
df_points['Within'] = df_points.apply(lambda x: polygon.contains(Point(x['Lat'], x['Lon'])), axis=1)
推荐阅读
- angular - 当我多次调用它时,谷歌地图街景不适用于角度 6
- html - 根据屏幕大小调整按钮高度
- php - 如何在我的树枝模板中包含外部 html 文件?
- setinterval - 有什么方法可以在触发新的 setInterval 之前清除之前的 setInterval
- symfony - 如何在 collectionType 字段上获取数据() - Symfony 4
- ruby-on-rails - 在 create-react-app 端访问 Rails 会话
- arrays - 在数组中查找单个未排序元素的有效方法
- python - 通过 jupyter notebook 从串行捕获数据的问题
- mysql - 为什么 SHOW GLOBAL VARIABLES LIKE 'local_infile' 有时会关闭
- macos - 使用 MacOS 和 CMake 包含 omp.h 库时出错