postgis學習筆記

2021-07-06 11:19:28 字數 2152 閱讀 5357

一、transforming from srid 900913 to 4326 with postgis

alter table planet_osm_point alter column way type geometry(point,4326) using st_transform(way,4326);

二、用postgis查詢指定範圍內的興趣點

select t.osm_id,st_astext(t.way) from planet_osm_point t 

where st_dwithin(

st_transform(st_geomfromtext('point(1.99 7.18)',4326),26986),

st_transform(t.way,26986), 1516) 

order by st_distance(st_geomfromtext('point(-87.71 43.741)',4326), t.way);

st_distance:即給定兩個空間點計算兩點間的距離。計算結果的單位與你的空間資料的參考係有關。

如果你使用的是4326(wgs84)這個座標系的話他是以度為單位的。要想轉成公尺為單位的話還得做乙個轉換,下面會提到:

geocs代表的是地理座標系,也就是以經緯度表示的座標系統,例如4326;

projcs代表的是投影座標系,它是通過一種演算法把球面座標系轉成平面座標系,以便計算,一般是以公尺為單位表示,例如26986;

因此,在求兩點之間的距離時,由於存的資料都是經緯度,因此它參考的是geos,要想得到以公尺為單位的結果,首先要把它轉成projcs,可以通過st_transform來實現。

檢視postgis手冊geometry st_transform(geometry g1, integer srid);

第乙個引數是原來的幾何物件。第二個引數為要把他轉換到這個投影所代表的座標系下。

這時我們只要找乙個單位是公尺的投影座標系把他轉換過去就好了,例如:

select st_distance(

st_transform(st_geomfromtext('point(-87.734087560562 43.770129071141)',4326),26986),

st_transform(st_geomfromtext('point(-87.747382933006 43.759234252055)', 4326),26986));

這個查出來的結果即是以公尺為單位的兩點間的距離了。

現在在說如何查詢一定範圍內的點。

這裡用到了postgis裡的這個函式:boolean st_dwithin(geometry g1, geometry g2, double precision distance_of_srid);

第乙個引數為參考物件,第二個引數為目標物件,第三個引數為距離(同樣如果是地理座標系單位是度。投影座標系單位是公尺)。

即以g1為中心,半徑為distance_of_srid,這個範圍內包不包含g2,如果包含返回true,否則即為假。

如下給了乙個完整的例子。查詢以(-87.71 43.741)為中心半徑1516公尺範圍內的興趣點,之後按與這個中心點由近到遠的順序排列結果。

select t.feat_id,astext(t.geometry) from gis_site t 

where st_dwithin(

st_transform(geomfromtext('point(-87.71 43.741)',4326),26986),

st_transform(t.geometry,26986), 1516) 

order by st_distance(geomfromtext('point(-87.71 43.741)',4326), t.geometry);

結果:

24;"point(-87.718330082111 43.753078987035)"

17;"point(-87.726085716036 43.736952192682)"

18;"point(-87.726085716036 43.736952192682)"

找到了三個點

三、osm2pgsql --create --cache 2048 --style /usr/local/share/osm2pgsql/default.style --database postgis /home/benin-latest.osm.

PostGIS教程二 PostGIS的安裝

目錄 二 安裝postgresql 三 安裝postgis 在安裝postgis前首先必須安裝postgresql,然後在安裝好的stack builder中選擇安裝postgis元件。這裡使用的postgresql版本是9.6。安裝postgresql安裝完成後,提示執行stack builder...

PostGIS教程二 PostGIS的安裝

目錄 二 安裝postgresql 三 安裝postgis 在安裝postgis前首先必須安裝postgresql,然後在安裝好的stack builder中選擇安裝postgis元件。這裡使用的postgresql版本是9.6。安裝postgresql安裝完成後,提示執行stack builder...

POSTGIS常用函式

1,基本操作函式 addgeometrycolumn 給乙個已存在屬性資料表增加乙個幾何字段 geomtry column schema name 指表的模式的名字,srid 必須是乙個整數指對應於 spatial ref sys 表,type必須是乙個大寫的字串,用來描述幾何型別,例如 polyg...