iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 6
0
Modern Web

30天打造我的WebGIS系列 第 6

[Day 6] 常見的GIS資料格式

前兩天我們先用CARTO(CartoDB)實作了一些基本的GIS資料視覺化,接觸了GIS資料。

延續 [Day3] 談互操作性及Web Map Service 標準議題,我們在處理資料時可能會遇到各種GIS格式,今日就來攻略幾種web常用的GIS資料格式

先釐清一下資料型態

根據教科書,所謂GIS資料就是具備空間資訊的資料,依照資料型態可以分成兩類

  • 網格資料(raster)
  • 向量資料(vector)

網格資料:

網格資料指的通常是影像類型等規則網格的資料,例如衛星影像、高程模型(用來表示地形),以像元(pixel)為基礎,每個pixel會有一些資訊如R,G,B, 或是深度、高度,等,賦予每一個pixel對應的空間坐標,就是一個網格式GIS資料,而賦予坐標的做法通常是定義網格大小、起始網格坐標、以及方向,定義這些資訊的檔案稱作 world file,常用的格式如geotiff、tiff、jpg、bmp等影像檔具有world file的影像資料都屬於此類。

向量資料:

比起網格式資料可能都是使用專業人員處理好的資料,向量式資料在應用上常見得多,又依表示方法分成:點、線、面(註)

註:點線面是統稱,在2D 又可細分為multi points, multi polygon...etc. 在3D GIS的世界,相關格式另有一片天....。


本篇主要談的資料格式屬於向量式資料

geojson (http://geojson.org/)

geojson我們在第二天的範例中就已經在地圖上介接了一個開放資料範例,而跟前幾天提到GIS常用的OGC標準不同,geojson非OGC標準,是由IETF(Internet Engineering Task Force)組織訂定的,因為是json物件的方式表現,使用起來可說是簡單好用,於D3.js與WebGIS都廣為流通,目前版本的geojson(RFC 7946)具有以下特徵:

  • JSON,流通方便
  • 一個geojson結構如下:
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}
  • 幾何樣態(geometry Type)包含了:Point, LineString, Polygon, MultiPoint, MultiLineString, and MultiPolygon
  • 坐標(coordinates):不同幾何形態有不同坐標值記錄方式,可以參考 wiki範例,而且並沒有定義投影坐標系統的欄位,通常默認為EPSG4326(也就是wgs84經緯度)
  • 屬性(properties):在properties以key-value方式記錄每一筆資料的屬性欄位

ESRI shapefile(shp)

shapefile在GIS領域廣為使用多年,目前被廣泛使用中,它是GIS應用軟體供應商ESRI定義的格式,亦已部分公開相關結構,大多數GIS軟體(如QGIS、Arcgis等)也都支援。
要解析shapefile,可參考github上有許多shapefile library,而一個shapefile通常包含很多附屬檔案(wiki):

  • Shapefile圖形格式 (.shp)
  • Shapefile圖形索引格式(.shx)
  • Shapefile屬性格式(.dbf),屬性資料庫
  • Shapefile投影格式(.prj),紀錄坐標系統
  • Shapefile空間索引格式(.sbn)

一個shapefile只會有一種幾何形態,共支援Point, Polyline, Polygon, 等13類的幾何型態資料,更多shape資料問題可參考wiki

這邊要特別分享一個小小使用經驗:

shapefile因為具有(.prj)檔案記錄投影坐標系統的特性,與geojson(註:geojson也有定義CRS)有個不同的地方在於它可以使用不同的坐標系統(一般來說geojson都是使用ESPG4326,也就是wgs84經緯度),我們拿到一份shapefile可能會是各式各樣坐標系統,這些坐標值是存在shp內,當我們偶爾會拿到沒有prj檔的shapefile時,可能會遇到對於shp內坐標值到底是啥而一頭霧水的現象,這時便需要經驗判斷資料的坐標系統喔!(關於坐標系統,預計過兩天再來攻略^^)

kml

kml是OGC規範格式,廣泛用於Google平台上,它是xml方式表達GIS資料,並且包含了其在Google Earth上的樣式資料,基本上都使用ESPG4326的經緯度坐標,範例如下(wiki)

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark>
  <name>New York City</name>
  <description>New York City</description>
  <Point>
    <coordinates>-74.006393,40.714172,0</coordinates>
  </Point>
</Placemark>
</Document>
</kml>

在我過去使用kml的經驗,Google Earth對於kml在樣式屬性上實在非常具有彈性,他甚至可以定義其在Google Earth上的Popup內容、視角、事件等等,個人覺得算是很單純但又很難掌握(ㄊㄠˇ 一ㄢˋ)的格式(樣式部分)

topojson

topojson是geojson的擴充,大致上是基於geojson但具資訊壓縮並考量位相關係的(topology)的資料格式(請參考topojson spec文件),廣泛用於webgis及d3.js資料視覺化(作者同時也是d3.js作者Mike Bostock),關於topojson詳細的規格可以直接參考文件,在這邊我們先快速來看看一個Taiwan.TopoJSON範例(因長度關係,請直接前往github上的範例)。

拿到資料後,我們把資料複製到json edirtor檢視:
https://ithelp.ithome.com.tw/upload/images/20171225/201078169w5CgPveJz.jpg

從資料格式架構中可以看到,topojson相較於geojson多增加了幾個項目:bbox、transform、arcs

  • bbox: 記錄的是這份geojson的邊界
  • transfrom: 記錄兩個尺度兩個平移參數,在topojson中為了減少記錄位數,坐標都是用int方式記錄,再靠transform參數還原
  • arcs: 記錄資料中的邊,arcs分兩個部分,一個是最外層的arcs記錄所有的邊第二個是每個幾何物件中的arcs記錄的為arc index,每個幾何物件內的arcs都參照最外層arcs,如此是以共邊的概念記錄每個物件的幾何,減低資料量並保有位相關係(topology)
  • objects: GIS資料物件陣列,包含幾何及屬性

後記

geojson、shapefile、kml在WebGIS中最常被用到,資料交換也常依賴這幾類格式,大多數WebGIS平台都支援這些資料形式,因此實務上一定會碰到這些格式及轉換,今天先介紹這些格式,明天預計來攻略這幾類的資料轉換(這應該才是最重要的^^)。


上一篇
[Day 5] 資料視覺化工具-CARTO part2
下一篇
[Day 7] 常見的GIS資料格式-轉換篇
系列文
30天打造我的WebGIS30

尚未有邦友留言

立即登入留言