Я пытаюсь сделать что-то подобное в Angular6 с помощью ngx-leaflet, как описано здесь: https://leafletjs.com/examples/choropleth/
Я уже могу показать всплывающее окно по умолчанию и изменить стиль onmouseover
, но могу '*
Я загружаю несколько наборов данных GeoJSON и добавляю их как отдельные слои, используя универсальную функцию.С этими слоями я хочу изменить стиль «onmouseover» и сбросить его «onmouseout», и когда я нажимаю на эту функцию, я хочу показать диаграмму в div в правом верхнем углу моей страницы.Также в моем коде не работает событие click.
Моя общая функция для получения данных GeoJSON из моего бэкэнда:
private loadGeoJsonDataSet(path: string, dataset: string, geometryType: string, layerName: string, fitBounds: boolean): void {
this.mapService.getGeoJson(path, dataset).pipe(first()).subscribe(json => {
// Create layer and add to map:
const geoJsonLayer = L.Proj.geoJson(null, {
// onEachFeature: (feature, layer) => {
// layer.bindPopup('<h5> Test:' + feature.properties.gid + '</h5>');
// },
onEachFeature: this.onEachFeature.bind(this),
attribution: 'CloudHydro'
}
).addTo(this.map);
// Set options:
switch (geometryType) {
case 'point': {
geoJsonLayer.options.style = this.getPointStyle;
geoJsonLayer.options.pointToLayer = (feature, latlng) => {
return L.circleMarker(latlng, this.circleMarkerOptions);
};
break;
}
case 'polyline': {
geoJsonLayer.options.style = this.getPolylineStyle;
break;
}
case 'polygon': {
geoJsonLayer.options.style = this.getPolygonStyle;
break;
}
default: {
geoJsonLayer.options.style = this.getPolygonStyle;
break;
}
}
// Add data to the layer:
geoJsonLayer.addData(json);
// Add layer to the layer control:
this.layersControl.overlays[layerName] = geoJsonLayer;
if (fitBounds) {
this.map.flyToBounds(geoJsonLayer.getBounds());
this.map.fitBounds(geoJsonLayer.getBounds());
}
});
}
Мои функции onEachFeature и style:
private highlightFeature(e) {
const layer = e.target;
layer.setStyle({
weight: 3, color: '#333',
});
if (!L.Browser.ie && !L.Browser.opera12) {
layer.bringToFront();
}
}
private resetHighlight(e) {
const layer = e.target;
--> Not working: layer.resetStyle(layer);
}
private clickedOnFeature(feature, layer) {
--> Not working: console.log('In clickedOnFeature', feature);
}
private onEachFeature(feature, layer) {
layer.bindPopup('<h5> GID:' + feature.properties.gid + '</h5>');
layer.on({
mouseover: this.highlightFeature,
mouseout: this.resetHighlight,
click: this.clickedOnFeature(feature, layer)
});
}
Любая помощь будет очень признательна.Преобразование примеров из leafletjs.com в Angular + ngx-leaflet также поможет таким новичкам, как я.