Newer
Older
Loremap / viewerdb / viewerdb.rb
@otani otani on 18 Sep 2018 2 KB add download
#!/usr/bin/env ruby
# coding: utf-8

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

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

db=SQLite3::Database.new("viewer.sq3")

db.execute("CREATE TABLE IF NOT EXISTS " +
           "mapdate( name text primary key, period text, address text, season text, viewer text, latlng text, type text)")

thiscgi = "./"+File.basename($0)

def head()
print <<__EOM__
<!DOCTYPE html>
<html lang="ja">
<head>
<title>make GeoJSON</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
__EOM__
end

def body()
print <<__EOM__
</body>
</html>
__EOM__
end

if mode == ""#htmlに表示するやつを書く
head()
  print <<__EOM__
 <h1>データベースから抽出andデータ作成</h1>
 <form method="POST" action="#{thiscgi}"  enctype="multipart/form-data">
 <p>条件指定: <input  name="cond" length="20"></p>
 <p><input type="submit" value="OK"></p>
 </form>
__EOM__
  body()
else
  # ok push後こっちにくる。この辺でgeojsonを作る
  head()
  cond  = CGI.escapeHTML(cgi["cond"].read)
  if cond = "" ##formに何もなかったら場合の処理
    dbn = db.execute("SELECT * from mapdate3 WHERE viewer=1")
  else
    dbn = db.execute("SELECT * from mapdate3 WHERE viewer=?", cond)
  end

  hash_leng =  dbn.length #データの抽出量を数える
  hash = {"type"=>"FeatureCollection","features" => [{"type" =>"Feature","properties"=>{"name"=>dbn[0][0],"description"=>dbn[0][1]},"geometry" =>{"type" => dbn[0][6],"coordinates"=>[dbn[0][5]]}}]}

  if hash_leng >= 2 ###データの抽出が2個以上ある時の処理
    i = 1
    u = 1
    for hoge2 in 1..hash_leng - 1
      hash["features"][i] =  {"type" =>"Feature","properties"=>{"name"=>dbn[u][0],"description"=>dbn[u][1]},"geometry" =>{"type" => dbn[u][7],"coordinates"=>[dbn[u][5].to_f,dbn[u][6].to_f]}}
      i += 1
      u += 1
    end
  end

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

 body()
end




#insert into mapdate (name,period,address,season,viewer,latlng,type)values('hoge','ho','sakata','aki','1','138,39','point');