Realisatie BAG WFS voor Pilot Brandweer Roermond Datum: Afdeling: Adviseur: Versie:
Ontwikkelaar(s):
25 augustus 2009 Materiebeleid GEO/RZ GEORZ-lab, Ebrahim Hemmatnia 1.4 Just van den Broecke
Inleiding Dit document beschrijft de technische realisatie van een Web Feature Service (WFS) zoals gespecificeerd in het document “Inrichting WFS voor Pilot Brandweer” [1] door Peter Jansen. De klant voor dit pilot project is de brandweer Roermond (contact: Alex Janssen). Voor de inrichting van de WFS is gebruik gemaakt van de bestaande GEORZ-lab “kademo.nl” omgeving gebaseerd op Open Source geo-tools zoals de GeoServer WMS/WFS server en de ruimtelijke database PostgreSQL/PostGIS. De rest van dit document beschrijft de huidige inrichting van de kademo.nl server, de data import, het configureren van de WFS, het testen met verscheidene GIS clients en eindigt met conclusies/aanbevelingen.
Overzicht Figuur 1. hieronder geeft een overzicht van de kademo.nl server architectuur. Hierbij geven de pijlen de richting van de dataflow vanaf de brondata (PostGIS) naar de uiteindelijke client die de WFS service afneemt (Client Applicaties). Deze figuur zal tevens gebruikt worden om de inrichting van de server te beschrijven.
Client Applicaties (Browser+Desktop)
http/https
Apache Webserver http proxy
Tomcat WMS SLD
WFS
Adm
Tomcat GeoServer
PostGIS
Figuur 1. Server Architectuur
Server Inrichting GeoServer is een in Java (J2EE) geschreven WFS/WMS server die zowel zelfstandig als binnen een zogenaamde J2EE Applicatie Server kan draaien. Binnen onze opzet is Apache Tomcat als J2EE Applicatie Server gekozen. Binnen Tomcat draait GeoServer als web-applicatie. De Apache webserver levert de toegang tot de website www.kademo.nl en de webservices daarbinnen. Apache is via een proxy module gekoppeld aan Tomcat. Hierbij worden requests voor / geoserver/* doorgegeven (bijv. WMS requests) naar GeoServer binnen Tomcat. GeoServer ondersteunt een groot aantal data-formaten zoals, ESRI Shape, MapInfo, GeoTIFF, maar ook databases zoals Oracle Spatial en PostGIS (zie figuur). Binnen GEORZ-projecten wordt bij voorkeur PostGIS gebruikt. “PostGIS” is in feite een PostgreSQL relationele database (RDBMS) voorzien van de extensie (plugin) PostGIS die ondersteuning voor ruimtelijke (spatial) data biedt binnen PostgreSQL. Op dit moment draaien Apache+Tomcat en PostgreSQL/PostGIS ieder op aparte servers binnen de BedrijvenWeb hosting organisatie.
Plan van Aanpak De WFS realisatie is uitgevoerd in de volgende stappen: 1. brondata import in PostGIS 2. WFS configuratie 3. WFS verbindings-tests met verscheidene GIS web -en desktop clients 4. opstellen resultaten/conclusies
Brondata Import De BAG brondata werd in dit project aangeleverd als MapInfo en ESRI Shape-bestanden. Deze data omvatte 3 feature-typen: Panden, Verblijfsobjecten en Woonplaatsen. Zoals document [1] aangeeft is bewust gekozen voor een simpel BAG-datamodel. De dekking (extent / bounding box) besloeg de gemeente Stede Broec (NH) bestaande uit 3 woonplaatsen. Voor de data import is gekozen om de MapInfo bestanden te gebruiken, m.n. omdat hierin de attribuut-namen niet waren “afgekapt”. In Figuur 2 staat de conversie-flow van de data import weergeven. De ovaal geeft een de conversie-tool aan.
MapInfo Files
ogr2ogr
PostGIS
Figuur 2. Conversie flow van brondata
In bijzonder zijn de files PAND.tab, VERBLIJFSOBJECT.tab en WOONPLAATS.tab gebruikt. De import naar PostGIS is gedaan met de standaard Open Source GDAL/OGR (www.gdal.org) tool ogr2ogr zoals in de figuur aangegeven. ogr2ogr is een soort “zwitsers zakmes” voor de conversie van de meest gangbare geo-formaten. De resulterende tabellen heten bag_sb_pand en bag_sb_verblijfsobj en bag_sb_woonplaats.
Hieronder staan de specifieke (Unix) scripts die hierbij gebruikt zijn. Deze zijn nu eenvoudig te hergebruiken wanneer er een nieuwe versie van de MapInfo files geleverd wordt. export PGCLIENTENCODING="LATIN1" ogr2ogr -overwrite -t_srs "EPSG:28992" -f "PostgreSQL" PG:"host=localhost user=<usr> dbname=nl password=
" PAND.tab -nln bag_sb_pand -lco GEOMETRY_NAME=geom ogr2ogr -overwrite -t_srs "EPSG:28992" -f "PostgreSQL" PG:"host=localhost dbname=nl password=" VERBLIJFSOBJECT.TAB -nln bag_sb_verblijfsobj -lco GEOMETRY_NAME=geom
user=<usr>
ogr2ogr -overwrite -t_srs "EPSG:28992" -f "PostgreSQL" PG:"host=localhost user=<usr> dbname=nl password=" WOONPLAATS.tab -nln bag_sb_woonplaats -lco GEOMETRY_NAME=geom NB Een probleem dat optrad (“encoding error”) was dat Strings in de brondata gecodeerd waren volgens “charset WindowsLatin1”. Standaard verwacht OGR/PostGIS UTF-8 encoding. Door het zetten van een omgevingsvariable PGCLIENTENCODING werd dit verholpen.
WFS Configuratie GeoServer kan via haar adminstratieve web interface gemakkelijk aan PostGIS gekoppeld worden. Hierbij zal GeoServer alle tabellen met ruimtelijke kolommen automatisch als (kandidaat) OGC Simple Features herkennen. De tabellen bag_sb_pand en bag_sb_verblijfsobj en bag_sb_woonplaats zijn dus ieder de bron voor (drie) nieuwe WFS FeatureType. De stappen voor ieder FeatureType zijn als volgt: 1. maak nieuwe Feature aan in GeoServer (maak keuze uit dropdown-list, bijv “bag_sb_pand”) 2. edit Feature, meestal weinig nodig, alleen bijv beschrijving toevoegen en extent genereren Na deze stappen zijn de FeatureTypes beschikbaar en is de WFS gereed voor gebruik. De GeoServer admin web interface laat ook zien welke attribuut typen elke feature heeft. Deze kwamen alle overeen met de attribuutgegevens in [1].
WFS Gegevens WFS URL: http://www.kademo.nl/geoserver/wfs?
WFS FeatureTypes (met NameSpace): kad:bag_sb_pand en kad:bag_sb_verblijfsobj en kad:bag_sb_woonplaats
Zowel WFS 1.0.0 als WFS 1.1.0 wordt ondersteund. WFS Tests De WFS is getest met verschillende GIS clients. Hierbij bleken verschillende aansluitingsproblemen op te treden bij gebruik WFS 1.1.0. De enige GIS-clients die geheel naar behoren werkte waren de Open Source clients uDig (versie 1.2M5) en OpenLayers. Zie ook de figuren hieronder.
Figuur 3. Weergave WFS 1.1.0 in uDig 1.2 M5 en QGIS 1.2 trunk
Figuur 4. Weergave WFS 1.0.0 in QGIS 1.2 trunk
Figuur 5. Weergave WFS in OpenLayers
Een aantal GIS clients die getest werden bleken interworking-problemen te vertonen. Hieronder een samenvatting van gebruikte clients en resultaten. Client
Waarneming
Verbinding
gvSIG 1.1.2
"String idx exception org.gvsig.crs.CrsFactory.getCRS()"
nee
uDig 1.1 M5
alles ok
ja
Gaia 3.3
negeert SRS, geeft weer in EPSG:4326, GML interworking issues
j/n (alleen GML2)
GeoMedia Viewer 6.1
"urnx-ogcdefcrsEPSG28992.csf not found"
j/n (alleen indien negeren projectie)
GeoMedia Professional
(als GeoMedia Viewer 6.1)
j/n (alleen indien negeren projectie)
ArcGIS
onbekende foutmelding
nee
QGIS 1.2.0trunk
alleen 1.2 werkte goed, maar wel met WFS 1.0.0
ja
Tabel 1. Resultaten interworking GeoServer WFS 1.1.0 met GIS desktop clients
Bijna alle verbindingsproblemen hierboven bleken te herleiden tot de “encoding” van “DefaultSRS” in elk FeatureType in de GetCapabilities response die GeoServer (1.7.5) teruggeeft. Deze was: . urn:x-ogc:def:crs:EPSG:28992 Hier wordt de zogenaamde Fully Qualified Name (FQN) voor de projectie-naam gebruikt. De meeste clients verwachten mogelijk een EPSG code bijv. EPSG:28992 Echter de OGCspecificatie voor WFS 1.1.0 en de daarin gerefereerde GML 3.1.1 specificatie geven 3 mogelijkheden voor SRS encoding. In de WFS 1.1.0 specificatie staat bijv. “The SRS may be indicated using either the European Petroleum Survey Group form 'EPSG:' or the URL format defined in subclause 4.3.2 of reference [2]...". Kortweg komt het erop neer dat OGCcompliant clients/servers drie typen SRS encoding moeten ondersteunen waaronder de FQN. Geoserver is zelfs de OGC referentie implementatie en geeft altijd de FQN vorm terug. Dit werd ook op de GeoServer mailing list bevestigd, zie [4] en http://tinyurl.com/m7s89f.
Conclusies De WFS zoals ingericht voor “Stede Broec BAG data” voldoet aan de specificaties, echter de meeste clients voldoen niet aan de OGC specificaties voor de FQN vorm van de SRS naam. De ondersteuning voor SRS FQN vorm zal dus eerst op de diverse clients moeten plaatsvinden. Aanpassing in GeoServer (om EPSG codes te gebruiken) is momenteel niet mogelijk en wordt ook niet wenselijk geacht. Voor GeoMedia-clients (Intergraph) kan ook een “patch” worden toegepast door de file “EPSG28992.csf” te kopieeren en te hernoemen naar “urnx-ogcdefcrsEPSG28992.csf”.
Tools en Versies Tool
Functie
Website
Apache Tomcat 6.0
J2EE applicatie server
tomcat.apache.org
Apache HTTP Server 2.2.10
HTTP(S) web server, o.a. authenticatie
httpd.apache.org
PostgreSQL
Relationele Database
postgresql.org
PostGIS
PostgreSQL extensie voor spatial data
postgis.refractions.net
GeoServer 1.7.5
WMS/WFS server
geoserver.org
Referenties [1] “Inrichting WFS voor pilot brandweer”, Peter Jansen, Directie Geo Product- en Procesbeheer; 3 juli 2009 [2] “OpenGIS Geography Markup Language (GML) Implementation Specification” ; OpenGIS Implementation Specification; Cox S., Daisey P., Lake, R., Portele C., Whiteside A. (eds.), version 3.1.1, January 2005; [OGC 02-023r4] [3] Open Geospatial Consortium (OGC) “WFS Implementation Specification 1.1.0” [OGC 04-094]; [4] http://tinyurl.com/m7s89f communications on SRS FQN on the GeoServer user mailing list