我正在尝试修改此Google Maps + D3 示例 以包含点之间的线。我采用的方法是为每一行添加新的 svg 元素。
我设法创建了一组新的 svg 元素:
var markerLink = layer.selectAll(".links")
.data(links)
.each(pathTransform) // update existing markers
.enter().append("line")
.each(pathTransform)
.attr("class", "links");
其中 links 是一个数组数组。每个内部数组有4个值对应每行的开始和结束的纬度和经度:d3行的x1、y1、x2和y2。
路径转换函数:
function pathTransform(d) {
var t, b, l, r, w, h;
var d1 = new google.maps.LatLng(d[1], d[0]);
var d2 = new google.maps.LatLng(d[3], d[2]);
d1 = projection.fromLatLngToDivPixel(d1);
d2 = projection.fromLatLngToDivPixel(d2);
if ( d1.y < d2.y ) {
t = d1.y - 25;
b = d2.y + 25;
} else {
t = d2.y - 25;
b = d1.y + 25;
}
if ( d1.x < d2.x ) {
l = d1.x - 25;
r = d2.x + 25;
} else {
l = d2.x - 25;
r = d1.x + 25;
}
return d3.select(this)
.style("left", l + "px")
.style("top", t + "px")
.style("width", (r - l) + "px")
.style("height", (b - t) + "px");
}
获取纬度和经度值并返回适当大小和定位的 svg 元素。
按照带有标记 svg 元素的示例,我尝试将一行附加到 markerLink 元素。这就是我遇到麻烦的地方。我不知道如何在每个 svg 中定位线条。
这是一个好方法还是有另一种方法可以将圆圈、路径、线条和标签添加到谷歌地图叠加层?