使用D3无法正确渲染TopoJSON地图

时间:2015-06-25 17:38:51

标签: d3.js topojson

我已从this map of Great Britain and Ireland下载Highcharts并从GeoJSON转换为TopoJSON格式(topojson -o input output),但它只是呈现为黑盒子。我正在关注famous 'Let's make a map' tutorial

var container = d3.select( "#container" );

var margin = 20,
    width = parseInt(container.style( "width" )),
    height = parseInt(container.style( "height" ));

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

var path = d3.geo.path()
    .projection(projection);

var svg = container.append("svg")
    .attr("width", width)
    .attr("height", height);

d3.json("http://www.lenart.pl/assets/codepen/gb_all_ireland_topo.json", function(error, gb) {
    svg.append("path")
        .datum(topojson.feature(gb, gb.objects.gb_all_ireland_geo))
        .attr("d", path);

});

http://codepen.io/znak/pen/rVYbNB

我已使用TopoJSON预览了我的http://jsoneditoronline.org文件,并找到了包含几何图形的相关对象(我认为),但它不起作用。

我的最终目标是可视化GB&amp ;;的交互式(管理)地图。谢谢。

1 个答案:

答案 0 :(得分:2)

我认为第一个麻烦的地方是从Highcharts下载 - 似乎是在一个不是wgs84的投影中。所以给出的坐标不是纬度和经度。如果你看一下highcharts.com/mapdata/custom/gb-all-ireland.geo.json的开头,你会看到一些" crs"密钥,并提及" EPSG:7405"。

您可以通过多种方式转换为wgs84,包括:

NSIndexPath

然后你可以转换为topojson并从你离开的地方继续。

同样重要的是要认识到d3预测的规模和中心值的微小变化会产生很大的影响。

如果您没有与Highcharts绑定,那么获取已经在wgs84中的数据可能会更好,例如http://www.naturalearthdata.com/甚至可以使用更全面的库和数据,例如mapsense https://developer.mapsense.co/tileViewer/。 (披露:我在mapsense工作。)