Something went wrong on our end
-
Gaelle.Barris authoredGaelle.Barris authored
MapContent_overloaded.js 8.30 KiB
/* global Descartes */
var Utils = Descartes.Utils;
var Group = require('./Group_overloaded');
var LayerConstants = Descartes.Layer;
var EditionLayerConstants = require('./EditionLayerConstants');
var ClusterLayerConstants = Descartes.Layer.ClusterLayer;
var EditionLayer = require('./EditionLayer');
var log = require('loglevel');
var GeoJSON = Descartes.Layer.GeoJSON;
var KML = Descartes.Layer.KML;
var TMS = Descartes.Layer.TMS;
var WFS = Descartes.Layer.WFS;
var WMS = Descartes.Layer.WMS;
var WMSC = Descartes.Layer.WMSC;
var WMTS = Descartes.Layer.WMTS;
var OSM = Descartes.Layer.OSM;
var XYZ = Descartes.Layer.XYZ;
var VectorTile = Descartes.Layer.VectorTile;
var GenericVector = Descartes.Layer.GenericVector;
var EditionWFS = require('./EditionLayer/WFS');
var EditionKML = require('./EditionLayer/KML');
var EditionGeoJSON = require('./EditionLayer/GeoJSON');
var EditionGenericVector = require('./EditionLayer/GenericVector');
var EditionAnnotations = require('./EditionLayer/Annotations');
var ClusterWFS = Descartes.Layer.ClusterLayer.WFS;
var ClusterKML = Descartes.Layer.ClusterLayer.KML;
var ClusterGeoJSON = Descartes.Layer.ClusterLayer.GeoJSON;
var MapContent = Descartes.MapContent;
/**
* Class: Descartes.MapContent
* Objet "métier" correspondant au contenu de la carte en terme de groupes et couches.
*
* :
* Les éléments constituant le contenu de la carte peuvent être des instances de <Descartes.Group> et/ou <Descartes.Layer>.
*
* Evénements déclenchés:
* changed - La liste des éléments du contenu de la carte a changé.
* itemPropertyChanged - Les propriétés des éléments du contenu de la carte ont changé (visibilités, opacités).
* layerRemoved - Une couche a été supprimée.
*/
var Class = Utils.Class(MapContent, {
EVENT_TYPES: ['changed', 'itemPropertyChanged', 'layerRemoved', 'layerUnderEdition', 'layerSnapping', 'layerAutoTracing', 'layerSupport'],
/*
* PRIVATE
*/
_populate: function (items, baseItem) {
for (var i = 0, len = items.length; i < len; i++) {
var item = items[i];
if (item && item.itemType === 'Group') {
var groupItem = this.addItem(new Group(item.title, item.options), baseItem);
this._populate(item.items, groupItem);
} else if (item && item.itemType === 'Layer') {
var LayerClass;
switch (item.type) {
case LayerConstants.TYPE_WMS :
LayerClass = WMS;
break;
case LayerConstants.TYPE_WMSC :
LayerClass = WMSC;
break;
case LayerConstants.TYPE_TMS :
LayerClass = TMS;
break;
case LayerConstants.TYPE_WMTS :
LayerClass = WMTS;
break;
case LayerConstants.TYPE_WFS :
LayerClass = WFS;
break;
case LayerConstants.TYPE_KML :
LayerClass = KML;
break;
case LayerConstants.TYPE_GeoJSON :
LayerClass = GeoJSON;
break;
case LayerConstants.TYPE_GenericVector :
LayerClass = GenericVector;
break;
case LayerConstants.TYPE_OSM :
LayerClass = OSM;
break;
case LayerConstants.TYPE_XYZ :
LayerClass = XYZ;
break;
case LayerConstants.TYPE_VectorTile :
LayerClass = VectorTile;
break;
case LayerConstants.TYPE_GEOPORTAIL :
//ANNULER Descartes V5
log.warn('Couche du type Geoportail non pris en charge dans Descartes V5');
//LayerClass = LayerConstants.GeoPortail;
break;
case EditionLayerConstants.TYPE_WFS :
LayerClass = EditionWFS;
break;
case EditionLayerConstants.TYPE_KML :
LayerClass = EditionKML;
break;
case EditionLayerConstants.TYPE_GeoJSON :
LayerClass = EditionGeoJSON;
break;
case EditionLayerConstants.TYPE_GenericVector :
LayerClass = EditionGenericVector;
break;
case EditionLayerConstants.TYPE_Annotations :
LayerClass = EditionAnnotations;
break;
case ClusterLayerConstants.TYPE_WFS :
LayerClass = ClusterWFS;
break;
case ClusterLayerConstants.TYPE_KML :
LayerClass = ClusterKML;
break;
case ClusterLayerConstants.TYPE_GeoJSON :
LayerClass = ClusterGeoJSON;
break;
}
this.addItem(new LayerClass(item.title, item.definition, item.options), baseItem);
}
}
},
/**
* Methode: refreshEditions
* Rafraichit, le status underEdition des couches d'édition en fonction de la
* couche passée en paramêtre et du mode d'édition choisit.
* Envoie un événement pour signaler l'item passé en paramètre.
*
* Paramètres:
* item - {<Descartes.Edtion.Layer>} Layer d'édition
* unchanged - {Boolean} si true, indique que le rafraichissement n'est pas provoqué par une bascule utilisateur.
*/
refreshEditions: function (item, unchanged) {
if (this.refreshing !== true) {
this.refreshing = true;
if (!unchanged) {
//bascule utilisateur
item.toggleEdition();
}
var editionLayers = this.getEditionLayers();
for (var i = 0; i < editionLayers.length; i++) {
var editionLayer = editionLayers[i];
if (editionLayer !== item && editionLayer.isUnderEdition()) {
editionLayer.disableEdition();
}
}
if (unchanged) {
this.events.triggerEvent('layerUnderEdition', item);
}
this.refreshing = false;
}
},
/**
* Methode: refreshSnapping
* Envoie un événement pour signaler que l'item passé en paramètre à changer de statut pour le snapping
*/
refreshSnapping: function (item) {
this.events.triggerEvent('layerSnapping', item);
},
/**
* Methode: refreshAutoTracing
* Envoie un événement pour signaler que l'item passé en paramètre à changer de statut pour le tracing
*/
refreshAutoTracing: function (item) {
this.events.triggerEvent('layerAutoTracing', item);
},
/**
* Methode: refreshSupport
* Envoie un événement pour signaler que l'item passé en paramètre à changer de statut pour le support
*/
refreshSupportLayers: function (item) {
this.events.triggerEvent('layerSupport', item);
},
/**
* Methode: getUnderEditionLayer
* Retourne le layer en cours d'édition ou null si aucun layer n'est en cours d'édition.
* Retour:
* {<Descartes.Edtion.Layer>} ou null
*/
getUnderEditionLayer: function () {
var editionLayers = this.getEditionLayers();
for (var i = 0; i < editionLayers.length; i++) {
var editionLayer = editionLayers[i];
if (editionLayer.isUnderEdition()) {
return editionLayer;
}
}
return null;
},
/**
* Methode: getEditionLayers
* Retourne tous les layers de type {<Descartes.Layer.EditionLayer>}
*
* Retour:
* {Array (<Descartes.Edition.Layer>)}
*/
getEditionLayers: function () {
return this._getLayersByFilter(this.item, function (item) {
if (item instanceof EditionLayer) {
return item;
}
return null;
});
},
CLASS_NAME: 'Descartes.MapContent'
});
module.exports = Class;