Subversion Repositories mkgmap

Rev

Rev 3408 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#
# File: p.py
#
# Copyright (C) 2006 Steve Ratcliffe
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License version 2 as
#  published by the Free Software Foundation.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#
# Author: Steve Ratcliffe
# Create date: 31 Dec 2006
#

#
# The OSMGarminMap project contains two files that map
# OSM map-features to the codes used in Garmin maps.  This
# script does a join between them to produce one file.
#

import sys
import libxml2
import csv

# The list of garmin features.
FEATURE_LIST_FILE = 'garmin_feature_list.csv'

# The mapping between OSM and garmin features
FEATURE_MAP_FILE = 'osm_garmin_map.csv'

if len(sys.argv) > 2:
        FEATURE_LIST_FILE = sys.argv[1]
        FEATURE_MAP_FILE = sys.argv[2]

features = {}

def main():

        # Read the garmin feature name to internal number file
        f = open(FEATURE_LIST_FILE)
        r = csv.reader(f, delimiter='|')
        for line in r:
                kind = line[0]
                if kind[0] == '#': continue
                key = (line[4], line[5])
                val = (line[2], line[3])
                try:
                        ft = features[kind]
                except KeyError:
                        ft = {}
                        features[kind] = ft
                ft[key] = val

        # Get the osm to garmin map rules
        f = open(FEATURE_MAP_FILE)
        r = csv.reader(f, delimiter='|')
        w = csv.writer(sys.stdout, delimiter='|', lineterminator='\n')

        for line in r:
                kind = line[0]
                if kind[0] == '#': continue
                key = (line[3], line[4])
                res = line[5]
                try:
                        val = features[kind][key]
                        l = []
                        l.append(kind)
                        l.append(line[1])
                        l.append(line[2])
                        l.append(val[0])
                        if val[1]:
                                l.append(val[1])
                        else:
                                l.append('')
                        l.append(res)
                        w.writerow(l)
                except KeyError:
                        print >>sys.stderr, "No garmin entry at", kind, key


if __name__ == '__main__':
        main()