geopandas - 尝试将多边形中的两个多边形元素分配给 geopandas 几何列会导致 ValueError
问题描述
我正在使用世界地图中内置的 geopandas。我正在尝试将法属圭亚那从法国几何中分离出来,并为法属圭亚那创建一个新条目(我已经成功完成)。但是,当将缩减的欧洲法国和科西嘉岛多面体重新评估回法国geometry
单元格时,我得到一个错误。
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
# Remove French Guiana (shape[0])
shape = world[world['name'] == 'France']['geometry'].all()
fr_shape = shape[2] # This works creating a POLYGON but drops Corsica :(
world.at[world['name'] == 'France', 'geometry'] = fr_shape
fr_shape = shape[1:] # This creates a MULTIPOLYGON then throws an ValueError.
world.at[world['name'] == 'France', 'geometry'] = fr_shape
> ValueError: Must have equal len keys and value when setting with an iterable
这是一个类似的问题:Geopandas set geometry: ValueError for MultiPolygon "equal len keys and value"
然而,当我试图提取多面体的三个元素中的两个并重新分配时,对我来说似乎是一个不同的问题,因为另一个是从一个数据帧直接复制到另一个数据帧而无需操作。迄今为止,尝试解决方案的各种变体.values
并没有成功抛出相同的问题。
解决方案
我设法找到了解决方法:
import pandas as pd
import geopandas as gpd
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
# Remove French Guiana from France.
shape = world[world['name'] == 'France']['geometry'].all()
# Multipolygon ValueError Workaround.
fr_df = pd.Series(['France', 'France'], name='country')
fr_df = gpd.GeoDataFrame(fr_df, geometry=[shape[1], shape[2]])
fr_df = fr_df.dissolve(by='country')
world.at[world['name'] == 'France', 'geometry'] = fr_df['geometry'].values
world.plot()
推荐阅读
- raspberry-pi3 - Android things Stable 1.0.0 版是否正式支持树莓派 3 通过 GSM/3g/4g 使用 USB 棒上网?
- algorithm - 如何对图进行排序并使其看起来合理
- node.js - Node.js + Express 基本语法解释
- linux - 我们如何使用 sed 命令将 \n 写入文件?
- java - 如何修复多线程应用程序数组中的 NullPointerException
- .net - Bot builder : 如何在 SPFx 中启用我的 Bot 以在连接后识别用户
- listview - UWP ListView x:Bind SelectionMode StackoOverflowException
- java - 使用 Java 客户端进行单点登录
- function - OpenLayers 3 Style Function 用于动态特征字体设置
- java - 使用java代码将textview与父级对齐