projectionStream不是D3.js v4中的函数

时间:2016-10-05 17:40:51

标签: javascript google-maps d3.js d3v4

我们正在使用此网站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);

1 个答案:

答案 0 :(得分:1)

mbostock回答:

请阅读d3-geo release notesCHANGES.md

“后备投影” - 当您将功能而不是投影传递给path.projection时 - 不再受支持。对于地理预测,请使用d3.geoProjectiond3.geoProjectionMutator来定义自定义投影。对于任意几何变换,实现stream interface;另见d3.geoTransform