return True
-def processMap(db, query, providers):
+default_map_template = """<html>
+<head>
+ <meta charset="UTF-8">
+</head>
+<body>
+ <script type="text/javascript" src="https://www.google.com/jsapi"></script>
+ <div id="map_div" style="width: 100%; height: 100%"></div>
+ <script type="text/javascript">
+ google.load("visualization", "1", {packages:["map"]});
+ google.setOnLoadCallback(drawMap);
+ function drawMap() {
+ var data = google.visualization.arrayToDataTable([
+ ['Lat', 'Lon', 'Name'],
+ %COORDINATES
+ ]);
+ var map = new google.visualization.Map(document.getElementById('map_div'));
+ map.draw(data, {showTip: true, enableScrollWheel: true, useMapTypeControl: true});
+ }
+ </script>
+</body>
+</html>"""
+
+
+def processMap(db, query, providers, template=default_map_template):
"""Print a map webpage to stdout of the datasets selected by query, using
- the given geocoding providers."""
+ the given geocoding providers. The string '%COORDINATES' in template will
+ be replaced by a list of triples and printed to stdout."""
- print("""
-<html>
- <head>
- <meta charset="UTF-8">
- <script type="text/javascript" src="https://www.google.com/jsapi"></script>
- <script type="text/javascript">
- google.load("visualization", "1", {packages:["map"]});
- google.setOnLoadCallback(drawMap);
- function drawMap() {
- var data = google.visualization.arrayToDataTable([
- ['Lat', 'Lon', 'Name'],
- """)
+ webpage = template
+ coordlist = ""
ids = db.query(query)
for id in ids:
text += ", <a href=\"%s\">Link</a><br/>" % link
text += "<b>Name:</b> %s<br/>" % reg[1]
text += "<b>Address:</b> %s<br/>" % reg[2]
- print("[%s, %s, %s]," % (loc[0], loc[1], repr(text)))
-
- print("""
- ]);
-
- var map = new google.visualization.Map(document.getElementById('map_div'));
- map.draw(data, {showTip: true, enableScrollWheel: true, useMapTypeControl: true});
- }
- </script>
- </head>
+ coordlist += " [%s, %s, %s],\n" % (loc[0], loc[1], repr(text))
- <body>
- <div id="map_div" style="width: 800px; height: 600px"></div>
- </body>
-</html>
- """)
+ webpage = webpage.replace("%COORDINATES", coordlist)
+ print(webpage)
def processGeolocation(db, query, provider):
OPTIONS:
-d FILE Use given sqlite3 database.
-q COND Use this WHERE SQL-condition to select some datasets.
+ -t FILE When generating maps, use the given FILE as template. The term
+ '%COORDINATES' will be replaced by the list of coordinate triples.
""")
dbfn = None
query = None
cmd = None
+ maptemplatefn = None
try:
- opts, args = getopt.getopt(sys.argv[1:], "ad:ghq:lm")
+ opts, args = getopt.getopt(sys.argv[1:], "ad:ghq:lmt:")
for opt, arg in opts:
if opt in ["-a", "-l", "-g", "-m"]:
sys.exit(os.EX_OK)
elif opt == "-q":
query = arg
+ elif opt == "-t":
+ maptemplatefn = arg
else:
print("Unknown option '", opt, "'.", file=sys.stderr)
assert(False)
print("No database given.", file=sys.stderr)
sys.exit(os.EX_USAGE)
+ maptemplate = default_map_template
+ if maptemplatefn is not None:
+ try:
+ with open(maptemplatefn, "r") as f:
+ maptemplate = f.read()
+ except FileNotFoundError as e:
+ print(e, file=sys.stderr)
+ sys.exit(os.EX_USAGE)
+
db = Database(dbfn)
if cmd == "-a":
if not providers.isNameValid(arg):
print("Unknown provider '%s'." % arg, file=sys.stderr)
sys.exit(os.EX_USAGE)
- processMap(db, query, args)
+ processMap(db, query, args, maptemplate)
sys.exit(os.EX_OK)