首先添加D3格线然后调用d3.json时,json中的第一个特征不会显示在地图上。如果我在附加路径后在d3.json中添加d3.graticule,则会在特征之上绘制经纬网,这不是我想要的。这是我的JavaScript文件:
$(document).ready(function (){
$('.aToolTip').tooltip();
$('.aPopOver').popover();
// D3 Mapping Starts Here
var h = $('#myMap').height();
var w = $('#myMap').width();
console.log("h = " + h , ", w = " + w);
$('svg').attr('width', w)
.attr('height', h);
var aSVG = d3.select("#aSVGElement");
var aProjection = d3.geo.mercator()
.rotate([-135, 24])
.scale(600)
.translate([w/2, h/2]);
var path = d3.geo.path()
.projection(aProjection);
var graticule = d3.geo.graticule()
.step([10, 10]);
aSVG.append("path")
.datum(graticule)
.attr("class", "graticule")
.attr("d", path);
d3.json("js/Australia.json", function(error, json){
aSVG.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path);
}); // end d3.json
});// end document ready
答案 0 :(得分:1)
如果您首先绘制网格,则第一个要素不会显示,因为您选择的是path
,其中网格为1。这意味着第一个数据元素(即第一个特征)与现有路径匹配,而不是.enter()
选择的一部分。
要解决此问题,只需为您的功能path
分配一个类,然后相应地选择:
aSVG.selectAll("path.feature")
.data(json.features)
.enter()
.append("path")
.attr("class", "feature")
.attr("d", path);