我需要从 FeatureCollection geojson 文件中绘制许多多边形。当我使用 D3.js 和 Leaflet 这样做时,我的路径元素被绘制在远离地图的地方。我的 svg 元素的高度为零。为什么我的代码会给我这个结果?
我认为 path.bounds() 能够处理我的 FeatureCollection,但我认为这是我的 svg 元素以零高度绘制的原因。当我在 DOM 中看到我的路径元素时,我很难理解为什么我的路径元素被绘制得离地图如此之远。
var svg = d3.select(map.getPanes().overlayPane).append("svg");
var g = svg.append("g").attr("class", "leaflet-zoom-hide");
...
var transform = d3.geo.transform({point: projectPoint}),
path = d3.geo.path().projection(transform)
// create path elements for each of the features
var d3_features = g.selectAll("path").data(geoShape.features)
.enter().append("path");
map.on("viewreset", reset);
reset();
// fit the SVG element to leaflet's map layer
function reset() {
var bounds = path.bounds(geoShape);
var topLeft = bounds[0],
bottomRight = bounds[1];
svg.attr("width", bottomRight[0] - topLeft[0])
.attr("height", bottomRight[1] - topLeft[1])
.style("left", topLeft[0] + "px")
.style("top", topLeft[1] + "px");
g .attr("transform", "translate(" + -topLeft[0] + ","
+ -topLeft[1] + ")");
// initialize the path data
d3_features
.attr("d", path)
.attr('fill','blue')
.attr("stroke", "black")
.style("fill-opacity", 0.7);
}
// Use Leaflet to implement a D3 geometric transformation.
function projectPoint(x, y) {
var point = map.latLngToLayerPoint(new L.LatLng(y, x));
this.stream.point(point.x, point.y);
}
})
路径元素应该在 Tucson 上绘制许多重叠的矩形多边形。我在这里重现了我的问题:http: //bl.ocks.org/Alex-Devoid/97a003bf42cfc9a7e922b650c42d264c