如何使用GeoPandas将点的GeoSeries转换为元组列表纬度,经度

问题描述

我有一个名为barrios的GeoPandas数据框,我使用barrios.geometry.centroid并将其分配给center

所以centergeopandas.geoseries.GeoSeries,具有索引和值-POINT (-58.42266 -34.57393)

我需要获取这些坐标并将其保存为列表

[(point_1_lat,point_1_lon),(point_2_lat,point_2_lon),...]

我尝试过:

[center.values.y,center.values.x]

但是它返回2个数组的列表-[array(lat),array(lng)]

如何获得所需的结果?

解决方法

您可以使用zip遍历多个变量。这应该将坐标提取到列表中。

coord_list = [(x,y) for x,y in zip(gdf['geometry'].x,gdf['geometry'].y)]

或者,您可以使用x和y坐标创建GeoDataFrame。 首先,提取x和y坐标并将它们放在新列中。

import geopandas as gpd
url = r"link\to\file"
gdf = gpd.read_file(url)

gdf['x'] = None
gdf['y'] = None

gdf['x'] = gdf.geometry.apply(lambda x: x.x)
gdf['y'] = gdf.geometry.apply(lambda x: x.y)

这将返回带有x和y坐标列的GeoDataFrame。现在将坐标提取到列表中。

coordinate_list = [(x,y in zip(gdf.x,gdf.y)]

这将返回坐标元组列表

[(105.27,-5.391),(107.615,-6.945264),(107.629,-6.941126700000001),(107.391,-6.9168726),(107.6569,-6.9087003),(107.638,-6.9999),(107.67,-6.553),(107.656,-6.8),...

您将有一个列表,以及带有x和y列的GeoDataFrame。