在 XSL 中将地理坐标从度-小时-分钟转换为十进制
Posted
技术标签:
【中文标题】在 XSL 中将地理坐标从度-小时-分钟转换为十进制【英文标题】:Conversion of geo coordinates from degree-hour-minutes to decimal in XSL 【发布时间】:2011-12-23 18:10:07 【问题描述】:我有一个 XML 文件,其中元素之一是地理坐标(纬度/经度)。该字段采用度-小时-分钟(例如:43:06:35.4779)格式,我需要将其转换为十进制格式。任何人都可以帮助在 XSL 中进行此转换或指向一些材料。提前致谢!
编辑:谁能帮我截断转换后得到的纬度/经度值。例如
<latitude>43.051643999999996</latitude>
<longitude>-112.62663475000001</longitude>
【问题讨论】:
您的意思是从度数(0 到 +-180)到弧度(-pi 到 pi)?或者只是从 43:06:35 到 43.109855 ? 【参考方案1】:这种转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="lat/text() | long/text()">
<xsl:call-template name="DegreesToDecimal"/>
</xsl:template>
<xsl:template name="DegreesToDecimal">
<xsl:param name="pDegrees" select="."/>
<xsl:variable name="vDegrees" select=
"number(substring-before($pDegrees, ':'))"/>
<xsl:variable name="vMinutes" select=
"number(
substring-before(
substring-after($pDegrees, ':'),
':'
)
)"/>
<xsl:variable name="vSeconds" select=
"number(
substring-after(
substring-after($pDegrees, ':'),
':'
)
)"/>
<xsl:value-of select=
"$vDegrees
+
$vMinutes div 60
+
$vSeconds div 3600
"/>
</xsl:template>
</xsl:stylesheet>
应用于此 XML 文档时:
<coordinates>
<lat>43:06:35.4779</lat>
<long>53:22:16.7890</long>
</coordinates>
产生想要的正确结果:
<coordinates>
<lat>43.10985497222222</lat>
<long>53.37133027777778</long>
</coordinates>
说明:正确使用substring-before()
、substring-after()
和number()
函数。
【讨论】:
当我使用此代码时,我得到format-number()
函数。小数点后需要多少位?以上是关于在 XSL 中将地理坐标从度-小时-分钟转换为十进制的主要内容,如果未能解决你的问题,请参考以下文章