我正在测试geopandas,以制作一些非常简单的东西:使用差异方法删除位于圆形内部的GeoDataFrame的某些点。
这是我的脚本开头:
%matplotlib inline
# previous line is because I used ipynb
import pandas as pd
import geopandas as gp
from shapely.geometry import Point
[...]
points_df = gp.GeoDataFrame(csv_file, crs=None, geometry=geometry)
这是points_df的第一行:
Name Adress geometry
0 place1 street1 POINT (6.182674 48.694416)
1 place2 street2 POINT (6.177306 48.689889)
2 place3 street3 POINT (6.18 48.69600000000001)
3 place4 street4 POINT (6.1819 48.6938)
4 place5 street5 POINT (6.175694 48.690833)
然后,我会添加一个包含第一个GeoDF的多个点的点。
base = points_df.plot(marker='o', color='red', markersize=5)
center_coord = [Point(6.18, 48.689900)]
center = gp.GeoDataFrame(crs=None, geometry=center_coord)
center.plot(ax=base, color = 'blue',markersize=5)
circle = center.buffer(0.015)
circle.plot(ax=base, color = 'green')
以下是 iPython 笔记本显示的结果: 现在的目标是删除绿色圆圈内的红点。为了达到这个目的,我认为差分方法已经足够了。但是当我写下以下代码时:
selection = points_df['geometry'].difference(circle)
selection.plot(color = 'green', markersize=5)
结果是... points_df 没有任何变化: 我猜测difference()方法仅适用于多边形GeoDataFrames,而点和多边形的混合不可能。但也许我错过了什么!
在这种情况下,检测一个点是否在圆内的函数会比difference方法更好吗?