#GIS #地理資料格式 #JSON #GeoJSON #SHP #GPKG
文章目錄
常用的GIS資料交換格式系列{1}-GeoJSON(Geographic JavaScript Object Notation)
這個系列會介紹常見的GIS資料存儲交換格式,今天要分享的主角是GeoJSON(Geographic JavaScript Object Notation)
GeoJSON格式是一種用於表示地理空間數據的文本格式,以JSON(JavaScript Object Notation)標準作為基準進行定義。GeoJson格式可以用於存儲和交換地理資訊系統(GIS)中的點、線、多邊形等空間及形狀資訊,以及這些對象的屬性資料。GeoJson格式的優點是簡潔、易讀、易解析,並且與許多開源和商業的地圖平台和工具兼容。
對於常見的空間資訊格式介紹可以參考以下影片
1.什麼是JSON格式?
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,同時由名稱來看也可以發現其實際上就是JavaScript中常見的語法架構之一,目前常用於在不同系統之間傳輸和存儲數據。最大的優點是使用簡單的鍵值對(key-value pairs)結構來組織數據,因此可以輕易的解讀數據內容。
以下是 JSON 格式的一些特點和使用方式:
- 簡潔和易於理解:JSON 使用簡單明瞭的語法,易於人們閱讀和理解。它使用花括號
{}
表示對象(object),方括號[]
表示陣列(array),並使用冒號:
將鍵(key)和值(value)相關聯。- 支援多種數據類型:JSON 支援多種數據類型,包括字符串(string)、數字(number)、布林值(boolean)、對象(object)、數組(array)和空值(null)。這使得 JSON 非常靈活,可以表示各種數據結構。
- 嵌套結構:JSON 允許在對象中嵌套其他對象或數組,從而構建出複雜的數據結構。這種嵌套結構有助於組織和表示具有層次結構的數據。
- 平台移轉性:JSON 是一種獨立於平台和程式語言的數據格式,可以在各種不同的系統中使用和解析。幾乎所有的程式語言都提供了內置的 JSON 支援,使得數據的序列化和反序列化變得非常容易。
- 廣泛應用:JSON 在Web應用程序開發中被廣泛應用。常作為 API 的數據傳輸格式,用於將數據從伺服器傳輸到客戶端。
下面是一個簡單的 JSON 示例:
{ "name": "John", "age": 30, "city": "New York" }
在這個示例中,
name
、age
和city
是鍵(key),對應的值(value)分別是 “John”、30、”New York”,資料型態分別是字串、整數以及字串。
2.JSON格式的擴展-GeoJSON
GeoJSON格式的基本結構是一個JSON物件,主要包含兩個必須的屬性:Type和Coordinates。
Type屬性:
用於指定幾何對象的類型,它可以是Point(點)、LineString(線)、Polygon(多邊形)、MultiPoint(多點)、MultiLineString(多線)、MultiPolygon(多多邊形)或GeometryCollection(幾何集合)。coordinates屬性用於指定幾何對象的坐標,它是一個陣列(Array),其元素取決於type屬性的值。Coordinates屬性:
如果type屬性是Point,那麼coordinates屬性就是一個包含兩個或三個數字的數組,分別表示經度、緯度和可選的高度;如果type屬性是Polygon,那麼coordinates屬性就是一個包含至少一個數組的數組,每個數組表示一個環,每個環又是一個包含四個或更多數組的數組,每個數組表示一個頂點,每個頂點又是一個包含兩個或三個數字的數組。
GeoJson格式還支持其他可選的屬性,例如bbox(邊界框)、crs(坐標參考系)和properties(自定義屬性)。
在下面這個例子中,”type” 指定了這個對象是一個空間圖徵(Feature),”geometry” 部分指定了該圖徵的幾何形狀和坐標,而 “properties” 部分則包含該圖徵的屬性資料。
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [125.6, 10.1] }, "properties": { "name": "My Point" } }
除了單一圖徵外,GeoJson格式還支持另一種特殊的type屬性值:FeatureCollection。FeatureCollection是一種特殊的幾何對象,用來表示一個包含多個Feature的數組,稍後的範例中會介紹到。
****與其他常見的空間資格式簡單比較***
GeoJSON、Shapefile(shp)和GeoPackage 是三種常見的空間資料數據格式,它們都用於存儲和交換地理空間數據。以下是它們之間的比較:
- 開放性與廣泛支援:
- GeoJSON:GeoJSON 是一個開放的、基於 JSON 的地理數據格式,可以輕鬆地在多種程式語言和平台上使用。由於其開放性和簡潔的結構,它受到廣泛的支援和使用。
- Shapefile:Shapefile 是一種由 Esri 創建的地理數據格式,用於存儲地理要素的幾何形狀、屬性和索引。雖然 Shapefile 在地理資訊系統(GIS)領域中得到廣泛使用,但它是一個相對複雜和封閉的格式,不同的軟體工具對 Shapefile 的支援程度有所不同。
- GeoPackage:GeoPackage 是一個開放標準的地理數據庫格式,基於 SQLite 數據庫引擎。它結合了地理數據的幾何形狀、屬性和圖像等資訊,並提供了一個單一的文件(.gpkg)來存儲多個圖層和表。GeoPackage 受到許多 GIS 軟體工具的支援。
- 數據結構和能力:
- GeoJSON:GeoJSON 的結構簡單明瞭,支援點、線、面等幾何要素的表示,並可以包含與每個要素相關的屬性資料。然而,GeoJSON 不支援像素級別的圖像資料或拓撲關係。
- Shapefile:Shapefile 支援點、線、面等多種幾何要素,同時也能處理拓撲關係和多部分要素。它還具有較強的屬性表達能力和索引功能。然而,Shapefile 在處理大型數據時可能效能較差。
- GeoPackage:GeoPackage 具有比 GeoJSON 和 Shapefile 更豐富的能力。除了支援多種幾何要素和屬性資料外,它還可以包含拓撲關係、圖像資料、圖層和表之間的關聯等。
- 文件大小和性能:
- GeoJSON:由於其純文本格式,GeoJSON 文件相對較大,尤其在處理大型數據集時。解析和讀取 GeoJSON 數據的性能可能會受到影響。
- Shapefile:Shapefile 文件包含多個檔案(.shp、.shx、.dbf 等),並使用二進位格式存儲數據,因此可以更有效地處理大型數據集。然而,Shapefile 的索引和屬性表結構可能導致一些限制和效能問題。
- GeoPackage:GeoPackage 使用 SQLite 數據庫格式,可以有效地壓縮和管理地理數據,尤其對於大型數據集而言。它提供了快速的讀寫性能,並支援空間索引和查詢優化。
總的來說,GeoJSON 是一個簡單、開放的地理數據格式,適合輕量級的數據交換。Shapefile 是一個廣泛使用的格式,但較為複雜和封閉。GeoPackage 是一個強大的地理數據庫格式,提供了更豐富的能力和良好的性能。選擇使用哪種格式應根據具體的需求、工具支援和數據特性來決定。
3.如何在QGIS中使用和輸出GeoJSON格式
在 QGIS 中,您可以使用以下步驟來使用和輸入 GeoJSON 格式的數據,這邊採用先前製作空氣品質地圖的資料作為示範
1.首先我們打開QGIS後導入測站資料(測站資料.gpkg),目前測站點位資料是以GeoPackage進行儲存的,我們在該圖層按下右鍵->Export->Save Feature as,這時候我們可以選擇要儲存的檔案格式為GeoJSON。要載入GeoJSON檔案只要將該檔案拖曳進行QGIS頁面當中即可。
2.接下來我們可以利用文字編輯器打開儲存好的檔案(可用記事本、Notepad++、VScode等),架構如前兩小節所述的一樣:
Type採用的是FeatureCollection,用來表示包裹多個圖徵(測站點位);
CRS:實際上指定的是WGS84大地座標系統,GeoJSON則有自訂一套CRS表示方法
Features:用一個陣列包裹所有的測站點,Type:feature 表示圖徵 ; Properties則是表示所有的屬性資料
geometry:用來表示圖徵型態(點、線、面),以及儲存坐標資訊
結語
今天的分享就到這裡了,GeoJSON對於開發WebGIS相關應用來說非常重要,後續還會詳細介紹Shapefile以及GeoPackage和Geotiff等常見的空間資料格式,喜歡我的分享的話可以訂閱我的YT頻道以及FB專頁會分享更多有趣的應用