Komplexes Beispiel Selektion
Karte mit Selektion

Nachfolgend wird eine Karte mit mehreren Ebenen erstellt. Als Hintergrund werden die Landschaftsschutzgebiete eingeblendet. Per Filter wird der ausgewählte Radweg angezeigt und auf diesen wird dann die Karte auch ausgerichtet (unter Beachtung vorgegebener fixer Maßstäbe). Zusätzlich werden alle Arztpraxen angezeigt. Ein Selektionslayer wird nur erstellt, wenn es mindestens ein Objekt (Arztpraxis) zu selektieren gibt (der Anwender hat einen Radius angegeben, in dessen Umkreis zum Radweg nach Arztpraxen gesucht werden soll).

Beispiel für eine Ergebniskarte:

PlanBeispielKarte.png

Kartenparameter zusammenbauen:

<!--Kartenparameter für die Karte zusammenbauen-->
<xsl:variable name="MapParameter">
    <iXRH:RenderMap imageHeight="400"
                    imageWidth="400"
                    epsgCode="25833"
                    imageSizeLargestEdge="1000"
                    drawSelection="false" >

        <!--Hintergrundebene: Landschaftsschutzgebiete-->
        <iXRH:Layer layerName="L51" />

        <!--Radweg, gefiltert auf das anzuzeigende Objekt-->
        <iXRH:Layer layerName="L50">
            <iXRH:Filter>
                <iXRH:SingleComparison>
                    <iXRH:ColumnName>id_radweg</iXRH:ColumnName>
                    <iXRH:Is>Equal</iXRH:Is>
                    <iXRH:Value>
                        <iXRH:Int>
                            <xsl:value-of select="/ButtonRow/Radweg/id_radweg"/>
                        </iXRH:Int>
                    </iXRH:Value>
                </iXRH:SingleComparison>
            </iXRH:Filter>
        </iXRH:Layer>

        <!--Zusatzebene: alle Arztpraxen im Ausschnitt-->
        <iXRH:Layer layerName="L49" />

        <!--Selektionsebene: Teilmenge Arztpraxen
        (wurden über benutzerdefinierten Radius zum Radweg im Buttonplan ermittelt)
        -->

        <!--Selektionsebene nur erstellen, wenn mind. eine Arztpraxis gefunden-->
        <xsl:if test="count(/ButtonRow/Radweg/Arztpraxen/Arztpraxis/autoid) > 0">

            <!--Parameter für die Selektion-->
            <xsl:variable name="QueryForSelLayer">
                <iXRH:Query>
                    <iXRH:Filter>
                        <iXRH:SingleComparison>
                            <iXRH:ColumnName>autoid</iXRH:ColumnName>
                            <iXRH:Is>In</iXRH:Is>
                            <iXRH:Value>
                                <xsl:for-each select="/ButtonRow/Radweg/Arztpraxen/Arztpraxis/autoid">
                                    <iXRH:Int>
                                        <xsl:value-of select="."/>
                                    </iXRH:Int>
                                </xsl:for-each>
                            </iXRH:Value>
                        </iXRH:SingleComparison>
                    </iXRH:Filter>
                    <iXRH:Return>
                        <iXRH:Records>
                            <iXRH:Columns embedPrimaryGeometry="true"/>
                        </iXRH:Records>
                    </iXRH:Return>
                </iXRH:Query>
            </xsl:variable>

            <!--Selektionslayer erzeugen-->
            <xsl:variable name="selLayerData"
                          select="iduCore:MapCreateSelLayer(
                                    $QueryForSelLayer,
                            'L49')/infoTypes:IxrhSelLayerInfo "/>

            <!--Selektionslayer registrieren-->
            <iXRH:SelLayer layerName="{$selLayerData/@sourceLayerName}" guid="{$selLayerData/infoTypes:Guid}"/>
        </xsl:if>

    </iXRH:RenderMap>
</xsl:variable>

Karte erstellen:

<!--Karte erstellen-->
<!--Größe des eingebundenen Bildes muss der Größe der angeforderten Karte entsprechen, deswegen hier Generierung des Style für Größe aus obigen Kartenparametern-->
<img class="karte"
     style="width:{msxsl:node-set($MapParameter)/iXRH:RenderMap/@imageWidth * (96 div 80)}px;height:{msxsl:node-set($MapParameter)/iXRH:RenderMap/@imageHeight * (96 div 80)}px;">
    <xsl:attribute name="src">
    <!-- Anpassung der MapParameter über verschachtelte Aufrufe
    1. BBox auf Radweggeom einstellen
    2. BBox auf nächsten runden Maßstab korrigieren
    3. Karte mit den resultierenden MapParametern erstellen-->
        <xsl:value-of select="iduCore:CreateMapImage(
                                iduCore:MapModifyBBoxToBestScale(
                                    iduCore:MapModifyBBoxZoomToGeom(
                                        $MapParameter,
                                        /ButtonRow/Radweg/geom,
                                        500),
                                        1,
                                        '5000,10000,20000,50000,100000,200000,500000'
                                    )
                        )"/>
    </xsl:attribute>
</img>