使用 GeoPandas 将点几何图形转换为线串

2024-03-03

我有一个地理数据框gdf看起来像这样:

        longitude   latitude    geometry
8628    4.890683    52.372383   POINT (4.89068 52.37238)
8629    4.890500    52.371433   POINT (4.89050 52.37143)
8630    4.889217    52.369469   POINT (4.88922 52.36947)
8631    4.889300    52.369415   POINT (4.88930 52.36942)
8632    4.889100    52.368683   POINT (4.88910 52.36868)
8633    4.889567    52.367416   POINT (4.88957 52.36742)
8634    4.889333    52.367134   POINT (4.88933 52.36713)

我试图将这些点几何图形转换成一条线。然而,下面的代码给出了一个错误:AttributeError: 'Point' object has no attribute 'values'

line_gdf = gdf['geometry'].apply(lambda x: LineString(x.values.tolist()))
line_gdf = gpd.GeoDataFrame(line_gdf, geometry='geometry')

有任何想法吗 ?


当您创建一个LineString从地理数据框中的所有点中,您只能得到 1 条线。以下是您可以运行来创建 LineString 的代码:

from shapely.geometry import LineString

# only relevant code here
# use your gdf that has Point geometry
lineStringObj = LineString( [[a.x, a.y] for a in gdf.geometry.values] )

如果您需要 1 行的地理数据框并以此线串作为其几何形状,请继续执行以下操作:

import pandas as pd
import geopandas as gpd

line_df = pd.DataFrame()
line_df['Attrib'] = [1,]
line_gdf = gpd.GeoDataFrame(line_df, geometry=[lineStringObj,])

Edit1

Pandas具有强大的聚合功能,可以收集所有坐标(经度、纬度)供用户使用LineString()创建所需的几何形状。

为了读者的利益,我提供了这个可运行的代码来演示这种方法。

import pandas as pd
import geopandas as gpd
from shapely.geometry import LineString
from shapely import wkt
from io import StringIO
import numpy as np

# Create a dataframe from CSV data
df5 = pd.read_csv(StringIO(
"""id longitude latitude
8628  4.890683  52.372383
8629  4.890500  52.371433
8630  4.889217  52.369469
8631  4.889300  52.369415
8632  4.889100  52.368683
8633  4.889567  52.367416
8634  4.889333  52.367134"""), sep="\s+")

# Using pandas' aggregate function
# Aggregate longitude and latitude
stack_lonlat = df5.agg({'longitude': np.stack, 'latitude':  np.stack})
# Create the LineString using aggregate values
lineStringObj = LineString(list(zip(*stack_lonlat)))

# (Previously use) Create a lineString from dataframe values
#lineStringObj = LineString( list(zip(df5.longitude.tolist(), df5.latitude.tolist())) )
# Another approach by @Phisan Santitamnont may be the best.

# Create a geodataframe `line_gdf` for the lineStringObj
# This has single row, containing the linestring created from aggregation of (long,lat) data
df6 = pd.DataFrame()
df6['LineID'] = [101,]
line_gdf = gpd.GeoDataFrame(df6, crs='epsg:4326', geometry=[lineStringObj,])

# Plot the lineString in red
ax1 = line_gdf.plot(color="red", figsize=[4,10]);
# Plot the original data: "longitude", "latitude" as kind="scatter"
df5.plot("longitude", "latitude", kind="scatter", ax=ax1);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GeoPandas 将点几何图形转换为线串 的相关文章

  • 查找给定的经纬度是否位于 MongoDB 中的任何多边形中

    我想知道我是否获得了用户的经纬度 并想检查他是否位于我的数据库 MongoDB 中存储的任何多边形中 如何使用 mongoDB 来实现这一点 例如 我的数据库将有 10 个多边形存储为 GeoJson 对象 我得到一个经纬度 想检查这个纬度
  • 如何生成圆形分布中的随机点

    我想知道如何生成出现在圆形分布中的随机数 我能够在矩形分布中生成随机点 以便这些点在 0 我将如何继续生成圆内的点 以便 x 500 2 y 500 2 import random import math radius of the cir
  • 在不改变我的位置的情况下获取当前位置的经度和纬度

    我可以找到当前位置的纬度和经度 但是这些数据在更改我的当前位置之前不会显示 我想在不更改我的位置的情况下获取当前位置的经度和纬度 package com example gps import android app Activity imp
  • 查找线段是否位于另一线段的距离范围内

    我有一堆段 我拥有的数据是构成段 x1 y1 和 x2 y2 的 2 个点 并且想根据它们的位置对它们进行分类 如果一个片段与另一个片段足够接近 那么我想将它们放在一起 如果我必须用一句话来描述它 我想找到距线段任何点 5px 距离的所有相
  • Python中的三角波形状数组

    生成 100 个数字组成的数组 形成下面三角波的形状 最大 最小幅度为 0 5 的最有效方法是什么 记住三角波形 生成三角波的最简单方法是使用 signal sawtooth 请注意 signal sawtooth phi width 接受
  • 这段用于确定圆和线段是否相交的代码正确吗?

    显然很难找到一条线是否存在的答案segment和圆相交 例如 如果你用谷歌搜索 你会发现这个问题 https stackoverflow com questions 1073336 circle line segment collision
  • 如何检测两条线段相交的位置? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 用渐变色绘制一个 D3 圆

    如何用渐变颜色画一个圆 比如说 从黄色到蓝色的渐变 通常 要创建黄色圆圈 我们可以使用以下代码 var cdata 50 40 var xscale 40 var xspace 50 var yscale 70 var svg d3 sel
  • filehelpers - 解析可变行长度

    我必须解析 C a CSV文件 具有变量 宽度 和 2 行标题信息 第一行是名称 第二行是单位 数据如下 示例1 CSV timestamp NAME 1 NAME 2 NAME 3 NAME 4 ms unit 1 unit 2 unit
  • 如何使用ggplot2在地图上添加经度和纬度线?

    我现在正在使用绘制加拿大地图ggplot2 因为默认的投影方式是 aea 阿尔伯斯等积 所以地图上的经度和纬度都是直线 我想知道如何在地图上以 110W 100W 90W 和 50N 60N 70N 的形式显示经度和纬度 它们应该是曲线 多
  • 边界椭圆约束于水平/垂直轴

    背景 我正在尝试将地形图裁剪成围绕多个风力涡轮机的最小尺寸椭圆 以最小化地图的尺寸 执行此地图裁剪的程序可以裁剪椭圆 但仅限轴沿 x 轴和 y 轴对齐的椭圆 我知道边界椭圆问题的算法 https stackoverflow com ques
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

    我正在学习有关使用 OpenGL 在 Java 中创建游戏引擎的教程 我正在尝试在屏幕上渲染一个三角形 一切运行良好 我可以更改背景颜色 但三角形不会显示 我还尝试运行作为教程系列的一部分提供的代码 但它仍然不起作用 教程链接 http b
  • 投影 3D 网格的 2D 轮廓算法

    给定 一个 3D 网格 由一组顶点和三角形定义 并用这些点构建网格 问题 找到任意平面上投影的任意旋转网格的二维轮廓 投影很容易 挑战在于找到平面中投影三角形边的 外壳 我需要一些有关研究该算法的输入 指针的帮助 为简单起见 我们可以假设
  • python 使用 shapefile 掩码 netcdf 数据

    我正在使用以下软件包 import pandas as pd import numpy as np import xarray as xr import geopandas as gpd 我有以下存储数据的对象 print precip d
  • 使用 boost 几何检查两条线是否有交点

    是否可以使用 boost geometry 检查两条线段 每条线段由二维中的两个点给出 是否彼此相交 如果可能的话 boost geometry 是否还允许检查特殊情况 例如另一条线上只有一个点 数字上 或者两条线相等 如果你具体谈论Boo
  • 如何检查一个盒子是否适合另一个盒子(允许任何旋转)

    假设我有两个盒子 每个盒子都是一个长方体 http en wikipedia org wiki Rectangular cuboid aka长方体 我需要编写一个函数来决定盒子是否具有尺寸 一 二 三 可以装入具有尺寸的盒子中 甲 乙 丙
  • Android 谷歌地图圆圈平滑改变半径

    我想控制按进度条循环 但是谷歌地图APIsetRadius变化并不顺利 如何平滑改变圆半径 这是我的源代码 private Circle circle public void onMapReady final GoogleMap googl
  • 旋转后获取线的新位置

    我需要在一条线上使用 RotateTransform 方法找到旋转后线的新坐标 例如 在这一行之后 line RenderTransform new RotateTransform 25 0 0 line X1其他三个属性不会改变 我找到了
  • 如何最小化两个子多边形的最大纵横比?

    我想使用直线将凸多边形切成给定面积比的两部分 以使两个子多边形的较大纵横比最小化 目前我的方法包括选择一个随机起点 计算将多边形分割成目标区域的适当终点 然后计算两个纵横比中较大的一个 然后重复这个很多次 直到我足够接近最小值 多边形 A
  • 在箱线图中添加多条水平线

    我知道我可以使用类似命令向箱线图添加一条水平线 abline h 3 当单个面板中有多个箱线图时 我可以为每个箱线图添加不同的水平线吗 在上图中 我想为 1 添加行 y 1 2 为 2 添加行 y 1 5 为 3 添加行 y 2 1 我不确

随机推荐