コード例 #1
0
ファイル: generate_tiles.py プロジェクト: krist10an/threedee
def gen_tile(inputfile, outputfile):
	print "Rendering %s to %s" % (inputfile, outputfile)
	tilesize, mydata = readhgt(inputfile)
	debug.write("Height min=%f, max=%f" % (mydata.min(), mydata.max()))

	data = mydata.astype(numpy.float64)
	# Flip to make sure North is up
	data = numpy.flipud(data)
	data = data * 255 / 2600.0
	debug.write("AdjustedHeight min=%f, max=%f" % (data.min(), data.max()))

	make_jpg(data, outputfile)
コード例 #2
0
ファイル: generate_model.py プロジェクト: krist10an/threedee
def generate(latlon, distance, name, target_size, minimum_height, remove_base_ele, elevation_exaggaration, input, outfile):
	filename = latlon.filename(input)
	if filename is None:
		# Unable to find height data
		return

	tilesize, hgt_2darray = readhgt(filename)

	lat = int(latlon.lat_val(min_only=True) * tilesize)
	lon = int(latlon.lon_val(min_only=True) * tilesize)

	debug.write("  Height for loaded file: min=%f, max=%f" % (hgt_2darray.min(), hgt_2darray.max()))

	lon_length = calc_lon_len(latlon.get_lat())
	lat_length = calc_lat_len(latlon.get_lon())

	elements_to_use_x = distance / (lat_length / tilesize)
	elements_to_use_y = distance / (lon_length / tilesize)
	size_x = int(elements_to_use_x)
	size_y = int(elements_to_use_y)
	debug.write("Length of 1\" longitude=%f meter" % (lon_length))
	debug.write("Length of 1\" lattitude=%f meter" % (lat_length))
	debug.write("Using %dx%d array elements" % (size_x, size_y))

	data = numpy.zeros(size_x * size_y, dtype=numpy.float64).reshape((size_x, size_y))
	for y in xrange(size_y):
		for x in xrange(size_x):
			ylon = (lon - size_y / 2) + y
			xlat = (lat + size_x / 2) - x
			zzz = gethgt(hgt_2darray, xlat, ylon)

			data[x, y] = zzz

	zmin = data.min()
	zmax = data.max()
	debug.write("  Height for selected data: min=%f max=%f" % (zmin, zmax))

	lowest_ele = 0
	highest_ele = zmax

	if remove_base_ele:
		print "Removing base ele of %d meters" % (zmin)
		lowest_ele = zmin
		data = data - zmin

	# Scale data from 0.0 to 1.0
	data = data / data.max()

	# Calculate model height based on scale
	target_height = target_size / distance * (highest_ele - lowest_ele)

	# Calculate model scale
	the_scale = distance / (target_size / 1000)

	print "Model scale data:"
	print " Model length=%.1f mm (Real life=%d meter)" % (target_size, distance)
	print " Model scale height=%.1f mm (Real life=%d-%d meter)" % (target_height, lowest_ele, highest_ele)
	print " Model elevation exaggeration factor=%.1f" % (elevation_exaggaration)
	print " Model exaggerated height=%.1f mm" % (target_height * elevation_exaggaration)
	print " Model scale=1:%d" % (the_scale)

	description = describe_model(name, the_scale, lowest_ele, highest_ele, elevation_exaggaration)

	make_jpg(data * 255, outfile + ".jpg")

	# Scale data to target height
	data = data * target_height * elevation_exaggaration

	if data.min() < minimum_height:
		print " Adding minimum height of %.1f mm" % (minimum_height)
		data = data + minimum_height

	debug.write("  Height output data: min=%f max=%f" % (data.min(), data.max()))

	xscale = target_size / size_x
	sx = xscale
	sy = xscale * (size_x / size_y)
	sz = 1
	debug.write("   Scale x=%f y=%f z=%f" % (sx, sy, sz))
	make_scad(data, outfile + ".scad", sx, sy, sz, description)