Gis 在一个GeoDataFrame中有多个几何体列是一种不好的做法吗?

Gis 在一个GeoDataFrame中有多个几何体列是一种不好的做法吗?,gis,polygon,series,geopandas,shapely,Gis,Polygon,Series,Geopandas,Shapely,我试图创建一个每行有2个邮政编码的GeoDataFrame,我想比较它们之间的距离。 我得到了一个大约220个邮政编码的列表,并对它们运行了一个itertools组合,以获得所有的combo,然后将元组解压成两列 code_combo = list(itertools.combinations(df_with_all_zip_codes['code'], 2)) df_distance_ctr = pd.DataFrame(code_combo, columns=['first_code','s

我试图创建一个每行有2个邮政编码的GeoDataFrame,我想比较它们之间的距离。 我得到了一个大约220个邮政编码的列表,并对它们运行了一个itertools组合,以获得所有的combo,然后将元组解压成两列

code_combo = list(itertools.combinations(df_with_all_zip_codes['code'], 2))
df_distance_ctr = pd.DataFrame(code_combo, columns=['first_code','second_code'])
然后,我进行了一些标准的pandas合并和列重命名,以将原始geodataframe中的多边形/几何体列转换为新的列,就在相应的邮政编码列旁边。 问题是,我似乎无法将多边形列作为几何体读取,即使在1.)尝试将数据帧转换为geodataframe-AttributeError:尚未设置几何体数据集,2.)将wkt.loads应用于几何体列-AttributeError:“MultiPolygon”对象没有属性“encode” .
我试图寻找一种将系列转换为geoseries的方法,但在SO或文档中找不到任何内容。有人能指出我可能出错的地方吗?

看看GeoDataFrame的
\uuu init\uuuu
方法,看起来GDF一次只能有一列。但是,已创建的其他列中仍应包含几何体对象

由于每列中仍有几何体对象,因此可以编写一个使用Shapely的
distance
方法的方法,如下所示:

将熊猫作为pd导入
进口土工画板
从shapely.geometry导入点
将matplotlib.pyplot作为plt导入
lats=[-34.58,-15.78,-33.45,4.60,10.48]
lons=[-58.66,-47.91,-70.66,-74.08,-66.86]
df=pd.DataFrame(
{‘城市’:[‘布宜诺斯艾利斯’、‘巴西利亚’、‘圣地亚哥’、‘波哥大’、‘加拉加斯’],
“国家”:[“阿根廷”、“巴西”、“智利”、“哥伦比亚”、“委内瑞拉”],
“纬度”:纬度,
“经度”:lons})
df['Coordinates']=列表(zip(df.经度,df.纬度))
df['Coordinates']=df['Coordinates'].应用(点)
df['coordinations_2']=列表(zip(lons[:-1],lats[:-1]))
df['Coordinates_2']=df['Coordinates_2'].应用(点)
gdf=geopandas.GeoDataFrame(df,geometry='Coordinates')
def get_距离(世界其他地区):
距离=行坐标距离(行坐标2)
打印(距离)
返回距离
gdf['distance']=gdf.apply(lambda行:获取距离(行),轴=1)

至于
AttributeError:“MultiPolygon”对象没有属性“encode”
MultiPolygon
是一个形状几何体类
encode
通常是字符串对象上的一种方法,因此您可能可以删除对
wkt.loads的调用

请共享一部分数据,以帮助人们理解您的问题。请提供文档中的。开始,概念,第2段:“您可以拥有任意多个带有几何图形的列,桌面GIS软件通常没有限制。”感谢简洁的wkt.loads说明!此外,从多边形创建两个质心列(其中第一个是指定的几何图形列)后,该功能发挥了巨大的作用.
df\u distance\u ctr=gpd.GeoDataFrame(df\u distance\u ctr,geometry='first\u mpoly')
df\u distance\u ctr['first\u centroid']=df\u distance\u ctr['second\u centroid']=df\u distance\u ctr.apply(λ行:第二行,质心,轴=1)根据“几何体未设置”错误,可能是我的操作顺序或.copy()错误,因为重新运行代码效果良好。