< Mkgmap < help < scripts

Mkgmap/help/scripts/Multilayer.py

Info

multilayer.py is a python script to generate a multilayer map for Garmin devices using mkgmap and gmt. This gives better control about the drawing order (i.e. rivers below roads) and enables the user to switch off unwanted layers in the device.

Status

Working, but work in progress.

Code

#!/usr/bin/env python
"""Make Multilayer Maps

"""
osmdatapath = "/home/tt/osm/data/"
TYPFILE = "M0001727.TYP"

layerstack=[
        "land",
        "water",
        "motorway",
        "roads",
        ]


countries={
        "at":40,
        "it":30,
        "ch":20,
        "bw":10,
        }

# mapid, routing, typfile
submaps={
        "water":(00,0,TYPFILE),
        "land":(01,0,TYPFILE),
        "roads":(10,1,TYPFILE),
        "motorway":(11,0,TYPFILE),
        }

import  os 

def system(cmd):
    print cmd
    os.system(cmd)

def mkgmap(country,submap):
    """
    make one submap of all countries in countrylist
    """
    print "Making map: %s %s"%(country,submap)
    mapid = countries[country]
    submapid,routing,typfile = submaps[submap]
    mapname="%2.2i%2.2i0000"%(mapid,submapid)
    priority = layerstack.index(submap)
    osmfiles= "%s/%s*.osm.gz"%(osmdatapath,mapid)
    style=submap
    if routing:
        routingstr="--route --ignore-osm-bounds --remove-short-arcs=1 "
    else:
        routingstr=""
    system("java -Xms256m -Xmx1024m -ea -jar mkgmap.jar \
           --transparent \
           --latin1 \
           --code-pange=1572 \
           --location-autofill=1 \
           --mapname=%s \
           --draw-priority=%s \
           --style-file=%s \
           %s \
           %s %s \
           "%(
               mapname,
               priority,
               style,
               routingstr,
               typfile,
               osmfiles
               )
           )

def makesubmaps(country):
    for submap in layerstack:
        mkgmap(country,submap)

def mergemaps(countrylist):
    filelist=""
    outname="_".join(countrylist)
    outname+=".img"
    for country in countrylist:
        filelist += " %s*.img"%countries[country]
    for s in submaps.values():
        typfile = s[2]
        filelist += " %s"%typfile
    system("gmt -j -o %s -f 5927 %s"%(outname,filelist))

if __name__=="__main__":
    from sys import argv
    countrylist = argv[1:]
    if countrylist[0].lower()=="all":
        countrylist=layerstack
    for country in countrylist:
        makesubmaps(country) 
    mergemaps(countrylist)
This article is issued from Openstreetmap. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.