[OSM-ja] planetファイルを自動取得するプログラムについて
Hiroshi Miura(@osmf)
miurahr @ osmf.jp
2015年 3月 1日 (日) 01:13:02 UTC
三浦です。
TechstromさんのWikiページにある統計のとり方を参考に
http://wiki.openstreetmap.org/wiki/User:Techstrom/JapanData
OSMのplanetファイルをダウンロードするシェル・スクリプトを
書いて見ました。(ただいま試験実行中...)
このコマンドをただ実行すると、現在時刻から見て、最新の
planetファイルをダンプして、osmosisコマンドで日本だけを
切り出して、指定されたディレクトリに配置するというものです。
またYYMMDDの書式で指定すると、指定された日付のついた
planetファイルを取得して、切り出しを実施します。
自動的にスケジュール起動されて実行されるように考えて
作って見ました。
Planetファイルは、毎週水曜日のAMまでにその週の月曜日の
日付のついたファイルとして作成されます。
そこで、コマンドの実行が、水曜日の午後以降であれば、その週のファイルを
それ以前であれば、前の週のファイルを習得するように
プログラミングされています。
Planetの自動取得を検討している方は、参考にされてください。
-------------------------------------
#!/bin/bash
#
# planet-cut-japan.sh
#
# Usage planet-cut-japan.sh <YYMMDD>
# eg. $0 150102
#
function get_planet_date() {
wday=$(date -u '+%w')
if [ $wday -lt 3 ] ; then
# Sunday, Monday, Tuesday
offset=$(expr $wday + 6 )
elif [ $wday -eq 3 ] ; then
# Wednesday
if [ $(date -u '+%H') -lt 13 ] ; then
offset=$(expr $wday + 6 )
else
offset=$(expr $wday - 1 )
fi
else
# Thursday, Friday, Saterday
offset=$(expr $wday - 1 )
fi
echo `date -u --date "${offset} day ago" '+%y%m%d'`
}
case $# in
0)
DKEY=`get_planet_date`
;;
1)
DKEY=$1
;;
*)
echo error
exit 1
;;
esac
BASEURL=http://ftp.heanet.ie/mirrors/openstreetmap.org
LOCATION=$BASEURL/planet/2015
# input should be planet osm bz2 file.
PLANET=planet-${DKEY}.osm.bz2
OUTF=japan-${DKEY}.osm.bz2
TMPPATH=/srv/data/tmp
OUTPATH=/srv/data/public/planet
OSMOSIS_BIN=/opt/osmosis/bin/osmosis
POLY=/srv/data/japan.poly
if [ ! -f $OUTPATH/japan/$OUTF ]; then
cd $OUTPATH
wget -c $LOCATION/$PLANET
bzcat $PLANET | egrep -v '&#[0-9]*;' | $OSMOSIS_BIN --read-xml enableDateParsing=no file=/dev/stdin --bounding-polygon file="${POLY}" --write-xml file=- | bzip2 > $TMPPATH/$OUTF
mv $TMPPATH/$OUTF $OUTPATH/japan/$OUTF
fi
----------------------------------------
Talk-ja メーリングリストの案内