【发布时间】:2014-07-25 19:33:01
【问题描述】:
我一直在尝试创建一个包含合并图层数据的 TopoJson 文件,其中包含美国各州、县和国会选区等图层。
原始 .shp shapefile 来自人口普查局的Cartographic Boundary Files。
这些通过 ogr2ogr 转换为 GeoJson。
然后通过节点服务器端库组合成TopoJson格式,量化为1e7,retain-proportion为0.15。到目前为止,没有任何问题的迹象。
我使用 mapshaper 查看最终的 topojson 文件,看起来一切正常:
但是,当尝试使用 topojson 客户端库和 D3.geo.path() 进行渲染时,我在 congressionalDist 层遇到了一些奇怪的路径:(注意美国大陆、AK 和 HI 周围的大矩形路径)@ 987654333@
可以在此处找到该页面的工作版本:http://jsl6906.net/D3/topojson_problem/map/
一些相关说明:
- 如果我更改我的 topojson 生成脚本以消除简化,则路径似乎可以通过相同的 d3.js 页面正确显示
- 如果我在创建 topojson 时只保留 congressionalDist 层,那么路径似乎可以通过相同的 d3.js 页面正确显示:
在尝试了尽可能多的故障排除后,我想我会在这里请人看看是否有人遇到过类似的问题。感谢您的帮助。
【问题讨论】:
-
这似乎/可能与stackoverflow.com/questions/23953366/… 中提到的问题有关。那里的一些区域的边界计算出错了,也导致了大的矩形。例如,在您的示例中,
d3.geo.bounds(cds[84])导致 `[[-180, -90], [180, 90]]' 这似乎是不正确的。我不知道为什么会这样。 -
仍然不确定是什么原因造成的,但我注意到一件有趣的事情是绑定到违规矩形的数据的
id属性以ZZ结尾,而所有其他对象都有一个id 以两个数字结尾。 id 的负责人是:09ZZ、17ZZ 和 26ZZ。例如,尝试以下操作:d3.selectAll(d3.selectAll('.cd')[0].filter(function(d) { return d3.select(d).attr('id').slice(-2) === 'ZZ' })).style('stroke', 'red'),您会注意到只有这些矩形是红色的。 -
看来
ZZ是赋予“未定义”国会选区的代码。我不确定这意味着什么,但您可以在 CD113FP 列下的this dataset 中看到它,NAMELSAD 列包含“未定义国会选区”。在this file 中运行 ogr2ogr 时,还提到了删除此类区域,这是us-atlas的一部分 -
如果这可能有用 - 这是我的完整工作流程: 1. 下载 shapefile (census.gov/geo/maps-data/data/tiger-cart-boundary) 2. 将 shapefile 转换为 geoJson (jsl6906.net/D3/topojson_problem/3create_geo_jsons.bat.txt) 3. 将 geoJson 文件合并到 topoJson (@ 987654330@)
-
您的路径是否可能是“由内而外”(逆时针与顺时针)?如果您为阿拉斯加或夏威夷指定填充颜色会发生什么 - 它会填充矩形中除了岛屿/州的所有内容吗?见,例如stackoverflow.com/q/21786168/3128209
标签: javascript d3.js topojson