I. Servicii web geospațiale: WMS
de Vasile Crăciunescu
Publicat la 10 Oct 2007 | Secţiunea: Articole | Categoria: Servicii web/
Introducere
Serviciile de webmapping funcționează după principii și protocoale de comunicatie similare serviciilor web clasice (XML-RPC, UDDI, WSDL, SOAP). Rolul acestor este deosebit de important în contextul actual, cînd asistăm, pe de o parte, la o expansiunea continuă a surselor și canțității de date geospațiale stocate, iar pe de altă parte, la o creștere a nevoii de a accesa aceste date. Privit sub acest aspect, WMS joacă un rol dublu:
- facilitează accesul consumatorilor la surse de date aflate la distanță;
- asigură furnizorilor o metodă standardizată de partajare a datelor;
Definirea unui standard pentru serviciile de webmapping cade în sarcina Open Geospatial Consortium (OGC). Ultima versiune a specificației de implementarea a unui serviciu WMS poate fi descărcată gratuit de pe site-ul OGC (http://www.opengeospatial.org/standards/wms).
În principiu, standardul WMS este adresat programatorilor care dezvoltă aplicații client sau server, cu suport pentru WMS. În acest sens oferă descrieri tehnice a modului în care trebuiesc implementate metode pentru:
- interogarea serverului pentru a obține o listă a tipului de informații pe care il poate livra (GetCapabilities);
- solicitarea și transferarea unei harți/set de date (GetMap);
- obținerea informații asociate unei hărți/entități (GetFeatureInfo).
Avantajele majore ale utilizării unei metode standardizate de partajare/accesare a datelor geospațiale constau în sporirea producțivității (eliminarea timpilor necesari dezvoltării unei metode proprii) și asigurarea interoperabilității cu restul aplicațiilor compatibile WMS. Utilizatorii finali sînt cei mai cîștigați, putînd să suprapună și să interogheze, într-o manieră transparentă, hărți aflate pe mai multe servere. În momentul de față există o multitudine de soluții, comerciale (Ex: Ionic, ESRI) și open-source (Ex: Mapserver, Geoserver, uDig, gvSIG, JUMP, QuantumGIS, GRASS, degree), atît pentru partea de client cît și pentru cea de server.
WMS produce hărți georeferențiate, în format digital (raster: PNG, GIF, JPEG sau vector: SVG, WebCGM). Acestea pot fi vizualizate sau interogate în diferite contexte. Prin utilizarea formatelor vectoriale sau a celor raster ce suportă transparență (GIF, PNG) este posibilă combinarea mai multor seturi de date pentru a forma o singură hartă. Principala carență a WMS este dată de imposibilitatea editării datelor. Pentru a suplini acest minus, OGC a dezvoltat standardul complementar Web Feature Service (WFS).
Serverele WMS interacționeză cu clienții prin intermediul protocolului HTTP. Aplicația client poate fi o distribuție GIS desktop sau o aplicație de webmapping (Figura 1 ).
Accesarea datelor prin intermediul WMS.
Implementare și exploatarea unui serviciu WMS
Implementarea unui serviciu operativ de webmapping, bazat pe WMS, necesită mai întîi prezența infrastructurii și aplicațiilor ce asigură funcționalitatea web: conexiune internet (securizată), server web (Ex: Apache, IIS), limbaje de programare server-side (opțional, pentru crearea unor aplicații interactive. Ex: PHP, ASP), sisteme de gestiune a bazelor de date (opțional, Ex: PostgreSQ, MySQL, Oracle, DB2).
În cele ce urmează vom trece în revistă pașii ce trebuiesc urmați pentru instala, configura și utiliza un serviciu WMS. Pentru acest lucru am ales două aplicații open source: Geoserver (server WMS) și uDig (client WMS).
Aplicațiile GIS open source au cunoscut în ultimii ani o dezvoltare și o diversificare puternică, iar astăzi se poate afirma cu certitudine că acoperă fiecare nivel din ciclul de utilizare a datelor geospațiale. În cazul Sistemelor Informaționale Geografice, avantajelor clasice ale utilizării aplicațiilor open-source: reducerea costurilor, control asupra tehnologiei utilizate etc.; li se adaugă o componentă extrem de importantă: compatibilitatea cu standardele existente în acest domeniu. Marea majoritate a aplicațiior GIS open source fiind 100% compatibile cu standardele în vigoare. Acesta este și cazul celor două aplicații utilizate.
Geoserver
Este o aplicație open source, cross-platform, ce permite partajarea/publicarea datelor geospațiale, via Internet. Geoserver este compatibil cu standardele OGC, suportă protocoale: WMS, WFS/WFS-T și poate returna informația în format JPEG, PNG, SVG, KLM/KMY, GML, PDF sau Shapefile. Geoserver este dezvoltat în Java folosind librăria open source Geotools.
Codul sursă poate fi descărcat gratuit de la adresa “http://docs.codehaus.org/display/GEOS/Latest”: http://docs.codehaus.org/display/GEOS/Latest . Utilizatorii mai puțin experimentați pot opta pentru versiunile pre-compilate (Binaries – necesită configurarea manuală cu serverul de web). Pentru platformele Windows este diponibil un installer automat. Aceasta din urmă include o versiune a server-ul web Jetty.
Administrarea Geoserver poate fi făcută prin intermediul interfeței web sau direct prin modificarea fișierelor de configurare în format XML. Toate aceste fișiere se găsesc în folderul $GEOSERVER_HOME/data_dir.
Service.xml. Conține parametrii de configurare ai aplicației server (Ex: numărul maxim de entități ce pot fi returnate în cadrul unei conexiuni WMS, numele de utilizator și parola necesare pentru administrarea remote a serviciului etc.) precum și metadatele ce vor fi transmise prin protocoalele WMS si WFS (Ex: numele serverului, cuvinte cheie, descriere etc.). Un exemplu de fișier service.xml este prezentat mai jos.
<?xml version="1.0" encoding="iso-8859-1"?> <serverConfiguration> <global> <loggingLevel>FINE</loggingLevel> <maxFeatures value="1000000"/> <verbose value="false"/> <numDecimals value="8"/> <adminUserName>admin</adminUserName> <adminPassword>geoserveranm</adminPassword> <ContactInformation> <ContactPersonPrimary> <ContactPerson>Vasile Craciunescu</ContactPerson> <ContactOrganization>Geo-spatial.org</ContactOrganization> </ContactPersonPrimary> </ContactInformation> </global> <services> <service type="WFS" enabled="true"> <name>Geo-spatial.org WFS</name> <title> Geo-spatial.org WFS</title> <abstract>Serverul WFS al Geo-spatial.org</abstract> <keywords> <keyword>WFS</keyword> <keyword>Geo-spatial.org</keyword> <keyword>ROMANIA</keyword> </keywords> <onlineResource>http://www.Geo-spatial.org </onlineResource> <fees>NONE</fees> <accessConstraints>NONE</accessConstraints> <maintainer>vasile@geo-spatial.org</maintainer> <gmlPrefixing value="false"/> <serviceLevel>Complete</serviceLevel> </service> <service type="WMS" enabled="true"> <name>Geo-spatial.org WMS</name> <title>Geo-spatial.org WMS</title> <abstract>Serverul WMS a Administratie Nationale de Meteorologie</abstract> <keywords> <keyword>WMS</keyword> <keyword>Geo-spatial.org</keyword> <keyword>ROMANIA</keyword> </keywords> <onlineResource>http://www.geo-spatial.org </onlineResource> <fees>NONE</fees> <accessConstraints>NONE</accessConstraints> </service> </services> </serverConfiguration>
Catalog.xml. Conține parametrii de configurare a datelor partajate folosind Geoserver (nume, date sursă, namespace, calea către fișierele .sdl, utilizate pentru definirea stilului de afișare.
Publicarea unui set nou de date presupune editarea fișierului catalog.xml și completarea parametrilor pentru fiecare strat de informație în parte. În cele ce urmează vom prezenta acțiunile ce trebuiesc efectuate pentru publicarea de date în format ESRI Shapefile. Geoserver nu este limitat doar la acest format, în mod similar putînd fi publicate date stocate în alte formate de fișiere (Ex: GML, VPF) sau în baze de date relaționale cu suport spațial (Ex: PostgreSQL+PostGIS, ESRI ArcSDE, DB2, Oracle).
a. Copierea datelor. Este recomandată transferarea datelor ce se doresc publicate în $GEOSERVER_HOME/data_dir/data. Pentru exemplul de față am considerat doua fișiere Shapefile, în proiecție geografică, reprezentînd limitele administrative ale județelor (tip poligon) și orașele din România (tip punct).
b. Adăugarea referințelor în fișierul catalog.xml. Presupune inserarea unor sub-elemente XML
<datastore namespace = "topp" enabled = "true" id = "romania_judete" > <connectionParams> <parameter value = "topp" name = "namespace" /> <parameter value = "file:data/romania/judete.shp" name = "url" /> </connectionParams> </datastore> <datastore namespace = "topp" enabled = "true" id = "romania_localitati" > <connectionParams> <parameter value = "topp" name = "namespace" /> <parameter value = "file:data/romania/localitati.shp" name = "url" /> </connectionParams> </datastore>
c. FeatureType. În afară de referințele din fișierul catalog.xml, este necesară crearea unui fișier XML dedicat (info.xml) pentru fiecare strat în parte. Acesta va fi salvat într-un subfolder în $GEOSERVER_HOME/data_dir/featureTypes. Pentru straturile testate avem următoarea structura:
- $GEOSERVER_HOME/data_dir/featureTypes/romania_localitati_localitati/info.xml
- $GEOSERVER_HOME/data_dir/featureTypes/romania_judete_judete/info.xml
Conținutul fișierelor info.xml va fi de forma:
<featureType datastore = "romania_judete" > <name>judete</name> <SRS>4326</SRS> <title>Judete</title> <abstract>Limitele administrative ale judetelor.</abstract> <wmspath>/</wmspath> <numDecimals value = "8" /> <keywords>romania_judete judete</keywords> <latLonBoundingBox dynamic = "false" miny = "43.619254164890435" maxy = "48.26486964515059" maxx = "29.720105921094994" minx = "20.26240504971425" /> <styles default = "judete_style" /> <cacheinfo enabled = "false" maxage = "" /> </featureType>
Unde
d. Crearea fișierului stil. Fișierele stil (SDL – Styled Layer Descriptor) sînt folosite pentru a descrie mecanismul de simbolizare a datelor. Aceste sînt tot în format XML și respectă regulile stabilite în acest sens de OGC. Stocarea lor se face în $GEOSERVER_HOME/data_dir/styles. Cele două fișiere stil utilizate(judete_style.sdl, localitati_style.sdl) sînt redate în continuare:
<?xml version="1.0" encoding="UTF-8"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <NamedLayer> <Name>judete</Name> <UserStyle> <Name>judete_style</Name> <Title>Stil judete</Title> <Abstract>Defineste simbolul poligonal</Abstract> <FeatureTypeStyle> <Rule> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#EEEE55</CssParameter> <CssParameter name="fill-opacity">1</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#550055</CssParameter> <CssParameter name="stroke-opacity">1</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor> <?xml version="1.0" encoding="UTF-8"?> <StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <NamedLayer> <Name>localitati</Name> <UserStyle> <Name>localitati_style</Name> <Title>Stil localitati</Title> <Abstract>Defineste simbolul punctual si modul de etichetare</Abstract> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>square</WellKnownName> <Fill> <CssParameter name="fill">#800000</CssParameter> <CssParameter name="fill-opacity">1.0</CssParameter> </Fill> </Mark> <Size>4</Size> </Graphic> </PointSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>DENLOC</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Arial</CssParameter> <CssParameter name="font-style">Bold</CssParameter> <CssParameter name="font-size">8</CssParameter> </Font> <Fill> <CssParameter name="fill">#000000</CssParameter> </Fill> </TextSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
Vizualizarea datelor publicate în această manieră, poate fi făcută cu orice aplicație compatibilă WMS.
UDig (User-friendly Desktop Internet GIS)
Este un proiect ce combină avantajele librăriei GeoTools (design, structura datelor, standarde) cu cele ale aplicației JUMP (interfața cu utilizatorul, afișare, interactivitate) și cele oferite de mediul Eclipse (extensibilitate, standarde de dezvoltare) pentru a crea un editor GIS desktop capabil de a interacționa cu o gamă largă de date spațiale, stocate local sau la distanță (via rețele private sau Internet). uDig își propune implementarea tehnologiilor tip WMS, WFS într-o manieră transparentă pentru utilizatorii GIS obișnuiți.
Pentru a vizualiza și interoga datele publicate anterior este necesară stabilirea unei conexiuni între aplicația client (uDig) și cea server (Geoserver). Acest lucru poate fi realizat din fereastra de adăugare a straturilor, selectînd opțiunea “Web Map Server”. În fereastra următoare se va indica adresa de apelare a metodei GetCapabilities (Figura 2).
Apelarea metodei GetCapabilities.
Dupa conectare, serverul returnează informatiile ce pot fi vizualizate în cadrul aplicației client (Figura 3).
Informațiile disponibile pe serverul WMS.
Mai departe utilizatorul poate afișa și interoga datele folosind instrumentele GIS clasice (Figura 4).
Vizualizarea și interogarea datelor accesate prin WMS.