【问题标题】:Ruby GPX file parserRuby GPX 文件解析器
【发布时间】:2011-02-28 13:42:36
【问题描述】:

请教什么可以在 Ruby 中解析 GPX 文件?

我尝试了gpx,但它不适用于 Ruby 企业版 (https://github.com/dougfales/gpx/issues/1)。

我不想写解析器。

【问题讨论】:

    标签: ruby-on-rails ruby gpx


    【解决方案1】:

    我一直在寻找同样的东西,但最终 GPX 文件只是另一个 XML 文件,因此您可以使用像 Nokogiri 这样的 XML 解析库来解析它。以下是我如何从 GPX 日志中提取所有纬度和经度:

    #!/usr/bin/env ruby
    require 'rubygems'
    require 'nokogiri'
    doc = Nokogiri::XML(open(my-log.gpx))
    trackpoints = doc.xpath('//xmlns:trkpt')
    points = Array.new
    trackpoints.each do |trkpt|
      points << [trkpt.xpath('@lat').to_s.to_f, trkpt.xpath('@lon').to_s.to_f]
    end
    

    可能有更好的方法可以做到这一点,但这对我有用。

    【讨论】:

    • 应该是trackpoints = doc.xpath('//xmlns:trkpt')(去掉最后一个/
    • 另外,只是一个 nit,但您可以像任何其他 Enumerable 一样映射 Nokogiri 节点集:points = trackpoints.map { |trkpt| [trkpt.xpath('@lat').to_s.to_f, trkpt.xpath('@lon').to_s.to_f] }
    【解决方案2】:

    我不太熟悉使用 GPX 和 Nokogiri,我的 GPX 文件只有很多 &lt;wpt&gt; 而不是 &lt;trkpt&gt;,这对我有用:

    require 'rubygems'
    require 'nokogiri'
    doc = Nokogiri::XML(open("my_route.gpx"))
    
    trackpoints = doc.xpath('//wpt')
    points = Array.new
    trackpoints.each do |trkpt|
      points << [trkpt.xpath('@lat').to_s.to_f, trkpt.xpath('@lon').to_s.to_f]
    end
    
    p points
    

    或者这个:

    require 'rubygems'
    require 'nokogiri'
    doc = Nokogiri::XML(open("my_route.gpx"))
    
    waypoints = doc.xpath('//wpt')
    points = waypoints.map{|wpt| [wpt.xpath('@lat').to_s.to_f, wpt.xpath('@lon').to_s.to_f]}
    
    p points
    

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 2012-03-14
      • 2022-08-02
      • 2018-12-28
      • 1970-01-01
      • 2010-10-14
      • 2019-01-19
      • 2013-09-10
      • 2011-03-30
      相关资源
      最近更新 更多