Paikkatiedon esittäminen XML-muodossa: Oracle Spatial, SVG ja GML OUGF Syysseminaari 15.11.2001 Petteri Soikkonen petteri.soikkonen@tietoenator.com Unit 1 TietoEnator 2000
Johdanto! Paikkatiedon esittämiseksi ja siirtämiseksi on tarjolla uusia W3- ja OpenGIS -konsortioiden tuottamia XMLstandardeja. Tässä esityksessä tutustutaan niistä kahteen: SVG karttatiedon esittämiseen ja GML sen siirtämiseen. Lisäksi esitetään, kuinka Oraclen XMLtyökaluja voi käyttää tiedon tuottamiseen.! SVG - Scalable Vector Graphics! GML - Geography Markup Language Unit 2 TietoEnator 2000
Esityksen sisältö! Taustaa! Oracle Spatial! Käytetyt XML-kielet ja -teknologiat SVG, XSQL, XSLT! Oraclesta SVG:ksi selaimeen! Sijaintitietostandardit OpenGIS -konsortio GML! Jatkokehitys mm. Multi-purpose Publishing (erilaiset päätelaitteet) Unit 3 TietoEnator 2000
TietoEnator Production & Logistics! One of the leading providers of high-value-added IT services in Europe! Annual net sales exceeding EUR 180 million 80 280 270 1200! 2.000 employees in 7 countries! Supply Chain support Energy Forest Logistics Process & Manufacturing Retail 100 Unit 4 TietoEnator 2000
TietoEnator Forest / Natural Resource Mgmt! Tekee tietojärjestelmiä Tapiolle, Metsäkeskuksille sekä Metsähallitukselle! Mm. sijaintitietojärjestelmien toteutus Oracle Spatial- ja MapInfo -ohjelmistoilla! Yhteistyötä Genimapin kanssa, mm. sovellusten teko Genimap Platformin päälle! Referenssinä mm. SutiGis (valtion metsäkuviot) sekä KihtiGis (valtion kiinteistöt) Unit 5 TietoEnator 2000
SutiGis ja KihtiGis! SutiGis Metsähallituksen metsäkuviot (n. 1.5 milj. kpl, n. 8 milj. ha) sekä alue-ekologia - kohteet metsänkäytön suunnittelu n. 200 käyttäjää! KihtiGis valtion kiinteistöt, määräalat maankäyttökohteet Unit 6 TietoEnator 2000
SutiGis- ja KihtiGis sovelluskehitysarkkitehtuuri Oracle 8.1.5 EE Aineistopalvelin MapX 4.01:n perustuva karttakomponentti Sovellus (SutiGis ja KihtiGis) Sovellukset sovelluspalvelimella (Terminal Server) Sovellukset toteutettu Oracle Forms:lla ja Centura Developer:lla Sovelluspalvelin Sovellus MapX Muu SQL Oracle Spatial Geometria, spatiaaliset operaatiot Rasteri ja osa vektoreista Karttakomponentti Aineistopalvelin Unit 7 TietoEnator 2000
Oracle Spatial! Saatavilla Oracle8i/9i Enterprise -versioon! Laajentaa tietokantaa spatiaalisilla tietotyypeillä ja - operaatioilla: Spatiaaliset tietotyypit (Oracle objekteina)! piste, viiva, monikulmio, moniosainen viiva/monikulmio! 4D Spatiaaliset operaatiot! objekti toisen sisällä/rajalla/ulkopuolella/matkan päässä! spatial join! Operaatiot mahdollistaa spatiaalinen indeksi! nelipuu (quadtree) tai R-puu! nk. domain -indeksi Unit 8 TietoEnator 2000
Oracle Spatial geometriatyyppi, jatkoa SDO_POINT_TYPE x NUMBER y NUMBER z NUMBER SDO_ELEM_INFO_ARRAY VARRAY (1048576) OF NUMBER SDO_ORDINATE_ARRAY VARRAY (1048576) OF NUMBER Unit 9 TietoEnator 2000
Oracle Spatial geometriatyyppi SDO_GEOMETRY Object sdo_gtype NUMBER sdo_srid NUMBER sdo_point SDO_POINT_TYPE sdo_elem_info SDO_ELEM_INFO_ARRAY sdo_ordinates SDO_ORDINATE_ARRAY Example SQL> CREATE TABLE states ( 2 state VARCHAR2(30), 3 totpop NUMBER(9), 4 geom MDSYS.SDO_GEOMETRY); Unit 10 TietoEnator 2000
Geometriaesimerkki SQL> select geoloc from gisa1_kuvio where idperkuv=2000019059; GEOLOC(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES) -------------------------------------------------------------------------------- SDO_GEOMETRY(3, NULL, SDO_POINT_TYPE(0, 0, NULL), SDO_ELEM_INFO_ARRAY(1, 3, 1), SDO_ORDINATE_ARRAY(3352457.66, 6945457.26, 3352344.24, 6945430.51, 3352369.56, 6 945307.19, 3352398, 6945337.83, 3352408.46, 6945347.41, 3352417.81, 6945354.03, 3352419.28, 6945363.89, 3352464.94, 6945376.81, 3352483.04, 6945379.01, 3352491. 8, 6945330.53, 3352501.57, 6945281.99, 3352506.46, 6945279.77, 3352511.41, 69452 78.54, 3352520.4, 6945277.14, 3352532.19, 6945272.59, 3352530.58, 6945281.59, 33 52527.24, 6945295.8, 3352524.98, 6945311.98, 3352525.17, 6945336.96, 3352522.46, 6945365.1, 3352516.19, 6945381.44, 3352506.85, 6945395.93, 3352496.54, 6945410. 45, 3352483.36, 6945429, 3352469.13, 6945445.71, 3352457.66, 6945457.26)) Unit 11 TietoEnator 2000
SVG 1.0 http://www.w3.org/graphics/svg/overview.htm8! W3C recommendation, 05.09.2001! XML-sovellus (XML-kieli) vektorimuotoisen tiedon esittämiseen (myös teksti ja rasteri), 2D! DOM-rajapinta (esim. JavaScriptillä ohjelmoitavissa) mutta myös animointi! rect, circle, ellipse, line, polyline, polygon! Sisäkkäiset muunnokset, leikkaukset, alpha-maski, suodatusefektit, mallit (template objects)! Selaintuki: Adobe SVG-viewer, Batik SVG-browser, Croczilla,... Unit 12 TietoEnator 2000
SVG esimerkki <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000802//EN" "http://www.w3.org/tr/2000/cr-svg-20000802/dtd/svg-20000802.dtd"> <svg width="12cm" height="4cm" viewbox="0 0 1200 400"> <desc>example polygon01 - star and hexagon</desc> <polygon style="fill:red; stroke:blue; stroke-width:10" points="350,75 379,161 469,161 397,215 423,301 350,250 277,301 303,215 231,161 321,161" /> <polygon style="fill:lime; stroke:blue; stroke-width:10" points="850,75 958,137.5 958,262.5 850,325 742,262.6 742,137.5" /> </svg> Unit 13 TietoEnator 2000
SVG ja kartat! SVG soveltuu erinomaisesti karttojen tuottamiseen, koska vektoritietoa ei tarvitse rasteroida rasterikuvaksi tulostaessa rasterointi tapahtuu vasta tulostimessa! SVG tarjoaa tehosteita, jotka soveltuvat hyvin karttoihin! SVG-karttademoja: http://www.dbxgeomatics.com/ http://www.carto.net/ Unit 14 TietoEnator 2000
Oracle XML-työkalut! XDK (XML Developer s Kit) for Java, JavaBeans, C/C++,PL/SQL! XDK for Java (9i) XML Parser XSLT Processor XML Schema Processor XML Class Generator XML SQL Utility (XSU) XSQL Servlet Oracle Soap! Lisätietoja: http://otn.oracle.com/tech/xml/ http://www.oracle.com/forums /homepage.jsp Building Oracle Applications, O Reilly Oracle XML Handbook, Osborne Unit 15 TietoEnator 2000
XSQL demot: http://host/xsql/java/xsql/ $ORACLE_HOME/xdk XSQL - yleiskuvaus 1. Käyttäjä lähettää URL:n (.xsql) wwwpalvelimelle 2. Palvelin välittää kyselyn XSQL servletille 3. Servlet parsii XML-kyselyn ja välittää SQLkyselyn XSU:lle 4. XSU suorittaa SQL-kyselyn kantaan 5. XML-muotoinen tulos ja XSLTtiedosto välitetään XSLTprosessorille 6.-7. Muunnoksen tulos selaimelle Unit 16 TietoEnator 2000
XSQL-esimerkki, kuvio.xsql <?xml version="1.0"?> <xsql:query xmlns:xsql="urn:oracle-xsql" connection="fgs" allow-client-style="yes"> <![CDATA[ select lnp_pack.get_min_x(k.geoloc) + (lnp_pack.get_max_x(k.geoloc) - lnp_pack.get_min_x(k.geoloc))/2.0 centerx, lnp_pack.get_min_y(k.geoloc) + (lnp_pack.get_max_y(k.geoloc) - lnp_pack.get_min_y(k.geoloc))/2.0 centery, k.geoloc from gisa1_kuvio k where idperkuv = {@idperkuv} ]]> </xsql:query> Unit 17 TietoEnator 2000
http://host/kuvio.xsql?idperkuv=2000019059 Unit 18 TietoEnator 2000
kuvio1.xsl - muunnos SVG:ksi <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:output standalone="yes" doctype-public="-//w3c//dtd SVG 20001102//EN" doctype-system="http://www.w3.org/tr/2000/ CR-SVG-20001102/DTD/svg-20001102.dtd" media-type="image/svg+xml" method="xml" indent="yes" encoding="iso-8859-1"/> <xsl:variable name="centerx" select="rowset/row/centerx"/> <xsl:variable name="centery" select="rowset/row/centery"/> <xsl:template match="/"> <svg width="300" height="300"> <g transform="translate(150,150) translate(-{$centerx}, -{$centery})"> <xsl:apply-templates select="rowset/row/geoloc"/> </g> </svg> </xsl:template> jatkuu Unit 19 TietoEnator 2000
kuvio1.xsl - jatkoa <xsl:template match="geoloc"> <polygon stroke="red" stroke-width="1" fill="red" fill-opacity="0.25"> <xsl:apply-templates select="sdo_ordinates"/> </polygon> </xsl:template> <xsl:template match="sdo_ordinates"> <xsl:attribute name="points"> <xsl:for-each select="sdo_ordinates_item"> <xsl:choose> <xsl:when test='position() mod 2'> <xsl:variable name="val" select="number(.)"/> <xsl:value-of select="$val"/> <xsl:text>,</xsl:text> </xsl:when> <xsl:otherwise> <xsl:variable name="val" select="number(.)"/> <xsl:value-of select="$val"/> <xsl:text> </xsl:text> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:attribute> </xsl:template> </xsl:stylesheet> Unit 20 TietoEnator 2000
kuvio.xsql?xml-stylesheet=kuvio1.xsl&idperkuv=2000019059 <?xml version = '1.0' encoding = 'iso-8859-1' standalone = 'yes'?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN" "http://www.w3.org/tr/2000/cr-svg-20001102/dtd/ svg-20001102.dtd"> <svg width="300" height="300"> <g transform="translate(150,150) translate(-3352438.2110572, -6945364.924455665)"> <polygon stroke="red" stroke-width="1" fill="red" fill-opacity="0.25" points="3352457.65933987,6945457.26064949 3352344.23646035,6945430.51451048 paljon koordinaatteja 3352457.65933987,6945457.26064949 "/> </g> </svg> Unit 21 TietoEnator 2000
kuvio2.xsl - taustarasterikartta Genimap Platformista! Lisätään <xml:stylesheet> - kohtaan xmlns:xlink="http://www.w3. org/1999/xlink"! ennen muunnoksia <image width="300" height="300" xlink:href="http://maps.geodata.fi:8100/servlet/gekkoservlet? cid=tietoenator¢er={$centerx},{$centery}&layer=1 &size=300,300"/>! muunnoksiin (translate) scale(0.25,-0.25) Unit 22 TietoEnator 2000
SVG:tä hyödyntävät prototyypit ja tuotteet! LNP - Leimikot Netissä Pilotti pilottiprototyyppi leimikoiden (työkohde) näyttämiseksi netissä perustuu FGS-komponentteihin! FGS - Forest Geographic System selainpohjainen karttakäyttöliittymä Oracle Spatial -dataan karttapohja Genimap Platformista niin vektori- kuin rasteripohja saatavilla myös muista lähteistä "yleiskäyttöinen karttakäyttöliittymä Unit 23 TietoEnator 2000
LNP yleiskuvaus Rasterikartta (viittaus) Genimap Platform Selain SVGtiedosto (tiedostojärjestelmässä XSLTmuunnos Yhdistäminen tapahtuu JSP- ja DHTMLtekniikalla XSLTtiedosto Data Oracle8i Unit 24 TietoEnator 2000
SVG:n käytön edut ja haitat # Vektorirakenne mahdollistaa paremmat tulosteet # Filtterit ja efektit mahdollistavat näyttävät tulosteet # Voidaan käyttää symboleja # Rakennetta voidaan käsitellä XML-työkaluilla # Rakennetta voidaan muokata (editoida) DOMrajapinnan kautta $ SVG-rakenteen hyötysuhde huono, tiedostot (kompressoitunakin) helposti isoja $ Ominaisuustiedon sisällyttäminen hankalaa $ Ei tietoa datan koordinaattijärjestelmästä Unit 25 TietoEnator 2000
Sijaintitietostandardit! Ohjelmistovalmistajat käyttävät omia ( proprietary ) tiedostorakenteita, tiedon siirto siirtotiedostoilla! OpenGIS konsortio (http://www.opengis.org) standardoi Simple Features Specification for! OLE/COM, CORBA, SQL,... Koordinaattijärjestelmät Web Map Server Interfaces Web Feature Server Interfaces (in discussions phase) Geographical Markup Language GML sekä muita Unit 26 TietoEnator 2000
GML 2.0 http://www.opengis.org/techno/specs.htm! OGC Implementation Specification, 20.02.2001! Tavoitteena XML-kieli sijaintitiedon siirtämiseen ja säilyttämiseen toimittajariippumaton, sovellusalueriippumaton erottaa tiedon ja kuvaustekniikan spatiaalisen ja ei-spatiaalisen tiedon yhdistäminen perusta Internet-paikkatietosovelluksille! GML 2.0 on kuvattu XML Schema -kieltä käyttäen Feature Schema (feature.xsd) Geometry Schema (geometry.xsd) Xlink Schema (xlinks.xsd) perustyypit ja -rakenteet sovelluksen XML-rakenteelle Unit 27 TietoEnator 2000
GML 2.0 geometriatyypit <Point gid="p1" srsname="http://www.opengis.net/gml/srs/epsg.xml#4326"> <coord><x>56.1</x><y>0.45</y></coord> </Point> <Box srsname="http://www.opengis.net/gml/srs/epsg.xml#4326"> <coord><x>0.0</x><y>0.0</y></coord> <coord><x>100.0</x><y>100.0</y></coord> </Box> <LineString srsname="http://www.opengis.net/gml/srs/epsg.xml#4326"> <coord><x>0.0</x><y>0.0</y></coord> <coord><x>20.0</x><y>35.0</y></coord> <coord><x>100.0</x><y>100.0</y></coord> </LineString> Unit 28 TietoEnator 2000
GML 2.0 polygon <Polygon gid="_98217" srsname="http://www.opengis.net/gml/srs/epsg.xml#4326"> <outerboundaryis><linearring> <coordinates> 0.0,0.0 100.0,0.0 100.0,100.0 0.0,100.0 0.0,0.0 </coordinates> </LinearRing></outerBoundaryIs> <innerboundaryis><linearring> <coordinates> 10.0,10.0 10.0,40.0 40.0,40.0 40.0,10.0 10.0,10.0 </coordinates> </LinearRing></innerBoundaryIs> <innerboundaryis><linearring> <coordinates> 60.0,60.0 60.0,90.0 90.0,90.0 90.0,60.0 60.0,60.0 </coordinates> </LinearRing></innerBoundaryIs> </Polygon> Unit 29 TietoEnator 2000
Jatkokehitys, mahdollisuudet! Oracle Spatial -datan editointi SVG-rakenteen muokkaus DOM-rajapinnan kautta selaimessa tallennus kantaan XSQL Servletin kautta! Multi-purpose Publishing erilaisille päätelaitteille <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" media="palm" href="listingpp.xsl"?> <?xml-stylesheet type="text/xsl" media="mozilla" href="listingmz.xsl"?> <?xml-stylesheet type="text/xsl" media="up" href="listingwml.xsl"?> <?xml-stylesheet type="text/xsl" href="listing.xsl"?> Unit 30 TietoEnator 2000
Multi-purpose Publishing XSLTmuunnos Data Oracle8i Unit 31 TietoEnator 2000
Lopuksi! Oracle Spatial soveltuu hyvin vektorimuotoisen tiedon tallentamiseen ja käsittelyyn! Rasterikarttoja (jos tarvitaan) edullisesti saatavilla! SVG soveltuu hyvin vektorimuotoisen tiedon esittämiseen (jossain määrin myös rasteritiedon)! GML soveltuu hyvin sijaintitiedon siirtämiseen (ominaisuustietoineen)! XML-teknologia kypsää! Oracle tarjoaa hyvät ja kattavat XML-työkalut! => Mahdollistaa kustannustehokkaan selainpohjaisen karttasovelluksen toteuttamisen Unit 32 TietoEnator 2000
Unit 33 TietoEnator 2000