PostSQL编写经验(利用坐标值,创建空间要素字段)
生活随笔
收集整理的這篇文章主要介紹了
PostSQL编写经验(利用坐标值,创建空间要素字段)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、創(chuàng)建數(shù)據(jù)表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、程序創(chuàng)建表格記錄時,應(yīng)用SQL語句:
sSQL = "INSERT INTO station(lat, lon, geometry) " + \ "VALUES(%f,%f, ST_GeomFromText('POINT(%f %f)', 4326))" \% (lat, lon, lon, lat)代碼用于python,注意最后創(chuàng)建點(diǎn)數(shù)據(jù)的經(jīng)緯數(shù)值輸入采用的是:(lon lat) 的方式
參數(shù):4326,表示的是地理投影坐標(biāo)系統(tǒng),代表地理坐標(biāo)系中的GCS_WGS_1984
3、如需增補(bǔ)空間坐標(biāo)值,采用SQL語句:update
update station as a set geometry = ST_GeomFromText('POINT('||(select lon || ' ' || lat from station where id =a.id)||')', 4326)該語句可直接在Navicat for PostgreSQL中運(yùn)行。
4、考慮跨越日經(jīng)線的空間要素創(chuàng)建
跨越日經(jīng)線,空間坐標(biāo)發(fā)生變化,Lon值從179跳躍至-179,采取Line繪制的圖形,會出現(xiàn)360度的連線,形成亂線。此時需采取多線方式創(chuàng)建空間要素,Lon值同正負(fù)的生成一條線段,多個線段組成一個空間要素MULTILINSTING,以確保使用同一屬性數(shù)據(jù),為一個空間實體。
##########lat、lon為點(diǎn)集數(shù)組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: #同為正負(fù)值,說明前后兩點(diǎn)處于日經(jīng)線同側(cè)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)?
總結(jié)
以上是生活随笔為你收集整理的PostSQL编写经验(利用坐标值,创建空间要素字段)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC学习之(5):Ht
- 下一篇: Taro+react开发(24)--th