Added support for landcover file on Python side.

It's now able to generate the database with landcover data.
Not implemented on Lua side for now.
master
Gael-de-Sailly 2018-02-20 11:59:50 +01:00
parent dff33b5ac1
commit 7f187fc565
3 changed files with 38 additions and 3 deletions

View File

@ -72,7 +72,7 @@ def layer(data, datamap, datatype, frag, meta=b""): # Add a layer
global layer_count
layer_count += 1
def generate(file_output, file_conf, heightmap, rivermap=None, frag=80, scale=40):
def generate(file_output, file_conf, heightmap, rivermap=None, landmap=None, landmap_legend=None, frag=80, scale=40):
global table_size
(Y, X) = heightmap.shape
@ -84,6 +84,9 @@ def generate(file_output, file_conf, heightmap, rivermap=None, frag=80, scale=40
if type(rivermap) is not type(None):
layer(data, rivermap, 1, frag)
if type(landmap) is not type(None):
layer(data, landmap, 2, frag, meta=landmap_legend.encode())
# Build file header
header = b'GEOMG' + version + le(np.uint16(frag)) + le(np.uint16(X)) + le(np.uint16(Y)) + le(np.uint8(layer_count))

View File

@ -8,6 +8,7 @@ import tkinter.filedialog as fd
import map_transform
import database
import rivers
from landcover import make_landcover
root = tk.Tk()
root.title("Geo Mapgen image converter")
@ -76,6 +77,8 @@ frame_region = tk.LabelFrame(root, text="Region")
frame_region.pack()
frame_params = tk.LabelFrame(root, text="Generic parameters")
frame_params.pack()
frame_landcover = tk.LabelFrame(root, text="Land Cover")
frame_landcover.pack()
frame_rivers = tk.LabelFrame(root, text="Rivers")
frame_rivers.pack()
@ -142,6 +145,25 @@ calc_button.grid(row=6, column=2)
tile_size_entry = NumberEntry(frame_params, 0, 1024, row=0, column=0, text="Tiles size", default=80)
scale_entry = NumberEntry(frame_params, 0, 1000, row=1, column=0, text="Vertical scale in meters per node", default=40)
def landcover_gui_update(*args):
if landcover_cb_var.get():
st = "normal"
else:
st = "disabled"
landcover_input_entry.set_state(st)
landcover_legend_entry.set_state(st)
landcover_cb_var = tk.BooleanVar()
landcover_cb_var.set(False)
landcover_cb_var.trace("w", landcover_gui_update)
landcover_cb = tk.Checkbutton(frame_landcover, text="Enable Land Cover", variable=landcover_cb_var)
landcover_cb.grid(row=0, column=0)
landcover_input_entry = FileEntry(frame_landcover, "file", row=1, column=0, dialog_text="Open land cover image")
landcover_legend_entry = FileEntry(frame_landcover, "file", row=2, column=0, dialog_text="Open land cover legend")
landcover_gui_update()
def river_gui_update(*args):
if river_cb_var.get():
rivermode_rb1.config(state="normal")
@ -219,9 +241,19 @@ def proceed():
else:
rivermap = None
if landcover_cb_var.get():
fpath_landcover = landcover_input_entry.get()
fpath_legend = landcover_legend_entry.get()
map_transform.update_map("landcover", fpath_landcover)
landmap_raw = map_transform.read_map("landcover", interp=0)
landmap, legend = make_landcover(landmap_raw, fpath_legend)
else:
landmap = None
legend = None
tile_size = tile_size_entry.get()
scale = scale_entry.get()
database.generate(file_output, file_conf, heightmap, rivermap=rivermap, frag=tile_size, scale=scale)
database.generate(file_output, file_conf, heightmap, rivermap=rivermap, landmap=landmap, landmap_legend=legend, frag=tile_size, scale=scale)
proceed_button = tk.Button(root, text="Proceed", command = proceed)
proceed_button.pack()

View File

@ -98,7 +98,7 @@ def read_map(mapname, interp=gdal.GRA_NearestNeighbour):
proj.ImportFromWkt(refmap.GetProjection())
transform = osr.CreateCoordinateTransformation(wgs, proj)
ref_gt = refmap.GetGeoTransform()
origin = gm.transform(ref_gt, xmin, ymin)
origin = gm.transform(ref_gt, (xmin, ymin))
geotransform = (origin[0], ref_gt[1], ref_gt[2], origin[1], ref_gt[4], ref_gt[5])
map2 = drv.Create("", npx, npy, 1, map1.GetRasterBand(1).DataType)