How To Setup an INSPIRE Download and View Services

Version Date:
01-05-13
Author:
Arie Kraak
How To Setup an INSPIRE Download and View Services
This “How To” describes a way to build an INSPIRE View (WMS) and Download Service (WFS). The data
used in this How To is the so called Protected Sites data from the Netherlands. Hyperlinks refer to
background on specific deegree terminolology.
Starting point
Starting point for this “How to” is that the INSPIRE data are available in a normalized relational database (in
this case a PostGIS database). The step to get from raw data to a normalized relational database is not
trivial, but out of the scope of this deegree “How To”. The WFS (Download Service) will be “Read Only”.
Workflow overview
The following workflow has been followed in this How To. (Text in brackets refer to the menu of the deegree
console).
1.
2.
3.
4.
5.
6.
7.
Fire up the deegree console
Create a new deegree workspace from scratch (general → workspaces)
Create a connection to the database (server connections → jdbc)
Create directory application schemas
Create an SQL feature store (datastores → feature)
Create a new WFS (web services → services)
Create a new WMS
7.1 Create a new WMS configuration (web services → services)
7.2 Create a new layer store (map layers → layers)
7.3 Create a new theme (map layers → themes)
7.4 Configure more layers
Note: Testing of the WFS and WMS can be done, by sending requests using the console (general → send
requests) and by using a GIS client such as Open Source Quantum GIS (www.qgis.org/). Be sure to
download its WFS 2.0.0 client plugin!
Step by step
1
Fire up the deegree console.
In this case deegree is running in TomCat and can be opened using the URL
http://127.0.0.1:8081/deegree-webservices-3.2.0
2
Create a new deegree workspace from scratch
1. Go to the .deegree directory on your system
2. Create folder with desired workspace name. In this case “how-to-inspire”
3. In deegree console click “general → workspaces”. You workspace should now be listed under
“Available workspaces”.
4. Click Start. Your workspace is now indicated as Active workspace at the top of the console
interface window.
Note: use the [Reload] button behind the workspace name to effectuate changes after editing of
workspace files.
3
Create a connection to the database
1. In the deegree console click “server connections → jdbc”
2. Enter a name. In this case “cds-inspire” and click Create new
Figure 1: jdbc
3. Enter the fields according to your settings (see figure 1).
4. Verify by clicking “test connection” and click “Create”. The new jdbc is now listed and indicated as
“On”
4
Create application schemas.
1. Create a directory “appschemas” in the how-to-inspire workspace directory.
2. Place the right INSPIRE application schemas into this directory. In this case:
• BaseType.xsd,
• GeographicNames.xsd and
• ProtectedSites.xsd.
INSPIRE schema's can be downloaded from ???
Note: The GeographicNames.xsd describes the Feature Type NamedPlace whereas
ProtectedSites.xsd describes the FeatureType: ProtectedSite. In INSPIRE terms “ProtectedSite” is a
“NamedPlace”. In deegree we have to make a mapping for both FeatureTypes (see next chapter).
5
Create an SQL feature store
This step describes the mapping of tables to features. FeatureType mapping is necessary to transform the
information from the database tables into the XML schema as required by INSPIRE. The XML schema has a
hierarchical structure, whereas the database tables itself do not have a hierarchy, but in this case only have
relations to other database tables.
1. In the deegree console click datastores → feature
2. Enter a name. In this case `protectedSite`. Choose `SQL` and click Create new.
3. Choose `Create config manually` select right JDBC Connection and click `Next`.
4. Choose Config template `example` and click OK
Note: now you enter the editing mode of the deegree console. Use `Turn on highlighting` (under
editing window) to improve the readability of the XML code. You see a template with example
configuration. We will edit this template.
Remark on Namespaces:
Every configuration file (XML) starts with definitions of name spaces. In general you may define
your own name spaces. INSPIRE requires certain names paces, others are directly related to
deegree and are automatically available when editing the deegree XML.. For instance the
preposition “ps” refers to the namespace "urn:xinspire:specification:gmlas:ProtectedSites:3.0"
EXAMPLE: protectedSite.xml
<SQLFeatureStore xmlns="http://www.deegree.org/datasource/feature/sql"
xmlns:ps="urn:x-inspire:specification:gmlas:ProtectedSites:3.0"
xmlns:gmd="http://www.isotc211.org/2005/gmd"
xmlns:gco="http://www.isotc211.org/2005/gco"
xmlns:gn="urn:x-inspire:specification:gmlas:GeographicalNames:3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
configVersion="3.1.0"
xsi:schemaLocation="http://www.deegree.org/datasource/feature/sql
http://schemas.deegree.org/datasource/feature/sql/3.1.0/sql.xsd">
...
5. Add <JDBCConnId>inspire</JDBCConnId>
6. Add <StorageCRS srid="28992"
dim="2D">urn:ogc:def:crs:EPSG::28992</StorageCRS>
This element relates the crs from the database to the srid of deegree xml. in this case local the CRS
of The Netherlands (EPSG:28992).
7. Add <GMLSchema>../../appschemas/ProtectedSites.xsd</GMLSchema>.
This refers to the schema in the directory created in Step 4
8. Next step is the actual mapping of tables to deegree xml. This step is complicated and presumes
knowledge of the database used and knowledge and INSPIRE schemas, in this case the Protected
Sites schema (ProtectedSites.xsd), which also refer to general INSPIRE schemas (BaseTypes.xsd
and GeographicalNames.xsd). More on INSPIRE data specifications can be found at:
http://inspire.ec.europa.eu/index.cfm/pageid/2
Afbeelding 2: Overview of GeographicalNames.xsd
Afbeelding 3: Overview of ProtectedSites.xsd
In this XML the mapping takes place of the following database tables (and its columns):
database: “cds_inspire” → schema “inspire” and tables →
"protected_site"
"named_place"
“site_designation"
"site_protection_classification"
“site_name”
The table “named_places” has the following columns:
"id"
"geometry"
"inspire_id_local_id"
"inspire_id_namespace"
The table “protected_site” has the following columns:
“id”
"geometry"
“legal_foundation_date"
"legal_foundation_document"
“inspire_id_local_id"
"inspire_id_namespace"
The table “site_designation" has the columns:
"fk_protected_site"
"site_designation_schema"
"site_designation"
“percentage_under_designation"
The table "site_protection_classification" has the colums:
"Property"
“Value"
The table “site_name” has the columns
“id”
“fk_protected_site”
“site_name”
9. Add the element <FeatureTypeMapping>. This determines the so called context for every following
element, and links the XML name to the database queriable (table) name. Every following nested
element is within this context. For instance. In this case the structure of the database requires two
FeatureTypeMappings:
<FeatureTypeMapping name="gn:NamedPlace" table="inspire.named_place">
and
<FeatureTypeMapping name="ps:ProtectedSite"
table="inspire.protected_site">
Both mappings will be elaborated in the next steps:
Mapping “gn:NamedPlace”
10. Add the element <FIDMapping>. This element has to be unique, in this case it is sufficient to use the
column name “id” from the database table:
<FIDMapping>
<Column name="id" type="integer"/>
</FIDMapping>
11. Add the element <beginLifespanVersion> Explanation follows
12. Add The element <Geometry>. This element is within the context “inspire.protected_site”.
<Geometry path="ps:geometry" mapping="geometry"/>
In this case <Geometry path="ps:geometry" mapping="geometry"/>maps the column “geometry”
from the database schema “inspire” and table “named_place”. The “path” determines the child name
used in the XML schema (as required by INSPIRE) in relation to its FeatureType (in this case
“gn:NamedPlacee”).
Note: the element <geometry> links geometrical data whereas the element <primitive> links other
data- types. The element <complex> makes it possible to map a “flat” database table to the required
hierarchy within XML.
13. The following element maps the general “inspireID”:
<Complex path="ps:inspireID">
<Complex path="base:Identifier">
<Primitive path="base:localId"
mapping="inspire_id_local_id"/>
<Primitive path="base:namespace"
mapping="inspire_id_namespace"/>
</Complex>
</Complex>
14. Next element is: “gn:localTyp”
<Complex path="gn:localType">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
Note: The @ sign determines the attribute (part of the tag in XML). An SQL constant In the
expression is determined by “'text'“. Note that this value does not come from the database,
but is set here.
15. The following element maps “gn:name” . This comes partly form the database table, and partly set
here.
Note: In this case it is also necessary to temporarily “leave” the current context, in order to link to
information from another table. This can be done by “Join table”. In this case the “id” from the current
context (table="inspire.named_place" as determined as context in the earlier element
<FeatureTypeMapping >) has to be linked to the “id” from another context (table) namely
“inspire.site_name”.
<Complex path="gn:name">
<Complex path="gn:GeographicalName">
<Join table="inspire.site_name" fromColumns="id"
toColumns="fk_protected_site"/>
<Primitive path="gn:language" mapping="'nld'"/>
<Complex path="gn:nativeness">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
<Complex path="gn:nameStatus">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
<Complex path="gn:sourceOfName">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
<Complex path="gn:pronunciation">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
<Complex path="gn:spelling">
<Complex path="gn:SpellingOfName">
<Primitive path="gn:text" mapping="site_name"/>
<Primitive path="gn:script" mapping="'Latn'"/>
</Complex>
</Complex>
</Complex>
</Complex>
Explanation follows
16. The final element maps “gn:type”
<Complex path="gn:type">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
17. Close the mapping </FeatureTypeMapping>
Mapping “ps.ProtectedSite”
18. Add the element <FIDMapping>. This element has to be unique, in this case it is sufficient to use the
column name “id” from the database table:
<FIDMapping>
<Column name="id" type="integer"/>
</FIDMapping>
19. Add The element <Geometry>. This element is within the context “inspire.protected_site”.
<Geometry path="ps:geometry" mapping="geometry"/>
In this case <Geometry path="ps:geometry" mapping="geometry"/>maps the column “geometry”
from the database schema “inspire” and table “protected_site”. The “path” determines the child
name used in the XML schema (as required by INSPIRE) in relation to its FeatureType (in this case
“ps.ProtectedSite”).
Note: the element <geometry> links geometrical data whereas the element <primitive> links other
data- types. The element <complex> makes it possible to map a “flat” database table to the required
hierarchy within XML.
20. The following element maps the general “inspireID”:
<Complex path="ps:inspireID">
<Complex path="base:Identifier">
<Primitive path="base:localId"
mapping="inspire_id_local_id"/>
<Primitive path="base:namespace"
mapping="inspire_id_namespace"/>
</Complex>
</Complex>
21. Next element is: “ps:legalFoundationDate”
<Primitive path="ps:legalFoundationDate" mapping="legal_foundation_date"/>
22. Next element is: "ps:legalFoundationDocument"
The structure is defined by the iso standard (http://www.isotc211.org/2005/gmd). It is out of the
scope of this How To to elaborate on that.
<Complex path="ps:legalFoundationDocument">
<Complex path="gmd:CI_Citation">
<Complex path="gmd:title">
<Primitive path="gco:CharacterString"
mapping="legal_foundation_document"/>
</Complex>
<Complex path="gmd:date">
<Complex path="gmd:CI_Date">
<Complex path="gmd:date">
<Primitive path="gco:DateTime"
mapping="legal_foundation_date"/>
</Complex>
<Complex path="gmd:dateType">
<Complex path="gmd:CI_DateTypeCode">
<Primitive path="@codeListValue"
mapping="'publication'"/>
<Primitive path="@codeList"
mapping="'http://www.isotc211.org/2005/resources/codeList.xml#CI_DateTypeC
ode'"/>
</Complex>
</Complex>
</Complex>
</Complex>
</Complex>
</Complex>
Note: Some information is not necessary available in the database table, but is still required by
INSPIRE. For instance:
<Primitive path="@codeListValue" mapping="'publication'"/>
This means that the attribute (@) “CodeListValue” is directly related to the text “Publication. The
quotes ' ' determines that it is text.
23. Next element is “ps:siteDesignation”.
Note In this case it is necessary to temporarily “leave” the current context, in order to link to
information from another table. This can be done by “Join table”. In this case the “id” from the
current context (table="inspire.protected_site" as determined as context in the earlier element
<FeatureTypeMapping >) has to be linked to the “id” from another context (table) namely
“inspire.site_designation”.
<Complex path="ps:siteDesignation">
<Complex path="ps:DesignationType">
<Join table="inspire.site_designation"
fromColumns="id" toColumns="fk_protected_site"/>
<Primitive path="ps:designationScheme"
mapping="site_designation_schema"/>
<Primitive path="ps:designation"
mapping="site_designation"/>
<Primitive path="ps:percentageUnderDesignation"
mapping="percentage_under_designation"/>
</Complex>
</Complex>
24. Next element is “ps:siteName” which incorporates "gn:GeographicalName" from
“GeographicalNames.xsd”.
<Complex path="ps:siteName">
<Complex path="gn:GeographicalName">
<Join table="inspire.site_name" fromColumns="id"
toColumns="fk_protected_site"/>
<Primitive path="gn:language" mapping="'nld'"/>
<Complex path="gn:nativeness">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
<Complex path="gn:nameStatus">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
<Complex path="gn:sourceOfName">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
<Complex path="gn:pronunciation">
<Primitive path="@xsi:nil" mapping="'true'"/>
</Complex>
<Complex path="gn:spelling">
<Complex path="gn:SpellingOfName">
<Primitive path="gn:text" mapping="site_name"/>
<Primitive path="gn:script" mapping="'Latn'"/>
</Complex>
</Complex>
</Complex>
</Complex>
25.
Final element is:
<Complex path="ps:siteProtectionClassification">
<Join table="inspire.site_protection_classification"
fromColumns="id" toColumns="fk_protected_site"/>
<Primitive path="text()" mapping="site_protection_classification"/>
</Complex>
6
26.
Close the mapping
27.
The end tag </SQLFeatureStore> completes the protectedSie.xml
</FeatureTypeMapping>
Create a new WFS
1. In the console click on web services → services.
2. Enter a name for the new WFS. In this case “how-to-inspire-download-service”. Choose type “WFS”
and click “Create new”
Note: now you enter the editing mode of the deegree console. Use `Turn on highlighting` (under
editing window) to improve the readability of the XML code. You see a template with example
configuration, which you can adjust.
3. Add <SupportedVersions> . In this case we use Version 2.0.0.
<SupportedVersions>
<Version>2.0.0</Version>
</SupportedVersions>
4. Set <EnableTransactions> to “false” (In this case a normalized database is used, which does not
allow transactions (Read Only)):
<EnableTransactions>false</EnableTransactions>
5. Set <EnableResponseBuffering> to “false” to avoid buffering of features:
<EnableResponseBuffering>false</EnableResponseBuffering>
6. Add <FeatureStoreId> as chosen above. In this case: “protectedSite”
<FeatureStoreId>protectedSite</FeatureStoreId>
7. Add the <queryCRS> as required by INSPIRE, plus local <queryCRS> (In this case for The
Netherlands: EPSG:28992)
<QueryCRS>urn:ogc:def:crs:EPSG::28992</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::4326</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::4258</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::900913</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::3035</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::3034</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::25830</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::25831</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::25832</QueryCRS>
8. Add <QueryMaxFeatures> and set to – 1 (unlimited)
<QueryMaxFeatures>-1</QueryMaxFeatures>
9.
Create directory “queries” in your workspace. Add the queries as required by INSPIRE:
GetdataSetById, IdQuery and TypeQuery, and refer to them:
<StoredQuery>../queries/GetDataSetById.xml</StoredQuery>
<StoredQuery>../queries/IdQuery.xml</StoredQuery>
<StoredQuery>../queries/TypeQuery.xml</StoredQuery>
10. Add <GMLFormat gmlVersion="GML_32"> element as required by INSPIRE.
Note: <DisableDynamicSchema>true</DisableDynamicSchema> to get the original INSPIRE
schema as response to DecribefeatureType, instead of the schema as generated by deegree.
Note <DisableStreaming>false</DisableStreaming> to avoid that deegree uses its storage in
memory first before actual serving data for download.
11. The configuration now looks like:
EXAMPLE: inspire-how-to-download-service.xml
<deegreeWFS xmlns="http://www.deegree.org/services/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
configVersion="3.2.0"
xsi:schemaLocation="http://www.deegree.org/services/wfs
http://schemas.deegree.org/services/wfs/3.2.0/wfs_configuration.xsd">
<SupportedVersions>
<Version>2.0.0</Version>
</SupportedVersions>
<FeatureStoreId>protectedSite</FeatureStoreId>
<EnableTransactions>false</EnableTransactions>
<!-- QueryCRS [1...n]: Announced CRS, first element is the default
CRS -->
<QueryCRS>urn:ogc:def:crs:EPSG::28992</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::4326</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::4258</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::900913</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::3035</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::3034</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::25830</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::25831</QueryCRS>
<QueryCRS>urn:ogc:def:crs:EPSG::25832</QueryCRS>
<QueryMaxFeatures>-1</QueryMaxFeatures>
<StoredQuery>../queries/GetDataSetById.xml</StoredQuery>
<StoredQuery>../queries/IdQuery.xml</StoredQuery>
<StoredQuery>../queries/TypeQuery.xml</StoredQuery>
<GMLFormat gmlVersion="GML_32">
<MimeType>application/gml+xml; version=3.2</MimeType>
<MimeType>text/xml; subtype=gml/3.2.1</MimeType>
<GetFeatureResponse xmlns:gml="http://www.opengis.net/gml/3.2">
<ContainerElement>gml:FeatureCollection</ContainerElement>
<FeatureMemberElement>gml:featureMember</FeatureMemberElement>
<AdditionalSchemaLocation>http://www.opengis.net/gml/3.2
http://schemas.opengis.net/gml/3.2.1/deprecatedTypes.xsd</AdditionalSchem
aLocation>
<DisableDynamicSchema>true</DisableDynamicSchema>
<DisableStreaming>false</DisableStreaming>
</GetFeatureResponse>
</GMLFormat>
12. Click on Save and [Reload] to activate changes.
NOTE: You can check the services using for instance QuantumGIS. Be sure you downloaded its
WFS 2.0.0 plugin!
TO DO: extended capabilities as required by INSPIRE
To DO: metadata Services (as required by INSPIRE)
To DO Edit global configuration
7
Create a new WMS In this case “inspire-how-to-view-service”
7.1 Create the WMS configuration file
1. In the console click on web services → services.
2. Enter a name for the new WMS. In this case “how-to-inspire-view-service”. Choose type “WMS” and
click Create new.
Note: now you enter the editing mode of the deegree console. Use `Turn on highlighting` (under
editing window) to improve the readability of the XML code. You see a template with example
configuration, which you can adjust.
3. Add <SupportedVersions> “Version 1.3.0 “ and “Version 1.1.1”
Note: add version 1.1.1, to be able to use the “see layers” option in the console, which is based on
OpenLayers.
4. Set <MaxFeatures> to “0” so that the number of rendered features is unlimited
5. Introduce a <wms:ThemeId>. In this case `how-to-inspire-themes`. The actual layer configuration will
be done step 6.3.
6. The configuration looks like:
EXAMPLE: how-to-inspire-view-service.xml
<wms:deegreeWMS
xmlns:wms="http://www.deegree.org/services/wms"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:dgws="http://www.deegree.org/webservices"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
configVersion="3.2.0"
xsi:schemaLocation="http://www.deegree.org/services/wms
http://schemas.deegree.org/services/wms/3.2.0/wms_configuration.xsd">
<wms:SupportedVersions>
<wms:Version>1.1.1</wms:Version>
<wms:Version>1.3.0</wms:Version>
</wms:SupportedVersions>
<wms:ServiceConfiguration>
<wms:DefaultLayerOptions>
<wms:MaxFeatures>0</wms:MaxFeatures>
</wms:DefaultLayerOptions>
<wms:ThemeId>how-to-inspire-themes</wms:ThemeId>
</wms:ServiceConfiguration>
</wms:deegreeWMS>
7. Click on save and [Reload] to activate changes.
To Do: Edit global configuration and metadata
7.2 Create a new layer store
1. In the console, click on map layers → layers . Enter a name and choose the type “ Feature” . In this
case “how-to-inspire-layers”. Click Create new. The template configurations opens.
2. Set the right <FeatureStoreId>. In this case “protectedSite”.
3. We will omit the <Filter> element.
4. Use the appropriate INSPIRE names and title in this case “PS.ProtectedSite” and “Beschermde
gebieden”.
5. We use a simple configuration, in which we will make use of default styling, by omitting the
<l:StyleRef> element.
6. The configuration looks like:
EXAMPLE how-to-inspire-layers.xml
<FeatureLayers xmlns="http://www.deegree.org/layers/feature"
xmlns:ogc='http://www.opengis.net/ogc'
xmlns:ps="urn:x-inspire:specification:gmlas:ProtectedSites:3.0"
xmlns:d="http://www.deegree.org/metadata/description"
xmlns:l="http://www.deegree.org/layers/base"
xmlns:s="http://www.deegree.org/metadata/spatial"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.deegree.org/layers/feature
http://schemas.deegree.org/layers/feature/3.2.0/feature.xsd"
configVersion="3.2.0">
<FeatureStoreId>protectedSite</FeatureStoreId>
<FeatureLayer>
<l:Name>PS.ProtectedSite</l:Name>
<d:Title>Beschermde gebieden</d:Title>
</FeatureLayer>
</FeatureLayers>
7. Click on save and [Reload] to activate changes.
7.3 Create a new Theme
1.
2.
3.
4.
In the console, click on map layers → themes.
Enter a name (In this case “how-to-inspire-themes”), choose “Standard” and click Create new.
Set the right <LayerStoreId>. In this case: “how-to-layers” as chosen in step 6.2.
We will configure one theme layer. This has to be nested however in a base theme.Set the
<Identifier>. In this case “ Base”
5. Choose a title <d:Title>: “Beschermde gebieden”.
6. Set the <s:CRS> The list of <s:CRS> is required by INSPIRE plus in this case local CRS for the
Netherlands ( EPSG:28992). In this case local CRS for the Netherlands ( EPSG:28992)
7. Add <Theme> with <Identifier>, <d:Title> and <Layer>. The configuration looks in this case like:
EXAMPLE: how-to-inspire-themes.xml
<Themes xmlns="http://www.deegree.org/themes/standard"
xmlns:d="http://www.deegree.org/metadata/description"
xmlns:s="http://www.deegree.org/metadata/spatial"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
configVersion="3.2.0"
xsi:schemaLocation="http://www.deegree.org/themes/standard
http://schemas.deegree.org/themes/3.2.0/themes.xsd">
<LayerStoreId>how-to-layers</LayerStoreId>
<Theme>
<Identifier>Base</Identifier>
<d:Title>Beschermde gebieden</d:Title>
<s:CRS>EPSG:28992 EPSG:4326 EPSG:4258 EPSG:3035 EPSG:3034
EPSG:25830 EPSG:25831 EPSG:25832 urn:ogc:def:crs:EPSG::28992
urn:ogc:def:crs:EPSG::4326 urn:ogc:def:crs:EPSG::4258
urn:ogc:def:crs:EPSG::3035 urn:ogc:def:crs:EPSG::3034
urn:ogc:def:crs:EPSG::25830 urn:ogc:def:crs:EPSG::25831
urn:ogc:def:crs:EPSG::25832</s:CRS>
<Theme>
<Identifier>PS.ProtectedSite</Identifier>
<d:Title>Beschermde gebieden</d:Title>
<Layer>PS.ProtectedSite</Layer>
</Theme>
</Theme>
</Themes>
7.4 Configure more layers:
Note: Next steps seem to give a unexpected pronlem in deegree. Adding a sub-layer with filter
element, does effect all layers! Notification has been send to the deegree userslist.
1. Make a new theme for each layer
Note: The WMS considers a theme as a layer. Multiple datalayers under one theme is served by the
WMS as one layer formed by the aggregate of the specified datalayers under that theme):
2. Insert the new theme into the existing theme configuration (In this case:
ps.ProtectedSiteArchaeological)
EXAMPLE: inspire-how-to-themes.xml
…
<Theme>
<Identifier>ps.ProtectedSite</Identifier>
<d:Title>Beschermde gebieden - Alles</d:Title>
<Layer>ps.ProtectedSite</Layer>
</Theme>
<Theme>
<Identifier>ps.ProtectedSiteArchaeological</Identifier>
<d:Title>Beschermde gebieden - Archeologie</d:Title>
<Layer>ps.ProtectedSiteArchaeological</Layer>
</Theme>
</Theme>
3. Define the right FeatureType and add a filter .
Note: be sure that the right data (as required by INSPIRE) is filtered in the layerstore . (In this case :
<ogc:PropertyName>ps:siteProtectionClassification</ogc:PropertyName> and
<ogc:Literal>archaeological</ogc:Literal>)
EXAMPLE: inspire-how-to-layers.xml
…
<FeatureLayer>
<FeatureType>ps:ProtectedSite</FeatureType>
<Filter>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>ps:siteProtectionClassification</ogc:PropertyName>
<ogc:Literal>archaeological</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</Filter>
<l:Name>PS.ProtectedSiteArchaeological</l:Name>
<d:Title>Beschermde gebieden - Archeologie</d:Title>
</FeatureLayer>
4.
Consult the INSPIRE requirements for more information on the required sub-layers
TO DO Meta data configuration
TO DO Extended capabilities as required by INSPIRE
TO DO Styling
N.a.v.
In workspace bij datastore kan een boundingbox cache staan, met verkeerde waarden als
gevolg van eerdere configuratiefouten. Tomcat stoppen. Deze cache weggooien en tomcat
opnieuw starten, kan problemen met Bounding Boxes in bv quantum GIS verhelpen.