遇到這樣乙個需求,資料如下圖所示,將下面的點連成線,經分析後資料沒有有用的字段資訊。
首先想到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,...