跳至內容

d3-geo

地圖投影有時會以點轉換實作:一個函式,接收給定的經度 lambda 和緯度 phi,並傳回平面上對應的 xy 位置。例如,以下是球面墨卡托投影(以弧度表示)

js
function mercator(lambda, phi) {
  const x = lambda;
  const y = Math.log(Math.tan(Math.PI / 4 + phi / 2));
  return [x, y];
}

如果您的幾何圖形僅包含點,這是一個合理的方法。但對於多邊形和折線等離散幾何圖形呢?

當從球體投影到平面時,離散幾何會帶來新的挑戰。球形多邊形的邊緣是測地線(大圓的線段),而不是直線。除了方位角之外,測地線在所有地圖投影中都會變成曲線,因此精確的投影需要沿著每個弧線進行內插。D3 使用自適應採樣,靈感來自Visvalingam 的線簡化方法,以平衡精確度和效能。

多邊形和折線的多邊形投影也必須處理球體和平面之間的拓撲差異。有些投影需要切割穿越對蹠線的幾何圖形,而有些則需要將幾何圖形剪裁成大圓。球形多邊形也需要繞組順序慣例來確定多邊形的哪一側是內部:小於半球的多邊形,其外部環必須順時針旋轉,而大於半球的多邊形,其外部環必須逆時針旋轉。表示孔洞的內部環必須使用其外部環的相反繞組順序。

D3 使用球形GeoJSON在 JavaScript 中表示地理特徵。D3 支援各種常見不常見地圖投影。由於 D3 使用球形幾何來表示資料,因此您可以透過旋轉幾何圖形將任何方面套用到任何投影。

請參閱下列其中一項

  • 路徑 - 從 GeoJSON 產生 SVG 路徑資料
  • 投影 - 將球形幾何投影到平面
  • 串流 - 轉換(球形或平面)幾何圖形
  • 形狀 - 產生圓形、線條和其他球形幾何圖形
  • 球形數學 - 球形幾何的低階方法

提示

若要將 shapefile 轉換為 GeoJSON,請使用shp2json,它是shapefile 套件的一部分。請參閱命令列製圖,以了解 d3-geo 和相關工具的簡介。另請參閱TopoJSON,它是 GeoJSON 的延伸,更為精簡且編碼拓撲。

注意

D3 的繞行順序慣例也由 TopoJSONESRI shapefile 使用;不過,它與 GeoJSON 的 RFC 7946 慣例相反。另外請注意,標準 GeoJSON WGS84 使用平面等矩形坐標,而不是球面坐標,因此可能需要 拼接 以移除反子午線切口。