首页 > 解决方案 > 错误:尝试在多边形中查找点时,float() 参数必须是字符串或数字,而不是“多边形”

问题描述

我有一个命名多边形列表:

import pandas as pd
import geopandas as gp
from shapely.geometry import Polygon
from shapely.geometry import Point
import matplotlib.path as mpltPath
df = gp.GeoDataFrame([['a', Polygon([(1, 0), (1, 1), (2,2), (1,2)])],
                     ['b', Polygon([(1, 1), (2,2), (3,1)])]],
                     columns = ['name','geometry'])
df = gp.GeoDataFrame(df, geometry = 'geometry')

和点列表:

points = gp.GeoDataFrame( [['box', Point(1.5, 1.75)],
                          ['cone', Point(3.0,2.0)],
                        ['triangle', Point(2.5,1.25)]],
                     columns=['id', 'geometry'], 
                     geometry='geometry')

我试图找出哪些点在哪些多边形中,并使用“True”或“False”向点数据框添加一列

我以前在这里看到了一些方法,这些方法显示了一些快速执行此操作的方法并获得了脚本:

point = points['geometry']
path = mpltPath.Path(df['geometry'])
points['inside'] = path.contains_points(point)

但我收到错误:float() 参数必须是字符串或数字,而不是“多边形”

我该如何解决?

或者我一直在尝试这种方法:

points['inside'] = []
for geo1 in df['geometry']:
    for geo2 in points['geometry']:
        if geo1.contains(geo2):
            points['inside'].append('True')

但是在这里我也得到一个错误:值的长度与索引的长度不匹配

对于其中任何一个的任何帮助将不胜感激!

标签: pythonpython-3.xpandasmatplotlib

解决方案


我没有得到“真/假列”,但这应该可以完成工作:

points.apply(lambda row: (row['id'], list(map(lambda e: e[0], list(filter(lambda p: p[1].contains(row['geometry']), df.values))))), axis=1)

对于每个点,您都会获得包含它的多边形,输出:

0         (box, [a])
1         (cone, [])
2    (triangle, [b])
dtype: object

推荐阅读