diff --git a/app-starter/locales/en.json b/app-starter/locales/en.json index 825f4857..50d01ef1 100644 --- a/app-starter/locales/en.json +++ b/app-starter/locales/en.json @@ -57,6 +57,10 @@ "terrestris-osm-wms" : { "name": "OSM WMS", "attributions": "© OpenStreetMap-contributors" + }, + "test_arcgisrest" : { + "name": "Arcgis REST test tiled layer", + "attributions": "© Comune di Padova" } }, diff --git a/app-starter/static/app-conf.json b/app-starter/static/app-conf.json index 1b7bca7b..8d9e9e39 100644 --- a/app-starter/static/app-conf.json +++ b/app-starter/static/app-conf.json @@ -161,6 +161,27 @@ "opacityControl": true, "crossOrigin": "anonymous" }, + + { + "type": "TILEARCGIS", + "lid": "test_arcgisrest", + "format": "image/jpeg", + "url": "https://cartografia.comune.padova.it/server/rest/services/topo/MapServer", + "params": { + "LAYERS":"show:3,16", + "TRANSPARENT": true + }, + "transparent": true, + "projection": "EPSG:3003", + "attribution": "Comune di padova", + "isBaseLayer": false, + "visible": false, + "displayInLayerList": true, + "legend": false, + "opacityControl": true, + "crossOrigin": "anonymous" + }, + { "type": "IMAGEWMS", "lid": "ahocevar-imagewms", diff --git a/docs/map-layer-configuration.md b/docs/map-layer-configuration.md index 3b460b4a..2201633d 100644 --- a/docs/map-layer-configuration.md +++ b/docs/map-layer-configuration.md @@ -94,13 +94,24 @@ The following properties can be applied to all map layer types | projection | The projection of the layer. Has to be defined in `projectionDefs` if not `EPSG:4326` or `EPSG:3857`. if not set the projection of the map is used | `"projection": "EPSG:3857"` | | format | Image format for the WMS (has to be supported by the WMS) | `"format": "image/png"` | | transparent | Boolean value, whether the WMS layer should be queried with a transparent background | `"transparent": true` | -| tileGridRef | Identifier of the tile grid to use for this layer (has to be defined in `tileGridDefs` | `"tileGridRef": "dutch_rd"` | +| tileGridRef | Identifier of the tile grid to use for this layer (has to be defined in `tileGridDefs`) | `"tileGridRef": "dutch_rd"` | | crossOrigin | Provides support for CORS, defining how the layers source handles crossorigin requests. For more information and the supported values see [HTML attribute: crossorigin](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) | `"crossOrigin": "anonymous"` | | hoverable | Boolean value, whether the features of the layer can be hovered in order to display information in a tooltip. The WMS must support `GetFeatureInfo` requests to obtain feature information. Wegue's default hover tooltip renders a single feature attribute which has to be declared by `hoverAttribute`. You can also choose to implement a custom overlay declared by `hoverOverlay` to render multiple feature attributes in a custom tooltip. | `"hoverable": true` | | hoverAttribute | Attribute to be shown if a feature of the layer is hovered. Only has an effect if `hoverable` is set to `true`. | `"hoverAttribute": "name"` | | hoverOverlay | ID of a custom map overlay to display when a feature of the layer is hovered. Only has an effect if `hoverable` is set to `true`. For more information on how to implement a map overlay see the [reusable components](reusable-components?id=map-overlay) section. | `"hoverOverlay": "my-custom-overlay"` | | params | This allows to inject custom HTTP parameters to the GetMap request of the layer. | `"params": {"FEATUREID": 1}"` | +## Arcgis REST (tiled) + +| Property | Meaning | Example | +|--------------------|:---------:|---------| +| **type** | Indicator that the layer is `"TILEARCGIS"` | `"type": "TILEARCGIS"` | +| **url** | The base URL of the Arcgis REST service | `"url": "https://cartografia.comune.padova.it/server/rest/services/topo/MapServer"` | +| projection | The projection of the layer. Has to be defined in `projectionDefs` if not `EPSG:4326` or `EPSG:3857`. if not set the projection of the map is used | `"projection": "EPSG:3857"` | +| tileGrid | Identifier of the tile grid to use for this layer (has to be defined in `tileGridDefs`) | `"tileGridRef": "dutch_rd"` | +| crossOrigin | Provides support for CORS, defining how the layers source handles crossorigin requests. For more information and the supported values see [HTML attribute: crossorigin](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) | `"crossOrigin": "anonymous"` | +| params | ArcGIS Rest parameters. This field is optional. Service defaults will be used for any fields not specified. FORMAT is PNG32 by default. F is IMAGE by default. TRANSPARENT is true by default. BBOX, SIZE, BBOXSR, and IMAGESR will be set dynamically. Set LAYERS to override the default service layer visibility. See https://developers.arcgis.com/rest/services-reference/export-map.htm for further reference. | `params:{"LAYERS": show:1,4,5,6, "TRASPARENT": true}` | + ## WMS (image) Similar properties as Tiled WMS, with these exceptions: diff --git a/src/factory/Layer.js b/src/factory/Layer.js index 20fdb5ea..e82f48d7 100644 --- a/src/factory/Layer.js +++ b/src/factory/Layer.js @@ -1,6 +1,7 @@ import { Image as ImageLayer, Tile as TileLayer } from 'ol/layer'; import ImageWMS from 'ol/source/ImageWMS'; import TileWmsSource from 'ol/source/TileWMS'; +import TileArcGISRest from 'ol/source/TileArcGISRest.js'; import OsmSource from 'ol/source/OSM'; import VectorTileLayer from 'ol/layer/VectorTile' import VectorTileSource from 'ol/source/VectorTile' @@ -63,6 +64,8 @@ export const LayerFactory = { // create correct layer type if (lConf.type === 'TILEWMS') { return this.createTileWmsLayer(lConf); + } else if (lConf.type === 'TILEARCGIS') { + return this.createTileArcGISRestLayer(lConf); } else if (lConf.type === 'IMAGEWMS') { return this.createImageWmsLayer(lConf); } else if (lConf.type === 'WFS') { @@ -165,6 +168,31 @@ export const LayerFactory = { return layer; }, + /** + * Returns an OpenLayers Tiled Arcgis REST tiled layer instance due to given config. + * + * @param {Object} lConf Layer config object + * @return {ol.layer.Tile} OL Tiled Arcgis REST layer instance + */ + createTileArcGISRestLayer (lConf) { + // apply additional HTTP params + const params = { LAYERS: lConf.layers }; + ObjectUtil.mergeDeep(params, lConf.params); + + const layer = new TileLayer({ + ...this.getCommonLayerOptions(lConf), + source: new TileArcGISRest({ + url: lConf.url, + params, + projection: lConf.projection, + crossOrigin: lConf.crossOrigin, + tileGrid: lConf.tileGrid + }) + }); + + return layer; + }, + /** * Returns an OpenLayers WFS layer instance due to given config. *