TopoJSON转德克萨斯州郡县地图:替换俄克拉荷马显示问题求助
嘿,我来帮你搞定这个问题!作为TopoJSON新手,把教程里的俄克拉荷马州郡县换成德克萨斯州其实只需要修改几个关键代码点,一步步来:
替换TopoJSON文件引用
找到教程里加载TopoJSON的代码段,大概是类似这样的:d3.json("ok.json", function(error, ok) { // 后续代码 });把文件名改成你自己生成的德州TopoJSON文件名(比如
texas-counties.json),同时把回调函数里的变量名从ok改成tx(或者你觉得好记的名字),保持前后一致:d3.json("texas-counties.json", function(error, tx) { // 后续代码 });修正数据绑定的图层名称
教程里绑定俄克拉荷马郡县数据的部分会用到ok.objects.ok_counties.geometries,你需要把这部分换成自己TopoJSON里的实际图层名称。这个名称取决于你转换shapefile时的设置,你可以用文本编辑器打开你的德州TopoJSON文件,找到objects字段下的键名(比如可能是texas_counties或者你shapefile的原始文件名)。
举个例子,如果你的TopoJSON里objects下的图层叫tx_counties,那代码就要改成:var counties = topojson.feature(tx, tx.objects.tx_counties).features;微调地图投影(可选)
德克萨斯州比俄克拉荷马州面积大一些,如果加载后地图显示太小或者位置偏移,可以调整投影的缩放参数。教程里的投影一般是d3.geoAlbersUsa(),你可以给它加个scale值:var projection = d3.geoAlbersUsa() .scale(1200) // 数值越大地图越放大,可根据实际效果调整 .translate([width / 2, height / 2]);如果用
d3.geoAlbersUsa()适配不好,也可以试试针对德州的自定义投影,但大部分情况下默认的美国本土投影就够用。检查样式与交互(无需额外修改)
教程里的颜色、hover高亮等样式逻辑是基于郡县数据绑定的,只要你前面的步骤做对,这些效果会自动适配德州郡县,不用额外调整。
最后小提示:如果不确定TopoJSON里的图层名称,直接打开你的文件看objects下面的内容,那个键就是你要引用的图层名~
内容的提问来源于stack exchange,提问作者DanielLevitt32

