D3.js 在一个文件中使用不同图层的shapefile格式创建一个全新的世界

D3.js 在一个文件中使用不同图层的shapefile格式创建一个全新的世界,d3.js,geojson,shapefile,qgis,topojson,D3.js,Geojson,Shapefile,Qgis,Topojson,我想创建一个新的世界地图,并将D3.js与topojson和QGIS结合使用(如果可能的话)。所以最后我需要一个包含乡村、河流等的形状文件。在创建所有这些层之后,我希望mapshaper将该文件转换为topojson。到目前为止还不错 我尝试了一个简单的多边形,所以它只是一层。我创建了shapefile,然后将其转换为topojson。现在我想将该文件与d3一起使用: {"type":"Topology","transform":{"scale":[0.8423423423423423,0.80

我想创建一个新的世界地图,并将D3.js与topojson和QGIS结合使用(如果可能的话)。所以最后我需要一个包含乡村、河流等的形状文件。在创建所有这些层之后,我希望mapshaper将该文件转换为topojson。到目前为止还不错

我尝试了一个简单的多边形,所以它只是一层。我创建了shapefile,然后将其转换为topojson。现在我想将该文件与d3一起使用:

{"type":"Topology","transform":{"scale":[0.8423423423423423,0.808252427184466],"translate":[1491.6423611111095,-3184.7916666666715]},"objects":{"country":{"type":"GeometryCollection","geometries":[{"type":"LineString","arcs":[0]}]}},"arcs":[[[437,17],[-7,87],[69,64],[23,74],[-31,80],[-14,54],[19,69],[-9,18],[-45,-35],[-53,-32],[-33,-12],[-26,-38],[-26,-27],[-29,-15],[-54,-12],[-29,22],[-40,27],[-31,10],[-36,35],[-2,30],[-17,57],[-14,19],[-19,28],[-31,62],[-2,47],[7,39],[17,40],[28,57],[119,37],[180,22],[247,-2],[105,-109],[78,-122],[52,-96],[55,-176],[-12,-109],[-47,-69],[-60,-77],[-104,-57],[-181,-7],[-49,30]]]}
这只是一个多边形,没错。这是我的d3代码:

var width = 960,
    height = 500;

var path = d3.geo.path();

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

d3.json("file.json", function(error, topology) {

  console.clear();

  var featureCollection = topojson.feature(topology, topology.objects.country);
  var bounds = d3.geo.bounds(featureCollection);

  var centerX = d3.sum(bounds, function(d) {return d[0];}) / 2,
      centerY = d3.sum(bounds, function(d) {return d[1];}) / 2;

  var projection = d3.geo.mercator()
    .scale(3000)
    .center([centerX, centerY]);

  path.projection(projection);

  svg.selectAll("path")
      .data(featureCollection.features)
      .enter().append("path")
      .attr("d", path);
});
但我总是得到TypeError:t是未定义的。但是如果我使用其他人的json文件,它就可以工作了。那么,如何让这个小示例运行呢?是我的QGIS被窃听了还是我用错了?谢谢

或者您知道更好的解决方法吗?

只需删除即可

.scale(3000)
.center([centerX, centerY])

它应该会起作用。或者编辑它以更正值。

可能是我没有关闭多边形吗?从网络上获取任何信息都很有效,所以我自己生成的=/好吧,一定是出了问题,好像是个bug,没有起作用。我想我需要一些关于GIS工具的培训,仅此而已。但是,如果有人知道如何做这项任务,请告诉我=试图复制您的问题。我没有收到任何错误,也没有得到地图,不知道发生了什么…但一定是Plunker问题,我的电脑上也有相同的代码=我在没有Plunker的情况下尝试了Mark的代码。同样的结果。没有错误,没有地图。