2019-03-24 06:59:16 +00:00
|
|
|
#! /usr/bin/python
|
2019-03-25 04:45:03 +00:00
|
|
|
# Copyright (C) 2018-2019 Merspieler, merspieler _at_ airmail.cc
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or
|
|
|
|
# modify it under the terms of the GNU General Public License as
|
|
|
|
# published by the Free Software Foundation; either version 3 of the
|
|
|
|
# License, or (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful, but
|
|
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
# General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program; if not, write to the Free Software
|
|
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
2019-03-24 06:59:16 +00:00
|
|
|
import os
|
|
|
|
import sys
|
2019-03-25 04:45:03 +00:00
|
|
|
import math
|
2019-03-25 04:50:10 +00:00
|
|
|
import re
|
2019-03-25 04:45:03 +00:00
|
|
|
|
|
|
|
argc = len(sys.argv)
|
|
|
|
i = 1
|
|
|
|
first = 1
|
|
|
|
while i < argc:
|
|
|
|
if sys.argv[i] == "-p" or sys.argv[i] == "--progress":
|
|
|
|
try:
|
|
|
|
with open("projects/worldbuild/done") as f:
|
|
|
|
lines = f.readlines()
|
|
|
|
for line in lines:
|
2019-03-25 04:56:50 +00:00
|
|
|
match = re.findall("(-?[0-9]{1,3}\.?[0-9]{0,4})_-?[0-9]{1,3}\.?[0-9]{0,4}_-?[0-9]{1,3}\.?[0-9]{0,4}_(-?[0-9]{1,3}\.?[0-9]{0,4})", line)
|
2019-03-25 04:45:03 +00:00
|
|
|
if match != []:
|
|
|
|
|
2019-03-25 04:56:50 +00:00
|
|
|
n = float(match[0][1])
|
|
|
|
w = float(match[0][0])
|
2019-03-25 04:45:03 +00:00
|
|
|
|
|
|
|
wm = w % 10
|
|
|
|
nm = n % 10
|
2019-03-24 06:59:16 +00:00
|
|
|
|
2019-03-28 12:30:25 +00:00
|
|
|
wM = (int(w) - wm) / 10
|
|
|
|
nM = (int(n) - nm) / 10
|
|
|
|
|
2019-03-25 04:48:39 +00:00
|
|
|
if nm == 0:
|
2019-03-25 04:45:03 +00:00
|
|
|
wm += 1
|
|
|
|
|
|
|
|
tile = wm * 10 + nm
|
|
|
|
|
2019-03-30 03:28:04 +00:00
|
|
|
if abs(n) > 80:
|
|
|
|
if n > 0:
|
|
|
|
world = 1
|
|
|
|
else:
|
|
|
|
world = 2
|
|
|
|
else:
|
|
|
|
rows = 0
|
|
|
|
while nM > -8:
|
|
|
|
rows += 1
|
|
|
|
nM -= 1
|
2019-03-28 12:30:25 +00:00
|
|
|
|
2019-03-30 03:28:04 +00:00
|
|
|
world = 2 + 36 * rows + wM + 18
|
2019-03-28 12:30:25 +00:00
|
|
|
|
|
|
|
print("Current worldbuild tile is " + str(int(world)) + "/578")
|
2019-03-25 04:45:03 +00:00
|
|
|
print("Current tile " + str(tile) + "% complete")
|
|
|
|
sys.exit(0)
|
|
|
|
else:
|
|
|
|
print("Unable to get progress")
|
|
|
|
sys.exit(1)
|
|
|
|
except IOError:
|
|
|
|
print("Unable to get progress")
|
|
|
|
sys.exit(1)
|
|
|
|
elif sys.argv[i] == "-h" or sys.argv[i] == "--help":
|
|
|
|
print("usage: build <project> [OPTIONS]")
|
|
|
|
print("Builds the tiles with osm2city")
|
|
|
|
print("")
|
|
|
|
print("OPTIONS")
|
|
|
|
print(" -h, --help Shows this help and exit")
|
|
|
|
print(" -p, --progress Shows progress and exit")
|
|
|
|
sys.exit(0)
|
|
|
|
else:
|
|
|
|
if first == 1:
|
|
|
|
first = 0
|
|
|
|
pbf_path = sys.argv[i]
|
|
|
|
else:
|
|
|
|
print("Unknown option " + sys.argv[i])
|
|
|
|
sys.exit(1)
|
|
|
|
i += 1
|
2019-03-24 06:59:16 +00:00
|
|
|
|
2019-04-04 06:54:42 +00:00
|
|
|
def run(command):
|
|
|
|
exit_code = os.system(command)
|
|
|
|
if exit_code == 0:
|
|
|
|
return
|
2019-04-13 05:01:22 +00:00
|
|
|
elif exit_code == 130:
|
2019-04-04 06:54:42 +00:00
|
|
|
print("Aborted!")
|
|
|
|
sys.exit(130)
|
|
|
|
|
|
|
|
run("mkdir -p projects/worldbuild/output/error")
|
2019-03-24 06:59:16 +00:00
|
|
|
|
|
|
|
def build_tile(name, west, south, east, north):
|
|
|
|
if west < 0:
|
|
|
|
west = "*" + str(west)
|
|
|
|
else:
|
|
|
|
west = str(west)
|
|
|
|
south = str(south)
|
|
|
|
east = str(east)
|
|
|
|
north = str(north)
|
|
|
|
|
2019-04-04 06:54:42 +00:00
|
|
|
run("./read-pbf worldbuild " + pbf_path + name + ".osm.pbf")
|
|
|
|
run('echo "bounds=' + west + "_" + south + "_" + east + "_" + north + '" > projects/settings')
|
2019-04-22 00:36:00 +00:00
|
|
|
run("./build worldbuild --chunk-size 5")
|
2019-03-24 06:59:16 +00:00
|
|
|
|
|
|
|
def after_build(name):
|
|
|
|
if os.path.isfile("projects/worldbuild/osm2city-exceptions.log"):
|
2019-04-04 06:54:42 +00:00
|
|
|
run("mv projects/worldbuild/osm2city-exceptions.log projects/worldbuild/output/error/" + name + ".exceptions.log")
|
|
|
|
run("zip -rq projects/worldbuild/output/error/" + name + ".zip projects/worldbuild/scenery/ ")
|
2019-04-24 07:29:01 +00:00
|
|
|
|
|
|
|
# Trigger failed after build script
|
2019-04-25 09:18:11 +00:00
|
|
|
if os.path.isfile("./scripts/afterbuild-failed"):
|
|
|
|
os.system("./scripts/afterbuild-failed " + name + " &")
|
2019-03-24 06:59:16 +00:00
|
|
|
else:
|
2019-04-04 06:54:42 +00:00
|
|
|
run("zip -rq projects/worldbuild/output/" + name + ".zip projects/worldbuild/scenery/ ")
|
2019-04-24 07:29:01 +00:00
|
|
|
|
|
|
|
# Trigger after build script
|
2019-04-25 09:18:11 +00:00
|
|
|
if os.path.isfile("./scripts/afterbuild-success"):
|
|
|
|
os.system("./scripts/afterbuild-success " + name + " &")
|
2019-04-24 07:29:01 +00:00
|
|
|
|
2019-04-04 06:54:42 +00:00
|
|
|
run("rm -r projects/worldbuild/scenery/*")
|
|
|
|
run("./clear-cache-files worldbuild")
|
2019-03-24 06:59:16 +00:00
|
|
|
|
|
|
|
def prepare():
|
2019-04-04 06:54:42 +00:00
|
|
|
run("./delete-db worldbuild")
|
|
|
|
run("./create-db worldbuild")
|
2019-03-24 06:59:16 +00:00
|
|
|
|
|
|
|
def run_all(name, w, s, e, n):
|
|
|
|
prepare()
|
|
|
|
build_tile(name, w, s, e, n)
|
|
|
|
after_build(name)
|
|
|
|
|
|
|
|
def norm(num, length):
|
|
|
|
num = str(num)
|
|
|
|
while len(num) < length:
|
|
|
|
num = "0" + num
|
|
|
|
return num
|
|
|
|
|
|
|
|
# Build poles first
|
2019-04-25 09:17:04 +00:00
|
|
|
# TODO use chunksize 180 for poles
|
2019-03-24 06:59:16 +00:00
|
|
|
run_all("n-pole", -180, 80, 180, 90)
|
|
|
|
run_all("s-pole", -180, -90, 180, -80)
|
|
|
|
|
2019-04-25 09:17:04 +00:00
|
|
|
for i in range(-8, 8):
|
2019-03-24 06:59:16 +00:00
|
|
|
i *= 10
|
2019-04-22 00:14:42 +00:00
|
|
|
for j in range(-18, 18):
|
2019-03-24 06:59:16 +00:00
|
|
|
j *= 10
|
|
|
|
if i >= 0:
|
|
|
|
ns = "n"
|
|
|
|
else:
|
|
|
|
ns = "s"
|
|
|
|
if j >= 0:
|
|
|
|
ew = "e"
|
|
|
|
else:
|
|
|
|
ew = "w"
|
|
|
|
|
2019-04-22 00:14:42 +00:00
|
|
|
name = ew + norm(abs(j), 3) + ns + norm(abs(i), 2)
|
2019-03-24 06:59:16 +00:00
|
|
|
|
|
|
|
run_all(name, j, i, j + 10, i + 10)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|