在geopandas df到lat / lon列中的匀称点几何

时间:2018-04-03 16:56:53

标签: python gis latitude-longitude geopandas shapely

我有一个具有一系列匀称点对象的geopandas df。我想从形状上的点对象中提取坐标(lat / lon)以生成纬度和经度列。必须有一个简单的方法来做到这一点,但我无法弄明白。

我知道你可以像这样提取单个坐标:

lon = df.point_object[0].x
lat = df.point_object[0].y

我可以创建一个为整个df执行此操作的函数,但我认为有一种更有效/更优雅的方式。

3 个答案:

答案 0 :(得分:3)

如果您拥有最新版本的geopandas(撰写时为0.3.0),而if df是GeoDataFrame,则可以使用xy属性几何列:

df['lon'] = df.point_object.x
df['lat'] = df.point_object.y

一般情况下,如果您有一列形状合适的对象,您还可以使用apply执行完整列的各个坐标上的操作:

df['lon'] = df.point_object.apply(lambda p: p.x)
df['lat'] = df.point_object.apply(lambda p: p.y)

答案 1 :(得分:1)

从多边形和多面中提取中心点(经度和纬度)的解决方案。

import geopandas as gpd
df = gpd.read_file(path + 'df.geojson')
#Find the center point
df['Center_point'] = df['geometry'].centroid
#Extract lat and lon from the centerpoint
df["lat"] = df.Center_point.map(lambda p: p.x)
df["long"] = df.Center_point.map(lambda p: p.y)

答案 2 :(得分:0)

无需遍历数据框,您可以执行以下操作:

df['lon'] = df['geometry'].x
df['lat'] = df['geometry'].y