在 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()函数。

【讨论】:

当我使用此代码时,我得到 NaNNaN。可能是什么问题?感谢您的回答和解释! @mona:要么你修改了 XSLT 代码或 XML 文档,要么你有一个有缺陷的、不兼容的 XSLT 处理器。我使用了 9 多种不同的 XSLT 处理器,它们都产生了相同、正确的结果。 谢谢迪米特。我不确定如何遍历 XML 树。太乱了..效果很好! Dimitre,我怎样才能截断我得到的纬度/经度值? @Mona:一种方法是使用format-number() 函数。小数点后需要多少位?

以上是关于在 XSL 中将地理坐标从度-小时-分钟转换为十进制的主要内容,如果未能解决你的问题,请参考以下文章

arcgis坐标转换

如何在反应中将分钟转换为小时和分钟

在 Python 中将秒转换为天、小时、分钟和秒 [关闭]

如何在 SQL Server 中将“XX 天 XX 小时 XX 分钟”转换为秒?

如何在熊猫中将 4 位数字转换为小时:分钟时间格式

使用 Duration 对象在 Java 中将天、分钟、小时转换为秒失败