此问题涉及:How to summarize, group 4000+ GPX Trackpoints as Tracks named for by each days date?
Garmin GPS-Tracks提供了为每个音轨定义不同颜色的选项。
作为对引用问题结果的完美,我想知道如何为每个GPS轨道应用交替颜色。比如第一个。轨道(当天的所有轨迹点)都是'Magenta'的第二个。一天是'DarkGray'和第三天。再一天'Magenta'。
使用节点(日期)在奇数天或偶数天之间交替通常会在2天内产生相同的颜色。例如:3月31日至4月1日。会收到相同的颜色。
颜色适用于节点:< gpxx:DisplayColor>
如何使用引用问题答案中提供的代码实现这一目标?
<trk>
<name>ACTIVE LOG</name>
<extensions>
<gpxx:TrackExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
<gpxx:DisplayColor>Magenta</gpxx:DisplayColor>
</gpxx:TrackExtension>
</extensions>
<trkseg>
答案 0 :(得分:3)
您可以将position()
除以2,然后检查是否有余数。
<xsl:stylesheet version="1.0"
xmlns="http://www.topografix.com/GPX/1/1"
xmlns:gpx="http://www.topografix.com/GPX/1/1"
xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="gpx">
<xsl:output indent="yes" encoding="utf-8"/>
<xsl:strip-space elements="*"/>
<xsl:key name="date" match="gpx:trkpt" use="substring(gpx:time,1,10)"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:for-each select="//gpx:trkpt[generate-id(key('date',substring(gpx:time,1,10))[1])=generate-id()]">
<trk>
<name>Trackpoints: <xsl:value-of select="substring(gpx:time,1,10)"/></name>
<extensions>
<gpxx:TrackExtension>
<xsl:choose>
<xsl:when test="position() mod 2 = 1">
<gpxx:DisplayColor>Magenta</gpxx:DisplayColor>
</xsl:when>
<xsl:otherwise>
<gpxx:DisplayColor>DarkGray</gpxx:DisplayColor>
</xsl:otherwise>
</xsl:choose>
</gpxx:TrackExtension>
</extensions>
<trkseg>
<xsl:for-each select="key('date',substring(gpx:time,1,10))">
<xsl:copy-of select="."/>
</xsl:for-each>
</trkseg>
</trk>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>