自然地球数据铁路地图中的文物

时间:2013-07-24 04:16:35

标签: d3.js

我浏览了Mike Bostock的Let's Make a Map教程,我对结果感到非常满意,于是我决定从Natural Earth数据集中添加一些铁路数据。

大多数渲染都没问题,但有一些疯狂的文物似乎无关的网格以某种方式连接在一起:

https://docs.google.com/file/d/0B6e2rOpUwmtea3d4enNjY3dSbkk/edit?usp=sharing

我将铁路数据分成3个文件,看看是否有助于解决问题:

for country in CAN MEX USA
do
    ogr2ogr -f GeoJSON \
    -where "sov_a3='${country}'" \
    railroads_${country}.json ne_10m_railroads_north_america.shp
done

我正在使用topojson.mesh渲染它们,如下所示:

svg.append("path")
  .datum(topojson.mesh(na, na.objects.railroads_USA))
  .attr("d", path)
  .attr("class", "railroad_USA");
svg.append("path")
  .datum(topojson.mesh(na, na.objects.railroads_CAN))
  .attr("d", path)
  .attr("class", "railroad");
svg.append("path")
  .datum(topojson.mesh(na, na.objects.railroads_MEX))
  .attr("d", path)
  .attr("class", "railroad");

enter image description here

否则我的代码几乎与演示中提供的代码相同。

我怎样才能摆脱这些直线?

1 个答案:

答案 0 :(得分:1)

解决方案是为每条铁路创建一条单独的路径。单个文件就足够了:

ogr2ogr -f GeoJSON \
    -where "sov_a3 in ('CAN', 'MEX', 'USA')" \
    railroads.json ne_10m_railroads_north_america.shp

不是创建单个网格,而是可以创建多个路径,如下所示:

svg.selectAll(".railroad")
  .data(topojson.feature(na, na.objects.railroads).features)
.enter().append("path")
  .attr("class", function(d) { return "railroad " + d.id; })
  .attr("d", path);