Karte mit Selektion darstellen

Erweiterungsobjekt: eo:iduCore

cardo bietet folgende Möglichkeiten, eine Selektion in der Karte darzustellen:

  • automatische Anzeige der aktuellen Selektion aus cardo (Standardverhalten, abschaltbar - siehe unten)
  • Erstellen eines extra Selektionslayers für die Karte im cardo.Button

Soll eine extra Selektionsebene erstellt werden, muss zuerst ein entsprechender Filter definiert werden. Dazu wird zusätzlich folgender Namespace benötigt: 

<xsl:stylesheet version="1.0"
    ...
  xmlns:infoTypes="http://schemas.webs.idu.de/iwan/informationTypes"
    ...>

Dann kann die Selektionsebene mit MapCreateSelLayer erstellt werden. Als Ergebnis kommt ein XML-Fragment zurück, welches u.a. im Unter-Tag ixrhSelLayerInfo den neuen Layernamen enthält. Im nachfolgenden Beispiel wird dieses Unter-Tag wiederrum einer Variablen zugewiesen, welche dann später bei der Erstellung der Karte genutzt werden kann.

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

<!--Selektionsebene erstellen-->
<xsl:variable name="SelLayerData"
        select="iduCore:MapCreateSelLayer(
                                $QueryForSelLayer,
                                'L49')/infoTypes:IxrhSelLayerInfo "/>

Soll als Filter statt eines einzelnen Wertes eine Menge von Werten verwendet werden, finden Sie ein entsprechendes Beispiel hier.

In den Parametern für die Kartenerstellung kann dann z.B. der neu erstellte Selektionslayer mit angegeben werden, damit die Selektion auf der Karte dargestellt wird:

<!--Parameter für die Karte-->
<xsl:variable name="MapParameter">
    <iXRH:RenderMap imageHeight="400"
           imageWidth="400"
           epsgCode="25833"
           drawSelection="false"
           imageSizeLargestEdge="1000">
        <iXRH:Layer layerName="L49" />
        <iXRH:SelLayer layerName="{$SelLayerData/@sourceLayerName}" guid="{$SelLayerData/infoTypes:Guid}"/>
    </iXRH:RenderMap>
</xsl:variable>
Hinweis: Standardmäßig wird auch immer die aktuelle Selektion aus cardo mit dargestellt. Das kann über das Argument drawSelection="false" an der RenderMap-Konfiguration abgestellt werden.

Es ist auch möglich, die Karte auf diesen Selektionslayer zu zoomen. Hierfür muss das Format der BBox mit ConvertInfoTypeBBoxToIxrhBBox konvertiert werden:

<xsl:value-of select="iduCore:CreateMapImage(
    iduCore:MapModifyBBox(
        $MapParameter,
        iduCore:ConvertInfoTypeBBoxToIxrhBBox($SelLayerData/infoTypes:BoundingBox))
)"/>