閩東馬祖之旅(一)北竿

后澳聚落
圖一、后澳聚落,交叉排列砌法

這兩年多來因為支援燕鷗保護區的計畫而有機會在馬祖列島中的一些離島調查,不只是在保護區的調查能看到一些特別的植物與稀有的鳥種, 還能在四鄉五島間看到許多傳統的閩東建築、自然的沙灘、礁岩與寬闊的海景,經過這幾次造訪後,我深深愛上了這個國境最北端的列島。但馬祖在東北季風盛行的時候,常常被霧鎖而關島(當地人都會開玩笑說,來馬祖幸運的話,都可以獲得「關島數日遊」),但這個天然的條件卻像是個天然防護罩(當然軍事管制也是另外一個防護),保存了許多自然景觀。五月初保護區調查完之後,想說每次都去工作這次純粹散步旅遊行程好了,但天氣一直都很不穩定,直到確認六月初和鳥會的家燕調查行程後,才買了機票、訂民宿把行程規劃好。

繼續閱讀 “閩東馬祖之旅(一)北竿"

廣告

將 ESRI Shapefile 轉成 postgis 格式匯入 PostgreSQL 資料庫

可以用 QGIS 的 SPIT 外掛,或是 shp2pgsql 指令,使用 SPIT,圖形介面很簡單,就不用多介紹了

Screen Shot 2012-12-25 at 1.05.25 AM

 

 

用 shp2pgsql 最簡單

shp2pgsql -I -D -c -s 3826 filename.shp > filename.sql  (-s 代表座標系統,常用的是 WGS84 (4326) 或 TWD97 TM2 (3826) )

psql -d database -f filename.sql

利用空間資料庫計算多邊形交集以及計算面積

話說「交集」是個常常被掛在嘴邊的語句,像我和一口巾工讀生們往往都沒有交集,他們不了解我的明白,我也不了解他們的明白啊。交集在幾何上可以用下圖來簡單表示,但是在 GIS 計算交集上,除了空間上的交集外,還有的資料表的交集(ex: join),這個我就不多花篇幅談。Image

以下簡單介紹用空間資料庫的概念來實作多邊形的面積以及交集

一、準備材料:

二、步驟

qgis_layout

上圖是八色鳥在的分布範圍(圖層: range_fairy_pitta,橘色虛線淺綠色底的多邊形區域,簡稱 sp),深綠色是世界的陸域地圖(圖層:map_world,資料屬性表中有國家名稱(cntry_name)以及大陸名稱(continent),簡稱 world),淺橘色則是 sp 和 world 交集的區域。當然我知道做這個很簡單,從 ArcMap 中的工具箱選擇交集工具就可以做出來了,或是用 QGIS 的向量外掛(fTools)的 Geoprocessing Tool/Intersect 即可做出來,但是 GUI 用起來就是有不踏實感 XD 所以我們用空間資料庫來實作!

繼續閱讀 “利用空間資料庫計算多邊形交集以及計算面積"

Postgis 匯入大檔案的 raster

postgis 在 2.0 版以後支援的 raster 的格式,可以透過 raster2pgsql 來轉成 postgis format,但如果 raster 檔案很大,出現記憶體不足的問題時,如

$ psql -d vegetation -f twdtm_asterv2_30m-tm2_twd97.sql 

BEGIN
psql:twdtm_asterv2_30m-tm2_twd97.sql:2: NOTICE: CREATE TABLE will create implicit sequence “twdtm_asterv2_30m-tm2_twd97_rid_seq" for serial column “twdtm_asterv2_30m-tm2_twd97.rid"
psql:twdtm_asterv2_30m-tm2_twd97.sql:2: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index “twdtm_asterv2_30m-tm2_twd97_pkey" for table “twdtm_asterv2_30m-tm2_twd97″
CREATE TABLE
psql:twdtm_asterv2_30m-tm2_twd97.sql:5: ERROR: out of memory
DETAIL: Cannot enlarge string buffer containing 1073741808 bytes by 8191 more bytes.
CONTEXT: COPY twdtm_asterv2_30m-tm2_twd97, line 1
psql:twdtm_asterv2_30m-tm2_twd97.sql:6: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:twdtm_asterv2_30m-tm2_twd97.sql:7: ERROR: current transaction is aborted, commands ignored until end of transaction block
ROLLBACK

此時可以啟用 tile 選項 (-t 寬x高) 來裁切成更小的 size ,如 100×100 就是切成寬 100 個、高 100 個小尺寸的 raster: (-s 3826 代表 EPSG:3826 座標系統, -I 代表建立空間索引, -Y 代表用 COPY 的方式取代 INSERT 的 SQL 指令匯入資料 

$ raster2pgsql -s 3826 -t 100×100 -I -Y twdtm_asterv2_30m-tm2_twd97.tif > twdtm.sql

參考資料:

http://postgis.refractions.net/docs/using_raster.xml.html

QGIS 更新屬性表以及用簡單的正規表示式(regular expression)來選擇資料之值

Qgis 中更新屬性表,簡單說就是類似像 SQL 語言去更新或計算某些欄位的資料。

先將屬性表開啟,然後開啟編輯模式(toggle edit mode)之後,選欄位計算(field calculator),如下圖

qgis attribute table

接下來就可以進入欄位計算的介面。如果你想計算後的結果建立一個新的欄位,就選擇建立新欄位(create a new field),並設定好該欄位的名稱、類型(例如整數、浮點數等),精確度等,之後就可在運算式(expression)處輸入你想要的值。

 

 

 

繼續閱讀 “QGIS 更新屬性表以及用簡單的正規表示式(regular expression)來選擇資料之值"

QGIS 處理 ESRI shape file 編碼問題

起源 GDAL >= 1.9 之後處理編碼上有些問題

$ echo “export SHAPE_ENCODING=UTF-8″ >> ~/.profile   (適用於 Unix 系列)

ogr2ogr 的話,可以加入 -lco ENCODING=UTF-8 參數做轉換,Windows 上面有人提到可以用 codepage,不過太複雜太麻煩了,還是直接設定這個比較快。據說 QGIS 1.9.x 之後會有修正。

Reference:

http://hub.qgis.org/issues/5911
http://hub.qgis.org/issues/5982
http://gis.stackexchange.com/questions/37342/shape-file-encoding-problem-in-qgis-1-9-0-built-with-gdal-1-9-2

mac 上面的 homebrew

延續著 BSD 的傳統,在 mac 上面有許多類似的套件管理系統,像是  FinkMacPorts 或是 Homebrew 等,我推薦使用 homebrew 是因為他是用 ruby 寫成的,簡單又有彈性,以下記錄 homebrew 的使用(真的很容易上手!)。

1. 先安裝 xcode (從 Appstore 安裝,是免費的)

2. 安裝 homebrew

首先在 Terminal 中輸入:

ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"

3. 設定 xcode license

$ xcodebuild -license

4. 使用前先更新 homebrew 的 formula (就把它看成是菜單)

$ brew update

之後要安裝其他的軟體則是使用

$ brew install software

既然有安裝,就會有解除安裝

$ brew uninstall software

搜尋特定軟體名稱

$ brew search software 

如果搜尋到在其他的 repository 的軟體,可以用 brew tap other_repository 加入

[HOWTO] 匯入 ESRI Shapefile 至 PostgreSQL 空間資料庫(postgis)

一、安裝

安裝有好幾種方法,而且都很簡單,如果是 *BSD 平台,就用 ports / pkg_add 之類的套件管理系統,GNU/Linux 例如 Debian ubuntu 就用 aptitude / apt-get 之類的,Mac 就用 Macports 或homebrew。Windows 就去抓 package 自己安裝,例如 http://www.postgresql.org/download/windows/,就…自己看!

要安裝的東西有兩個,第一個是 DBMS,即 PostgreSQL,第二個則是 PostGIS,則是讓 PostgreSQL 具有支援空間資料庫的功能。建議安裝 PostgreSQL > 9.1 版,以及 PostGIS 2.0 以上的版本(因為之後設定比較方便,建議用 2.0 以上版本)。另外如果你是使用 EnterpriseDB 公司所出品的安裝程式,就可以在安裝完 PostgreSQL 後利用 Stack Builder 來選擇延伸模組。

二、設定

先建立一個新的資料庫,可以用 pgAdmin ,或是用 PostgreSQL 的 shell 來建立一個名為 test 的資料庫,然後擁有者是你(選項 -O),並且這個資料庫是 utf8 編碼:

# createdb -E utf8 -l en_US.UTF-8 -O yourusername test

接下來建立 postgis extension,先進入 PostgreSQL shell

# psql -d test

建立 postgis extension

test=# CREATE EXTENSION postgis ;

test=# CREATE EXTENSION postgis_topology;

這樣就讓 PostgreSQL 建立 postgis 支援了!

三、匯入 shape file

這個步驟可以選擇用 QGIS 的 SPIT 延伸套件來匯入,

或是用指令的 shp2pgsql 來匯入:

# shp2pgsql -g geom -W big5 -I -s 3826 -D shpfile > table_name.sql

如果轉換都沒有問題的話,就匯入 psql

# psql -d test -f table_name.sql

之後就可以用 QGIS 連 postgis 資料庫了,如下圖:

Image

另外, postgis 也支援 raster 格式,同樣可以用 raster2pgsql 來匯入

raster2pgsql -s 3826 -t 100×100 -I -C -M raster.tif  | psql -d test

《十行》

我將溫柔擲進森林

瞇眼看她颺於

這方樹影婆娑
那方峭岩歷歷

我將離別推進海洋

彼岸霧靄氤氳
吾港船帆淋漓

歸宿在離別後
迷方於路途知

酒酣延續,溫柔依舊。