commit d4f2a00076125aa753931bff0545cbd2d313ce23 Author: mitchellhansen Date: Fri Jan 18 13:35:34 2019 -0800 init diff --git a/gmap.py b/gmap.py new file mode 100644 index 0000000..126a73d --- /dev/null +++ b/gmap.py @@ -0,0 +1,97 @@ +import datetime, json +import threading +import time +from itertools import zip_longest +import requests +from staticmap import StaticMap, CircleMarker +from colour import Color + +green = Color("green") +colors = list(green.range_to(Color("red"),30)) + +def grouper(iterable, n, fillvalue=None): + args = [iter(iterable)] * n + return zip_longest(*args, fillvalue=fillvalue) + +class Worker(threading.Thread): + def __init__(self, coord_batch, map, destination, backwards = False): + threading.Thread.__init__(self) + + self.work_items = coord_batch + self.map = map + self.destination = destination + self.backwards = backwards + + def run(self): + + destinations = "" + for idx, tup in enumerate(self.work_items): + if tup is not None: + destinations += "&destination" + str(idx) + "=" + str(tup[1]) + "," + str(tup[0]) + + starts = "" + for idx, tup in enumerate(self.work_items): + if tup is not None: + starts += "&start" + str(idx) + "=" + str(tup[1]) + "," + str(tup[0]) + + urls = "https://matrix.route.api.here.com/routing/7.2/calculatematrix.json?app_id=EpknDhPDW5TutJYG7XAC&app_code=t9FZUznFGJviX-aPBM5PfA&departure=2018-12-21T01:00:00&mode=fastest;car;traffic:enabled&summaryAttributes=traveltime&start=" + urls += str(self.destination[1]) + "," + str(self.destination[0]) + urls += destinations + + r = requests.get(urls) + jsons = json.loads(r.content) + + for idx, tup in enumerate(self.work_items): + try: + timelen = jsons["response"]["matrixEntry"][idx]["summary"]["travelTime"] + except: + continue + + col_val = int((timelen / 60)) + if col_val >= 30: + marker = CircleMarker(tup, Color("yellow").get_hex_l() + "70", 12) + else: + marker = CircleMarker(tup, colors[col_val].get_hex_l() + "70", 12) + self.map.add_marker(marker) + + +def entry(): + + m = StaticMap(3000, 3000, url_template='http://a.tile.osm.org/{z}/{x}/{y}.png') + + destination_point = (-122.195211, 47.792218) + #destination_point = (-122.295310, 47.441328) + #destination_point = (-122.359465, 47.619038) + + home_points = [] + + range_val = 185 + for x in range(-range_val, range_val): + for y in range(-range_val, range_val): + #if (x > 148 or x < -148) or (y > 148 or y < -148): + x_point = destination_point[0] + 0.0012 * x + y_point = destination_point[1] + 0.0012 * y + home_points.append((x_point, y_point)) + + total = len(home_points) + + worker_pool = [] + + for p in grouper(home_points, 100): + + w = Worker(p, m, destination_point) + w.start() + worker_pool.append(w) + + for w in worker_pool: + total -= 100 + print("Total: {}".format(total)) + w.join() + + image = m.render(zoom=13) + image.save('maps.png') + + +entry() + +