0

これをスクリプト化する前に、プログラムが既に存在するかどうか疑問に思っています。

毎日openstreetmapデータをダウンロードしています。ファイルは命名規則「xxx.osc.gz」で毎日更新され、ファイルは 1 つアップされます。「001」から「002」。

ミラーリングまたはダウンロードのスケジュール設定を支援するプログラム (osmosis または wget) しか見つけることができませんでした。データベース全体を毎日ではなく、最新のファイルだけが必要です。

正しい方向への提案や指摘は大歓迎です。

4

1 に答える 1

0

最新の変更セットを含む YAML ファイルがあります。最新のダウンロードを記録して、urlretrieveその範囲で使用してください。

import os, urllib, yaml


os_url = "http://planet.openstreetmap.org/replication/"
base_dir = "./"

try:
    with open('download.log', 'r') as f:
        last_set = int(f.readlines()[-1].strip())
except:
    last_set = int(raw_input("Enter latest set:"))

stream = urllib.urlopen(os_url+"changesets/state.yaml")
latest_set = yaml.load(stream)['sequence']


for seq in range(last_set+1,latest_set+1):
    changeset_dir = "changesets/000/%03d/"%(seq/1000)
    changeset_file = "%03d.osm.gz"%(seq%1000)
    remote_file = os_url + changeset_dir + changeset_file
    local_dir = base_dir + changeset_dir
    local_file = local_dir + changeset_file

    if not os.path.exists(local_dir):
        os.makedirs(local_dir)

    try:
        with open(local_file) as f: pass
        print "Already downloaded",seq
    except:
        urllib.urlretrieve(remote_file, local_file)
        print "Downloaded changeset",seq

print "Up-to-date"


with open('download.log', 'a') as f:
    f.write('%s\n'%latest_set)
于 2013-01-10T00:15:02.327 に答える