このWebページでは、Open Street Mapのデータを用いてSQLite 3のテーブルを生成します。
★作成するSQLite 3データベース: osmdb
次のコマンドを使用する
Ubuntuでのインストール手順:
sudo apt -y update
sudo apt -y install osmosis
Ubuntuでのインストール手順:
cd /tmp
wget http://www.gaia-gis.it/gaia-sins/readosm-1.0.0b.tar.gz
tar -xvzof readosm-1.0.0b.tar.gz
cd readosm-1.0.0b
./configure
make
sudo make install
Ubuntuでのインストール手順:
sudo apt -y update
sudo apt -y install xalan
Ubuntuでのインストール手順:
sudo apt -y update
sudo apt -y install r-base
sudo apt -y install r-base-core
sudo apt -y install r-base-dev
sudo apt -y install r-recommended
sudo apt -y install r-mathlib
Ubuntuでのインストール手順:
echo 'options(repos="http://cran.md.tsukuba.ac.jp"); update.packages(checkBuilt=TRUE, ask=FALSE)' | sudo R --vanilla
#
sudo rm /tmp/a.$$.r
echo 'source("http://bioconductor.org/biocLite.R")' > /tmp/a.$$.r
echo 'biocLite("Rgraphviz") ' >> /tmp/a.$$.r
# zoo
echo 'install.packages("zoo") ' >> /tmp/a.$$.r
# base
echo 'install.packages("abind") ' >> /tmp/a.$$.r
echo 'install.packages("boot") ' >> /tmp/a.$$.r
echo 'install.packages("car") ' >> /tmp/a.$$.r
echo 'install.packages("chron") ' >> /tmp/a.$$.r
echo 'install.packages("cluster") ' >> /tmp/a.$$.r
echo 'install.packages("codetools") ' >> /tmp/a.$$.r
echo 'install.packages("colorspace") ' >> /tmp/a.$$.r
echo 'install.packages("effects") ' >> /tmp/a.$$.r
echo 'install.packages("foreign") ' >> /tmp/a.$$.r
echo 'install.packages("lattice") ' >> /tmp/a.$$.r
echo 'install.packages("lmtest") ' >> /tmp/a.$$.r
echo 'install.packages("mgcv") ' >> /tmp/a.$$.r
echo 'install.packages("multcomp") ' >> /tmp/a.$$.r
echo 'install.packages("mvtnorm") ' >> /tmp/a.$$.r
echo 'install.packages("relimp") ' >> /tmp/a.$$.r
echo 'install.packages("rpart") ' >> /tmp/a.$$.r
echo 'install.packages("sandwich") ' >> /tmp/a.$$.r
echo 'install.packages("sm") ' >> /tmp/a.$$.r
echo 'install.packages("spatial") ' >> /tmp/a.$$.r
echo 'install.packages("strucchange") ' >> /tmp/a.$$.r
echo 'install.packages("survival") ' >> /tmp/a.$$.r
# additional
echo 'install.packages("catspec") ' >> /tmp/a.$$.r
echo 'install.packages("cluster") ' >> /tmp/a.$$.r
echo 'install.packages("deldir") ' >> /tmp/a.$$.r
echo 'install.packages("diagram") ' >> /tmp/a.$$.r
echo 'install.packages("fields") ' >> /tmp/a.$$.r
echo 'install.packages("fftw") ' >> /tmp/a.$$.r
echo 'install.packages("gregmisc") ' >> /tmp/a.$$.r
echo 'install.packages("igraph") ' >> /tmp/a.$$.r
echo 'install.packages("nnclust") ' >> /tmp/a.$$.r
echo 'install.packages("png") ' >> /tmp/a.$$.r
echo 'install.packages("pvclust") ' >> /tmp/a.$$.r
echo 'install.packages("rgl") ' >> /tmp/a.$$.r
echo 'install.packages("scatterplot3d") ' >> /tmp/a.$$.r
echo 'install.packages("som") ' >> /tmp/a.$$.r
echo 'install.packages("Hmisc") ' >> /tmp/a.$$.r
echo 'install.packages("Rcmdr") ' >> /tmp/a.$$.r
echo 'install.packages("RSQLite") ' >> /tmp/a.$$.r
echo 'install.packages("CCA") ' >> /tmp/a.$$.r
echo 'install.packages("KernSmooth") ' >> /tmp/a.$$.r
echo 'install.packages("MASS") ' >> /tmp/a.$$.r
echo 'install.packages("Matrix") ' >> /tmp/a.$$.r
echo 'install.packages("Rcmdr") ' >> /tmp/a.$$.r
# more
echo 'install.packages("moments") ' >> /tmp/a.$$.r
echo 'install.packages("spatstat") ' >> /tmp/a.$$.r
echo 'install.packages("png") ' >> /tmp/a.$$.r
echo 'install.packages("biOps") ' >> /tmp/a.$$.r
echo 'install.packages("biOpsGUI") ' >> /tmp/a.$$.r
echo 'install.packages("maptools") ' >> /tmp/a.$$.r
echo 'install.packages("caTools") ' >> /tmp/a.$$.r
echo 'install.packages("classs") ' >> /tmp/a.$$.r
echo 'install.packages("evd") ' >> /tmp/a.$$.r
echo 'install.packages("its") ' >> /tmp/a.$$.r
echo 'install.packages("mapproj") ' >> /tmp/a.$$.r
echo 'install.packages("mnormt") ' >> /tmp/a.$$.r
echo 'install.packages("sm") ' >> /tmp/a.$$.r
echo 'install.packages("sp") ' >> /tmp/a.$$.r
echo 'install.packages("stabledist") ' >> /tmp/a.$$.r
echo 'install.packages("timeSeries") ' >> /tmp/a.$$.r
echo 'install.packages("tseries") ' >> /tmp/a.$$.r
echo 'install.packages("bayesm") ' >> /tmp/a.$$.r
echo 'install.packages("gdata") ' >> /tmp/a.$$.r
echo 'install.packages("gmodels") ' >> /tmp/a.$$.r
echo 'install.packages("rpart") ' >> /tmp/a.$$.r
echo 'install.packages("Zelig") ' >> /tmp/a.$$.r
#
cat /tmp/a.$$.r | sudo R --vanilla
Ubuntuでのインストール手順:
sudo apt -y update
sudo apt -y install libsqlite3-0
sudo apt -y install libsqlite0-dev
sudo apt -y install libsqlite3-dev
sudo apt -y install sqlite3
sudo apt -y install sqliteman
Ubuntuでのインストール手順:
sudo apt -y update
sudo apt -y install littler
緯度、経度を指定して必要部分の切り出しを行う
* japan.osm.bz2 は /tmp にあるものとする。
★bash プログラム
#!/bin/bash
bzip2 -d /tmp/japan.osm.bz2
cat /tmp/japan.osm | osmosis --rx - --bb left=130.2037 bottom=33.4308 right=130.5053 top=33.7147 --wx fukuoka-city.osm
cat /tmp/japan.osm | osmosis --rx - --bb left=130.0355 bottom=33.4643 right=130.2938 top=33.6690 --wx itoshima-city.osm
数分かかる
#!/bin/sh
cat > /tmp/1.xslt <<-XSLT
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/osm/node">
/node, <xsl:value-of select="./@id"/>, <xsl:value-of select="./@lat"/>, <xsl:value-of select="./@lon"/>, <xsl:value-of select="./@version"/>, <xsl:value-of select="./@changeset"/>, <xsl:value-of select="./@timestamp"/>
</xsl:template>
<xsl:template match="/osm/way">
/way, <xsl:value-of select="./@id"/>, <xsl:value-of select="./@version"/>, <xsl:value-of select="./@changeset"/>, <xsl:value-of select="./@user"/>, <xsl:value-of select="./@uid"/>, <xsl:value-of select="./@timestamp"/>
</xsl:template>
<xsl:template match="/osm/relation">
/relation, <xsl:value-of select="./@id"/>, <xsl:value-of select="./@version"/>, <xsl:value-of select="./@changeset"/>, <xsl:value-of select="./@user"/>, <xsl:value-of select="./@uid"/>, <xsl:value-of select="./@timestamp"/>
</xsl:template>
</xsl:stylesheet>
XSLT
xalan -in itoshima-city.osm -xsl /tmp/1.xslt > /tmp/itoshima-city.csv
grep '^/node' /tmp/itoshima-city.csv | sed 's/^\/node, //g' > /tmp/itoshima-city_node.csv
grep '^/way' /tmp/itoshima-city.csv | sed 's/^\/way, //g' > /tmp/itoshima-city_way.csv
grep '^/relation' /tmp/itoshima-city.csv | sed 's/^\/relation, //g' > /tmp/itoshima-city_relation.csv
xalan -in fukuoka-city.osm -xsl /tmp/1.xslt > /tmp/fukuoka-city.csv
grep '^/node' /tmp/fukuoka-city.csv | sed 's/^\/node, //g' > /tmp/fukuoka-city_node.csv
grep '^/way' /tmp/fukuoka-city.csv | sed 's/^\/way, //g' > /tmp/fukuoka-city_way.csv
grep '^/relation' /tmp/fukuoka-city.csv | sed 's/^\/relation, //g' > /tmp/fukuoka-city_relation.csv
# オプション
# xalan -in japan.osm -xsl /tmp/1.xslt > /tmp/japan.csv
# grep '^/node' /tmp
#!/bin/sh
cat > /tmp/1.xslt <<-XSLT
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/osm/node/tag">
/node/tag, <xsl:value-of select="../@id"/>, <xsl:value-of select="../@lat"/>, <xsl:value-of select="../@lon"/>, <xsl:value-of select="../@version"/>, <xsl:value-of select="../@changeset"/>, <xsl:value-of select="../@timestamp"/>, <xsl:value-of select="./@k"/>, "<xsl:value-of select="./@v"/>"
</xsl:template>
<xsl:template match="/osm/way/nd">
/way/nd, <xsl:value-of select="../@id"/>, <xsl:value-of select="../@version"/>, <xsl:value-of select="../@changeset"/>, "<xsl:value-of select="../@user"/>", <xsl:value-of select="../@uid"/>, <xsl:value-of select="../@timestamp"/>, <xsl:value-of select="./@ref"/>
</xsl:template>
<xsl:template match="/osm/way/tag">
/way/tag, <xsl:value-of select="../@id"/>, <xsl:value-of select="../@version"/>, <xsl:value-of select="../@changeset"/>, "<xsl:value-of select="../@user"/>", <xsl:value-of select="../@uid"/>, <xsl:value-of select="../@timestamp"/>, <xsl:value-of select="./@k"/>, "<xsl:value-of select="./@v"/>"
</xsl:template>
<xsl:template match="/osm/relation/member">
/relation/member, <xsl:value-of select="../@id"/>, <xsl:value-of select="../@version"/>, <xsl:value-of select="../@changeset"/>, "<xsl:value-of select="../@user"/>", <xsl:value-of select="../@uid"/>, <xsl:value-of select="../@timestamp"/>, "<xsl:value-of select="./@type"/>", <xsl:value-of select="./@ref"/>, "<xsl:value-of select="./@role"/>"
</xsl:template>
<xsl:template match="/osm/relation/tag">
/relation/tag, <xsl:value-of select="../@id"/>, <xsl:value-of select="../@version"/>, <xsl:value-of select="../@changeset"/>, "<xsl:value-of select="../@user"/>", <xsl:value-of select="../@uid"/>, <xsl:value-of select="../@timestamp"/>, <xsl:value-of select="./@k"/>, "<xsl:value-of select="./@v"/>"
</xsl:template>
</xsl:stylesheet>
XSLT
xalan -in itoshima-city.osm -xsl /tmp/1.xslt > /tmp/itoshima-city-tag.csv
grep '^/node/tag' /tmp/itoshima-city-tag.csv | sed 's/^\/node\/tag, //g' > /tmp/itoshima-city_node_tag.csv
grep '^/way/nd' /tmp/itoshima-city-tag.csv | sed 's/^\/way\/nd, //g' > /tmp/itoshima-city_way_nd.csv
grep '^/way/tag' /tmp/itoshima-city-tag.csv | sed 's/^\/way\/tag, //g' > /tmp/itoshima-city_way_tag.csv
grep '^/relation/member' /tmp/itoshima-city-tag.csv | sed 's/^\/relation\/member, //g' > /tmp/itoshima-city_relation_member.csv
grep '^/relation/tag' /tmp/itoshima-city-tag.csv | sed 's/^\/relation\/tag, //g' > /tmp/itoshima-city_relation_tag.csv
xalan -in fukuoka-city.osm -xsl /tmp/1.xslt > /tmp/fukuoka-city-tag.csv
grep '^/node/tag' /tmp/fukuoka-city-tag.csv | sed 's/^\/node\/tag, //g' > /tmp/fukuoka-city_node_tag.csv
grep '^/way/nd' /tmp/fukuoka-city-tag.csv | sed 's/^\/way\/nd, //g' > /tmp/fukuoka-city_way_nd.csv
grep '^/way/tag' /tmp/fukuoka-city-tag.csv | sed 's/^\/way\/tag, //g' > /tmp/fukuoka-city_way_tag.csv
grep '^/relation/member' /tmp/fukuoka-city-tag.csv | sed 's/^\/relation\/member, //g' > /tmp/fukuoka-city_relation_member.csv
grep '^/relation/tag' /tmp/fukuoka-city-tag.csv | sed 's/^\/relation\/tag, //g' > /tmp/fukuoka-city_relation_tag.csv
# オプション
# xalan -in japan.osm -xsl /tmp/1.xslt > /tmp/japan-tag.csv
# grep '^/node/tag' /tmp/japan-tag.csv | sed 's/^\/node\/tag, //g' > /tmp/japan_node_tag.csv
# grep '^/way/nd' /tmp/japan-tag.csv | sed 's/^\/way\/nd, //g' > /tmp/japan_way_nd.csv
# grep '^/way/tag' /tmp/japan-tag.csv | sed 's/^\/way\/tag, //g' > /tmp/japan_way_tag.csv
# grep '^/relation/member' /tmp/japan-tag.csv | sed 's/^\/relation\/member, //g' > /tmp/japan_relation_member.csv
# grep '^/relation/tag' /tmp/japan-tag.csv | sed 's/^\/relation\/tag, //g' > /tmp/japan_relation_tag.csv
この Web ページでは、データベースの作成を行いますので、作成するデータベースのデータベース論理名を決めておくこと。この Web ページでは、次のように書きます:
使用するデータベースの名前のこと『データベース論理名』と呼ぶことにする。データベース論理名は、自由に決めていいですが、半角文字(つまり英数字)を使い、スペースを含まないこと。
★bash プログラム
#!/bin/bash
rm -f /tmp/osmdb
#
cat >/tmp/a.$$.sql <<-SQL
drop table osmnode;
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/osmdb
#
cat >/tmp/a.$$.sql <<-SQL
drop table osmway;
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/osmdb
#
cat >/tmp/a.$$.sql <<-SQL
drop table osmrelation;
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/osmdb
#
cat >/tmp/a.$$.sql <<-SQL
create table osmnode (
id integer not null,
lat real not null,
lon real not null,
version integer not null,
changeset integer,
timestamp datetime );
create table osmway (
id integer not null,
version integer not null,
changeset integer,
user text,
uid integer,
timestamp datetime );
create table osmrelation (
id integer not null,
version integer not null,
changeset integer,
user text,
uid integer,
timestamp datetime );
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/osmdb
★bash プログラム
#!/bin/bash
cat >/tmp/a.$$.sql <<-SQL
.mode csv
.import /tmp/itoshima-city_node.csv osmnode
.import /tmp/itoshima-city_way.csv osmway
.import /tmp/itoshima-city_relation.csv osmrelation
.import /tmp/fukuoka-city_node.csv osmnode
.import /tmp/fukuoka-city_way.csv osmway
.import /tmp/fukuoka-city_relation.csv osmrelation
SQL
cat /tmp/a.$$.sql | sqlite3 /tmp/osmdb
#
echo 'select * from osmnode limit 10;' | sqlite3 /tmp/osmdb
echo 'select * from osmway limit 10;' | sqlite3 /tmp/osmdb
echo 'select * from osmrelation limit 10;' | sqlite3 /tmp/osmdb
★bash プログラム
#!/bin/bash
cd /tmp
ls -la osmdb
# dump
cat >/tmp/a.$$.sql <<-SQL
.output /tmp/osmdb.sql
.dump
.exit
SQL
#
cat /tmp/a.$$.sql | sqlite3 /tmp/osmdb
#
rm /tmp/osmdb
# restore
cat >/tmp/a.$$.sql <<-SQL
.read /tmp/osmdb.sql
.exit
SQL
#
cat /tmp/a.$$.sql | sqlite3 /tmp/osmdb
#
cd /tmp
ls -la osmdb
#!/bin/bash
cat > /tmp/a.r <<-COMMAND
library("RSQLite")
drv <- dbDriver("SQLite", max.con = 1)
conn <- dbConnect(drv, dbname="/tmp/osmdb")
rs <- dbSendQuery( conn, "SELECT distinct lat, lon from osmnode;" )
R <- fetch(rs, n = -1)
png("/tmp/a.png")
plot(R\$lat, R\$lon)
dev.off()
COMMAND
cat /tmp/a.r | r
display /tmp/a.png
#!/bin/bash
cat > /tmp/a.sql <<-SQL
create table nodetag (
nodeid integer not null,
lat real not null,
lon real not null,
version integer not null,
changeset integer,
timestamp datetime,
k text not null,
v text not null );
create table waynd (
wayid integer not null,
version integer not null,
changeset integer,
user text,
uid integer,
timestamp datetime,
ref integer );
create table waytag (
wayid integer not null,
version integer not null,
changeset integer,
user text,
uid integer,
timestamp datetime,
k text not null,
v text not null );
create table relationmember (
relationid integer not null,
version integer not null,
changeset integer,
user text,
uid integer,
timestamp datetime,
type text,
ref integer,
role text );
create table relationtag (
ralationid integer not null,
version integer not null,
changeset integer,
user text,
uid integer,
timestamp datetime,
k text not null,
v text not null );
SQL
cat /tmp/a.sql | sqlite3 /tmp/osmdb
#!/bin/bash
cat > /tmp/a.sql <<-SQL
.mode csv/japan.csv | sed 's/^\/node, //g' > /tmp/japan_node.csv
# grep '^/way' /tmp/japan.csv | sed 's/^\/way, //g' > /tmp/japan_way.csv
# grep '^/relation' /tmp/japan.csv | sed 's/^\/relation, //g' > /tmp/japan_relation.csv
.mode csv
.import /tmp/itoshima-city_node_tag.csv nodetag
.import /tmp/itoshima-city_way_nd.csv waynd
.import /tmp/itoshima-city_way_tag.csv waytag
.import /tmp/itoshima-city_relation_member.csv relationmember
.import /tmp/itoshima-city_relation_tag.csv relationtag
.import /tmp/fukuoka-city_node_tag.csv nodetag
.import /tmp/fukuoka-city_way_nd.csv waynd
.import /tmp/fukuoka-city_way_tag.csv waytag
.import /tmp/fukuoka-city_relation_member.csv relationmember
.import /tmp/fukuoka-city_relation_tag.csv relationtag
SQL
cat /tmp/a.sql | sqlite3 /tmp/osmdb
#!/bin/bash
cat > /tmp/a.r <<-COMMAND
library("RSQLite")
drv <- dbDriver("SQLite", max.con = 1)
conn <- dbConnect(drv, dbname="/tmp/osmdb")
rs <- dbSendQuery( conn, "SELECT distinct lat, lon from nodetag;" )
R <- fetch(rs, n = -1)
png("/tmp/a.png")
plot(R\$lat, R\$lon)
dev.off()
COMMAND
cat /tmp/a.r | r
display /tmp/a.png