UNPKG

@gouvfr-anct/mediation-numerique

Version:

📚 Bibliothèque pour la cartographie de l’offre de médiation numérique.

161 lines 17.9 kB
import { Injectable } from '@angular/core'; import { Marker } from 'leaflet'; import { Layers } from '../models/enum/layers.enum'; import { MarkerType } from '../models/enum/markerType.enum'; import { markerIcon, markerIconActive, markerIconAddedToList, markerIconHover, markerIconMdm, markerIconMdmActive, userLocationIcon } from './marker'; import * as i0 from "@angular/core"; export class MapService { constructor() { this.isMarkerActive = false; } createMarker(lat, lon, markerType, id, tooltip) { const marker = new Marker([lat, lon], { icon: this.getMarkerIcon(markerType), attribution: this.getLayerAttributton(markerType) }); marker.on('mouseclick', (evt) => { evt.target.openPopup(); }); // handle icon change when select marker marker.on('click', (evt) => { evt.target.setIcon(this.getActiveMarkerIcon(markerType)); }); if (tooltip) { marker.bindPopup(tooltip); // handle icon change when unselect marker.getPopup().on('remove', (evt) => { marker.setIcon(this.getMarkerIcon(markerType)); }); } if (id) { MapService.markersList[id] = marker; } return marker; } getLayerAttributton(markerType) { if (markerType === MarkerType.mdm) { return Layers.mdm; } else if (markerType === MarkerType.user) { return Layers.user; } else { return Layers.structure; } } // Note: Marke IconFranceService has been removed temporarly on order to rework on buisness needs. // This comment is applied for the next 4 methods getMarkerIcon(markerType) { switch (markerType) { case MarkerType.mdm: return markerIconMdm; case MarkerType.conseillerFrance: return markerIcon; case MarkerType.user: return userLocationIcon; default: return markerIcon; } } getActiveMarkerIcon(markerType) { switch (markerType) { case MarkerType.mdm: return markerIconMdmActive; case MarkerType.conseillerFrance: // return markerIconFranceServiceActive; return markerIconActive; case MarkerType.user: return userLocationIcon; default: return markerIconActive; } } getAddedToListMarkerIcon(markerType) { switch (markerType) { case MarkerType.conseillerFrance: // return markerIconFranceServiceAddedToList; return markerIconAddedToList; case MarkerType.user: return userLocationIcon; default: return markerIconAddedToList; } } getHoverMarkerIcon(markerType) { switch (markerType) { case MarkerType.conseillerFrance: return markerIconHover; case MarkerType.user: return userLocationIcon; default: return markerIconHover; } } /** * @param id marker id */ setActiveMarker(id, type = MarkerType.structure) { this.getMarker(id)?.setIcon(this.getHoverMarkerIcon(type)); } setAddedToListMarker(id, type = MarkerType.structure) { this.getMarker(id).setIcon(this.getAddedToListMarkerIcon(type)); } setUnactiveMarker(id, type = MarkerType.structure) { // To skip mouseleave when user emit click on structure list this.getMarker(id)?.setIcon(this.getMarkerIcon(type)); this.isMarkerActive = false; } /** * Set a tooltip * @param id markerId * @param html html to display */ setToolTip(id, html) { this.getMarker(id).bindTooltip(html); } /** * Set a marker as selected by changing icon color * @param id markerId * @param html html to display */ setSelectedMarker(id, type = MarkerType.structure) { if (id) { this.getMarker(id)?.setIcon(this.getActiveMarkerIcon(type)); this.isMarkerActive = true; } } /** * Set a marker as selected by changing icon color * @param id markerId * @param html html to display */ setDefaultMarker(id, type = MarkerType.structure) { if (id) { this.getMarker(id).setIcon(this.getMarkerIcon(type)); } } /** * Get marker by id */ getMarker(id) { return MapService.markersList[id] ? MapService.markersList[id] : null; } cleanMap(map) { MapService.markersList = {}; if (map) { map.eachLayer((layer) => { if (layer instanceof Marker && layer.options.attribution == Layers.structure) { map.removeLayer(layer); } }); } return map; } } MapService.markersList = {}; MapService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); MapService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MapService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MapService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9AZ291dmZyLWFuY3QvbWVkaWF0aW9uLW51bWVyaXF1ZS9zcmMvbGliL21hcC9jb21wb25lbnRzL21hcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFnQixNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2pCLE1BQU0sVUFBVSxDQUFDOztBQUdsQixNQUFNLE9BQU8sVUFBVTtJQUR2QjtRQUdVLG1CQUFjLEdBQUcsS0FBSyxDQUFDO0tBZ0toQztJQTlKUSxZQUFZLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxVQUFzQixFQUFFLEVBQVcsRUFBRSxPQUFnQjtRQUNqRyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNwQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDcEMsV0FBVyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM5QixHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsd0NBQXdD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UyxDQUFDLEVBQVU7UUFDekIsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEUsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFRO1FBQ3RCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN0QixJQUFJLEtBQUssWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtvQkFDNUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDeEI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOztBQWhLYyxzQkFBVyxHQUFHLEVBQUcsQ0FBQTt1R0FEckIsVUFBVTsyR0FBVixVQUFVOzJGQUFWLFVBQVU7a0JBRHRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXZJY29uLCBNYXAsIE1hcmtlciB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgTGF5ZXJzIH0gZnJvbSAnLi4vbW9kZWxzL2VudW0vbGF5ZXJzLmVudW0nO1xuaW1wb3J0IHsgTWFya2VyVHlwZSB9IGZyb20gJy4uL21vZGVscy9lbnVtL21hcmtlclR5cGUuZW51bSc7XG5pbXBvcnQge1xuICBtYXJrZXJJY29uLFxuICBtYXJrZXJJY29uQWN0aXZlLFxuICBtYXJrZXJJY29uQWRkZWRUb0xpc3QsXG4gIG1hcmtlckljb25Ib3ZlcixcbiAgbWFya2VySWNvbk1kbSxcbiAgbWFya2VySWNvbk1kbUFjdGl2ZSxcbiAgdXNlckxvY2F0aW9uSWNvblxufSBmcm9tICcuL21hcmtlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNYXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgbWFya2Vyc0xpc3QgPSB7fTtcbiAgcHJpdmF0ZSBpc01hcmtlckFjdGl2ZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjcmVhdGVNYXJrZXIobGF0OiBudW1iZXIsIGxvbjogbnVtYmVyLCBtYXJrZXJUeXBlOiBNYXJrZXJUeXBlLCBpZD86IHN0cmluZywgdG9vbHRpcD86IHN0cmluZyk6IE1hcmtlciB7XG4gICAgY29uc3QgbWFya2VyID0gbmV3IE1hcmtlcihbbGF0LCBsb25dLCB7XG4gICAgICBpY29uOiB0aGlzLmdldE1hcmtlckljb24obWFya2VyVHlwZSksXG4gICAgICBhdHRyaWJ1dGlvbjogdGhpcy5nZXRMYXllckF0dHJpYnV0dG9uKG1hcmtlclR5cGUpXG4gICAgfSk7XG4gICAgbWFya2VyLm9uKCdtb3VzZWNsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnRhcmdldC5vcGVuUG9wdXAoKTtcbiAgICB9KTtcblxuICAgIC8vIGhhbmRsZSBpY29uIGNoYW5nZSB3aGVuIHNlbGVjdCBtYXJrZXJcbiAgICBtYXJrZXIub24oJ2NsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgZXZ0LnRhcmdldC5zZXRJY29uKHRoaXMuZ2V0QWN0aXZlTWFya2VySWNvbihtYXJrZXJUeXBlKSk7XG4gICAgfSk7XG5cbiAgICBpZiAodG9vbHRpcCkge1xuICAgICAgbWFya2VyLmJpbmRQb3B1cCh0b29sdGlwKTtcblxuICAgICAgLy8gaGFuZGxlIGljb24gY2hhbmdlIHdoZW4gdW5zZWxlY3RcbiAgICAgIG1hcmtlci5nZXRQb3B1cCgpLm9uKCdyZW1vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgIG1hcmtlci5zZXRJY29uKHRoaXMuZ2V0TWFya2VySWNvbihtYXJrZXJUeXBlKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaWQpIHtcbiAgICAgIE1hcFNlcnZpY2UubWFya2Vyc0xpc3RbaWRdID0gbWFya2VyO1xuICAgIH1cbiAgICByZXR1cm4gbWFya2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXllckF0dHJpYnV0dG9uKG1hcmtlclR5cGU6IE1hcmtlclR5cGUpOiBzdHJpbmcge1xuICAgIGlmIChtYXJrZXJUeXBlID09PSBNYXJrZXJUeXBlLm1kbSkge1xuICAgICAgcmV0dXJuIExheWVycy5tZG07XG4gICAgfSBlbHNlIGlmIChtYXJrZXJUeXBlID09PSBNYXJrZXJUeXBlLnVzZXIpIHtcbiAgICAgIHJldHVybiBMYXllcnMudXNlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIExheWVycy5zdHJ1Y3R1cmU7XG4gICAgfVxuICB9XG5cbiAgLy8gTm90ZTogTWFya2UgSWNvbkZyYW5jZVNlcnZpY2UgaGFzIGJlZW4gcmVtb3ZlZCB0ZW1wb3Jhcmx5IG9uIG9yZGVyIHRvIHJld29yayBvbiBidWlzbmVzcyBuZWVkcy5cbiAgLy8gVGhpcyBjb21tZW50IGlzIGFwcGxpZWQgZm9yIHRoZSBuZXh0IDQgbWV0aG9kc1xuICBwcml2YXRlIGdldE1hcmtlckljb24obWFya2VyVHlwZTogTWFya2VyVHlwZSk6IERpdkljb24ge1xuICAgIHN3aXRjaCAobWFya2VyVHlwZSkge1xuICAgICAgY2FzZSBNYXJrZXJUeXBlLm1kbTpcbiAgICAgICAgcmV0dXJuIG1hcmtlckljb25NZG07XG4gICAgICBjYXNlIE1hcmtlclR5cGUuY29uc2VpbGxlckZyYW5jZTpcbiAgICAgICAgcmV0dXJuIG1hcmtlckljb247XG4gICAgICBjYXNlIE1hcmtlclR5cGUudXNlcjpcbiAgICAgICAgcmV0dXJuIHVzZXJMb2NhdGlvbkljb247XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbWFya2VySWNvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZU1hcmtlckljb24obWFya2VyVHlwZTogTWFya2VyVHlwZSk6IERpdkljb24ge1xuICAgIHN3aXRjaCAobWFya2VyVHlwZSkge1xuICAgICAgY2FzZSBNYXJrZXJUeXBlLm1kbTpcbiAgICAgICAgcmV0dXJuIG1hcmtlckljb25NZG1BY3RpdmU7XG4gICAgICBjYXNlIE1hcmtlclR5cGUuY29uc2VpbGxlckZyYW5jZTpcbiAgICAgICAgLy8gcmV0dXJuIG1hcmtlckljb25GcmFuY2VTZXJ2aWNlQWN0aXZlO1xuICAgICAgICByZXR1cm4gbWFya2VySWNvbkFjdGl2ZTtcbiAgICAgIGNhc2UgTWFya2VyVHlwZS51c2VyOlxuICAgICAgICByZXR1cm4gdXNlckxvY2F0aW9uSWNvbjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBtYXJrZXJJY29uQWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWRkZWRUb0xpc3RNYXJrZXJJY29uKG1hcmtlclR5cGU6IE1hcmtlclR5cGUpOiBEaXZJY29uIHtcbiAgICBzd2l0Y2ggKG1hcmtlclR5cGUpIHtcbiAgICAgIGNhc2UgTWFya2VyVHlwZS5jb25zZWlsbGVyRnJhbmNlOlxuICAgICAgICAvLyByZXR1cm4gbWFya2VySWNvbkZyYW5jZVNlcnZpY2VBZGRlZFRvTGlzdDtcbiAgICAgICAgcmV0dXJuIG1hcmtlckljb25BZGRlZFRvTGlzdDtcbiAgICAgIGNhc2UgTWFya2VyVHlwZS51c2VyOlxuICAgICAgICByZXR1cm4gdXNlckxvY2F0aW9uSWNvbjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBtYXJrZXJJY29uQWRkZWRUb0xpc3Q7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRIb3Zlck1hcmtlckljb24obWFya2VyVHlwZTogTWFya2VyVHlwZSk6IERpdkljb24ge1xuICAgIHN3aXRjaCAobWFya2VyVHlwZSkge1xuICAgICAgY2FzZSBNYXJrZXJUeXBlLmNvbnNlaWxsZXJGcmFuY2U6XG4gICAgICAgIHJldHVybiBtYXJrZXJJY29uSG92ZXI7XG4gICAgICBjYXNlIE1hcmtlclR5cGUudXNlcjpcbiAgICAgICAgcmV0dXJuIHVzZXJMb2NhdGlvbkljb247XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbWFya2VySWNvbkhvdmVyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaWQgbWFya2VyIGlkXG4gICAqL1xuICBwdWJsaWMgc2V0QWN0aXZlTWFya2VyKGlkOiBzdHJpbmcsIHR5cGU6IE1hcmtlclR5cGUgPSBNYXJrZXJUeXBlLnN0cnVjdHVyZSk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TWFya2VyKGlkKT8uc2V0SWNvbih0aGlzLmdldEhvdmVyTWFya2VySWNvbih0eXBlKSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QWRkZWRUb0xpc3RNYXJrZXIoaWQ6IHN0cmluZywgdHlwZTogTWFya2VyVHlwZSA9IE1hcmtlclR5cGUuc3RydWN0dXJlKTogdm9pZCB7XG4gICAgdGhpcy5nZXRNYXJrZXIoaWQpLnNldEljb24odGhpcy5nZXRBZGRlZFRvTGlzdE1hcmtlckljb24odHlwZSkpO1xuICB9XG5cbiAgcHVibGljIHNldFVuYWN0aXZlTWFya2VyKGlkOiBzdHJpbmcsIHR5cGU6IE1hcmtlclR5cGUgPSBNYXJrZXJUeXBlLnN0cnVjdHVyZSk6IHZvaWQge1xuICAgIC8vIFRvIHNraXAgbW91c2VsZWF2ZSB3aGVuIHVzZXIgZW1pdCBjbGljayBvbiBzdHJ1Y3R1cmUgbGlzdFxuICAgIHRoaXMuZ2V0TWFya2VyKGlkKT8uc2V0SWNvbih0aGlzLmdldE1hcmtlckljb24odHlwZSkpO1xuICAgIHRoaXMuaXNNYXJrZXJBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSB0b29sdGlwXG4gICAqIEBwYXJhbSBpZCBtYXJrZXJJZFxuICAgKiBAcGFyYW0gaHRtbCBodG1sIHRvIGRpc3BsYXlcbiAgICovXG4gIHB1YmxpYyBzZXRUb29sVGlwKGlkOiBzdHJpbmcsIGh0bWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TWFya2VyKGlkKS5iaW5kVG9vbHRpcChodG1sKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBtYXJrZXIgYXMgc2VsZWN0ZWQgYnkgY2hhbmdpbmcgaWNvbiBjb2xvclxuICAgKiBAcGFyYW0gaWQgbWFya2VySWRcbiAgICogQHBhcmFtIGh0bWwgaHRtbCB0byBkaXNwbGF5XG4gICAqL1xuICBwdWJsaWMgc2V0U2VsZWN0ZWRNYXJrZXIoaWQ6IHN0cmluZywgdHlwZTogTWFya2VyVHlwZSA9IE1hcmtlclR5cGUuc3RydWN0dXJlKTogdm9pZCB7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmdldE1hcmtlcihpZCk/LnNldEljb24odGhpcy5nZXRBY3RpdmVNYXJrZXJJY29uKHR5cGUpKTtcbiAgICAgIHRoaXMuaXNNYXJrZXJBY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBtYXJrZXIgYXMgc2VsZWN0ZWQgYnkgY2hhbmdpbmcgaWNvbiBjb2xvclxuICAgKiBAcGFyYW0gaWQgbWFya2VySWRcbiAgICogQHBhcmFtIGh0bWwgaHRtbCB0byBkaXNwbGF5XG4gICAqL1xuICBwdWJsaWMgc2V0RGVmYXVsdE1hcmtlcihpZDogc3RyaW5nLCB0eXBlOiBNYXJrZXJUeXBlID0gTWFya2VyVHlwZS5zdHJ1Y3R1cmUpOiB2b2lkIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHRoaXMuZ2V0TWFya2VyKGlkKS5zZXRJY29uKHRoaXMuZ2V0TWFya2VySWNvbih0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtYXJrZXIgYnkgaWRcbiAgICovXG4gIHB1YmxpYyBnZXRNYXJrZXIoaWQ6IHN0cmluZyk6IE1hcmtlciB7XG4gICAgcmV0dXJuIE1hcFNlcnZpY2UubWFya2Vyc0xpc3RbaWRdID8gTWFwU2VydmljZS5tYXJrZXJzTGlzdFtpZF0gOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGNsZWFuTWFwKG1hcDogTWFwKTogTWFwIHtcbiAgICBNYXBTZXJ2aWNlLm1hcmtlcnNMaXN0ID0ge307XG4gICAgaWYgKG1hcCkge1xuICAgICAgbWFwLmVhY2hMYXllcigobGF5ZXIpID0+IHtcbiAgICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgTWFya2VyICYmIGxheWVyLm9wdGlvbnMuYXR0cmlidXRpb24gPT0gTGF5ZXJzLnN0cnVjdHVyZSkge1xuICAgICAgICAgIG1hcC5yZW1vdmVMYXllcihsYXllcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG59XG4iXX0=