Kartenbild einbinden

Erweiterungsobjekt: eo:iduCore

Um eine Karte einbinden zu können müssen folgende Namespaces bekannt sein:

<xsl:stylesheet version="1.0"
    ...
    xmlns:iduCore="eo:iduCore"
    xmlns:iXRH="http://schemas.webs.idu.de/iwan/iXRH"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    ...
    xsi:schemaLocation="iXRH http://webs.idu.de/xsdschemas/Iwan/iXRH.xsd">

Eine Karte wird mit der Erweiterungsmethode CreateMapImage erzeugt. Diese erwartet als einzigen Parameter ein Konfigurations-XML-Fragment vom Typ iXRH:RenderMap und liefert eine URL zum fertig erzeugten Bild.

Dieses Konfigurations-XML wird typischerweise vorher definiert und in einer Variablen (im Beispiel 'MapOptions') abgelegt. Im nachfolgenden Beispiel werden in der Karte zwei Ebenen angezeigt. Die zweite Ebene ist die aus einer Puzzle-Kategorie erzeugte Ebene und wird auf das anzuzeigende Puzzle-Objekt gefiltert.

<xsl:template name="CreateMapImage">
  <xsl:variable name="MapOptions">
    <iXRH:RenderMap
      imageHeight="300"
      imageWidth="300"
      targetImageType="Png"
      epsgCode="31468"
      imageSizeLargestEdge="1000">
      <!--Hier erstmal eine Dummy-BBox - die wird später überschrieben ...-->
      <iXRH:BBox epsgCode="25833" xmin="409330" ymin="5648957" xmax="483007" ymax="5714401"/>
      <iXRH:Layer layerName="L46" />
      <iXRH:Layer layerName="L46" />
      <iXRH:Layer layerName="L50">
        <iXRH:Filter>
          <iXRH:SingleComparison>
            <iXRH:ColumnName>pzlnodeid</iXRH:ColumnName>
            <iXRH:Is>Equal</iXRH:Is>
            <iXRH:Value>
              <iXRH:Int>
                <xsl:value-of select="/Root/TECHDATA/PuzzleNode/@puzzleNodeId"/>
              </iXRH:Int>
            </iXRH:Value>
          </iXRH:SingleComparison>
        </iXRH:Filter>
      </iXRH:Layer>
    </iXRH:RenderMap>
  </xsl:variable>

  <img alt="Kartenbild" style="width:{msxsl:node-set($MapOptions)/iXRH:RenderMap/@imageWidth * (96 div 80)}px;
       height:{msxsl:node-set($MapOptions)/iXRH:RenderMap/@imageHeight * (96 div 80)}px;">
    <xsl:attribute name="src">
      <xsl:value-of select="iduCore:CreateMapImage(
        iduCore:MapModifyBBoxZoomToGeom(
          $MapOptions,
          /Root/BASECLASS/GEOM,
          10000
        )
      )"/>
    </xsl:attribute>
  </img>
</xsl:template>
Um den Ausschnitt der Karte auf das anzuzeigende Objekt einzustellen wird das Konfigurations-XML-Fragment, bevor es als Parameter in CreateMapImage eingeht, mit der Funktion MapModifyBBoxZoomToGeom um einen passenden Extent erweitert.
 
Mit dem erzeugten Link zur Karte wird ein img-Knoten erstellt.
 
Damit das Bild in der angeforderten Größe und damit maßstäblich ausgegeben wird, wird die Bildgröße aus den MapOptions übernommen und muss nicht an zwei Stellen gepflegt werden.
 
Zudem ist zu beachten, dass Iwan ein Bild in der Iwan-Standardauflösung 80 dpi erstellt und dieses Bild nur bei Ausgabe in 80 dpi maßstäblich ist. Ein normales Dokument hat aber eine Auflösung von 96 dpi. Deshalb muss bei der Ausgabe die Bildgröße auf 96 dpi hochskaliert werden:
 
<img alt="Kartenbild"
    style="width:{msxsl:node-set($MapOptions)/iXRH:RenderMap/@imageWidth * (96 div 80)}px;
       height:{msxsl:node-set($MapOptions)/iXRH:RenderMap/@imageHeight * (96 div 80)}px;">
 
Achtung: Dies sollten Sie immer so beibehalten, denn das erzeugte Kartenbild wird nur maßstäblich ausgegeben, wenn die Größe des img-Elementes exakt der Größe des vom Iwan angeforderten Bildes (+ Skalierung auf 96 dpi) entspricht. Ansonsten wird das Bild verzerrt.
 
 
Weiterführende Themen: