PostGIS 筆記一:簡(jiǎn)單入門

PostGIS 筆記一:簡(jiǎn)單入門

Postgis是基于PostgreSQL的空間擴(kuò)展。所以你懂得PostgreSQL不代表你就懂得Postgis,你懂得Postgis也不代表你就懂得PostgreSQL。如果你看過(guò)我關(guān)于Spatialite的筆記,你具備了一定空間數(shù)據(jù)庫(kù)的基礎(chǔ)。

使用

Postgis分為兩個(gè)大版本,它們之間有較大幅度的更新,網(wǎng)上很多教程都是基于舊版本的postgis。在安裝的階段當(dāng)中,新版本的postgis會(huì)出現(xiàn)“template_postgis模板不存在”的問(wèn)題。解決方案有兩個(gè):

CREATE EXTENSION postgis

同樣,很多第三方庫(kù)也會(huì)區(qū)分postgis的版本,專門針對(duì)2.0版本后進(jìn)行定制。

運(yùn)用

空間字段可以分為geometry和geography兩種,大部分情況使用滿足opengis標(biāo)準(zhǔn)的geometry。

創(chuàng)建空間字段

方法一

打開(kāi)空間擴(kuò)展后,前提是你首先創(chuàng)建一張表,運(yùn)用opengis標(biāo)準(zhǔn)推薦的方法創(chuàng)建空間字段。

SELECT AddGeometryColumn ('scheme','cities', 'the_geom', 4326, 'POINT', 2);

缺點(diǎn)在于這是一個(gè)擴(kuò)展的方法,表名、字段名等參數(shù)是區(qū)分大小寫的。

方法二

也可以使用geometry type的方法,同時(shí)創(chuàng)建表。

CREATE TABLE ROADS ( ID int4, ROAD_NAME varchar(25), geom geometry(LINESTRING,4326) );

或者修改表

ALTER TABLE roads ADD COLUMN geom2 geometry(LINESTRINGZ,4326);

插入一條數(shù)據(jù)

由于空間數(shù)據(jù)的描述相對(duì)復(fù)雜,空間數(shù)據(jù)的插入需要依靠別的數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換。ST_GeomFromText是從文本進(jìn)行轉(zhuǎn)換。

INSERT INTO roads (road_id, roads_geom, road_name) VALUES (3,ST_GeomFromText('LINESTRING(192783 228138,192612 229814)',-1),'Paul St');

或者用wkt,可以參考WKT&WKB 筆記一:格式介紹。

INSERT INTO table ( SHAPE, NAME )VALUES ( GeomFromEWKT('SRID=4326;POINTM(116.39 39.9 10)'), '北京' )

讀取一條數(shù)據(jù)

顯示數(shù)據(jù)可以將空間字段保存成不同的格式。

 SELECT id, ST_AsText(the_geom), ST_AsGeoJson(the_geom), ST_AsEwkt(the_geom), ST_X(the_geom), ST_Y(the_geom) FROM cities;

用Geography數(shù)據(jù)格式不用Geometry數(shù)據(jù)格式

新型的GEOGRAPHY格式允許你用longitude/latitude coordinates存數(shù)據(jù),但是有一個(gè)代價(jià):針對(duì)GEOGRAPHY很少方法被定義,而針對(duì)GEOMETRY相對(duì)較多。而且這些方法都相對(duì)來(lái)說(shuō)更消耗CPU。

你選擇這個(gè)數(shù)據(jù)類型必須是因?yàn)槟銘?yīng)用的情況。你的數(shù)據(jù)如果是全球或者大陸范圍或者是一個(gè)洲,一個(gè)國(guó)家或者一個(gè)城市。

  • 如果數(shù)據(jù)在一個(gè)很小的范圍內(nèi),你可能需要選擇一個(gè)恰當(dāng)?shù)耐队?,用Geometry是最好的解決方案,因?yàn)樾阅軆?yōu)先和功能可用。
  • 你的數(shù)據(jù)是全球或者大范圍的,你會(huì)發(fā)現(xiàn)GEOGRAPHY讓你建立一個(gè)系統(tǒng)不用擔(dān)心投影信息。你可以用經(jīng)緯度存起你的數(shù)據(jù)。
  • 你不懂得投影,你也不想去學(xué)投影,你可以接受GEOGRAPHY的方法缺失,你應(yīng)該選擇GEOGRAPHY而不是GEOMETRY。因?yàn)檫@樣更方便你去加載用經(jīng)緯度數(shù)據(jù)。

來(lái)自PostGIS_Geography VS Geometry

空間分析方法

PostGIS_GeographyFunctions

參考

PostgreSQL的postgres_fdw跨庫(kù)使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容