Newer
Older
Loremap / viewerdb / viewerdb.rb
#!/usr/bin/env ruby
# coding: utf-8

require 'sqlite3'
require 'cgi'
require 'json'
require 'csv'

cgi = CGI.new(:accept_charset => "UTF-8")
print "Content-type: text/html; charset=UTF-8\n\n"
mode = cgi['mode']

db=SQLite3::Database.new("db/viewer_prc.sq3")
thiscgi = "./"+File.basename($0)

def cat(file)
  open(file, "r"){|f| print f.read}
end

def header()
  cat "header.html"
end

def footer()
  cat "footer.html"
end


if mode == ""#htmlに表示するやつを書く
  header()

  print <<__EOM__
 <h1>データベースから抽出andデータ作成</h1>

 <form method="POST" action="#{thiscgi}"  enctype="multipart/form-data">


<p>条件指定<select name="cond2"></p>
__EOM__
#<p>条件指定: <input  name="cond" length="20"></p>
  db.execute("SELECT maptype, mapname FROM mapname") do |row|
    printf(<<__EOM__, CGI.escapeHTML(row[0]), CGI.escapeHTML(row[1]))
    <option value="%s">%s</option>
__EOM__
  end

    print <<__EOM__
</select>
    <p><input type="submit" value="OK"></p>
 </form>

__EOM__
  footer()
else
  # ok push後こっちにくる。この辺でgeojsonを作る
  header()
#  cond  = CGI.escapeHTML(cgi["cond"].read)
  cond2  = CGI.escapeHTML(cgi["cond2"].read)
  #if cond = "" ##formに何もなかったら場合の処理
  printf("%s",cond2)
  dbn = db.execute(<<-_EOS_, cond2.to_s)
	SELECT  mapitem.ename,
		mapitem.name,
		mapitem.addr,
		mapitem.lat,
		mapitem.lon,
		object.objtype,
		object.jsonval,
		maptype.maptype,
		group_concat(attribute.attr  || ',' ||attribute.value)
	FROM	mapitem JOIN attribute JOIN object JOIN maptype
	     ON mapitem.ename == attribute.ename
		AND mapitem.ename == object.ename
		AND mapitem.ename == maptype.ename
		WHERE maptype.maptype == ?
	GROUP BY maptype.maptype
	_EOS_
  if dbn[0][5] == "Point"
    hoge1 = Array.new
    hoge1 = dbn[0][6].split(",")
    hash = {
      "type"=>"FeatureCollection",
      "features" => [{
          "type" =>"Feature",
          "properties"=>{
            "name" => dbn[0][1],
            "address"=>dbn[0][2],
            "maptype"=>dbn[0][7]},
          "geometry" =>{
            "type" => dbn[0][5],
            "coordinates" => [hoge1[0].to_f,hoge1[1].to_f]}}]}
  else
    ##Point以外の時の処理
    hash = {
      "type" => "FeatureCollection",
      "features" => [{
          "type" =>"Feature",
          "properties" => {
            "name"=>dbn[0][1],
            "address"=>dbn[0][2],
            "maptype"=>dbn[0][7]
          },
          "geometry" => {
            "type" => dbn[0][5],
            "coordinates"=>[dbn[0][6]]}}]}
  end
### ここまで

##ここから add kye value

hogehoge2 = Array.new
hogehoge3 = Array.new
hogehoge4 = Array.new

hogehoge2 =  dbn[0][8].split(",")
tt = 0
  for t in 0..hogehoge2.length - 1
    if tt % 2 == 0 #あまりが0 == 偶数
      hogehoge3[0] = hogehoge2[0]
    else
      hogehoge4[0] = hogehoge2[1]
    end
    tt += 1
  end

  for g in 0.. hogehoge3.length - 1
    hash["features"][0]["properties"][hogehoge3[0]] = hogehoge4[0]
  end
  ###ここまで

  hash_leng =  dbn.length #データの抽出量を数える

  if hash_leng >= 2 ###データの抽出が2個以上ある時の処理
    i = 1
    #u = 1
    for hoge2 in 1..hash_leng - 1
    if dbn[i][5] == "Point"
      hoge1 = Array.new
      hoge1 = dbn[i][6].split(",")
      hash["features"][i] = {
          "type" =>"Feature",
          "properties"=>{
            "name"=>dbn[i][1],
            "address"=>dbn[i][2],
            "maptype"=>dbn[i][7]},
          "geometry" =>{
            "type" => dbn[i][5],
            "coordinates"=>[hoge1[0].to_f,hoge1[1].to_f]}}
    else
      #### point以外の処理
      hash["features"][i] = {
          "type" =>"Feature",
          "properties"=>{
            "name"=>dbn[i][1],
            "address"=>dbn[i][2],
            "maptype"=>dbn[i][7]
          },
          "geometry" =>{
            "type" => dbn[i][5],
            "coordinates"=>[dbn[i][6]]}}
    end
      hogehoge2 = Array.new  ##配列リセット
      hogehoge3 = Array.new
      hogehoge4 = Array.new

    hogehoge2 =  dbn[i][8].split(",")
      tt1 = 0
      tt2 = 0
      tt3 = 0
      tt4 = 0
      tt5 = 1

      for t in 0..hogehoge2.length - 1
        if tt1 % 2 == 0 #あまりが0 == 偶数
          hogehoge3[tt2] = hogehoge2[tt4]##kye
          tt2 += 1
          tt4 += 2
        else
        hogehoge4[tt3] = hogehoge2[tt5]##value
          tt3 += 1
          tt5 += 2
        end
      tt1 += 1
      end

      ww = 0
      for g in 0.. hogehoge3.length - 1
        hash["features"][i]["properties"][hogehoge3[ww]] = hogehoge4[ww]
        ww += 1
      end
      i += 1
      # u += 1
    end
  end

  #### GeoJSON write
  open("geojson/test.geojson",'w') do |row|
    geojson = JSON.pretty_generate(hash)
    row.print geojson
     #puts geojson
   # print("geojsonできたよ\n")
  #end
#### ここまで


    ### create kml
    #system("ogr2ogr -f KML geojson/test.KML geojson/test.geojson")
    #print("kmlできたよ\n")
    ### ここまで

    #### gitbucket push GeoJSON
    #system("sh auto_push.sh \"add geojson\"")
    #print("pushされたよ\n")

    geojson  = JSON.pretty_generate(hash)
    print <<__EOM__
<p>条件: #{cond2}</p>
<p> #{geojson}</p>
<p> 以下でダウンロードできます</p>
<a href="geojson/test.geojson" download="test.geojson">ダウンロード</a>
__EOM__
    footer()
  end
end