Javascript D3 GeoJSON仅渲染矩形中的部分贴图

Javascript D3 GeoJSON仅渲染矩形中的部分贴图,javascript,json,d3.js,geojson,Javascript,Json,D3.js,Geojson,目前我正在做一个D3项目,用GeoJSON渲染地图。我在网上找到了这个很好的例子 尝试用我的GeoJSON映射实现,而当我根据新的JSON文件编辑参数时,html只呈现部分映射并显示在矩形中。我试图检查代码,但不知道哪里出错了。请分享一些我可以正确显示地图的提示。完整的代码可以在git上找到 提前谢谢你 以下是我根据原始脚本编辑的代码: 更新了目标JSON文件名 d3.json('electoral-boundary-dataset.geo.json', function(error, mapD

目前我正在做一个D3项目,用GeoJSON渲染地图。我在网上找到了这个很好的例子

尝试用我的GeoJSON映射实现,而当我根据新的JSON文件编辑参数时,html只呈现部分映射并显示在矩形中。我试图检查代码,但不知道哪里出错了。请分享一些我可以正确显示地图的提示。完整的代码可以在git上找到

提前谢谢你

以下是我根据原始脚本编辑的代码:

更新了目标JSON文件名

d3.json('electoral-boundary-dataset.geo.json', function(error, mapData) {
  var features = mapData.features;
d、 properties.NOMBRE_DPT到d.properties.Name

function nameFn(d){
  return d && d.properties ? d.properties.Name : null;
}
缩放(1500)到缩放(50)以缩小地图

var projection = d3.geo.mercator()
  .scale(50)

在我看来,您的geoJSON可能有问题。这就像地图上有一个框架,也许那就是你所看到的广场。如果你把你的例子填成“无”并画出笔划,你可以看到你的地图在这个大正方形框架内看起来很小

正如@andrew reid所评论的,这似乎是一个棘手的问题。检查他对原始答案的评论

通过使用,我可以制作以下示例:

那不是你想要的一切,但至少显示了地图。请注意它是如何使用一个投影,使所有内容都适合宽度和高度的

  var projection = d3.geoMercator().fitSize([width, height], geoJSON);
另外,尽量不要使用d3.v3,那太旧了

以下是一个工作版本:


您有一个缠绕问题-通常这不是问题,大多数库使用平面坐标,这意味着只有一种方法可以缠绕多边形,使其闭合。D3使用球形几何体,有两种方式缠绕每个多边形。请参阅,以获取解决方案,或获取需要对示例进行一些调整的更为手动的解决方案。或者,找到一个新的geojson是一个选项,如下所示。将第一个解决方案调整到地图的示例(使用适当的比例并以地图为中心-使用比例50,除非添加笔划宽度,否则您将看不到您的特征)。@Andrewerid是的,您完全正确,这是一个曲折的问题。我可以用您共享的示例填充地图:请注意:fitSize不适用于d3v3(您主张从中升级),fit方法是从d3v4开始引入的。此外,geojson不包含矩形,矩形是缠绕顺序的产物:通过以错误的方式缠绕,多边形覆盖了世界的其他部分,而不是感兴趣的区域。只有一个问题,因为D3使用将给定给投影的坐标视为球体上的3D点。@John Alexis Guerra Gómez感谢您的输入!不幸的是,我不得不使用原始的geoJSON,因为2017地图不再有效。正如安德鲁所说,我发现这是一个棘手的问题。您是否可以使用倒带配置将原始geoJSON编码到示例代码中?感谢@AndrewReid的反馈。今天我学到了一些东西