Help us understand the problem. What is going on with this article?

地理データのKMLファイルをRubyでTSVに変換する

More than 5 years have passed since last update.

GoogleEarthProから書き出したKMLファイルを、取り扱いやすいTSV形式に変換するサンプルです。

Rubyコード

require 'nokogiri'

fields = [:place, :lat, :lon]
print fields.join("\t") + "\n"

kml_file = 'export.kml'
@doc = Nokogiri::XML(File.open(kml_file))
@doc.css('Placemark').each do |placemark|
  name = placemark.css('SimpleData')
  coordinates = placemark.at_css('coordinates')
  lat,lon = coordinates.text.split(',')
  print [name.text, lat, lon].join("\t") + "\n"
end

実行結果

$ ruby kml2csv.rb
place   lat lon
東京都豊島区池袋*丁目*-*-*    139.***0003 35.***36150000002
東京都板橋区板橋2-*-*   139.***2622 35.***8046
東京都板橋区中丸町**    139.***2803999999   35.***14079999998

サンプルファイル

今回の対象ファイルのXML構造は次の通りです。
次のような<Placemark>の中に元の住所と結果の緯度経度が納められています。
なお、一部*で伏せておりますがご了承ください。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">

...snip...

  <Folder id="layer 0">
    <name>test</name>
    <visibility>0</visibility>
    <Placemark>
      <visibility>0</visibility>
      <styleUrl>#pointStyleMap</styleUrl>
      <Style id="inline">
        <IconStyle>
          <color>ffe8e8e8</color>
          <colorMode>normal</colorMode>
          <Icon>
            <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
          </Icon>
        </IconStyle>
        <LineStyle>
          <color>ffe8e8e8</color>
          <colorMode>normal</colorMode>
        </LineStyle>
        <PolyStyle>
          <color>ffe8e8e8</color>
          <colorMode>normal</colorMode>
        </PolyStyle>
      </Style>
      <ExtendedData>
        <SchemaData schemaUrl="#S_test_S">
          <SimpleData name="address">東京都豊島区池袋*丁目*-*-*</SimpleData>
        </SchemaData>
      </ExtendedData>
      <Point>
        <coordinates>139.***0003,35.*****150000002,0</coordinates>
      </Point>
    </Placemark>

...snip...

参考サイト

http://stackoverflow.com/questions/14209033/ruby-nokogiri-converting-kml-to-csv

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away