1. 程式人生 > >postgresql + postgis 空間資料庫

postgresql + postgis 空間資料庫

記錄一些常用語句,隨時會增加

postgresql9.4, postgis2.1


建立postgis資料庫

1.在postgresql的bin目錄下開啟命令列,輸入:

createdb -U postgres -E UTF8 osm 

其中osm是資料庫的名稱,postgres是資料庫的使用者名稱。執行完成後我們開啟pgAdmin III客戶端重新整理,就可以看到剛才建立的資料庫。

2.createlang -U postgres plpgsql osm

一般這一步都不需要,預設已經安裝上去了。

3.新增PostGIS功能到資料庫,執行如下命令:

psql -U postgres -d osm -f “你PostgreSQL安裝路徑/share/contrib/postgis-2.1/postgis.sql”

控制檯會列印如下一些命令:


4.往spatial_ref_sys表中輸入你需要使用的空間座標系,如epsg4326:

INSERT into spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext) values ( 4326, 'epsg', 4326, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '
, 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]');
不同座標系的insert語句可以在這個網站找到 http://spatialreference.org/ref/epsg/4326/

點選PostGIS spatial_ref_sys INSERT statement連結可以得到insert語句(這裡有一個問題是主鍵是94326,在geoserver中不能自動識別,所以手動改成了4326)


建立資料表

CREATE TABLE stations ( id varchar(12) primary key, lonlat geometry(Point,4326), area float8, polygon geometry(Polygon,4326) );
  

插入資料

INSERT INTO stations (id, lonlat, area, polygon) VALUES ('A12345',ST_GeomFromText('POINT(121.50 31.22)',4326),22222.1234,ST_GeomFromText('POLYGON ((121.71436091670316 31.38080337674083, 121.70173615072089 31.388605486784197, 121.70751628677645 31.4199972067024, 121.71832867120243 31.437168981489133, 121.73193985623796 31.37984624401758, 121.71436091670316 31.38080337674083))',4326)); 
   

查詢資料

直接select * 查詢的話,lonlat和polygon的座標是無法閱讀的16進位制格式。 要以 WKT 文字顯示,使用 ST_AsText(the_geom) 或 ST_AsEwkt(the_geom) 函式。 也可以使用 ST_X(the_geom) 和 ST_Y(the_geom) 顯示一個維度的座標。
select id, area, ST_AsText(lonlat), ST_AsEwkt(polygon) from stations
   



開啟postgresql遠端連線



1.postgresql.conf
將該檔案中的listen_addresses項值設定為“*”,在9.0 Windows版中,該項配置已經是“*”無需修改。

2.pg_hba.conf
在該配置檔案的host all all 127.0.0.1/32 md5行下新增以下配置,或者直接將這一行修改為以下配置
host    all    all    0.0.0.0/0    md5 如果不希望允許所有IP遠端訪問,You can use your network/mask instead of 0.0.0.0/0 to only allow access from certain IP addresses.

3.關閉windows防火牆

匯出資料庫

pg_dump -h localhost -U postgres(使用者名稱) -d 資料庫名(預設時同用戶名) > /data/dum.sql(匯出路徑)

匯出某個表

pg_dump -h localhost -U postgres(使用者名稱) -d 資料庫名(預設時同用戶名)  -t table(表名) > /data/dum.sql(匯出路徑)

匯入資料庫

psql -U postgres(使用者名稱)  -d 資料庫名(預設時同用戶名) < /data/dum.sql(路徑)