Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arcgis rest layers support #371

Merged
merged 9 commits into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,5 @@ tests/unit/coverage/
*.njsproj
*.sln
*.sw?

app/*
chrismayer marked this conversation as resolved.
Show resolved Hide resolved
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 @@ -160,6 +160,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 GetMap URL of the WMS | `"url": "https://cartografia.comune.padova.it/server/rest/services/topo/MapServer"` |
chrismayer marked this conversation as resolved.
Show resolved Hide resolved
| 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
31 changes: 30 additions & 1 deletion 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 Expand Up @@ -199,7 +227,8 @@ export const LayerFactory = {
format: new this.formatMapping[lConf.format](lConf.formatConfig),
loader: (extent) => {
// assemble WFS GetFeature request
let wfsRequest = lConf.url + '?service=WFS&' +
const pre = lConf.url.includes('?') ? '&' : '?';
let wfsRequest = lConf.url + pre + 'service=WFS&' +
'version=' + lConf.version + '&request=GetFeature&' +
'typename=' + lConf.typeName + '&' +
'outputFormat=' + outputFormat + '&srsname=' + lConf.projection;
Expand Down
Loading