我们正在使用此网站http://bandaultralarga.italia.it/mappa-bul/
在那个页面上,我们有一个gMap,我们使用d3(v3)和topoJson在顶部绘制一些多边形。
现在我们希望(希望)切换到新的v4,在页面上添加新的数据,但保留我们已经拥有的内容。
麻烦来自下面的叠加功能,我们将坐标转换为Google Map系统。
参考我们切换的D3 v4 API文档:
path = d3.geo.path().projection(googleMapProjection);
为:
path = d3.geoPath().projection(googleMapProjection);
但这会产生主题错误(projectionStream不是函数。)
有任何线索可以让它再次发挥作用吗?
var overlay = new google.maps.OverlayView();
overlay.onAdd = function () {
var div = document.createElement('div');
div.id = 'svg_map';
div.style.borderStyle = 'none';
div.style.borderWidth = '0px';
div.style.position = 'absolute';
this.getPanes().overlayMouseTarget.appendChild(div);
overlay.draw = function () {
var overlayProjection = this.getProjection();
var googleMapProjection = function (coordinates) {
var googleCoordinates = new google.maps.LatLng(coordinates[0], coordinates[1]);
var pixelCoordinates = overlayProjection.fromLatLngToDivPixel(googleCoordinates);
return [pixelCoordinates.x + 4000, pixelCoordinates.y + 4000];
};
path = d3.geoPath().projection(googleMapProjection); // Here is where troubles come
generaOverlay(overlay, datiShape);
};
};
overlay.setMap(map);
答案 0 :(得分:1)
mbostock回答:
请阅读d3-geo release notes或CHANGES.md:
“后备投影” - 当您将功能而不是投影传递给path.projection时 - 不再受支持。对于地理预测,请使用d3.geoProjection或d3.geoProjectionMutator来定义自定义投影。对于任意几何变换,实现stream interface;另见d3.geoTransform。