246 lines
8.3 KiB
Python
246 lines
8.3 KiB
Python
|
|
# -------------------------------------------------------------------
|
|
# ORTHOGRAPHIC
|
|
# Your personal aerial satellite. Always on. At any altitude.*
|
|
# Developed by MarStrMind
|
|
# License: Open Software License 3.0
|
|
# Up to date version always on marstr.online
|
|
# -------------------------------------------------------------------
|
|
# tileinfo.py
|
|
# Stores and retrieves information about which material borders on
|
|
# which edge, aiding in the choice of material to generate seamless
|
|
# images.
|
|
# -------------------------------------------------------------------
|
|
|
|
from defines import *
|
|
from functions import *
|
|
from log import *
|
|
|
|
|
|
class mstr_tileinfo:
|
|
|
|
def __init__(self, lat, lng, latnum, lngnum, latlngfld):
|
|
self._lat = lat
|
|
self._lng = lng
|
|
self._latnum = latnum
|
|
self._lngnum = lngnum
|
|
self._latlngfld = latlngfld
|
|
self._adjfile = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/" + str(self._latnum) + "_" + str(self._lngnum)
|
|
#self._adjfile = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/adjinfo"
|
|
self._cplfile = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/cplinfo"
|
|
self.createDataFile()
|
|
self.createCompletionFile()
|
|
|
|
|
|
def createDataFile(self):
|
|
if os.path.isfile(self._adjfile) == False:
|
|
open(self._adjfile, 'a').close()
|
|
|
|
|
|
def createCompletionFile(self):
|
|
if os.path.isfile(self._cplfile) == False:
|
|
open(self._cplfile, 'a').close()
|
|
|
|
|
|
def add_adjacency_data(self, tv, th, tag, value, source, adj):
|
|
line = ""
|
|
line = line + str(tv) + " "
|
|
line = line + str(th) + " "
|
|
line = line + tag + " "
|
|
line = line + value + " "
|
|
line = line + str(source) + " "
|
|
line = line + str(adj) + "\n"
|
|
|
|
with open(self._adjfile, 'a') as textfile:
|
|
textfile.write(line)
|
|
|
|
|
|
def add_completion_data(self, tv, th, tag, value, source, adj):
|
|
line = ""
|
|
line = line + str(tv) + " "
|
|
line = line + str(th) + " "
|
|
line = line + tag + " "
|
|
line = line + value + " "
|
|
line = line + str(source) + " "
|
|
line = line + str(adj) + "\n"
|
|
|
|
with open(self._cplfile, 'a') as textfile:
|
|
textfile.write(line)
|
|
|
|
|
|
def get_adjacency_for_tag_and_value(self, tv, th, tag, value):
|
|
adj = []
|
|
fnlines = []
|
|
fn = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/" + str(tv) + "_" + str(th)
|
|
if os.path.isfile(fn) == True: # It is possible that the requested file does not yet exist
|
|
with open(fn) as textfile:
|
|
fnlines = textfile.readlines()
|
|
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[0]) == tv and int(l[1]) == th:
|
|
if l[2] == tag and l[3] == value:
|
|
l[5] = l[5].replace("\n", "")
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
break
|
|
|
|
return adj
|
|
|
|
|
|
def get_adjacency_for_tag_and_value_in_lat_lng(self, lat, lng, tag, value, tv, th, brd):
|
|
latlngfld = self.latlng_folder([lat, lng])
|
|
adj = []
|
|
fn = mstr_datafolder + "z_orthographic/data/" + latlngfld + "/" + str(tv) + "_" + str(th)
|
|
if os.path.isfile(fn) == True:
|
|
fnlines = []
|
|
with open(fn) as textfile:
|
|
fnlines = textfile.readlines()
|
|
|
|
if brd == "b":
|
|
# Find highest tile number
|
|
top = 0
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[0]) > top:
|
|
top = int(l[0])
|
|
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[0]) == top and int(l[1]) == th:
|
|
if l[2] == tag and l[3] == value:
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
|
|
if brd == "l":
|
|
# Find highest tile number
|
|
right = 0
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[1]) > right:
|
|
right = int(l[1])
|
|
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[1]) == right and int(l[0]) == tv:
|
|
if l[2] == tag and l[3] == value:
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
|
|
if brd == "r":
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[0]) == 1 and int(l[1]) == tv:
|
|
if l[2] == tag and l[3] == value:
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
|
|
if brd == "t":
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[1]) == 1 and int(l[0]) == th:
|
|
if l[2] == tag and l[3] == value:
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
|
|
return adj
|
|
|
|
|
|
def get_completion_in_lat_lng(self, lat, lng, tv, th, brd):
|
|
latlngfld = self.latlng_folder([lat, lng])
|
|
adj = []
|
|
fn = mstr_datafolder + "z_orthographic/data/" + latlngfld + "/cplinfo"
|
|
if os.path.isfile(fn) == True:
|
|
fnlines = []
|
|
with open(fn) as textfile:
|
|
fnlines = textfile.readlines()
|
|
|
|
if brd == "b":
|
|
# Find highest tile number
|
|
top = 0
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[0]) > top:
|
|
top = int(l[0])
|
|
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[0]) == top and int(l[1]) == th:
|
|
adj.append(l[2])
|
|
adj.append(l[3])
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
|
|
if brd == "l":
|
|
# Find highest tile number
|
|
right = 0
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[1]) > right:
|
|
right = int(l[1])
|
|
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[1]) == right and int(l[0]) == tv:
|
|
adj.append(l[2])
|
|
adj.append(l[3])
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
|
|
if brd == "r":
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[0]) == 1 and int(l[1]) == tv:
|
|
adj.append(l[2])
|
|
adj.append(l[3])
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
|
|
if brd == "t":
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[1]) == 1 and int(l[0]) == th:
|
|
adj.append(l[2])
|
|
adj.append(l[3])
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
|
|
return adj
|
|
|
|
|
|
|
|
def get_adjacency_for_completion(self, tv, th):
|
|
adj = []
|
|
fnlines = []
|
|
with open(self._cplfile) as textfile:
|
|
fnlines = textfile.readlines()
|
|
|
|
for ln in fnlines:
|
|
l = ln.split(" ")
|
|
if int(l[0]) == tv and int(l[1]) == th:
|
|
l[5] = l[5].replace("\n", "")
|
|
adj.append(l[2])
|
|
adj.append(l[3])
|
|
adj.append(int(l[4]))
|
|
adj.append(l[5])
|
|
break
|
|
|
|
return adj
|
|
|
|
|
|
# Construct a folder name for latitude and longitude
|
|
def latlng_folder(self, numbers):
|
|
fstr = ""
|
|
if numbers[0] >= 0: fstr = "+"
|
|
if numbers[0] < 0: fstr = "-"
|
|
if abs(numbers[0]) < 10: fstr = fstr + "0" + str(numbers[0])
|
|
if abs(numbers[0]) >= 10 and numbers[0] <= 90: fstr = fstr + str(numbers[0])
|
|
|
|
if numbers[1] >= 0: fstr = fstr + "+"
|
|
if numbers[1] < 0: fstr = fstr + "-"
|
|
if abs(numbers[1]) < 10: fstr = fstr + "00" + str(numbers[1])
|
|
if abs(numbers[1]) >= 10 and numbers[0] <= 99: fstr = fstr + "0" + str(numbers[1])
|
|
if abs(numbers[1]) >= 100 : fstr = fstr + str(numbers[1])
|
|
|
|
return fstr
|