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);
});
我只是得到一条空路......任何帮助都会被贬低。
答案 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]);