view gnv-artifacts/contrib/palette2qgis.xsl @ 516:4f2a18abc780

Added little XSL tranformation to turn palette XML files into QGIS style definitions. Useful to display "Horizontalschnitte" in correct colors. gnv-artifacts/trunk@610 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 23 Jan 2010 14:03:26 +0000
parents
children a8f6ca59b26e
line wrap: on
line source
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns="http://www.w3.org/1999/xhtml" >
    <!--
    palette2qgis.xsl
    ================
    Transforms palette XML files into QGIS style files. Useful
    to display "Horizontalschnitte" with the right colors.

    Tested with Quantum GIS 1.4.0-Enceladus.

    usage: xsltproc palette2qgis.xsl palette.xml > style.qml

    Author: Sascha L. Teichmann (sascha.teichmann@intevation.de)
    -->

    <xsl:output
        method="xml"
        doctype-system="PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'"/>

    <xsl:template name="hex">
        <xsl:param name="value"/>
        <xsl:variable name="x" select="translate(substring($value, string-length($value), 1), 'ABCDEF', 'abcdef')"/>
        <xsl:variable name="result">
            <xsl:choose>
                <xsl:when test="$x = 'a'">10</xsl:when>
                <xsl:when test="$x = 'b'">11</xsl:when>
                <xsl:when test="$x = 'c'">12</xsl:when>
                <xsl:when test="$x = 'd'">13</xsl:when>
                <xsl:when test="$x = 'e'">14</xsl:when>
                <xsl:when test="$x = 'f'">15</xsl:when>
                <xsl:otherwise><xsl:value-of select="$x"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="rest">
            <xsl:choose>
                <xsl:when test="string-length($value) > 1">
                    <xsl:call-template name="hex">
                        <xsl:with-param name="value" select="substring($value, 1, string-length($value)-1)"/>
                    </xsl:call-template>
                </xsl:when>
                <xsl:otherwise><xsl:value-of select="0"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:value-of select="number($result) + 16*$rest"/>
    </xsl:template>

    <xsl:template match="/ranges/range">
        <symbol>
          <lowervalue><xsl:value-of select="@index"/></lowervalue>
          <uppervalue><xsl:value-of select="@index"/></uppervalue>
          <label><xsl:value-of select="@description"/></label>
          <pointsymbol>hard:circle</pointsymbol>
          <pointsize>2</pointsize>
          <pointsizeunits>pixels</pointsizeunits>
          <rotationclassificationfieldname></rotationclassificationfieldname>
          <scaleclassificationfieldname></scaleclassificationfieldname>
          <symbolfieldname></symbolfieldname>
          <outlinecolor red="0" blue="0" green="0" />
          <outlinestyle>NoPen</outlinestyle>
          <outlinewidth>0.26</outlinewidth>
          <xsl:variable name="rgb">
            <xsl:call-template name="hex">
                <xsl:with-param name="value" select="substring(@rgb, 2)"/>
            </xsl:call-template>
          </xsl:variable>
          <xsl:variable name="red"   select="floor(($rgb div (256*256)) mod 256)"/>
          <xsl:variable name="green" select="floor(($rgb div 256) mod 256)"/>
          <xsl:variable name="blue"  select="floor($rgb mod 256)"/>
          <fillcolor red="{$red}" blue="{$blue}" green="{$green}"/>
          <fillpattern>SolidPattern</fillpattern>
          <texturepath null="1" ></texturepath>
        </symbol>
    </xsl:template>

    <xsl:template match="/">
        <qgis version="1.4.0-Enceladus" 
              minimumScale="1" 
              maximumScale="1e+08" 
              minLabelScale="1" 
              maxLabelScale="1e+08"
              hasScaleBasedVisibilityFlag="0" 
              scaleBasedLabelVisibilityFlag="0" >
        <transparencyLevelInt>255</transparencyLevelInt>
        <classificationattribute>CLASS</classificationattribute>
            <symbol>
                <lowervalue null="1" ></lowervalue>
                <uppervalue null="1" ></uppervalue>
                <label>Andere</label>
                <pointsymbol>hard:circle</pointsymbol>
                <pointsize>2</pointsize>
                <pointsizeunits>pixels</pointsizeunits>
                <rotationclassificationfieldname></rotationclassificationfieldname>
                <scaleclassificationfieldname></scaleclassificationfieldname>
                <symbolfieldname></symbolfieldname>
                <outlinecolor red="0" blue="0" green="0" />
                <outlinestyle>DashDotDotLine</outlinestyle>
                <outlinewidth>0.26</outlinewidth>
                <fillcolor red="59" blue="81" green="179" />
                <fillpattern>SolidPattern</fillpattern>
                <texturepath null="1" ></texturepath>
            </symbol>
            <uniquevalue>
                <classificationfield>CLASS</classificationfield>
                <xsl:apply-templates/>
            </uniquevalue>
            <edittypes>
                <edittype type="0" name="CLASS" />
                <edittype type="0" name="DATE" />
                <edittype type="0" name="LAYER" />
                <edittype type="0" name="PARAMETER" />
            </edittypes>
            <editform></editform>
            <editforminit></editforminit>
            <displayfield>PARAMETER</displayfield>
            <label>0</label>
            <attributeactions/>
            <labelattributes>
                <label fieldname="" text="Beschriftung" />
                <family fieldname="" name="Sans Serif" />
                <size fieldname="" units="pt" value="12" />
                <bold fieldname="" on="0" />
                <italic fieldname="" on="0" />
                <underline fieldname="" on="0" />
                <color fieldname="" red="0" blue="0" green="0" />
                <x fieldname="" />
                <y fieldname="" />
                <offset x="0" y="0" units="pt" yfieldname="" xfieldname="" />
                <angle fieldname="" value="0" auto="0" />
                <alignment fieldname="" value="center" />
                <buffercolor fieldname="" red="255" blue="255" green="255" />
                <buffersize fieldname="" units="pt" value="1" />
                <bufferenabled fieldname="" on="" />
                <multilineenabled fieldname="" on="" />
            </labelattributes>
        </qgis>
    </xsl:template>

    <xsl:template match="text()"/>
</xsl:stylesheet>

http://dive4elements.wald.intevation.org