projectionStream не является функцией в D3.js v4
Мы работаем над этим сайтом http://bandaultralarga.italia.it/mappa-bul/
На этой странице у нас есть gMap, где мы рисуем несколько полигонов сверху, используя d3(v3) и topoJson.
Теперь мы хотим (хотели бы) перейти на новый v4, чтобы добавить новый дизайн данных, а именно то, что у нас уже было.
Неполадки возникают в функции наложения ниже, где мы переводим координаты в систему Google Map.
Ссылаясь на D3 v4 API Docs, мы перешли от:
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 ответ
mbostock ответ:
Пожалуйста, прочтите примечания к выпуску d3-geo или CHANGES.md:
"Резервные проекции" - когда вы передаете функцию, а не проекцию на путь. Проекция- больше не поддерживаются. Для географических проекций используйте d3.geoProjection или d3.geoProjectionMutator, чтобы определить собственную проекцию. Для произвольных преобразований геометрии реализуйте интерфейс потока; см. также d3.geoTransform.