Opensource och WMS på SGU Jonas Holmberg & Johan Olsson
Systemarkitektur befintlig plattform OS Solaris & Windows server Webb- & applikationsserver Apache 2 Tomcat 4.1 och 5.5 Kartserver Apache 2 & Tomcat 5.0 ArcIMS 9.1 & 9.2 / WMSConnector 9.1 & 9.2 Geoserver Databasserver Oracle 9i / ArcSDE 9.2
Problem befintlig plattform Spretighet Flera olika OS Många olika versioner av applikationsservrar (Tomcat 4.x, 5.x,5.5.x) Olika versioner av Java (1.4, 1.5, 1.6) Underhåll / uppgraderingar Svårt att underhålla och uppgradera Licenskostnader Prestanda
Systemarkitektur ny plattform OS Linux Ubuntu LTS Webb- & applikationsserver Tomcat 6 Kartserver Tomcat 6 GeoServer, WMS (Deegree, WMS 1.3 /WFS) Databasserver PostgreSQL 8.3.8 / PostGIS 1.3.5
Systemarkitektur ny plattform Maskinerna körs virtualiserat Webbfront Tomcat Kartvisare Namnsök Kartserver Tomcat GeoServer Databas PostgreSQL+PostGIS
GeoServer WMS tips & tricks Problem: WMS GetCapabilities för GeoServer ger svar med alla ingående lager som publicerats som WMS lager på servern Kan vara svårt att överblicka vid många (flera 10- tals) lager Lösning: Lösning kan vara att använda sig av den specifika GeoServer-parametern &namespace=
PostgreSQL / PostGIS - struktur GIS lager i PostgreSQL / PostGIS Indelning i databasscheman enligt geologiskt tema
GeoServer - Namespace Eget namespace för varje tema Namespacet får en egen URI
GeoServer - Datastore Namespace kopplas till databasschema i konfig av Datastore i GeoServer
GeoServer - Featuretype Featuretype -lagren är sorterade enligt respektive Datastore vid definition av nytt lager
http://.../.../wms?request=getcapabilities&namespace=berg GeoServer - GetCapabilities http://.../.../wms?request=getcapabilities&namespace=berg
GeoServer WMS tips & tricks Att tänka på vid uppgradering av GeoServer (gäller från 1.6.x serien) Separera GeoServer webbapplikationen från dess katalog som innehåller datadefinitioner, SLD etc.
GeoServer webapp struktur Ren GeoServerkatalog med tom datakatalog Separat data-katalog utanför GeoServer instansen Underlättar uppgraderingar genom att datat är oberoende av GeoServer webbapplikationen
GeoServer web.xml Kopplingen mellan GeoServer och data katalogen sker genom att ange sökvägen i web.xml för GeoServer webbapplikationen
GeoServer web.xml Koppling mellan GeoServer och data katalogen OBS! Omstart av applikationen krävs för att ändringarna skall slå igenom
GeoServer WMS tips & tricks GetFeatureInfo resultat Giltiga INFO_FORMAT parametrar text/html text/plain application/vnd.ogc.gml text/plain och application/vnd.ogc.gml resultatet är styrt av formatet och kan inte anpassas text/html resultatet kan anpassas från defaultuseende till ett anpassat utseende
GeoServer GetFeatureInfo text/html Utseendet styrs av s.k. templates FreeMarker Templates Template engine för Java Generar text (html, ascii etc) output från attribut i java objekt Liknar xslt syntaktiskt
GeoServer GetFeatureInfo text/html Default utseende En tabellrad Varje attribut och värde som egen kolumn
GeoServer GetFeatureInfo text/html Anpassat utseende Attribut och värde radvis
GeoServer GetFeatureInfo text/html text/html resultatet styrs i olika nivåer från: GeoServers classpath som laddar default template från wms-1.7.7.jar Generellt för hela GeoServer instansen GeoServers data katalog /featuretypes/template.ftl För en global override av default, fortfarande generellt för instansen GeoServers data katalog /templates/namespaceprefix/template.ftl För ett namespace specifikt useende GeoServers data katalog /featuretypes/minfeaturetype/template.ftl För ett specifikt utseende för ett lager
GeoServer SLD tips & tricks Använd skalintervall för att styra när datat skall visas <Rule> <MinScaleDenominator>10000</MinScaleDenominator> <MaxScaleDenominator>100000</MaxScaleDenominator> Indexera attributen som används för filtrering <ogc:filter> <ogc:propertyisequalto> <ogc:propertyname>symbol</ogc:propertyname> <ogc:literal>100</ogc:literal> </ogc:propertyisequalto> </ogc:filter> Försiktig med: tranparens, labels, halos, flera featuretypestyles och flera symboliseringar / feature
GeoServer Övrigt tips & tricks Ta bort alla tjänstetyper som inte används Om WFS och / eller WCS inte används, avaktivera dessa WFS kan dessutom delas in i: Basic WFS-T, Transactional Avaktivera / aktivera vid behov
GeoServer Övrigt tips & tricks Default stöder GeoServer över 4000 EPSG koder för referenssystem Påverkar GetCapabilities resultatet som blir onödigt långt Redigera listan för EPSG koder, ta med de som behövs Utdrag ur Capabilities Läs mer på http://docs.geoserver.org/1.7.x/en/user/
Kartvisarapplikationen Egen utveckling med olika Opensource komponenter OpenLayers För WMS-tjänsterna (GetCapabilities, GetMap & GetFeatureInfo) Mapfish Koppling mellan lagerlistan och kartans lager Verktyg och interaktion med kartan ExtJS Layout JSP/Servlet
Kartvisarapplikation OpenLayers Openlayers Opensource Javascript bibliotek för GIS-funktionalitet i webbläsare Kan läsa kartdata från många olika källor WMS KML etc.
Kartvisarapplikation Mapfish Opensource Javascript ramverk för att bygga webbaserade gisapplikationer Kopplat till andra opensource-bibliotek. OpenLayers för kartfunktioner, ExtJS för GUI Klasser / komponenter för Toolbar, LayerTree etc.
Kartvisarapplikation ExtJS Finns som Opensource och kommersiell licens Javascript ramverk Används för layout av webbgränssnittet Färdiga komponenter för användargränssnitt
Kartvisarapplikation struktur Separata html filer för varje kartvisare Separata js-filer för WMS lager för varje kartvisare Lätta att skapa nya kartvisarapplikationer En html En Javascript med definition av WMS-lagren All annan funktionalitet är generisk och kan enkelt tas bort/eller utökas vid behov
Kartvisarapplikation struktur Definiera lager som skall visas i applikationen Layers = { Bergarter detaljerad':{ maplayer: new OpenLayers.Layer.WMS( Bergarter detaljerad", maphost + mapserverversion + '/wms?', { 'layers': 'berg:berg_detaljerad', 'format': 'image/png8, 'minscale':1000, 'maxscale':1000000, 'units':'meters', },{ 'singletile': true, }) }, <html> <script type="text/javascript" src="scripts/bena_layers.js"></script> Referens till Javascriptet i html-filen
Demo
Gamla kartvisaren komponenter Databas: Oracle / ArcSDE Kartserver: ArcIMS / WMSConnector Klient: HTML Viewer, frames
Nya kartvisaren komponenter Databas: PostgreSQL / PostGIS Kartserver: GeoServer Klient: OpenLayers / ExtJS / MapFish
West panel North panel Center panel East panel South panel
Layout med paneler som kan minimeras north (allmän info, byt kartvisare) west (lagerlista, sök, minikarta, kan döljas) east (detaljerad info, kan döljas) south (mouseposition) center (kartan)
Lagerlistan Transparens Aktivera lager För GetFeatureInfo Resultat presenteras i panel
Zoom: byter lager (styrs i sld) vi vill kunna ändra lagrets detaljrikedom beroende på zoomnivå vid en viss gräns i zoomnivå byts det tillgängliga lagret ut styrs mha SLD och lagerdefinitionen
Byta kartvisare Drop down-lista med tillgängliga kartvisare behåller samma utsnitt
Namnsök JSP / Servlet gör nytt uppslag för varje tangenttryckning zoomar till vald ort / kommun
Informationsfliken samt övriga kartvisare
Erfarenheter / att tänka på Generellt + Open Source flexibelt källkod finns tillgänglig + Gratis - licenser - Kostnader tid för utveckling och anpassning (gäller även kommersiella produkter) - + Kräver en viss inhouse kompetens för att bygga och underhålla + Det finns tillgång till kända och aktiva Opensource-produkter Ubuntu.se, postgresql.org, postgis.refractions.net, apache.org, geoserver.org, openlayers.org, mapfish.org, extjs.com, Klientapplikation - JavaScript svårt att debugga - Klient-maskinen måste ha tillräckligt minne - Javascript intensiva klienter blir tunga, många KB