客户端topojson呈现看似不正确的路径

时间:2014-06-04 23:54:01

标签: javascript d3.js topojson

我一直在尝试使用合并的图层数据创建一个TopoJson文件,其中包含美国各州,郡和国会区等其他图层。

原始的.shp shapefile来自人口普查局的Cartographic Boundary Files

通过ogr2ogr将它们转换为GeoJson。

然后通过节点服务器端库合并为TopoJson格式,量化为1e7,保留比例为0.15。到目前为止,没有任何问题的迹象。

我使用mapshaper查看最终的topojson文件,看起来似乎没问题:rendered via mapshaper

但是,当尝试使用topojson客户端库和D3.geo.path()进行渲染时,我在congressionalDist层中遇到一些奇怪的路径:(注意美国大陆,AK和HI周围的大矩形路径){ {0}}

可以在此处找到该页面的工作版本:http://jsl6906.net/D3/topojson_problem/map/

一些相关的说明:

  • 如果我更改我的topojson生成脚本以删除简化,那么路径似乎通过相同的d3.js页面正确显示
  • 如果我在创建topojson时只保留congressionalDist图层,则路径似乎通过相同的d3.js页面正确显示:

square paths

在尝试了我能够处理的故障排除之后,我想我会问这里有人看看是否有人遇到过任何类似的问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:4)

正如我在评论中提到的,我注意到三个违规的矩形都绑定到id属性以ZZ结尾的数据,而所有其他路径的ID都以数字结尾。

经过一些Google搜索后,我想出了我认为的答案。

根据census.gov网站上的this document

  

在康涅狄格州,伊利诺伊州和密歇根州,州参与者没有指定当前(第113位)   国会选区覆盖所有州或同等地区。代码“ZZ”已分配   到没有定义国会区的地区(通常是大型水体)。这些未分配的区域   在国家内被视为单一的国会选区,用于数据展示。

似乎这三个未定义的区域将占据三个矩形。目前还不清楚他们在这个过程中会导致什么问题,但我相信对你眼前的问题有一个简单的解决方案。在搜索有关ZZ代码的信息时,我在mbostock名为this makefile的项目中偶然发现了us-atlas

他似乎遇到了类似的问题,并设法在运行ogr2ogr时过滤掉未定义的国会区。以下是该文件中的相关代码:

# remove undefined congressional districts
shp/us/congress-ungrouped.shp: shp/us/congress-unfiltered.shp
    rm -f $@
    ogr2ogr -f 'ESRI Shapefile' -where "GEOID NOT LIKE '%ZZ'" $@ $<

我敢打赌,如果你使用此处显示的标志在shapefile上运行ogr2ogr,它将解决问题。