0

GIS 到 Topojson:

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

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

Topojson 到 SVG:

我将 d3 指向包含我的几何属性的 objects.armenia。问题是几何属性包含一个弧数组,它是 0。现在在我的亚美尼亚 topoJSON 中,我确实看到了一个弧属性数组,其中包含相当大的值数组......我已经尝试将我的 d3 代码指向那个元素,但我仍然一无所获。
除此之外,我还使用 QGIS 将我的 .shp 文件转换为 geoJSON,他们使用 topoJSON 从 geoJSON 从 topoJSON ......但仍然没有。我的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);
});

我只是得到了一条空路......任何帮助都会非常感激。

4

1 回答 1

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))

您还使用了 Albers 投影,这往往最适用于美国数据,因此我将其更改为墨卡托并使用比例和中心,一切都很好。投影最终成为:

var projection = d3.geo.mercator()
    .scale(5000)
    .center([45.55, 40.5])
    .translate([width / 2, height / 2]);
于 2013-11-18T08:46:00.580 回答