You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个带量化/变换的TopoJSON合并为统一文件?

背景

我最近在制作一幅美国地图,需要绘制对应Nielsen DMA区域的热力圈。最开始我用了simzhou的GitHub仓库里的Nielsen DMA TopoJSON来绘制热力圈和DMA边界,成品地图是这样的:

screen shot 2018-05-31 at 4 37 19 pm

问题

现在我需要换成州边界来展示,于是引入了@mbostock提供的美国州界TopoJSON文件。但用topojson.feature(us, us.objects.states).features(也试过topojson.mesh)绘制州边界时,画面完全混乱了。我几乎可以肯定是因为两个TopoJSON的transform值不一样,导致坐标缩放不匹配。

两个TopoJSON文件的transform对象差异如下:

US Atlas的transform对象

"transform": { "scale": [0.009995801851947097,0.005844667153098606], "translate":[-56.77775821661018,12.469025989284091] }

DMA TopoJSON的transform对象

"transform": { "scale": [0.00577894299429943, 0.002484260626062607], "translate": [-124.732975, 24.544237] },
已尝试方法

1. GeoJSON往返转换

我按照Bostock在相关讨论中提到的方法,尝试通过“GeoJSON往返转换”生成新的TopoJSON,他的原话是:

量化→非量化,以移除量化。这通常临时用于数据处理(如topojson.presimplify)。若要合并不同量化变换的拓扑,可通过GeoJSON往返实现。

我对每个JSON执行了以下步骤:

  • 将TopoJSON转换为GeoJSON:topo2geo nielsen_dma=us-dma-geo.json < us-dma-topo.json,得到带绝对坐标的要素集合。
  • 将新GeoJSON通过CLI转回TopoJSON:geo2topo nielsen_dma=us-dma-geo.json > us-dma-topo.json,此时两个JSON都没有transform属性,但有bbox。
  • 对两个JSON完成TopoJSON→GeoJSON→TopoJSON的往返转换。
  • 移除两者的bbox属性(这是可选属性)。
  • 将其中一个的几何集合添加到另一个:statesJSON.objects.nielsen_dma = dmaJSON.objects.nielsen_dma

现在我得到了包含nielsen_dma和states几何的TopoJSON,但绘制州边界还是混乱的:

screen shot 2018-05-31 at 5 18 13 pm

疑问:往返GeoJSON时是否未成功移除坐标量化?

可能相关问题:

  • Nielsen DMA地图不含阿拉斯加和夏威夷的几何,这会导致问题吗?

内容的提问来源于stack exchange,提问作者jaysonder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:55:35