mrmap-community / mrmap

Spatial Service Registry
https://mrmap.rtfd.io/en/master/
MIT License
11 stars 6 forks source link

Map Context: API endpoint #244

Closed MrSnyder closed 2 years ago

MrSnyder commented 2 years ago

User Story

As an API client, I want to be able to download mapcontext documents according to the OGC OWS Context GeoJSON Encoding Standard, so that I can initialize a map view with a hierachy of wms layers.

Acceptance criteria

MrSnyder commented 2 years ago

Hey team! Please add your planning poker estimate with ZenHub @Unraveler @jokiefer

MrSnyder commented 2 years ago

Tasks:

armin11 commented 2 years ago

Let's think about an intermediate format - more logical:

{
    "id": 123,
    "title": "My MapContext",
    "abstract": "My MapContext Description",
    "extent": [-180, -90, 180, 90],
    "mapContextLayer": [{
        "id": 234,
        "parent": null,
        "title": {
            "en": "My context layer title",
            "de": "Mein Context Layer Titel"
        },
        "contextLayerOperation": [{
                "operationType": "render",
                "operationOptions": {
                    "operationOptionSource": {
                        "type": "wms",
                        "layerId": 1,
                        "format": "image/png"
                    },
                    "minScale": 100,
                    "maxScale": 10000,
                    "transparency": 20,
                    "selectable": true,
                    "selected": true,
                    "styles": [{
                        "styleType": "named",
                        "styleName": "grey"
                    }],
                    "dimensions": [{
                        "name": "time",
                        "userValue": "1952"
                    }]
                }
            },
            {
                "operationType": "select",
                "operationOptions": {
                    "operationOptionSource": {
                        "type": "wms",
                        "layerId": 1,
                        "format": "text/html"
                    },
                    "selectable": true,
                    "selected": true
                }
            },
            {
                "operationType": "metadata",
                "operationOptions": {
                    "operationOptionSources": [{
                            "type": "dataset",
                            "datasetId": 12
                        },
                        {
                            "type": "dataset",
                            "datasetId": 13
                        }
                    ]
                }
            },
            {
                "operationType": "edit",
                "operationOptions": {
                    "operationOptionSource": {
                        "type": "wfs",
                        "featuretypeId": 5
                    }
                }
            }
        ]
    }]
}

The information for the external usage must be extended with information from the mrmap registry:

{
    "id": 123,
    "title": "My MapContext",
    "abstract": "My MapContext Description",
    "extent": [-180, -90, 180, 90],
    "mapContextLayer": [{
        "id": 234,
        "parent": null,
        "title": {
            "en": "My context layer title",
            "de": "Mein Context Layer Titel"
        },
        "maxExtent": [6, 49, 8, 51],
        "contextLayerOperation": [{
                "operationType": "render",
                "operationOptions": {
                    "operationOptionSource": {
                        "type": "wms",
                        "typeVersion": "1.1.1",
                        "layerId": "wald",
                        "registryResourceId": 1,
                        "operationUri": "https://geo5..."
                    },
                    "minScale": 100,
                    "maxScale": 10000,
                    "transparency": 100,
                    "selectable": true,
                    "selected": true,
                    "styleType": "named",
                    "styles": ["default", "color", "grey"],
                    "selectedStyle": "grey",
                    "dimensions": [{
                        "name": "time",
                        "units": "ISO8601",
                        "unitSymbol": "",
                        "default": "1970",
                        "multipleValues": "",
                        "nearestValue": "0",
                        "current": "",
                        "extent": "1885/2019/P1Y",
                        "userValue": "1952"
                    }]
                }
            },
            {
                "operationType": "select",
                "operationOptions": {
                    "operationOptionSource": {
                        "type": "wms",
                        "typeVersion": "1.1.1",
                        "layerId": "wald",
                        "registryResourceId": 1,
                        "operationUri": "https://geo5..."
                    },
                    "selectable": true,
                    "selected": true
                }
            },
            {
                "operationType": "metadata",
                "operationOptions": {
                    "operationOptionSources": [{
                            "type": "dataset",
                            "datasetId": 12
                        },
                        {
                            "type": "dataset",
                            "datasetId": 13
                        }
                    ]
                }
            },
            {
                "operationType": "edit",
                "operationOptions": {
                    "operationOptionSource": {
                        "type": "wfs",
                        "featuretypeId": 5
                    }
                }
            }
        ]
    }]
}

Here is a part of an old wmc 1.1.0 document for a wms layer:

    <Layer queryable="0" hidden="1">
      <Server service="OGC:WMS" version="1.1.1" title="historisch LIKA WMS-T">
        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="https://geo4.service24.rlp.de/wms/hklika.fcgi?"/>
      </Server>
      <Name>rp_hklika</Name>
      <Title>hklika RP</Title>
      <Abstract>Historische Liegenschaftskarte</Abstract>
      <SRS>EPSG:25832 EPSG:4326 EPSG:3857 EPSG:4258 EPSG:31466 EPSG:31467 EPSG:31468 </SRS>
      <DimensionList>
        <Dimension name="time" units="ISO8601" unitSymbol="" default="2006" multipleValues="" nearestValue="0" current="" extent="2006/2018/P2Y" userValue=""/>
      </DimensionList>
      <FormatList>
        <Format>image/jpeg</Format>
        <Format current="1">image/png</Format>
        <Format>image/tiff</Format>
      </FormatList>
      <StyleList/>
      <Extension>
        <mapbender:wms_name>OGC:WMS</mapbender:wms_name>
        <mapbender:minscale>0</mapbender:minscale>
        <mapbender:maxscale>0</mapbender:maxscale>
        <mapbender:gui_minscale>0</mapbender:gui_minscale>
        <mapbender:gui_maxscale>0</mapbender:gui_maxscale>
        <mapbender:layer_id>61840</mapbender:layer_id>
        <mapbender:wms_layer_id>61839</mapbender:wms_layer_id>
        <mapbender:wms_selectable>1</mapbender:wms_selectable>
        <mapbender:wms_visible>1</mapbender:wms_visible>
        <mapbender:layer_pos>1</mapbender:layer_pos>
        <mapbender:layer_parent>0</mapbender:layer_parent>
        <mapbender:wms_id>3407</mapbender:wms_id>
        <mapbender:querylayer>0</mapbender:querylayer>
        <mapbender:gui_selectable>1</mapbender:gui_selectable>
        <mapbender:gui_queryable>0</mapbender:gui_queryable>
        <mapbender:gui_status>1</mapbender:gui_status>
        <mapbender:layer_epsg>
          <mapbender:data0>
            <mapbender:epsg>EPSG:4326</mapbender:epsg>
            <mapbender:minx>5.9086</mapbender:minx>
            <mapbender:miny>48.7512</mapbender:miny>
            <mapbender:maxx>8.68687</mapbender:maxx>
            <mapbender:maxy>51.0191</mapbender:maxy>
          </mapbender:data0>
          <mapbender:data1>
            <mapbender:epsg>EPSG:25832</mapbender:epsg>
            <mapbender:minx>283000</mapbender:minx>
            <mapbender:miny>5404000</mapbender:miny>
            <mapbender:maxx>477000</mapbender:maxx>
            <mapbender:maxy>5652000</mapbender:maxy>
          </mapbender:data1>
          <mapbender:data2>
            <mapbender:epsg>EPSG:3857</mapbender:epsg>
            <mapbender:minx>657742.34330114</mapbender:minx>
            <mapbender:miny>6232750.1997859</mapbender:miny>
            <mapbender:maxx>967017.94498737</mapbender:maxx>
            <mapbender:maxy>6624672.9872659</mapbender:maxy>
          </mapbender:data2>
          <mapbender:data3>
            <mapbender:epsg>EPSG:4258</mapbender:epsg>
            <mapbender:minx>5.9086</mapbender:minx>
            <mapbender:miny>48.7512</mapbender:miny>
            <mapbender:maxx>8.68687</mapbender:maxx>
            <mapbender:maxy>51.0191</mapbender:maxy>
          </mapbender:data3>
          <mapbender:data4>
            <mapbender:epsg>EPSG:31466</mapbender:epsg>
            <mapbender:minx>2493279.6682482</mapbender:minx>
            <mapbender:miny>5401411.503269</mapbender:miny>
            <mapbender:maxx>2688497.2102679</mapbender:maxx>
            <mapbender:maxy>5657067.0283047</mapbender:maxy>
          </mapbender:data4>
          <mapbender:data5>
            <mapbender:epsg>EPSG:31467</mapbender:epsg>
            <mapbender:minx>3272714.1497902</mapbender:minx>
            <mapbender:miny>5406019.6526898</mapbender:miny>
            <mapbender:maxx>3478030.7318187</mapbender:maxx>
            <mapbender:maxy>5653676.8345566</mapbender:maxy>
          </mapbender:data5>
          <mapbender:data6>
            <mapbender:epsg>EPSG:31468</mapbender:epsg>
            <mapbender:minx>4052230.6267401</mapbender:minx>
            <mapbender:miny>5419335.0308583</mapbender:miny>
            <mapbender:maxx>4267576.7966393</mapbender:maxx>
            <mapbender:maxy>5658856.5700627</mapbender:maxy>
          </mapbender:data6>
          <mapbender:data7>
            <mapbender:epsg/>
            <mapbender:minx/>
            <mapbender:miny/>
            <mapbender:maxx/>
            <mapbender:maxy/>
          </mapbender:data7>
        </mapbender:layer_epsg>
        <mapbender:gui_wms_opacity>100</mapbender:gui_wms_opacity>
        <mapbender:layer_featuretype_coupling/>
      </Extension>
    </Layer>
Unraveler commented 2 years ago

Thanks @armin11 , that is really helpfull :+1: