将shp转换为topoJSON失败

时间:2013-11-17 10:04:55

标签: d3.js topojson

GIS to Topojson:

我正在使用DIVA-gis.org作为我的数据源。我已经下载了亚美尼亚行政区域的数据。此下载生成.shp文件。我试图将它直接传递给topoJSON,我得到一个json文件,如下所示

Object {
  type: "Topology", 
  objects: Object, 
  arcs: Array[1], 
  transform: Object
} 

Topojson转向SVG:

我将d3指向包含my几何属性的objects.armenia。问题是,几何属性包含一个弧数组,即0。现在在我的armenia的topoJSON中,我看到一个包含相当大的值数组的arcs属性数组...我已经尝试将我的d3代码指向虽然我还没有得到任何东西。
除此之外,我还使用QGIS将我的.shp文件转换为geoJSON,并使用topoJSON从topoJSON转换geoJSON ......但仍然没有。 我的d3代码如下

var width = 960,
height = 500;

var projection = d3.geo.mercator()
.scale(1000)
.translate([width / 2, height / 2]);

var path = d3.geo.path()
.projection(projection);

var mapContainer = d3.select("#armenia").append("svg")
.attr("width", width)
.attr("height", height);

d3.json("/ARM_adm/output.json", function(error, country) {
console.log("country",country)
mapContainer.insert("path", ".graticule")
  .datum(topojson.feature(country, country.armenia))
  .attr("class", "land")
  .attr("d", path);
});

我只是得到一条空路......任何帮助都会被贬低。

1 个答案:

答案 0 :(得分:1)

作为一名Windows用户,我不经常使用topojson,当我使用虚拟机时,我不会对topojson进程发表评论。我倾向于使用一些在线topojson转换器来快速转换。有许多服务可用,例如:

所有这些都有正面和负面。

我从DIVA下载了您上面提到的数据,并使用Shape Escape转换为Topojson。 Shape Escape需要注意的一点是,它可以为对象提供一些愚蠢的名称。只需打开下载的topojson文件,然后将名称更改为有用的名称。

然后我用你的代码来映​​射它,第一件事就是检查一切都很好但没有显示地图的数据。这有两个原因。第一个是在

中拆开topojson
.datum(topojson.feature(country, country.arcs[0]))

线。你要求D3映射弧而不是几何。如果您查看console.log并深入了解对象,您将在那里看到几何体。因此,如果你将topojson指向几何体,D3将会有所作为。因此基准线变为:

.datum(topojson.feature(country, country.objects.states))

你也在使用阿尔伯斯投影,这对美国数据来说效果最好,所以我把它改成了墨卡托并用规模和中心来玩,一切都很好。投影最终成为:

var projection = d3.geo.mercator()
    .scale(5000)
    .center([45.55, 40.5])
    .translate([width / 2, height / 2]);