我正在尝试将设备的区域名称分配给已注册的每个设备,每个设备都有纬度和经度坐标。
我将此信息转换为地理数据框:
我获得了区域多边形的信息(格式:cpg,dbf,prj,geojson,sbn,sbx,shp,shx):
我的目标是知道设备是否在多边形名称内,然后创建新列并将该区域名称分配给该设备。
要查找给定点是否在多边形内,可以使用shapely
:
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
point = Point(0.5, 0.5)
polygon = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
print(polygon.contains(point))
然后您只需要处理数据框,因此纬度,经度为Points
,区域为Polygons
。
一旦您的数据采用这种形式,您就可以在apply
上使用geo_df
来获得相应的区域。
geo_df.apply(lambda row: regions_df[regions_df.polygon.contains( row.lat_lon_point)].region.to_list(), axis=1)