From: Stefan Huber Date: Wed, 15 Jan 2014 21:17:38 +0000 (+0100) Subject: Add create-map.py X-Git-Url: https://git.sthu.org/?a=commitdiff_plain;h=8b60c096a036457e8652f7370ce2112b8d2b2ca4;p=dvrdb.git Add create-map.py --- diff --git a/create-map.py b/create-map.py new file mode 100755 index 0000000..5ffaa5b --- /dev/null +++ b/create-map.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 + + +import bs4 +import getopt +import os +import re +import sqlite3 +import sys +import urllib.request +import urllib.parse +import urllib.error +import json +import gzip +import time + + +def queryLocation(address): + """Get (lat, lng) pair of given postal address.""" + + urlargs = {} + urlargs['address'] = address + urlargs['sensor'] = "false" + urlparam = urllib.parse.urlencode(urlargs) + + url = "http://maps.googleapis.com/maps/api/geocode/json?" + urlparam + try: + response = urllib.request.urlopen(url).read().decode('utf-8') + data = json.loads(response) + print(data) + loc = data['results'][0]['geometry']['location'] + return loc['lat'], loc['lng'] + except urllib.error.URLError as e: + print(e, file=sys.stderr) + return None + + +def printHTML(rows): + """Print HTML page with the given result set""" + + print(""" + + + + + + + + +
+ + + """) + + +def usage(): + """Print help text.""" + + print(""" +USAGE: + {0} -d FILE [where clause] + {0} -h + +Creates a html file loading a google map with bubbles at the locations of the +registrations selected using the where clause. + +OPTIONS: + -d FILE Use given sqlite3 database. + -h Print this help text. +""") + + +if __name__ == "__main__": + + add = None + dbfn = None + query = None + showLocation = False + + try: + opts, args = getopt.getopt(sys.argv[1:], "d:h") + + for opt, arg in opts: + if opt == "-d": + dbfn = arg + elif opt == "-h": + usage() + sys.exit(os.EX_OK) + else: + print("Unknown option '", opt, "'.", file=sys.stderr) + assert(False) + + except getopt.GetoptError as e: + print("Error parsing arguments:", e, file=sys.stderr) + usage() + sys.exit(os.EX_USAGE) + + if dbfn is None: + print("No database given.", file=sys.stderr) + sys.exit(os.EX_USAGE) + + conn = sqlite3.connect(dbfn, timeout=60) + conn.execute("PRAGMA foreign_keys = ON") + conn.execute("PRAGMA journal_mode = MEMORY") + conn.execute("PRAGMA synchronous = OFF") + + stmt = "SELECT * FROM dvrtable, registrations, purposes" + stmt += " WHERE dvrtable.id=registrations.dvrid AND dvrtable.id=purposes.dvrid" + if len(args) > 0: + stmt += " AND " + " ".join(args) + c = conn.cursor() + + superstmt = "SELECT DISTINCT id, dvr, name, address FROM (%s)" % stmt + c.execute(superstmt) + printHTML(c.fetchall()) + + sys.exit(os.EX_OK) diff --git a/dvr-db.py b/dvr-db.py index ca848f6..4cb5588 100755 --- a/dvr-db.py +++ b/dvr-db.py @@ -141,7 +141,7 @@ def queryLocation(address): response = urllib.request.urlopen(url).read().decode('utf-8') data = json.loads(response) loc = data['results'][0]['geometry']['location'] - return loc['lng'], loc['lat'] + return loc['lat'], loc['lng'] except urllib.error.URLError as e: print(e, file=sys.stderr) return None @@ -292,16 +292,16 @@ if __name__ == "__main__": elif opt == "-q": query = int(arg) else: - print("Unknown option '", opt, "'.") + print("Unknown option '", opt, "'.", file=sys.stderr) assert(False) except getopt.GetoptError as e: - print("Error parsing arguments:", e) + print("Error parsing arguments:", e, file=sys.stderr) usage() sys.exit(os.EX_USAGE) if dbfn is None: - print("No database given.") + print("No database given.", file=sys.stderr) sys.exit(os.EX_USAGE) db = Database(dbfn)