Json 使用两个量化/转换的拓扑子构建统一的拓扑子? 背景
我正在绘制一张地图,显示美国的地图。在这张地图上,我绘制了与尼尔森DMA地形相对应的热圈 我使用的第一个topojson是Nielsen DMA topojson(来自simzhou的repo),它可以在美国地图上直观地绘制这些热循环 下面你可以看到这张地图,上面有DMA热环,还有完全由尼尔森DMA拓扑构建的DMA边界线 问题: 我遇到的问题是试图画州边界线,而不是这些DMA边界线。我带来了@mbostock为我们提供的“”。当通过Json 使用两个量化/转换的拓扑子构建统一的拓扑子? 背景,json,d3.js,geojson,topojson,quantization,Json,D3.js,Geojson,Topojson,Quantization,我正在绘制一张地图,显示美国的地图。在这张地图上,我绘制了与尼尔森DMA地形相对应的热圈 我使用的第一个topojson是Nielsen DMA topojson(来自simzhou的repo),它可以在美国地图上直观地绘制这些热循环 下面你可以看到这张地图,上面有DMA热环,还有完全由尼尔森DMA拓扑构建的DMA边界线 问题: 我遇到的问题是试图画州边界线,而不是这些DMA边界线。我带来了@mbostock为我们提供的“”。当通过topojson.feature(us,us.objects.
topojson.feature(us,us.objects.states).features
(我也尝试过topojson.mesh
)绘制州边界时,就会出现问题。我99%确信这是因为两个json文件使用不同的transform
值,因此位置/坐标在不同的尺度上进行转换
以下是两个JSON:尼尔森DMA和美国
您可以在下面看到变换对象的不同之处:
变换对象来自美国地图集
"transform": {
"scale": [0.009995801851947097,0.005844667153098606],
"translate":[-56.77775821661018,12.469025989284091]
}
从DMA转换对象
"transform": {
"scale": [0.00577894299429943, 0.002484260626062607],
"translate": [-124.732975, 24.544237]
},
这是我到目前为止所做的
方法:
1.通过GeoJSON往返
正如Bostock所详述的,我尝试“通过GeoJSON的往返”创建一个新的topoJSON
量化→ 非量化,以消除量化。这通常是为了临时处理数据(例如,topojson.presimplify)。我想您可能需要这样做,这样您就可以将拓扑与不同的量化转换结合起来,但您可以通过GeoJSON往返来实现这一点
对于每个JSON
1.我将它们从topoJSON转换为geoJSON。
topo2geo-nielsen_dma=us-dma-geo.json
现在,对于每个json,我们都有一个具有绝对坐标的特性集合。
2.使用新的geoJSON,然后通过CLI将它们转换回topoJSON。
geo2topo-nielsen_dma=us-dma-geo.json>us-dma-topo.json
两个JSON不再具有transform
属性,但它们确实具有bbox
。
3.现在我让两个JSON从topojson->geojson->topojson进行往返。
4.我从这两个JSON中剥离了bbox
属性
5.然后,我简单地将一个几何体集合添加到另一个几何体集合上statesJSON.objects.nielsen_dma=dmaJSON.objects.nielsen_dma
我现在有了一个带有nielsen_dma
和状态
几何体的topojson。然而,这仍然不起作用,划定州界线会带来混乱
在geoJSON的往返过程中,我是否没有删除两个JSON的坐标量化?
可能(ir)相关问题:
- 美国json使用二维笛卡尔坐标空间(使用阿尔伯斯投影投影的特征)。未压缩的坐标是SVG像素
- 尼尔森json使用纬度/经度坐标空间(3d地球仪上的点)。未压缩的坐标不是笛卡尔坐标(除非应用直板卡里投影:long=x,lat=y)
topojson.feature()
传递时,返回的geojson将在大约为[0,0]、[960600]的边界框内具有x,y值(在本例中)。当任何未投影的topojson(Nielsen json for exmaple)通过topojson.feature()
传递时,返回的geojson将在[-180,90]、[180,-90]的边界框内具有长的lat值,也就是说,它将具有有效的长/lat对
这些基本的和不同的坐标系是问题所在,而不是拓扑结构中坐标的表示
合并Topojson
我不确定你是如何将两者结合在一起的。topojson将geojson拆分为组成部分—弧和要素(它们引用弧并保存要素属性)。圆弧以数字形式引用-如果未修改索引,则不能仅使用:
statesJSON.objects.nielsen_dma = dmaJSON.objects.nielsen_dma
但是,即使您修改了arc索引并引入了不在statesJSON中但在dmaJSON中的arc,您仍然会遇到问题。这是因为我们仍然使用不同的坐标系
topojson使用的转换包括缩放和平移-投影数据使用Albers投影,未投影数据不使用任何投影,但可以通过平板Carree投影强制转换为x,y(长=x,宽=y)。但一个板块的特点是纬度是str