Ruby Nokogiri将KML转换为CSV

4
我想从KML文件中提取两个不同的元素,并将它们转换成CSV格式。我参考了这个网站:http://ckdake.com/content/2012/highgroove-hack-night-kml-heatmaps.html,其中生成了一个坐标的CSV文件。现在我想在每一行开头添加名称标签。我是ruby/nokogiri的初学者,所以我可以插入一些代码来获取a)所有名称的列表,然后是b)所有坐标的列表。但再次强调 - 我希望它们在同一行上。
require 'rubygems'
require 'nokogiri' # gem install nokogiri

@doc = Nokogiri::XML(File.open("WashingtonDC2013-01-04 12h09m01s.kml"))

@doc.css('name').each do |name|  
  puts name.content
end

@doc.css('coordinates').each do |coordinates|
  coordinates.text.split(' ').each do |coordinate|
    (lat,lon,elevation) = coordinate.split(',')
    puts "#{lat},#{lon}\n"
  end
end
1个回答

8
这个怎么样:
@doc.css('Placemark').each do |placemark|
  name = placemark.css('name')
  coordinates = placemark.at_css('coordinates')

  if name && coordinates
    print name.text + ","
    coordinates.text.split(' ').each do |coordinate|
      (lon,lat,elevation) = coordinate.split(',')
      print "#{lat},#{lon}"
    end
    puts "\n"
  end
end

我假设每个<Placemark>标签中都有一个<coordinates>标签对应一个坐标对。如果有多个,则它们都将附加到同一行上。
如果这不起作用,您需要发布一些KML文件本身,以便我可以在上面进行测试。我只是根据这个示例KML文件猜测的。

1
小心,KML中的坐标是(经度,纬度,高程)。已更新代码以反映这一点。https://developers.google.com/kml/documentation/kmlreference#coordinates - yood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接