利用PostGIS將離散的點連成線

2021-10-08 09:31:30 字數 2281 閱讀 9339

遇到這樣乙個需求,資料如下圖所示,將下面的點連成線,經分析後資料沒有有用的字段資訊。

首先想到arcgis或qgis中有points to line的演算法,但是要求選擇排序字段,資料中沒有可排序的字段,經分析後資料的fid也不是按照路徑的走勢排序的,故不能使用此方法。

大概思路如下:

資料匯入postgis中

指定起始點

根據起始點計算距離該點最近的點,然後連成線(依次遍歷所有的點)

第三步可能存在第乙個點的最近點是第二個點,而第二個點的最近點又是第乙個點,造成死迴圈,因此要將遍歷完的點存到陣列裡面,如果最近點已存在,則使用第二近的點作為下一次遍歷的起始點,下面詳細講解:

使用pgadmin4新建資料庫和建立空間擴充套件

資料庫連線

圖層匯入

:"""獲得點的真實位置"""

sql = f"select st_x(geom) as x, st_y(geom) as y from sunyongqi_0706_pnt order by " \

f"geom st_geomfromewkt('srid=3857;point( )') limit 1;"

cursor.execute(sql)

return cursor.fetchone(

)def

get_xy

(x, y):if

(x, y)

== end_point:

return

sql = f"select st_x(geom) as x, st_y(geom) as y from sunyongqi_0706_pnt order by " \

f"geom st_geomfromewkt('srid=3857;point( )') limit 4;"

cursor.execute(sql)

rows = cursor.fetchall(

)if rows[1]

notin points:1]

) get_xy(

*rows[1]

)elif rows[2]

notin points:2]

) get_xy(

*rows[2]

)else

:return

points =

# 起始點

start_point =

(15156038

,4155636

)start_point = get_real_point(

*start_point)

# 終止點

end_point =

(15172058.1

,4176587.1

)if end_point:

end_point = get_real_point(

*end_point)

# 新增第乙個點

獲取線的中間點 postgis

前言 qgis沒找到對應功能,只有mean coordinate s 但不能滿足要求,最後找到了 postgis 的相關方法。函式詳情 select st astext st lineinterpolatepoint st linemerge geom 0.5 from line這樣就能獲取中間點了...

Matlab利用序列離散點繪製漸變顏色空間曲線

寫 時候,可能會用到繪製空間曲線。這裡給出乙個自己寫的matlab函式,用於將一組離散的3d點繪製成空間曲線。點多的時候效果比較好,因為每兩個點之間是直線連線。曲線的顏色是從起點到終點漸變的 function drawcolorfulcurve pointlist,startpointcolor,e...

MATLAB 離散點的圓弧擬合

最近做專案,會遇到很多資料擬合的問題,通常在網上搜尋時會看到很多 乙個個嘗試有對有錯,下面根據專案進展情況總結一下用到的相關知識。都是由本人親測,雖然簡單但是絕對正確的 首先是圓弧擬合的 由離散點擬合 t1為二維矩陣,t1的第一行為x軸的資料點,t1的第二行為y軸的資料點,用 表示為 t1 1,x,...