#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2016 Mike "KemoNine" Crosson # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import subprocess, sys, os, pprint, datetime, argparse, time base_path = os.path.dirname(os.path.realpath(__file__)) env = os.environ.copy() FNULL = open(os.devnull, 'w') wget_cmd = '/usr/bin/wget' bunzip2_cmd = '/usr/bin/bunzip2' if __name__ == '__main__': current_timestamp = datetime.datetime.now().strftime('%Y%m%d-%H%M') parser = argparse.ArgumentParser() parser.add_argument('--map-list', action='append') #TODO: Add argument to pass path to osmosis #TODO: Add argument to pass path to output dir args = parser.parse_args() map_list = [] for alist in args.map_list: with open(alist, 'r') as maps: for line in maps: map_list.append(line.strip()) print('Creating working directories') if not os.path.exists('tmp'): os.makedirs('tmp') if not os.path.exists('out'): os.makedirs('out') os.chdir('out') if not os.path.exists(current_timestamp): os.makedirs(current_timestamp) os.chdir(current_timestamp) if not os.path.exists('dl'): os.makedirs('dl') print('Downloading maps') for line in map_list: print(' ', end='') print(line) subprocess.run([wget_cmd, '-P', 'dl', line.strip()], stdout=FNULL, stderr=subprocess.STDOUT) print(' Sleeping to prevent throttle/blocking') time.sleep(300) # Seconds print('Decompressing maps (if necessary)') for dirpath, dirnames, filenames in os.walk('dl'): for file in filenames: if file.endswith('bz2'): print(' ', end='') print(file) subprocess.run([bunzip2_cmd, os.path.join(dirpath, file)]) print('Processing maps using osmosis') env['JAVACMD_OPTIONS'] = '-Djava.io.tmpdir=' + os.path.join(base_path, 'tmp') # Setup java temp dir to something a bit more sane (tmpfs /tmp for the loss) files_to_process = [] for dirpath, dirnames, filenames in os.walk('dl'): for file in filenames: print(' Found map: ', end='') print(os.path.join(dirpath, file)) files_to_process.append(os.path.join(dirpath, file)) osmosis_cmd = [os.path.join(base_path, 'bin', 'osmosis', 'bin', 'osmosis')] for file in files_to_process: if file.endswith('osm'): osmosis_cmd.extend(['--rx', 'file=' + file]) elif file.endswith('pbf'): osmosis_cmd.extend(['--rb', 'file=' + file]) for x in range(0, len(files_to_process) - 1): osmosis_cmd.append('--merge') osmosis_cmd.extend(['--mapfile-writer', 'file=output.map', 'type=hd']) cmd = subprocess.Popen(osmosis_cmd, env=env) cmd.wait()