[英]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 中給出的線串上的點。 然后創建另一個僅包含這些點的地理數據框。
是否可以?
最好
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.