[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 メーリングリストの案内