geospatial - GeoPandas:如何获取地理数据框中每个几何图形的边界框

标签 geospatial shapely geopandas

我在 python 中使用 GeoPandas 并且有一个有效的多边形 GeoDataframe。

0         POLYGON Z ((68.70999999999999 623.1 0, 35.71 6...
1         POLYGON Z ((221.33 645.02 0, 185.7 640.33 0, 1...
2         POLYGON Z ((150.3 650 0, 160.9 650 0, 150.58 6...

我想获得一个新的数据帧,它具有数据帧中每一行的边界框坐标。

现在我对 GeoPandas 有一些奇怪的行为。

假设我将 GeoDataFrame 命名为 gdf ,然后使用代码:
gdf.bounds

我得到相应的错误。我不知道这个错误是什么意思,因为我没有将任何值传递给 bounds方法——它们是隐式传递的。
ValueError: Shape of passed values is (1, 110042), indices imply (4, 110042)

当我尝试:
gdf.geometry.bounds我得到同样的 ValueError...
但是,当我这样做时,我得到了一个有效的答案:
gdf.head(10).bounds

我得到
    minx    miny    maxx    maxy
0   0.00    618.15  68.71   650.00
1   169.56  640.33  221.33  650.00
2   150.30  648.64  160.90  650.00

所以gdfgdf.head()没有任何不同,但一个给我一个错误,一个没有。有谁知道获取与每一行对应的边界框的正确方法。

最佳答案

您也可以尝试以下方法

# remove empty geometry
valid_geom = gdf[gdf.geometry.map(lambda z: True if not z.is_empty else False)]
# get the bounds of each geometry
valid_geom.geometry.map(lambda z: z.exterior.xy)

# or in one line
gdf[gdf.geometry.map(lambda z: True if not z.is_empty else False)].geometry.map(lambda z: z.exterior.xy)

这将导致以下输出。你得到 (minx, miny, maxx, maxy) 作为一个列表。
0     ([346494.47052450513, 346512.1633455531, 34642...
1     ([347156.6195963654, 347140.5694171803, 347106...
2     ([347374.2493280142, 347343.280266067, 347331....
3     ([347752.9399173185, 347732.0804000348, 347699...
4     ([352462.7065634858, 352421.82634455897, 35239...
5     ([352398.84073305037, 352366.62657852937, 3523...
6     ([351619.2911484046, 351581.3489685701, 351559...
7     ([349298.04394918215, 349284.4299869118, 34926...
8     ([349402.6562116009, 349390.3714050767, 349364...
9     ([347447.35067824554, 347427.2888365253, 34740...
10    ([351038.9227137904, 351023.75894022046, 35101...
11    ([352360.8991716495, 352311.8060843693, 352289...
12    ([348053.8637179602, 348014.5578245763, 347995...
13    ([350854.3664365387, 350802.39711500367, 35075...
14    ([350661.291738528, 350539.01532645256, 350497...
15    ([349634.9936554617, 349617.43041924713, 34959...
16    ([346588.703008323, 346576.2541223159, 346560....
17    ([347323.7364982413, 347311.6537559405, 347289...
18    ([347592.9326738138, 347588.24603437353, 34757...
19    ([347871.4965194545, 347852.9032783319, 347846...
20    ([349503.7927385038, 349484.6946827946, 349482...
21    ([349917.505834857, 349907.19522809517, 349885...
22    ([350254.82670837734, 350243.1101097837, 35024...
dtype: object

关于geospatial - GeoPandas:如何获取地理数据框中每个几何图形的边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49948876/

相关文章:

python - 在 Python 中将多多边形转换为多边形

python - 在矩形联合中找到洞?

networkx - 使用 OSMnx 提取约束多边形

python - 如何手动设置cmap颜色?

javascript - 如何在 Mapbox Javascript 中添加简单的图像叠加层?

r - ggplot2如何在 map 边界(例如美国州)内保持抖动的位置?

python - PyInstaller 无法使用 geopandas 和 fiona 创建 exe。即使我在 .spec 文件中进行了一些更改,exe 也无法正常工作

javascript - 地理空间框查询 - Mongoose、Node.js MongoDB - 不返回任何结果

python - 我可以在空间上连接 Python Geopandas 上几何以外的列吗?