簡體   English   中英

生成位於 geopandas 線串上的點

[英]Generate points which lie on linestring in geopandas

可以說我有以下地理數據框:

import geopandas as gpd
from shapely.geometry import LineString

line = LineString([(2.2, 4.2), (7.2, -25.1), (9.26, -2.456)])
gdf = gpd.GeoDataFrame(index=[0], crs='epsg:4326', geometry=[line])

現在我想要實現的是生成,比方說,100 個隨機位於 gdf 中給出的線串上的點。 然后創建另一個僅包含這些點的地理數據框。

是否可以?

最好

  • 顯然LineString有多個直線段
  • 在每個線段上生成線性間隔的點
  • 隨機 select 沿每個線段生成的一些點
  • 已經形象化地使用folium使其清晰
import geopandas as gpd
from shapely.geometry import LineString, Point
import numpy as np

line = LineString([(2.2, 4.2), (7.2, -25.1), (9.26, -2.456)])
gdf = gpd.GeoDataFrame(index=[0], crs="epsg:4326", geometry=[line])

N_POINTS = 20
POINTS_PER_SEGMENT = 100
# generate points per segment and randomly select N of them
gdf2 = gpd.GeoDataFrame(
    geometry=np.random.choice(
        [
            Point(x, y)
            for p1, p2 in zip(line.coords, line.coords[1:]) # iterate through line segments
            for x, y in zip(
                np.linspace(p1[0], p2[0], POINTS_PER_SEGMENT),
                np.linspace(p1[1], p2[1], POINTS_PER_SEGMENT),
            )
        ],
        N_POINTS,
    ),
    crs="epsg:4386",
)

m = gdf.explore(color="red", height=300, width=500)
gdf2.explore(m=m)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM