PostGIS是對象關系型數據庫系統PostgreSQL的一個擴展,PostGIS提供如下空間信息服務功能:空間對象、空間索引、空間操作函數和空間操作符。同時,PostGIS遵循OpenGIS的規范。
剛開始學習了一些SQL語句,嘗試實現要素圖層的空間分析:
--讀取要素的幾何信息(按照WKT描述)
select ST_AsText(geom) from dzzg where bsm=2715; select ST_AsText(geom) from ckyd where bsm=420;
--求出dzzg.bsm為2715的要素和cykd.bsm為420的要素的相交部分 select ST_Intersection(ST_GeomFromText(ST_astext(a.geom)),ST_GeomFromText(ST_astext(b.geom))) FROM dzzg a INNER JOIN ckyd b on ST_Intersects(ST_GeomFromText(ST_astext(a.geom)),ST_GeomFromText(ST_astext(b.geom))) where a.bsm=2715 and b.bsm=420
//ST_Intersection表示求交
//紅色部分表示判斷相交 on ST_Intersects
--success --選出dzzg和ckyd兩個圖層的相交部分 --只選擇前5個 不然需要很多時間 SELECT b.bsm As bbsm, p.bsm As pbsm, ST_Intersection(ST_GeomFromText(ST_AsText(b.geom)), ST_GeomFromText(ST_AsText(p.geom))) As intersect_bp FROM dzzg b INNER JOIN ckyd p ON ST_Intersects(ST_GeomFromText(ST_AsText(b.geom)),ST_GeomFromText(ST_AsText(p.geom))) --WHERE ST_Overlaps(ST_GeomFromText(ST_AsText(b.geom)),ST_GeomFromText(ST_AsText(p.geom))) LIMIT 5 --從dzzg層中選出滿足以下條件的要素,並顯示相交部分 --1、標識碼大於2000 [感覺有部分的geom值有問題,所以限定一下搜索范圍] --2、與ckyd中標識碼為420的面相交 select a.bsm, st_astext(st_intersection(st_geomfromtext(st_astext(a.geom)),st_geomfromtext(st_astext(b.geom)))) as intersection from dzzg a inner join ckyd b ON ST_Intersects(ST_GeomFromText(ST_AsText(a.geom)),ST_GeomFromText(ST_AsText(b.geom))) where b.bsm=420 and a.bsm>2000 --查詢與已知面相交的圖形 SELECT bsm FROM dzzg where ST_Intersects( ST_GeomFromText('POLYGON((102.463 24.873,102.465 24.872,102.463 24.872,102.463 24.873))'), ST_GeomFromText(ST_AsText(geom))) and bsm>2700 --創建表 create table test(id1 int4,id2 int4); select addgeometrycolumn('public','test','shape',4610,'POLYGON',2); //添加幾何字段,4610表示坐標系,2表示二維要素 SELECT b.bsm As bbsm, p.bsm As pbsm, ST_AsText(ST_Intersection(ST_GeomFromText(ST_AsText(b.geom)), ST_GeomFromText(ST_AsText(p.geom)))) As intersect_bp FROM dzzg b INNER JOIN ckyd p ON ST_Intersects(ST_GeomFromText(ST_AsText(b.geom)),ST_GeomFromText(ST_AsText(p.geom))) LIMIT 3 --插入記錄
--函數st_geomfromtext 表示從“WKT描述”構建幾何圖形
insert into test(id1,id2,shape)
values( 21,699,st_geomfromtext('POLYGON((102.481862440151 24.9381407958162, 102.480064171822 24.9380431117968,102.480009386288 24.9381143096393, 102.481862440151 24.9381407958162))',4610) );--刪除已知表 drop table ckyd
初步學習,持續更新......
參考:http://blog.sina.com.cn/s/blog_722b6a020102v5m9.html