for ln in fnlines:
l = ln.split(" ")
if l[0] == self._tag and l[1] == self._value:
- l[3] = l[3].replace("\n", "")
src = l[2]
return src
+ # Get existing contrast value
+ def _getResourceContrast(self, tv, th):
+ # This either remains 0 or a string different to "0" in the end
+ ctr = "0"
+ df = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/" + str(tv) + "_" + str(th)
+ fnlines = []
+ if os.path.isfile(df) == True: # It is possible that the requested file does not yet exist
+ with open(df) as textfile:
+ fnlines = textfile.readlines()
+
+ for ln in fnlines:
+ l = ln.split(" ")
+ if l[0] == self._tag and l[1] == self._value:
+ l[4] = l[4].replace("\n", "")
+ ctr = l[4]
+
+ return ctr
+
+
# Find the edge touch info
def _getResourceTouch(self, tv, th):
touch = ""
for ln in fnlines:
l = ln.split(" ")
if l[0] == self._tag and l[1] == self._value:
- l[3] = l[3].replace("\n", "")
touch = l[3]
return touch
# Store the required resource information into the appropriate tile
- def _storeResourceInfo(self, tile_v, tile_h, res):
+ def _storeResourceInfo(self, tile_v, tile_h, res, ctr):
df = mstr_datafolder + "z_orthographic/data/" + self._latlngfld + "/" + str(tile_v) + "_" + str(tile_h)
fnlines = []
- contrast = 0
+ contrast = ctr
if os.path.isfile(df) == True: # It is possible that the requested file does not yet exist
with open(df) as textfile:
fnlines = textfile.readlines()
curline = 0
for ln in fnlines:
l = ln.split(" ")
- if l[0] == self._tag and l[1] == self._value:
- l[2] = res
- contrast = int(l[4])
-
- # Find contrast values for some tags
- if (
- (l[0] == "landuse" and l[1] == "forest") or
- (l[0] == "landuse" and l[1] == "meadow") or
- (l[0] == "landuse" and l[1] == "grass") or
- (l[0] == "leisure" and l[1] == "nature_reserve") or
- (l[0] == "natural" and l[1] == "grassland") or
- (l[0] == "landuse" and l[1] == "greenfield") or
- (l[0] == "natural" and l[1] == "heath") or
- (l[0] == "natural" and l[1] == "wetland") or
- (l[0] == "leisure" and l[1] == "park") or
- (l[0] == "building")
- ):
- if int(l[4]) == 0: contrast = randrange(1, 4)
-
- l[3] = l[3].replace("\n", "")
- fnlines[curline] = l[0] + " " + l[1] + " " + l[2] + " " + l[3] + " " + str(contrast) + "\n"
-
+ if len(l) > 1:
+ if l[0] == self._tag and l[1] == self._value:
+ l[2] = res
+ l[4] = l[4].replace("\n", "")
+ #contrast = l[4]
+
+ # Find contrast values for some tags
+ if contrast == "0":
+ if (
+ (l[0] == "landuse" and l[1] == "forest") or
+ (l[0] == "landuse" and l[1] == "meadow") or
+ (l[0] == "landuse" and l[1] == "grass") or
+ (l[0] == "leisure" and l[1] == "nature_reserve") or
+ (l[0] == "natural" and l[1] == "grassland") or
+ (l[0] == "landuse" and l[1] == "greenfield") or
+ (l[0] == "natural" and l[1] == "heath") or
+ (l[0] == "natural" and l[1] == "wetland") or
+ (l[0] == "leisure" and l[1] == "park") or
+ (l[0] == "building")
+ ):
+ contrast = str(randrange(1, 4))
+
+ l[4] = l[4].replace("\n", "")
+ fnlines[curline] = l[0] + " " + l[1] + " " + l[2] + " " + l[3] + " " + contrast
+
curline = curline+1
lines = ""
for l in range(len(fnlines)):
lines = lines + fnlines[l]
+ if l < len(lines)-1: lines = lines+"\n"
with open(df, 'w') as textfile:
textfile.write(lines)
# sources for every tile, thus evading previous edge detection errors
def _placeTileSources(self, mlat, mlng):
- # The first tile gets to choose something for itself
- if self._tile_v == 1 and self._tile_h == 1:
- resstr = self._selectResources()
- self._storeResourceInfo(1, 1, resstr)
-
- # Start "raytracing"
-
- # Initial reset
- tv = self._tile_v
- th = self._tile_h
- # Start marching north
- while tv < mlat+1:
- restch = self._getResourceTouch(tv, th)
- if "t" in restch:
- resstr = self._getResourceInfo(tv, th)
- if resstr == "0":
- resstr = self._selectResources()
- self._storeResourceInfo(tv, th, resstr)
- resd = self._getResourceInfo(tv+1, th)
- if resd=="0":
- self._storeResourceInfo(tv + 1, th, resstr)
- else:
- break
- tv = tv + 1
-
- # Start marching east
- tv = self._tile_v
- th = self._tile_h
- while th < mlng + 1:
- restch = self._getResourceTouch(tv, th)
- if "r" in restch:
- resstr = self._getResourceInfo(tv, th)
- if resstr == "0":
- resstr = self._selectResources()
- self._storeResourceInfo(tv, th, resstr)
- resd = self._getResourceInfo(tv, th+1)
- if resd == "0":
- self._storeResourceInfo(tv, th + 1, resstr)
- else:
- break
- th = th + 1
-
- # Start marching south
- tv = self._tile_v
- th = self._tile_h
- while tv > 0:
- restch = self._getResourceTouch(tv, th)
- if "b" in restch:
- resstr = self._getResourceInfo(tv, th)
- if resstr == "0":
- resstr = self._selectResources()
- self._storeResourceInfo(tv, th, resstr)
- resd = self._getResourceInfo(tv - 1, th)
- if resd == "0":
- self._storeResourceInfo(tv - 1, th, resstr)
- else:
- break
- tv = tv - 1
-
- # Start marching west
- tv = self._tile_v
- th = self._tile_h
- while th > 0:
- restch = self._getResourceTouch(tv, th)
- if "l" in restch:
- resstr = self._getResourceInfo(tv, th)
- if resstr == "0":
- resstr = self._selectResources()
- self._storeResourceInfo(tv, th, resstr)
- resd = self._getResourceInfo(tv, th-1)
- if resd == "0":
- self._storeResourceInfo(tv, th - 1, resstr)
- else:
- break
- th = th - 1
\ No newline at end of file
+ # None of the edges have reached their end yet
+ edge_end = [0,0,0,0] # top, right, bottom, left
+
+ # Array with info we need
+ resinfo = ["", "", ""] # Touch, Resource numbers, contrast
+
+ # Go through everything until the end is reached (no more options left)
+ end_reached = False
+ while end_reached == False:
+
+ # Go north
+ tv = self._tile_v
+ th = self._tile_h
+
+ while edge_end[0] == 0:
+ resinfo[0] = self._getResourceTouch(tv, th)
+ resinfo[1] = self._getResourceInfo(tv, th)
+ resinfo[2] = self._getResourceContrast(tv, th)
+
+ if resinfo[1] == "0":
+ self._storeResourceInfo(tv, th, self._selectResources(), resinfo[2])
+ resinfo[1] = self._getResourceInfo(tv, th)
+ resinfo[2] = self._getResourceContrast(tv, th)
+
+ if "t" in resinfo[0]:
+ tv=tv+1
+ rinfo = self._getResourceInfo(tv, th)
+ if rinfo == "0": self._storeResourceInfo(tv, th, resinfo[1], resinfo[2])
+ else:
+ edge_end[0] = 1
+
+ # Go east
+ tv = self._tile_v
+ th = self._tile_h
+
+ while edge_end[1] == 0:
+ resinfo[0] = self._getResourceTouch(tv, th)
+ resinfo[1] = self._getResourceInfo(tv, th)
+ resinfo[2] = self._getResourceContrast(tv, th)
+
+ if resinfo[1] == "0":
+ self._storeResourceInfo(tv, th, self._selectResources(), resinfo[2])
+ resinfo[1] = self._getResourceInfo(tv, th)
+ resinfo[2] = self._getResourceContrast(tv, th)
+
+ if "r" in resinfo[0]:
+ th=th+1
+ rinfo = self._getResourceInfo(tv, th)
+ if rinfo == "0": self._storeResourceInfo(tv, th, resinfo[1], resinfo[2])
+ else:
+ edge_end[1] = 1
+
+ # Go south
+ tv = self._tile_v
+ th = self._tile_h
+
+ while edge_end[2] == 0:
+ resinfo[0] = self._getResourceTouch(tv, th)
+ resinfo[1] = self._getResourceInfo(tv, th)
+ resinfo[2] = self._getResourceContrast(tv, th)
+
+ if resinfo[1] == "0":
+ self._storeResourceInfo(tv, th, self._selectResources(), resinfo[2])
+ resinfo[1] = self._getResourceInfo(tv, th)
+ resinfo[2] = self._getResourceContrast(tv, th)
+
+ if "b" in resinfo[0]:
+ tv=tv-1
+ rinfo = self._getResourceInfo(tv, th)
+ if rinfo == "0": self._storeResourceInfo(tv, th, resinfo[1], resinfo[2])
+ else:
+ edge_end[2] = 1
+
+ # Go west
+ tv = self._tile_v
+ th = self._tile_h
+
+ while edge_end[3] == 0:
+ resinfo[0] = self._getResourceTouch(tv, th)
+ resinfo[1] = self._getResourceInfo(tv, th)
+ resinfo[2] = self._getResourceContrast(tv, th)
+
+ if resinfo[1] == "0":
+ self._storeResourceInfo(tv, th, self._selectResources(), resinfo[2])
+ resinfo[1] = self._getResourceInfo(tv, th)
+ resinfo[2] = self._getResourceContrast(tv, th)
+
+ if "l" in resinfo[0]:
+ th=th-1
+ rinfo = self._getResourceInfo(tv, th)
+ if rinfo == "0": self._storeResourceInfo(tv, th, resinfo[1], resinfo[2])
+ else:
+ edge_end[3] = 1
+
+
+ if edge_end[0] == 1 and edge_end[1] == 1 and edge_end[2] == 1 and edge_end[3] == 1:
+ end_reached = True # <- Break loop
\ No newline at end of file