世界地图-D3.js 版本

技术点

* projections 投影

投影函数,把[longitude 经度, latitude 纬度]转化成坐标[x, y]。

D3 已内置很多投影函数,面积(例如 geoAzimuthalEqualArea 和 geoConicEqualArea)、距离(例如 geoAzimuthalEquidistant 和 geoConicEquidistant)、角度(例如 geoEquirectangular 和 geoMercator)。

invert() 方法,可以把坐标[x, y] 反转回经纬度。

* 图形 svg|图像 canvas 生成

svg 优点:方便交互。

canvas 优点:渲染速度快,内存效率高。

D3 官网示例分析

分析文件

D3 官网示例来自 observablehq.com 公司,采用 iframe 跨域 + next 构建。

断点捕获 iframe 通信,主要是 type: bundle 的通信数据,也可以直接观察 Sources 标签下的 eval 打包模块 。

调整优化

替换地图数据,改用小比例尺 1:110m,包含国家边界数据,改用 D3.json() 加载。绘制国家边界线,拖拽、缩放交互时因性能消耗较大,使用低精度地图数据,不绘制国家边界线。升级 D3 到 v7 版本。提取开源库 @observablehq/plot 中 projection,投影下拉框改原生。



改写 render 渲染函数,canvas -> svg

更新于[2026-08-10]



文章参考