【问题标题】:convert shp to topoJSON failing将 shp 转换为 topoJSON 失败
【发布时间】:2013-11-17 10:04:54
【问题描述】:

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

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

【问题讨论】:

  • 如果你使用 GeoJSON 可以吗?
  • 我很困惑,你的 topojson 就只有这 6 行代码吗? (约 200 个字符)。如果你也分享你的 ogr / topojson 命令可能会很好。
  • @LarsKotthoff 是的,如果我使用 geoJSON,它确实有效。

标签: d3.js topojson


【解决方案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]);

【讨论】:

  • 感谢 cmets!所以使用形状转义将数据集转换为 topoJSON,指向几何图形并使用正确的投影。我对解决方案感到满意,我唯一愿意工作的部分是使用 topoJSON 将 .shp 转换为 topoJSON。如果这仍然不起作用,那么我猜 shape is escape 应该会更好。也许我需要先用 ogr2ogr 转换为 geoJSON,然后再从 geo 转换为 topo...
  • 我之前直接从shape转topojson。您使用什么命令将形状转换为 topojson?
  • topojson -o output.json mapFile.shp
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2011-01-14
  • 2015-12-23
  • 2017-11-29
  • 1970-01-01
  • 2015-03-28
相关资源
最近更新 更多