D3.js 錯誤繪製GeoJSON:纏繞順序問題
當嘗試使用geoJSON 資料視覺化俄羅斯地區時,程式設計師遇到了一個問題其中D3.js 繪製單一黑色矩形而不是所需的地圖輪廓。這種差異是由於 geoJSON 檔案中座標的纏繞順序問題所引起的。
了解纏繞順序
GeoJSON 座標可以順時針或逆時針順序排列,表示形狀的內部或外部。大多數工具和驗證器都會忽略此順序,但 D3.js 使用橢圓體數學,這需要正確纏繞以避免創建覆蓋整個地球的倒置多邊形。
識別問題
檢查 SVG 路徑後,很明顯,有些路徑是準確繪製的,而另一些路徑覆蓋了除預期空間之外的整個星球。這是因為資料包含順時針和逆時針纏繞的組合,導致 D3.js 將倒多邊形視為地球上非目標區域的所有物體。
解決問題
要解決此問題,必須重新排序座標。一個方便的解決方案是利用 turf.js 函式庫:
var fixed = features.map(function(feature) {
return turf.rewind(feature,{reverse:true});
});
這將倒轉每個多邊形以遵循 geoJSON 規範指定的正確纏繞順序。然而,D3.js 使用相反的纏繞順序,因此反向參數設定為 true。
調整地圖視圖
固定纏繞順序後,進一步調整可以用來增強地圖的外觀。透過在投影中加入 fitSize 方法,可以對地圖進行縮放和平移,以獲得更合適的視圖。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3