在開發地圖應用程式或網頁地圖服務時,行政區域界線的圖資是不可或缺的基石。然而,由內政部國土測繪中心提供的官方 SHP 向量圖資,雖然線條精緻度極高,但動輒數十 MB 的檔案大小對於行動裝置與網頁前端的渲染效能而言,卻是極其沉重的負擔。若直接將原始圖資載入,不僅會佔用大量記憶體,更會導致畫面滑動卡頓。因此,在實際投入開發前,我們必須對圖資進行「減肥」最佳化,並將其轉換為網頁與 App 更好處理的輕量化 GeoJSON 格式。
本篇實戰教學將帶領大家利用強大的線上地理資訊處理工具 Mapshaper,對政府資料開放平臺下載的台灣(鄉、鎮、市、區)行政區域界線圖資進行無損視覺質感的瘦身。我們除了會進行關鍵的簡化(Simplify)之外,還會教大家如何在 Mapshaper 中透過簡單的指令預先計算並注入外包矩形(Bounding Box,簡稱 BBox)。這個步驟能讓後端 SQLite 資料庫或前端判斷式在進行點選定位與動態疊圖時,利用 BBox 進行極速的第一階段空間篩選,大幅優化應用程式的整體效能!

▲ 首先,我們前往「政府資料開放平臺」,搜尋並找到內政部國土測繪中心提供的「鄉鎮市區界線(TWD97經緯度)」資料集。在資料資源下載網址處,點擊藍色的「SHP」按鈕,將台灣官方最新修正的行政區域界線壓縮檔下載至電腦中。

▲ 將下載的壓縮檔解壓縮後,會看到兩組圖資檔案。我們必須選取全台灣範圍的 TOWN_MOI 核心圖資,包含 .shp、.shx、.dbf、.prj 這四個同名但不同副檔名的關鍵檔案,並將它們一併拖曳準備匯入 Mapshaper 網頁中。

▲ 開啟瀏覽器進入 Mapshaper,將剛才選取的四個關鍵檔案一起拖曳進網頁匯入,畫面上便會立即渲染出精確的中華民國台灣(包含外島地區)行政區劃輪廓地圖,這代表檔案已成功被網頁讀取。

▲ 為了進行圖資減肥,點擊網頁右上角的「Simplify」按鈕。在彈出的選項中,將 Method 選擇為「Visvalingam / weighted area」,此演算法能更完美地保留海岸線與邊界細節,接著直接點擊藍色的「Apply」按鈕。

▲ 此時畫面上方會出現滑桿,我們可以左右拖動來調整簡化比例。針對網頁服務與精緻的疊圖用途,建議將比例調整至 20.0% 左右。這樣既能大幅縮減圖資檔案體積,又能在放大地圖時維持邊界線條的流暢自然,不產生鋸齒感。

▲ 接下來進行空間查詢效能的關鍵優化。點擊網頁左側的「Console」按鈕開啟命令列視窗,並在底部輸入指令 -each "this.properties.bbox = this.bounds" 後按下 Enter。這會自動幫每個行政區預先計算出外包矩形範圍並塞入屬性中。

▲ 最後,點選網頁右上角的「Export」按鈕,在檔案格式(File format)中選擇最適合網頁與 App 開發使用的「GeoJSON」,完成後點擊「Export」下載。我們就成功獲得了一份兼具高解析度、內含 BBox 且完美瘦身的台灣行政區界線圖資!
《上一篇》FileZilla:將檔案大小改為以 KB、MB、GB 顯示 









留言區 / Comments
萌芽論壇