Erzeugung kartenhnlicher Graphiken XML basierte Verdrngung und

Document Sample
Erzeugung kartenhnlicher Graphiken XML basierte Verdrngung und Powered By Docstoc
					                            a
            Erzeugung karten¨hnlicher Graphiken:
                  a
XML-basierte Verdr¨ngung und Platzierung von Punktsignaturen


             Karl Neumann, Julia Petri, Christian Wolf

                                    u
         TU Braunschweig, Institut f¨r Informationssysteme
                   http://www.ifis.cs.tu-bs.de


          Inhalt        1.   Umfeld
                        2.   Straßen und Baumreihen
                        3.         a
                             Verdr¨ngung mit XSLT
                        4.   Platzierung mit XSLT
                        5.   Fazit
                                                          “AgA”, Wien, 2005   – 14/2

1. Umfeld...

XML-basierte     im Geo/Kartographie-Kontext immer interessanter
Sprachen
                 Geography Markup Language:
GML              offener Standard des Open GIS Consortiums

XSLT             Extensible Stylesheet Language for Transformation:
                          u
                 Sprache f¨r Transformationen von XML-Dokumenten

SVG                                                 u
                 Scalable Vector Graphics: Sprache f¨r Vektorgraphiken

                                          XSLT−Dokument
                                          (Style Sheet)

DLM−Daten                                                  "realistische Karte"
(GML−Dokument)                                             (SVG−Dokument)
                         Transformation
                                                                         “AgA”, Wien, 2005   – 14/3

1. ...Umfeld...

umgesetzte Signaturen des SK25 (Beispiele):

                                    <g id=“SN4091 einzelsignaturLaubholz”>
                                         <line x1=“0” x2=“120” y1=“0” y2=“0”
  0,−60
                                                                               u
                                             stroke-width=“12” stroke=“&baumgr¨n;” />
                                         <circle fill=“none” r=“60” cy=“-60” cx=“0”
        0,0              120,0                                                 u
                                             stroke-width=“12” stroke=“&baumgr¨n;” />
                                    </g>
                    0,−180

                                       <path id=“SN4100 einzelsignaturNadelholz”
                                           d=“M 130 0 L -50 0 0 -180 50 0”
                                           fill=“none” stroke-miterlimit=“20”
                                           stroke-linejoin=“miter”
−50,0         0,0     50,0       130,0
                                                                               u
                                           stroke-width=“12” stroke=“&baumgr¨n;” />
               “AgA”, Wien, 2005   – 14/4

1. ...Umfeld
                                                                        “AgA”, Wien, 2005   – 14/5

2. Straßen und Baumreihen...

eine Straße (Beispiel):
<AtkisMember>
 <Strasse>
   <gml:name> Badstrasse </gml:name>
   <AtkisOID> 86118065 </AtkisOID>
   <gml:centerLineOf>
     <gml:coord> <gml:X> 4437952.980 </gml:X> <gml:Y> 5331812.550 </gml:Y> </gml:coord>
     <gml:coord> <gml:X> 4437960.070 </gml:X> <gml:Y> 5331818.450 </gml:Y> </gml:coord>
     <gml:coord> <gml:X> 4437967.200 </gml:X> <gml:Y> 5331825.410 </gml:Y> </gml:coord>
   </gml:centerLineOf>
   <Attribute>
     <Zustand> in Betrieb </Zustand>
     <AnzahlDerFahrstreifen Bedeutung=“tatsaechliche Anzahl”> 2 </AnzahlDerFahrstreifen>
     <Funktion> Strassenverkehr </Funktion>
     <VerkehrsbedeutungInneroertlich> Anliegerverkehr </VerkehrsbedeutungInneroertlich>
     <Widmung> Gemeindestrasse </Widmung>
   </Attribute>
 </Strasse>
</AtkisMember>
                                                                                “AgA”, Wien, 2005   – 14/6

2. ...Straßen und Baumreihen...

eine Baumreihe (Beispiel):
<AtkisMember>
 <Baumreihe>
   <gml:centerLineOf>
     <gml:coord> <gml:X> 3524258.170   </gml:X>   <gml:Y>   5800238.690   </gml:Y>   </gml:coord>
     <gml:coord> <gml:X> 3524256.190   </gml:X>   <gml:Y>   5800220.270   </gml:Y>   </gml:coord>
     <gml:coord> <gml:X> 3524255.240   </gml:X>   <gml:Y>   5800196.070   </gml:Y>   </gml:coord>
     <gml:coord> <gml:X> 3524255.330   </gml:X>   <gml:Y>   5800191.440   </gml:Y>   </gml:coord>
     ...
     <gml:coord> <gml:X> 3524579.400   </gml:X> <gml:Y> 5799677.850 </gml:Y> </gml:coord>
     <gml:coord> <gml:X> 3524581.650   </gml:X> <gml:Y> 5799674.000 </gml:Y> </gml:coord>
   </gml:centerLineOf>
   <Attribute>
     <Vegetationsmerkmal>
       Laubholz
     </Vegetationsmerkmal>
   </Attribute>
 </Baumreihe>
</AtkisMember>
                                    “AgA”, Wien, 2005   – 14/7

2. ...Straßen und Baumreihen

Visualisierung bisher (Beispiel):
                                                     “AgA”, Wien, 2005   – 14/8

        a
3. Verdr¨ngung mit XSLT...

grobe              for all b : Baumreihe do
Vorgehens-         begin
weise                 if exists s : Straße
                           (abstand(b,s) ≤ minAbstand(s.Widmung))
                      then
                         for all p : b.coord do
                         begin
                            r := refSegment(s,p);
                            verschiebe(p,r)
                         end do
                      end if
                   end do;
                                                                           “AgA”, Wien, 2005   – 14/9

           a
3. ...Verdr¨ngung mit XSLT...
<template name = "PunktGeradeAbstand">                           Abstand zwischen
 <param name = "A"/><!--Strasse-->
 <param name = "B"/><!--Strasse-->                               Gerade AB und
 <param name = "C"/><!--Baumreihe-->
 <variable name = "Ax" select = "$A/gml:X"/>
                                                                 Punkt C (Ausschnitt)
 <variable name = "Ay" select = "$A/gml:Y"/>
 <variable name = "Bx" select = "$B/gml:X"/>
 <variable name = "By" select = "$B/gml:Y"/>
 <variable name = "Cx" select = "substring-before($C, ’ ’)"/>
 <variable name = "Cy" select = "substring-after($C, ’ ’)"/>
 <variable name = "a"> <value-of select = "($Ay - $By) div ($Ax - $Bx)"/> </variable>
 <variable name = "b"> <value-of select = "-1"/> </variable>
 <variable name = "c"> <value-of select = "$By - $a * $Bx"/> </variable>
 <variable name = "tmp"> <value-of select = "$a*$a + $b*$b"/> </variable>
 <variable name = "sqrtab">
  <call-template name = "sqrt">
   <with-param name = "number" select = "$tmp"/>
   ...
  </call-template>
 </variable>
 <variable name = "normierungsFaktor">
  <if test = "$c &gt; 0"> <value-of select = "-1 * $sqrtab"/> </if>
  <if test = "$c &lt; 0"> <value-of select = "$sqrtab"/> </if>
 </variable>
 <variable name = "cosPhi"> <value-of select = "$a div $normierungsFaktor"/> </variable>
 <variable name = "sinPhi"> <value-of select = "$b div $normierungsFaktor"/> </variable>
 <variable name = "d1">
  <value-of select = "$cosPhi * $Ax + $sinPhi * $Ay"/>
 </variable>
 <variable name = "d2">
  <value-of select = "$cosPhi * $Cx + $sinPhi * $Cy"/>
 </variable>
  <value-of select = "(1 - 2 * (($d2 - $d1) &lt; 0)) * ($d2 - $d1)"/>
</template>
                                   “AgA”, Wien, 2005   – 14/10

           a
3. ...Verdr¨ngung mit XSLT

Visualisierung jetzt (Beispiel):
                                                        “AgA”, Wien, 2005   – 14/11

4. Platzierung mit XSLT...

grobe               for all b : Baumreihe do
Vorgehens-          begin
weise                        a
                       l := l¨nge(b.centerLineOf);
                       n := l/abstandKonst + 1;
                       b’ : new Baumreihe;
                          for i=1 to n do
                          begin
                             berechnePunkt
                                     (b’.coord[i],
                                      b.centerLineOf,
                                      abstandKonst)
                          end do
                    end do;
                                                                             “AgA”, Wien, 2005   – 14/12

4. ...Platzierung mit XSLT...
<template name="punktsetzen">
 <param name="liste"/>                                              setzen eines
 <param name="geslaenge"/>
 <param name="laenge"/>                                             Punktes der neuen
 <if test="contains($liste, ’ ’)">
  <variable name="p1"                                               Baumreihe
            select="substring-before($liste, ’ ’)"/>
  <variable name="p2"
            select="substring-after($liste, ’ ’)"/>
  <variable name="x1"
            select="substring(substring-before($p1, ’,’),   2)"/>
  <variable name="y1"
            select="substring-before(substring-after($p1,   ’,’), ’)’)"/>
  <variable name="x2"
            select="substring(substring-before($p2, ’,’),   2)"/>
  <variable name="y2"
            select="substring-before(substring-after($p2,   ’,’), ’)’)"/>
  <variable name="dx" select="$x2 - $x1"/>
  <variable name="dy" select="$y2 - $y1"/>
  <variable name="verh" select="$laenge div $geslaenge"/>
  <variable name="sx" select="$dx * $verh"/>
  <variable name="sy" select="$dy * $verh"/>
  <variable name="resX" select="$x1 + $sx"/>
  <variable name="resY" select="$y1 + $sy"/>
  <element name="gml:coord">
   <element name="gml:X">
    <value-of select="$resX"/>
   </element>
   <element name="gml:Y">
    <value-of select="$resY"/>
   </element>
  </element>
 </if>
</template>
                                   “AgA”, Wien, 2005   – 14/13

4. ...Platzierung mit XSLT

Visualisierung jetzt (Beispiel):
                                                                     “AgA”, Wien, 2005   – 14/14

5. Fazit

                XSLT−Dokument     XSLT−Dokument   XSLT−Dokument
Trans-          (Verdrängung)     (Platzierung)   (Visualisierung)

formations-
schritte-
insgesamt

              DLM−Daten         DLM−Daten         DLM−Daten               "realistische Karte"
              (GML−Dokument)    (GML−Dokument’)   (GML−Dokument’’)        (SVG−Dokument)




Nachteile     teilweise komplizierteres Vorgehen als bei
              konventioneller Programmierung

              teilweise recht lange Laufzeiten

Vorteile      alle Schritte XML-basiert (interoperabel)

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:1
posted:3/22/2011
language:German
pages:14