1、創建數據表station,包含geometry字段:
CREATE TABLE "public"."station" (
"name" varchar(20) COLLATE "pg_catalog"."default",
"lat" float4,
"lon" float4,
"geometry" "public"."geometry",
"code" varchar(4) COLLATE "pg_catalog"."default" NOT NULL,
CONSTRAINT "station_pkey" PRIMARY KEY ("code")
)
2、程序創建表格記錄時,應用SQL語句:
sSQL = "INSERT INTO station(lat, lon, geometry) " + \
"VALUES(%f,%f, ST_GeomFromText('POINT(%f %f)', 4326))" \
% (lat, lon, lon, lat)
代碼用於python,注意最後創建點數據的經緯數值輸入採用的是:(lon lat) 的方式
參數:4326,表示的是地理投影座標系統,代表地理座標系中的GCS_WGS_1984
3、如需增補空間座標值,採用SQL語句:update
update station as a set geometry =
ST_GeomFromText('POINT('||(select lon || ' ' || lat from station
where id =a.id)||')', 4326)
該語句可直接在Navicat for PostgreSQL中運行。
4、考慮跨越日經線的空間要素創建
跨越日經線,空間座標發生變化,Lon值從179跳躍至-179,採取Line繪製的圖形,會出現360度的連線,形成亂線。此時需採取多線方式創建空間要素,Lon值同正負的生成一條線段,多個線段組成一個空間要素MULTILINSTING,以確保使用同一屬性數據,爲一個空間實體。
#########
#lat、lon爲點集數組
lat1 = lat[0]
lon1 = lon[0]
pt_str = '(' + str(lon[0]) + ' ' + str(lat[0])
iLen = len(lat)
i = 1
while(i< iLen):
pt_str1 = str(lon[i]) + ' ' + str(lat[i])
if lon1 * lon[i] > 0: #同爲正負值,說明前後兩點處於日經線同側
pt_str += ',' + pt_str1
else:
pt_str += '),(' + pt_str1
lon1 = lon[i]
i += 1
pt_str += ')'
linestring = 'MULTILINESTRING('
linestring = linestring + pt_str +')'
sSQL = 'INSERT INTO line_table(code, StartTime,EndTime, geometry) ' + \
'VALUES (\'%s\', \'%s\', \'%s\', ST_GeomFromText(\'%s\', 4326))' \
% (code, start_time, end_time, linestring)
pgHelp.insert(sSQL)