簡體   English   中英

錯誤:嘗試在多邊形中尋找點時,float()參數必須為字符串或數字,而不是“多邊形”

[英]Error: float() argument must be a string or a number, not 'Polygon' when trying to find points in polygons

我有一個命名多邊形的列表:

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()參數必須是字符串或數字,而不是'Polygon'

我該如何解決?

另外,我一直在嘗試這種方法:

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

但是在這里我也得到一個錯誤:值的長度des與索引的長度不匹配

任何與這些幫助將不勝感激!

我沒有得到“ true / false列”,但這應該可以完成工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM