# 1.postgis概述 - SQL為互動式語言(輸入指令即回傳)、內嵌式語言(可內嵌在其他語言,例如PHP) - SQL有四大語言:資料查詢語言(DQL)、資料定義語言(DDL)、資料操縱語言(DML)、資料控制語言(DCL) - 資料定義語言 (DDL):CREATE、ALTER、DROP - 資料操縱語言 (DML):INSERT、UPDATE、DELETE - 資料查詢語言 (DQL):WHERE子句… #### 1.1 座標紀錄與資料索引 - spatial data type:geometry、geography、raster、topology - geometry:point、linestring、polygon、multipoint、multilinestring、multipolygon、**geometrycollection** - OGC定義兩種描述幾何的格式,WKB(Well-Know Binary)、**WKT(Well-Know Text)** - ++常用++索引:GiST、R-Tree :::info PostgreSQL支持索引接口:B-Tree、R-Tree、GiST、BRIN、hash、gin、[*sp-gist](https://github.com/digoal/blog/blob/master/201706/20170627_01_pdf_003.pdf)、brin、rum、bloom、zombodb、bitmap index、varbitx ::: #### 1.2 patial_ref_sys表 - 存放OGC規範的空間參考,一般以SRID識別每個空間參考 - 空間參考的定義包含兩個部分: - srtext以字串描述的空間參考 - proj4text以字串描述PROJ.4投影定義 #### 1.3 在POSTGIS創建一張表 - 使用FME - 透過pgAdmin的query tool下指令,如下 ```SQL= DROP TABLE IF EXISTS public.polygontest; CREATE TABLE public.polygontest ( name varchar(10), description varchar(50), town varchar(10), X double precision, Y double precision, gid serial PRIMARY KEY, geom geometry(Multipolygon,3826) ); CREATE INDEX idx_polygontest_geom ON public.polygontest USING GIST(geom); ``` #### 1.4 POSTGIS geometry check - 空間資料是否合法,有以下兩種方式:使用ST_IsValid()、在空間欄位中加入constraint ```SQL= -- 方法1:使用ST_IsValid() SELECT ST_IsValid('LINESTRING(0 0, 1 1)'), ST_IsValid('LINESTRING(0 0,0 0)') -- 方法2:在既有表格的空間欄位中加入constraint ALTER TABLE cities ADD CONSTRAINT GeomValidCheck CHECK (ST_IsValid(geom)) ``` - 方法1適合用來檢查既有資料,CPU占用資源較大;方法2適合用在資料表變動頻率高,當我們嘗試輸入一個不合法的幾何型態時,會得到一個錯誤。 ###### tags: `postgreSQL` `postGIS`