[英]Split LineString into several LineStrings if distance to next Point is > than a given threshold
我有一個勻稱的點列表:
0 POINT (527644.217 5340266.216)
11 POINT (527644.921 5340266.268)
22 POINT (527645.889 5340266.246)
34 POINT (527646.423 5340266.200)
45 POINT (527646.979 5340266.127)
...
並創建了一個 LineString。
圖中的箭頭顯示了兩點之間距離過長的示例。
如果到下一個點的距離太長,我試圖通過一個循環並創建一個新的 LineString 。 但它沒有做正確的事情。
liness=list()
start=0
for i in range(0,len(gdf.geometry)-1):
dist=gdf.geometry.iloc[i].distance(gdf.geometry.iloc[i+1])
if dist > line_tresh:
#List of Points which are too far away
points_too_far_away.append(LineString([gdf.geometry.iloc[i],gdf.geometry.iloc[i+1]]))
#list of new separated LineStrings
liness.append(LineString(gdf.geometry[start:i-1].tolist()))
start=i
有沒有更好的方法來獲得解決方案?
您可以嘗試將apply
方法與shapely
的distance
函數一起使用。 下面是一個例子:
# Setting up example
import pandas as pd
import shapely
df = pd.DataFrame({'id':range(5),
'wkt':['POINT (527644.217 5340266.216)',
'POINT (527644.921 5340266.268)',
'POINT (527645.889 5340266.246)',
'POINT (527646.423 5340266.200)',
'POINT (527646.979 5340266.127)']})
df['geom'] = df['wkt'].apply(shapely.wkt.loads)
# Adding columns for distance calculation
df['geom_2'] = df['geom'].shift(-1)
def my_dist(in_row):
return in_row['geom'].distance(in_row['geom_2'])
df['seq_dist'] = df.loc[:df.shape[0]-2].apply(my_dist, axis=1)
dist_threshold = 0.6
df['break'] = df['seq_dist'] > dist_threshold
在此示例中, df['break']
列將包含一個指示符,告訴您距離大於dist_threshold
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.