Skip to content

Commit

Permalink
Merge pull request #371 from enricofer/arcgisrest_support
Browse files Browse the repository at this point in the history
Arcgis rest layers support
  • Loading branch information
chrismayer authored May 2, 2024
2 parents 5ddd030 + db07b41 commit cda4d70
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 1 deletion.
4 changes: 4 additions & 0 deletions app-starter/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@
"terrestris-osm-wms" : {
"name": "OSM WMS",
"attributions": "<a href='https://www.openstreetmap.org/copyright' target='_blank'>© OpenStreetMap-contributors</a>"
},
"test_arcgisrest" : {
"name": "Arcgis REST test tiled layer",
"attributions": "<a href='https://www.padovanet.it' target='_blank'>© Comune di Padova</a>"
}
},

Expand Down
21 changes: 21 additions & 0 deletions app-starter/static/app-conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
13 changes: 12 additions & 1 deletion docs/map-layer-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
28 changes: 28 additions & 0 deletions src/factory/Layer.js
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -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') {
Expand Down Expand Up @@ -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.
*
Expand Down

0 comments on commit cda4d70

Please sign in to comment.