]> git.sthu.org Git - dvrdb.git/commitdiff
Add support to supply a map template file via -t
authorStefan Huber <shuber@sthu.org>
Mon, 20 Jan 2014 19:56:20 +0000 (20:56 +0100)
committerStefan Huber <shuber@sthu.org>
Mon, 20 Jan 2014 20:40:09 +0000 (21:40 +0100)
dvr-managedb

index 71bab84cdc6aef7913dfd8cd87b628e05904b112..aaf68e22151e73d03e6fc7d96c4ae1045f2b3333 100755 (executable)
@@ -302,22 +302,36 @@ def printDataset(db, id):
     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:
@@ -346,22 +360,10 @@ def processMap(db, query, providers):
         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):
@@ -530,6 +532,8 @@ COMMAND:
 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.
 """)
 
 
@@ -538,9 +542,10 @@ if __name__ == "__main__":
     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"]:
@@ -552,6 +557,8 @@ if __name__ == "__main__":
                 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)
@@ -569,6 +576,15 @@ if __name__ == "__main__":
         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":
@@ -597,6 +613,6 @@ if __name__ == "__main__":
                 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)