source: subversion/applications/utils/export/osmgarminmap/fix.xsl @ 16911

Last change on this file since 16911 was 1912, checked in by jochen, 13 years ago

Added fix.xsl
Use ref as label if there is no "name" key

File size: 2.3 KB
Line 
1<?xml version="1.0" encoding="iso-8859-1"?>
2<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3    <xsl:output method="xml" indent="no" omit-xml-declaration="yes"/>
4
5    <xsl:template match="text()"/>
6
7    <xsl:template match="osm"><osm><xsl:apply-templates select="way|segment|node"/></osm></xsl:template>
8
9    <xsl:key name="node" match="/osm/node" use="@id"/>
10    <xsl:key name="segment" match="/osm/segment" use="@id"/>
11
12    <xsl:template match="segment|node">
13        <xsl:copy-of select="."/>
14    </xsl:template>
15
16    <xsl:template name="splitway">
17        <xsl:param name="way"/>
18
19        <xsl:for-each select="seg">
20            <way id="{../@id}">
21                <seg id="{@id}"/>
22                <xsl:for-each select="../tag">
23                    <xsl:copy-of select="."/>
24                </xsl:for-each>
25            </way>
26        </xsl:for-each>
27    </xsl:template>
28
29    <xsl:template match="way">
30        <xsl:variable name="splitifnotempty">
31            <xsl:for-each select="seg">
32                <xsl:if test="position() != last()">
33                    <xsl:variable name="thissegment" select="key('segment',@id)"/>
34                    <xsl:variable name="next" select="position()+1"/>
35                    <xsl:variable name="nextsegment" select="key('segment',../seg[$next]/@id)"/>
36                    <xsl:variable name="tolon" select="key('node',$thissegment/@to)/@lon"/>
37                    <xsl:variable name="tolat" select="key('node',$thissegment/@to)/@lat"/>
38                    <xsl:variable name="fromlon" select="key('node',$nextsegment/@from)/@lon"/>
39                    <xsl:variable name="fromlat" select="key('node',$nextsegment/@from)/@lat"/>
40                    <xsl:if test="$tolon != $fromlon or $tolat != $fromlat">
41                        <xsl:value-of select="../@id"/>fail
42                    </xsl:if>
43                </xsl:if>
44            </xsl:for-each>
45        </xsl:variable>
46
47        <xsl:choose> 
48            <xsl:when test="$splitifnotempty=''">
49                <xsl:copy-of select="."/>
50            </xsl:when>
51            <xsl:otherwise>
52                <xsl:call-template name="splitway">
53                    <xsl:with-param name="way" select="."/>
54                </xsl:call-template>
55            </xsl:otherwise>
56        </xsl:choose>
57    </xsl:template>
58
59</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.