【发布时间】:2011-02-28 13:42:36
【问题描述】:
请教什么可以在 Ruby 中解析 GPX 文件?
我尝试了gpx,但它不适用于 Ruby 企业版 (https://github.com/dougfales/gpx/issues/1)。
我不想写解析器。
【问题讨论】:
标签: ruby-on-rails ruby gpx
请教什么可以在 Ruby 中解析 GPX 文件?
我尝试了gpx,但它不适用于 Ruby 企业版 (https://github.com/dougfales/gpx/issues/1)。
我不想写解析器。
【问题讨论】:
标签: ruby-on-rails ruby gpx
我一直在寻找同样的东西,但最终 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')(去掉最后一个/)
points = trackpoints.map { |trkpt| [trkpt.xpath('@lat').to_s.to_f, trkpt.xpath('@lon').to_s.to_f] }
我不太熟悉使用 GPX 和 Nokogiri,我的 GPX 文件只有很多 <wpt> 而不是 <trkpt>,这对我有用:
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
【讨论】: