Codebase list groonga / upstream/6.1.5 benchmark / geo-select-generate-grn.rb
upstream/6.1.5

Tree @upstream/6.1.5 (Download .tar.gz)

geo-select-generate-grn.rb @upstream/6.1.5raw · history · blame

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

if ARGV.size != 2
  puts "Usage: #{$0} SOURCE_CSV OUTPUT_GRN"
  puts " e.g.: #{$0} fixtures/geo-select/13_2010.CSV fixtures/geo-select/load.grn"
  exit(false)
end

csv, grn = ARGV

require "fileutils"
require "csv"

FileUtils.mkdir_p(File.dirname(grn))
File.open(grn, "w") do |output|
  output.print(<<-EOH.strip)
table_create Addresses TABLE_HASH_KEY ShortText
column_create Addresses location COLUMN_SCALAR WGS84GeoPoint

table_create Locations TABLE_PAT_KEY WGS84GeoPoint
column_create Locations address COLUMN_INDEX Addresses location

load --table Addresses
[
["_key", "location"]
EOH

  headers = nil
  csv_foreach_args = [csv]
  csv_foreach_args << {:encoding => "UTF-8"} if defined?(Encoding)
  CSV.foreach(*csv_foreach_args) do |row|
    if headers.nil?
      headers = row
    else
      record = {}
      headers.each_with_index do |header, i|
        record[header] = row[i]
      end
      central_value_p = record["代表フラグ"] == "1"
      next unless central_value_p
      name =
        record["都道府県名"] + record["市区町村名"] +
        record["大字・町丁目"] + record["街区符号・地番"]
      location = "%sx%s" % [record["緯度"], record["経度"]]
      output.print(",\n[\"#{name}\", \"#{location}\"]")
    end
  end
  output.print(<<-EOF)

]
EOF
end