PostSQL编写经验(利用坐标值,创建空间要素字段)
生活随笔
收集整理的這篇文章主要介紹了
PostSQL编写经验(利用坐标值,创建空间要素字段)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 = 1while(i< iLen):pt_str1 = str(lon[i]) + ' ' + str(lat[i])if lon1 * lon[i] > 0: #同為正負值,說明前后兩點處于日經線同側pt_str += ',' + pt_str1else:pt_str += '),(' + pt_str1lon1 = lon[i]i += 1pt_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)?
總結
以上是生活随笔為你收集整理的PostSQL编写经验(利用坐标值,创建空间要素字段)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC学习之(5):Ht
- 下一篇: 学生信息管理系统(JAVA+MYSQL)