diff --git a/DRAFT_CHANGELOG.md b/DRAFT_CHANGELOG.md index 1d21f85cb..cfc60e76e 100644 --- a/DRAFT_CHANGELOG.md +++ b/DRAFT_CHANGELOG.md @@ -6,116 +6,16 @@ ## Summary -L'autoconfiguration n'est plus appelée par les API. Pour la remplacer, nous générons quotidiennement, à partir des getCapabilities des services WMS et WMTS, des fichiers de configuration en JSON appelables par les API JavaScript Géoportail. Il y a un fichier par clé générique. L'avantage de ce nouveau processus (en plus de s'adapter au futur arrêt du service d'autoconfiguration) est que les fichiers de configuration JSON sont directement au format attendu par les API : il n'y a plus besoin de les parser pour en extraire les informations utiles puis pour les introduire dans une structure adéquate. -Par exemple, en renseignant "cartes" au paramètre apiKey, c'est le fichier cartesConfig.json qui sera chargé et directement utilisé par les API. - -A noter que le multiKeys est toujours géré, c'est à dire qu'il est possible de renseigner plusieurs clés dans le paramètre apiKey. - -Il est également possible de générer son propre fichier de configuration à partir d'une ou plusieurs clés. L'utilitaire est temporairement disponible ici : https://geoportal-configuration.onrender.com. Le paramètre permettant ensuite de charger sa configuration personnelle à partir du fichier local généré s'appelle désormais **customConfigFile**, auquel on associera le chemin vers le fichier de configuration json à charger. - - ## Changelog * [Added] - - gestion et utilisation des fichiers de configuration en json au lieu de l'appel au service d'autoconfiguration (#106). - * [Changed] - - **BC** : paramètre "customConfigFile" pour un fichier de configuration local (#106) - -##### Avant : - -```javascript - var map = Gp.Map.load("viewerDiv", { - configUrl : "../resources/autoconf.js", - viewMode : "3d", - layersOptions : { - "ORTHOIMAGERY.ORTHOPHOTOS" : { - }, - "ELEVATION.ELEVATIONGRIDCOVERAGE" : { - type : "elevation" - } - }, - center : { - x : 2.357, - y : 48.83 - }, - controlsOptions : { - layerSwitcher : { - maximised : true - } - } - }); -``` - - -##### Maintenant : - -```javascript - var map = Gp.Map.load("viewerDiv", { - customConfigFile : "chemin/vers/ma/config/customConfig.json", - viewMode : "3d", - layersOptions : { - "ORTHOIMAGERY.ORTHOPHOTOS" : { - }, - "ELEVATION.ELEVATIONGRIDCOVERAGE" : { - type : "elevation" - } - }, - center : { - x : 2.357, - y : 48.83 - }, - controlsOptions : { - layerSwitcher : { - maximised : true - } - } - }); -``` - * [Removed] - - appels au service d'autoconfiguration (#106) - - - **BC** : Les originators sont actuellement utilisés par les API par le contrôle d'attribution. Celui-ci va lire les originators des couches visibles et automatiquement les afficher dans l'encart dédié selon le paramétrage courant de la vue cartographique (zoom, emprise). Désormais, il faudra renseigner les originators manuellement lors de l'ajout de couches Géoportail. (#106) - -```javascript -"TRANSPORTNETWORKS.RAILWAYS" : { - originators: [{ - "name": "Nom raccourci originator", - "attribution": "Titre complet originator", - "url": "http://www.url-vers-le-site-du-producteur.fr", - "constraints": [{ - "crs":"EPSG:4326", - "bbox": { - "left": -63.09696, - "right": 55.826077, - "top": 51.073032, - "bottom": -21.385712 - }, - "minScaleDenominator": 0, - "maxScaleDenominator": 559082265, - "temporalExtent": ["2016-02-18","2016-02-18"] - }] - }] -} -``` +* [Fixed] - - **BC** : Les metadatas sont utilisées dans les API par le contrôle gestionnaire de couches (LayerSwitcher). Celui-ci va lire les metadatas des couches ajoutées à la carte et les afficher dans l'encart d'information dédié du LayerSwitcher. **Pour les couches WMTS uniquement**, désormais, pour que les metadatas apparaissent dans l'onglet "informations" du LayerSwitcher, il faudra les renseigner manuellement à la configuration de la couche Géoportail lors de son ajout à la carte. (#106) +* [Deprecated] -```javascript -"ORTHOIMAGERY.ORTHOPHOTOS" : { - metadata: [ - { - format: "xml", - url: "lien/Vers/Une/MetaDonnee.xml" - }, - { - format: "xml", - url: "lien/Vers/Une/MetaDonnee.xml" - } - ] -} -``` +* [Security] diff --git a/package.json b/package.json index f9b915890..6dd142369 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "geoportal-sdk", - "version": "3.4.0", + "version": "3.4.1", "date": "07/06/2023", - "SDK2DVersion": "3.4.0", - "SDK3DVersion": "3.4.0", + "SDK2DVersion": "3.4.1", + "SDK3DVersion": "3.4.1", "description": "French Geoportal SDK based on OpenLayers (2D) and iTowns (3D) libraries", "main": "dist/2d/GpSDK2D-src.js, dist/3d/GpSDK3d-src.js", "module": "src/SDK2D.js, src/SDK3D.js", @@ -72,8 +72,8 @@ "exports-loader": "^0.7.0", "expose-loader": "^0.7.5", "fs-extra": "^9.0.0", - "geoportal-extensions-itowns": "2.4.0", - "geoportal-extensions-openlayers": "3.3.0", + "geoportal-extensions-itowns": "2.4.1", + "geoportal-extensions-openlayers": "3.3.1", "handlebars": "^4.7.5", "handlebars-layouts": "^3.1.4", "html-webpack-plugin": "^4.0.4", diff --git a/scripts/release/package-SDK2D.json b/scripts/release/package-SDK2D.json index 8b172c267..b8c7112b5 100644 --- a/scripts/release/package-SDK2D.json +++ b/scripts/release/package-SDK2D.json @@ -1,23 +1,19 @@ { + "homepage" : "https://geoservices.ign.fr/documentation/utilisation_web/sdk.html", "main" : "dist/GpSDK2D-src.js", - "bugs" : { - "url" : "https://github.com/IGNF/geoportal-sdk/issues" - }, - "description" : "French Geoportal SDK based on OpenLayers (2D)", - "date" : "03/04/2023", + "scripts" : {}, "directories" : {}, - "dependencies" : { - "node-fetch" : "^2.6.1", - "geoportal-extensions-openlayers" : "https://raw.githubusercontent.com/IGNF/geoportal-extensions/feature/adaptations-gpf/build/scripts/release/geoportal-extensions-openlayers-3.2.21.tgz", - "xmldom" : "^0.1.27", - "ol" : "6.9.0" - }, + "version" : "3.4.0", "repository" : { "url" : "https://github.com/IGNF/geoportal-sdk.git", "type" : "git" }, - "name" : "@ignf-geoportal/sdk-2d", - "homepage" : "https://geoservices.ign.fr/documentation/utilisation_web/sdk.html", + "author" : "IGNF", + "bugs" : { + "url" : "https://github.com/IGNF/geoportal-sdk/issues" + }, + "license" : "CECILL-B", + "description" : "French Geoportal SDK based on OpenLayers (2D)", "files" : [ "dist/", "src/", @@ -25,15 +21,19 @@ "README.md", "package.json" ], + "module" : "src/SDK2D.js", + "date" : "07/06/2023", + "name" : "@ignf-geoportal/sdk-2d", "keywords" : [ "openlayers", "geoportail", "webservice", "javascript" ], - "version" : "3.3.25", - "license" : "CECILL-B", - "module" : "src/SDK2D.js", - "scripts" : {}, - "author" : "IGNF" + "dependencies" : { + "xmldom" : "^0.1.27", + "ol" : "6.9.0", + "node-fetch" : "^2.6.1", + "geoportal-extensions-openlayers" : "3.3.1" + } } diff --git a/scripts/release/package-SDK3D.json b/scripts/release/package-SDK3D.json index c7bacd3ae..ddbbf6ced 100644 --- a/scripts/release/package-SDK3D.json +++ b/scripts/release/package-SDK3D.json @@ -1,18 +1,18 @@ { - "bugs" : { - "url" : "https://github.com/IGNF/geoportal-sdk/issues" + "name" : "@ignf-geoportal/sdk-3d", + "homepage" : "https://geoservices.ign.fr/documentation/utilisation_web/sdk.html", + "dependencies" : { + "ol" : "6.9.0", + "geoportal-extensions-openlayers" : "3.3.1", + "itowns" : "2.38.2", + "geoportal-extensions-itowns" : "2.4.1", + "node-fetch" : "^2.6.1", + "xmldom" : "^0.1.27" }, - "scripts" : {}, "directories" : {}, - "description" : "French Geoportal SDK based on OpenLayers (2D) and iTowns (3D) libraries", "module" : "src/SDK3D.js", - "name" : "@ignf-geoportal/sdk-3d", "main" : "dist/GpSDK3D-src.js", "author" : "IGNF", - "homepage" : "https://geoservices.ign.fr/documentation/utilisation_web/sdk.html", - "license" : "CECILL-B", - "date" : "03/04/2023", - "version" : "3.3.25", "files" : [ "dist/", "src/", @@ -20,6 +20,16 @@ "README.md", "package.json" ], + "description" : "French Geoportal SDK based on OpenLayers (2D) and iTowns (3D) libraries", + "repository" : { + "type" : "git", + "url" : "https://github.com/IGNF/geoportal-sdk.git" + }, + "version" : "3.4.0", + "scripts" : {}, + "bugs" : { + "url" : "https://github.com/IGNF/geoportal-sdk/issues" + }, "keywords" : [ "openlayers", "itowns", @@ -27,16 +37,6 @@ "webservice", "javascript" ], - "dependencies" : { - "ol" : "6.9.0", - "geoportal-extensions-openlayers" : "https://raw.githubusercontent.com/IGNF/geoportal-extensions/feature/adaptations-gpf/build/scripts/release/geoportal-extensions-openlayers-3.2.21.tgz", - "geoportal-extensions-itowns" : "https://raw.githubusercontent.com/IGNF/geoportal-extensions/feature/adaptations-gpf/build/scripts/release/geoportal-extensions-itowns-2.3.10.tgz", - "xmldom" : "^0.1.27", - "node-fetch" : "^2.6.1", - "itowns" : "2.38.2" - }, - "repository" : { - "url" : "https://github.com/IGNF/geoportal-sdk.git", - "type" : "git" - } + "license" : "CECILL-B", + "date" : "07/06/2023" } diff --git a/src/Interface/IMapBase.js b/src/Interface/IMapBase.js index 76a482219..ac779d4ea 100644 --- a/src/Interface/IMapBase.js +++ b/src/Interface/IMapBase.js @@ -3,7 +3,8 @@ import Logger from "../Utils/LoggerByDefault"; import { transform as olTransformProj } from "ol/proj"; import { Services, - ProxyUtils + ProxyUtils, + ColorUtils } from "geoportal-extensions-openlayers"; import { MapLoader } from "../Utils/MapLoader"; @@ -65,32 +66,58 @@ var switch2D3D = function (viewMode) { case "ROUTE": case "ISOCURVE": case "ELEVATIONPATH": + var control = this.getLibMapControl(layer.options.control.toLowerCase()); + // on distingue le cas d'un import de calcul et un calcul en cours... - oldMap.layersOptions[layer.id].controlOptions = (Object.keys(layer.options.controlOptions).length === 0) - ? this.getLibMapControl(layer.options.control.toLowerCase()).getData() : layer.options.controlOptions; - // on distingue le cas d'un import de calcul et un calcul en cours... - geojsonStr = (Object.keys(layer.options.data).length === 0) - ? this.getLibMapControl(layer.options.control.toLowerCase()).getGeoJSON() : layer.options.data; + oldMap.layersOptions[layer.id].controlOptions = (Object.keys(layer.options.controlOptions).length === 0) ? control.getData() : layer.options.controlOptions; + + geojsonStr = (Object.keys(layer.options.data).length === 0) ? control.getGeoJSON() : layer.options.data; + // on parse le geojson pour y ajouter des properties de styles (2D et 3D) geojsonObj = JSON.parse(geojsonStr); + + // transmettre les styles du controles 2D vers 3D + var styles = control.getStyle(); geojsonObj.features.forEach(feature => { if (!feature.properties) { feature.properties = {}; } - // style propre à la 3D if (feature.geometry.type === "Point") { - feature.properties.icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAmCAYAAABpuqMCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQxSURBVFiF3ZldaBxVFMd/d2ayTRtjQpo2mlilWBEMshoj+FAERZIHIdA3iw+V1icRREFIQAKNgsUHQfBFwZI2WgWxqYUiVTDBBj9ILC5Nu2tjdjemsR+mSZNNNvsxO8eHTTRuk+zMnQmCf9iHnXvO+Z//nDvn3rmjRIT/C6zAI4ZVFRbtKDpQNCM0AvXANIo/EC4inMbmLBFZDJJaBVaZJ9Sd2HQCrwDbXHikgfewOMKPMh9ECsGIeVx1IHxEsQJeMY3iEMNy2m8aht8AtKpOhH70hADUI/TTqjr9puKvMsUE3vabxCp0MSJHdJ31xRSnVj9BVPcfOCj26U45PTHFh30c/am1EaaxuF+nKejd1WLX2gwhAPXL8T3De2XCqooKbuCu/eoiTZ6dXtch75WxaMeNENOyOXx8kHOpGMPOIudSMQ4fH8S0bBcs25Z5PMF7ZVpVL3BgQxvTsvn6+kVq6sK3jc3NRGhraKZgl9t9HGNEXvCSmvfKKJrL2nQfHVpTCEBNXZjuo0OB8JTAu5jiXmtjPL3vLl/jbnlKoNPN6spaVFbt8jXulqcEOmKSZS0yi5O+xt3ylEBHTLSsxbf913yNu+UpgU4DKE/Sc3AvczORNcfmZiL0HNwbCE8JvItxWDvJ1SjYFm0NzZzpG2RpIYbIIksLMc70Dbpsy+54SqCzzlQAY8B9Xsk8YAJ4gBHJe3HyXpkRyaN407OfN7zlVQjobjTv4BgQ1/ItjzjV9Oo46okZEBuhS8u3PDoZEDf7t9vg903zBLBfP8C/4cAnD87teclIGyFlLoVyllWh8vmQYRgVAOI4OQmFciKSFZFsMpmck1UC/Il5VNViEgHu9StkQYyb7bNNH1wrmDm3PgqWUHLBhl+SyeRV/6czLepJDAbw8fos4HTNb+/9PFv9u3YMU/X6f38/L98B7/gJ8U2uasiPEADTcRqDOozoBn7WcbzqmFOvpnYM+uTPpvP5SDBiimvP8xRPKV3DFpV7fX7HyYyD44M96xicmpqaSgd3TDQsv6J4zYvLx5nqsz/kK29qcyq5kFpafD+RSMSKf4P+CvCY+hJFRzmzmB2KPTvb+JnX8CsdzDGM8/F4/PrqseC/AggvZlGXtyipXc8kLcbCy6mdrg/6lBIbR41DYXR8cjIqIoW17IIXc17+nHnEOnS3VfhiHQt5d7HmVMK2Nn6+DHLiOGMmRLdMVI+NymjZ9Sf4abaMqZbQp01G/rnS60P5rT8duNXw1TpuGaXksmMYlxKJxLiIt23NponhKVV5a874rdZwmlYuTTvmjWdmGj9Mifl3kkpJ2hGJGY4THb9yJS4i2p0t+Gm2ggHJxMNb94eNzIAJZgEKbyxsP5kS00ZJSkG0oFQ0mZyYkKDuqIhs6u/7hyt75luM2RMPVfft3rW7bU9T0z2bxbV50+w/wF8f81R5OpwBhwAAAABJRU5ErkJggg=="; - } - // style pour la 2D et 3D - if (feature.geometry.type === "LineString") { - feature.properties["stroke"] = "#00B798"; - feature.properties["stroke-opacity"] = 0.9; - feature.properties["stroke-width"] = 12; - } - // style pour la 2D et 3D - if (feature.geometry.type === "Polygon") { - feature.properties["fill"] = "#00B798"; - feature.properties["fill-opacity"] = 0.7; + // INFO + // le style est propre à la 3D + // les controles ne fournissent pas les styles des icones + // le style est present dans le format + feature.properties.icon = feature.properties["marker-symbol"]; + // FIXME transmettre l'offset ! + } else if (feature.geometry.type === "LineString") { + // style pour la 2D et 3D + var colorStroke = {}; + if (ColorUtils.isRGB(styles.getStroke().getColor())) { + colorStroke = ColorUtils.rgbaToHex(styles.getStroke().getColor()); + } else { + colorStroke = { + hex : styles.getStroke().getColor(), + opacity : 1 + }; + } + feature.properties["stroke"] = colorStroke.hex || "#00B798"; + feature.properties["stroke-opacity"] = colorStroke.opacity || 0.9; + feature.properties["stroke-width"] = styles.getStroke().getWidth() || 12; + } else if (feature.geometry.type === "Polygon") { + // style pour la 2D et 3D + var colorFill = {}; + if (ColorUtils.isRGB(styles.getFill().getColor())) { + colorFill = ColorUtils.rgbaToHex(styles.getFill().getColor()); + } else { + colorFill = { + hex : styles.getFill().getColor(), + opacity : 1 + }; + } + feature.properties["fill"] = colorFill.hex || "#00B798"; + feature.properties["fill-opacity"] = colorFill.opacity || 0.7; + } else { + // ... } }); oldMap.layersOptions[layer.id].data = JSON.stringify(geojsonObj);