101 lines
3.2 KiB
Python
101 lines
3.2 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
# Script to create smaller map tiles for use in the GRAMPS MapView.
|
||
|
# (c) Martin Hawlisch, martin.hawlisch@gmx.de, 2006.
|
||
|
# I hereby put this script into the public domain.
|
||
|
|
||
|
|
||
|
# Images are generated by using the NASA Blue Marble next generation images.
|
||
|
# http://visibleearth.nasa.gov/view_set.php?categoryID=2355
|
||
|
# July, Blue Marble Next Generation w/ Topography and Bathymetry:
|
||
|
# http://visibleearth.nasa.gov/view_rec.php?id=7106
|
||
|
# 5400 pixel jpeg file:
|
||
|
# http://veimages.gsfc.nasa.gov/7106/world.topo.bathy.200407.3x5400x2700.jpg
|
||
|
# This images are public domain.
|
||
|
|
||
|
import os
|
||
|
|
||
|
tile_defines = []
|
||
|
|
||
|
def process_file( imagefile, image_width, image_height, map_x, map_y, map_width, outfilepattern, tile_size):
|
||
|
y = 0
|
||
|
while (y*tile_size) < image_height:
|
||
|
x = 0
|
||
|
while (x*tile_size) < image_width:
|
||
|
outfile = outfilepattern % (y,x)
|
||
|
if not os.path.isfile( outfile):
|
||
|
cmd = "jpegtran -optimize -crop %dx%d+%d+%d -outfile %s %s" %\
|
||
|
(tile_size,tile_size,x*tile_size,y*tile_size,outfile,imagefile)
|
||
|
print cmd
|
||
|
if os.system( cmd):
|
||
|
print "ERROR"
|
||
|
else:
|
||
|
print "tile %s already exists" % outfile
|
||
|
tile_width = map_width/(image_width/tile_size)
|
||
|
tile_x = map_x + tile_width * x
|
||
|
tile_y = map_y - tile_width * y
|
||
|
print "location: %dx%d" % (tile_x,tile_y)
|
||
|
tile_defines.append("self.zoom_map.add_map_source('%s', %d,%d, %d,%d, %d,%d)" %\
|
||
|
(outfile,tile_x,tile_y,tile_width,tile_width,tile_size,tile_size))
|
||
|
x = x + 1
|
||
|
y = y + 1
|
||
|
pass
|
||
|
|
||
|
def scale_down( infile, outfile, new_width):
|
||
|
if not os.path.isfile( outfile):
|
||
|
cmd = "convert %s -resize %d %s" % (infile,new_width,outfile)
|
||
|
print cmd
|
||
|
if os.system( cmd):
|
||
|
print "ERROR"
|
||
|
else:
|
||
|
print "scaled down image %s already exists" % outfile
|
||
|
|
||
|
def fetch_image( server, filename):
|
||
|
if not os.path.isfile( sourcemap_midres):
|
||
|
print "downloading map file %s" % filename
|
||
|
cmd = "wget -v %s/%s" % (server, sourcemap_midres)
|
||
|
print cmd
|
||
|
if os.system( cmd):
|
||
|
print "ERROR"
|
||
|
|
||
|
else:
|
||
|
print "mapfile %s already downloaded" % filename
|
||
|
|
||
|
server = "http://veimages.gsfc.nasa.gov/7130"
|
||
|
|
||
|
# Step 1: Fetch mid-res image
|
||
|
sourcemap_midres = "world.topo.200407.3x5400x2700.jpg"
|
||
|
fetch_image( server, sourcemap_midres)
|
||
|
|
||
|
|
||
|
# Step 2: Scale that down a bit (to a multiple of 16 pixels)
|
||
|
sourcemap_lowres = "world.topo.200407.3x3200x1600.jpg"
|
||
|
scale_down(sourcemap_midres,sourcemap_lowres,3200)
|
||
|
|
||
|
# Step 3: Create tiles
|
||
|
process_file( sourcemap_lowres, 3200, 1600, -180, 90, 360, "world.topo.200407.3x3200x1600_tile_%d_%d.jpg",400)
|
||
|
|
||
|
# Step 4: Scale down mid-res image to 2048x1024
|
||
|
sourcemap_lowres = "world.topo.200407.3x1600x800.jpg"
|
||
|
scale_down(sourcemap_midres,sourcemap_lowres,1600)
|
||
|
|
||
|
# Step 4: Tile low-res image
|
||
|
process_file( sourcemap_lowres, 1600, 800, -180, 90, 360, "world.topo.200407.3x1600x800_tile_%d_%d.jpg",400)
|
||
|
|
||
|
# Step 5: Scale down once more
|
||
|
sourcemap_thumb = "world.topo.200407.3x800x400.jpg"
|
||
|
scale_down(sourcemap_lowres,sourcemap_thumb,800)
|
||
|
|
||
|
# Step 5: Scale down thumb-scale image
|
||
|
sourcemap_thumb = "world.topo.200407.3x400x200.jpg"
|
||
|
scale_down(sourcemap_lowres,sourcemap_thumb,400)
|
||
|
|
||
|
# Step 5: Scale down thumb-scale image
|
||
|
sourcemap_thumb = "world.topo.200407.3x128x60.jpg"
|
||
|
scale_down(sourcemap_lowres,sourcemap_thumb,128)
|
||
|
|
||
|
|
||
|
for d in tile_defines:
|
||
|
print d
|
||
|
|