【问题标题】:Shapely point geometry in geopandas df to lat/lon columnsgeopandas df 到 lat/lon 列中的匀称点几何
【发布时间】:2018-04-03 16:56:53
【问题描述】:

我有一个 geopandas df,里面有一列形状匀称的点对象。我想从形状匀称的点对象中提取坐标(纬度/经度)以生成纬度和经度列。一定有一个简单的方法可以做到这一点,但我想不通。

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

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

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

【问题讨论】:

    标签: python gis latitude-longitude geopandas shapely


    【解决方案1】:

    如果您拥有最新版本的 geopandas(撰写时为 0.3.0),并且如果 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)
    

    【讨论】:

    • 我一定没有最新版本,因为第一个解决方案给了我一个错误。但是第二种解决方案效果很好。谢谢!
    • 您好,您好久没有回答了。我尝试了您建议的方法,但失败并出现错误代码IndexError: index out of range。这不适用于GeoSeries
    • 编辑:如果有空的几何图形,调用属性geodataframe.point_object.x/y/z 将返回错误(参见here
    【解决方案2】:

    无需遍历 Dataframe,您可以执行以下操作:

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

    【讨论】:

    • 我之前已经让这个工作了,但有时(数据结构没有明显差异)我得到AttributeError: 'Series' object has no attribute 'x'
    • 这项工作一气呵成df[['lat', 'lng']] = df.apply(lambda p: (p.geometry.y, p.geometry.x), axis=1, result_type='expand')
    【解决方案3】:

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

    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["long"] = df.Center_point.map(lambda p: p.x)
    df["lat"] = df.Center_point.map(lambda p: p.y)
    

    【讨论】:

    • 这个答案不正确。纬度和经度在这里交换。 span>
    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多