From 35669928604d436bd49ea59f4e98fb2fe4c24eed Mon Sep 17 00:00:00 2001 From: marstr Date: Wed, 28 Aug 2024 21:26:07 +0200 Subject: [PATCH] Implemented mechanism that can continue interrupted work to continue later at some point, or to re-generate an ortho photo. Fixed layering of small rivers/streams --- defines.py | 4 +-- orthographic.py | 88 ++++++++++++++++++++++++++----------------------- 2 files changed, 49 insertions(+), 43 deletions(-) diff --git a/defines.py b/defines.py index 531494d..10dd016 100644 --- a/defines.py +++ b/defines.py @@ -99,6 +99,8 @@ mstr_ortho_layers = [ ("landuse", "farmyard", "landuse", "farmland"), ("landuse", "military", "landuse", "residential-boundary"), # Z-Order 2 + ("waterway", "river", 10), + ("waterway", "stream", 10), ("leisure", "nature_reserve", "landuse", "forest"), ("landuse", "forest", "landuse", "forest"), # Z-Order 3 @@ -108,8 +110,6 @@ mstr_ortho_layers = [ ("water", "lake", "natural", "water"), ("water", "pond", "natural", "water"), ("water", "river", "natural", "water"), - ("waterway", "river", 10), - ("waterway", "stream", 10), ("amenity", "parking", "amenities", "parking"), ("highway", "pedestrian", 4), # Z-Order 4 diff --git a/orthographic.py b/orthographic.py index efa7fc0..42c904a 100644 --- a/orthographic.py +++ b/orthographic.py @@ -89,47 +89,53 @@ class mstr_orthographic: osmxml.adjust_bbox(bb_lat, bb_lng, bb_lat_edge, bb_lng_edge) mstr_msg("mstr_orthographic", "Adjusted bounding box for XML object") - # Get the data - osmxml.acquire_osm(cur_tile_y, cur_tile_x) # <- This acquires current OSM info - mstr_msg("mstr_orthographic", "Acquired current OSM info from marstr.online repository") - - # Check for work to be done - layers = self.determineLayerWork() - - # We need to walk through the array of layers, - # in their z-order. - # For each layer, we will generate the mask, the layer image - # itself, and finally, compose the ortho photo. - mstr_msg("mstr_orthographic", "Beginning generation of layers") - - # Generate the Tiles/lat-lng folder for the finished tile - if not os.path.exists(self._output + "/Tiles/"+str(self._lat)+"_"+str(self._long) + "\\Textures"): - os.makedirs(self._output + "/Tiles/"+str(self._lat)+"_"+str(self._long)+"\\Textures") - mstr_msg("mstr_orthographic", "Created tile textures folder") - - # Generate the Tiles/terrain folder for the finished tile - if not os.path.exists(self._output + "/Tiles/"+str(self._lat)+"_"+str(self._long) + "\\terrain"): - os.makedirs(self._output + "/Tiles/"+str(self._lat)+"_"+str(self._long)+"\\terrain") - mstr_msg("mstr_orthographic", "Created tile terrain folder") - - for layer in layers: - # Generate the mask - mg = mstr_maskgen( [self._lat, cur_tile_y, self._long, cur_tile_x], self._vstep, layer[0], layer[1], layer[2] ) - mg._build_mask() - - # Generate the layer - lg = mstr_layergen(layer[0], layer[1], self._lat, cur_tile_y, self._long, cur_tile_x, layer[2]) - lg.genlayer() - mstr_msg("mstr_orthographic", "All layers created") - - # We should have all layers now. - # Snap a photo with our satellite :) - mstr_msg("mstr_orthographic", "Generating ortho photo") - pg = mstr_photogen(self._lat, self._long, cur_tile_y, cur_tile_x) - pg.genphoto() - mstr_msg("mstr_orthographic", "Ortho photo generated") - mstr_msg("", "") # <- Spacer - mstr_msg("", "") # <- Spacer + # Determine what to do... maybe work was interrupted + if os.path.isfile(mstr_datafolder + "Tiles\\" + str(self._lat) + "_" + str(self._long) + "\\Textures\\" + str(cur_tile_y) + "_" + str(cur_tile_x) + ".jpg") == False: + + # Let the user know + mstr_msg("mstr_orthographic", "Generating missing orthophoto " + str(cur_tile_y) + "-" + str(cur_tile_x)) + + # Get the data + osmxml.acquire_osm(cur_tile_y, cur_tile_x) # <- This acquires current OSM info + mstr_msg("mstr_orthographic", "Acquired current OSM info from marstr.online repository") + + # Check for work to be done + layers = self.determineLayerWork() + + # We need to walk through the array of layers, + # in their z-order. + # For each layer, we will generate the mask, the layer image + # itself, and finally, compose the ortho photo. + mstr_msg("mstr_orthographic", "Beginning generation of layers") + + # Generate the Tiles/lat-lng folder for the finished tile + if not os.path.exists(self._output + "/Tiles/"+str(self._lat)+"_"+str(self._long) + "\\Textures"): + os.makedirs(self._output + "/Tiles/"+str(self._lat)+"_"+str(self._long)+"\\Textures") + mstr_msg("mstr_orthographic", "Created tile textures folder") + + # Generate the Tiles/terrain folder for the finished tile + if not os.path.exists(self._output + "/Tiles/"+str(self._lat)+"_"+str(self._long) + "\\terrain"): + os.makedirs(self._output + "/Tiles/"+str(self._lat)+"_"+str(self._long)+"\\terrain") + mstr_msg("mstr_orthographic", "Created tile terrain folder") + + for layer in layers: + # Generate the mask + mg = mstr_maskgen( [self._lat, cur_tile_y, self._long, cur_tile_x], self._vstep, layer[0], layer[1], layer[2] ) + mg._build_mask() + + # Generate the layer + lg = mstr_layergen(layer[0], layer[1], self._lat, cur_tile_y, self._long, cur_tile_x, layer[2]) + lg.genlayer() + mstr_msg("mstr_orthographic", "All layers created") + + # We should have all layers now. + # Snap a photo with our satellite :) + mstr_msg("mstr_orthographic", "Generating ortho photo") + pg = mstr_photogen(self._lat, self._long, cur_tile_y, cur_tile_x) + pg.genphoto() + mstr_msg("mstr_orthographic", "Ortho photo generated") + print("") + print("") # Store a terrain file ''' -- 2.30.2