gmplot-1.1.1/ 0000755 0000765 0000024 00000000000 12762101470 013447 5 ustar mwoods staff 0000000 0000000 gmplot-1.1.1/gmplot/ 0000755 0000765 0000024 00000000000 12762101470 014751 5 ustar mwoods staff 0000000 0000000 gmplot-1.1.1/gmplot/__init__.py 0000644 0000765 0000024 00000000045 12762101412 017055 0 ustar mwoods staff 0000000 0000000 from .gmplot import GoogleMapPlotter gmplot-1.1.1/gmplot/color_dicts.py 0000644 0000765 0000024 00000010127 12762101412 017624 0 ustar mwoods staff 0000000 0000000 mpl_color_map = { 'b': 'blue', 'g': 'green', 'r': 'red', 'c': 'cyan', 'm': 'magenta', 'y': 'yellow', 'k': 'black', 'w': 'white' } # TODO: Copy matplotlib.colors.cnames # That list has 147 colors. The below is only 120. =( html_color_codes = { 'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', 'aqua': '#00FFFF', 'aquamarine': '#7FFFD4', 'azure': '#F0FFFF', 'beige': '#F5F5DC', 'bisque': '#FFE4C4', 'black': '#000000', 'blanchedalmond': '#FFEBCD', 'blue': '#0000FF', 'blueviolet': '#8A2BE2', 'brown': '#A52A2A', 'burlywood': '#DEB887', 'cadetblue': '#5F9EA0', 'chartreuse': '#7FFF00', 'chocolate': '#D2691E', 'coral': '#FF7F50', 'cornflowerblue': '#6495ED', 'cornsilk': '#FFF8DC', 'crimson': '#DC143C', 'cyan': '#00FFFF', 'darkblue': '#00008B', 'darkcyan': '#008B8B', 'darkgoldenrod': '#B8860B', 'darkgray': '#A9A9A9', 'darkgreen': '#006400', 'darkkhaki': '#BDB76B', 'darkmagenta': '#8B008B', 'darkolivegreen': '#556B2F', 'darkorange': '#FF8C00', 'darkorchid': '#9932CC', 'darkred': '#8B0000', 'darksalmon': '#E9967A', 'darkseagreen': '#8FBC8F', 'darkslateblue': '#483D8B', 'darkslategray': '#2F4F4F', 'darkturquoise': '#00CED1', 'darkviolet': '#9400D3', 'deeppink': '#FF1493', 'deepskyblue': '#00BFFF', 'dimgray': '#696969', 'dodgerblue': '#1E90FF', 'firebrick': '#B22222', 'floralwhite': '#FFFAF0', 'forestgreen': '#228B22', 'fuchsia': '#FF00FF', 'gainsboro': '#DCDCDC', 'ghostwhite': '#F8F8FF', 'gold': '#FFD700', 'goldenrod': '#DAA520', 'gray': '#808080', 'green': '#008000', 'greenyellow': '#ADFF2F', 'honeydew': '#F0FFF0', 'hotpink': '#FF69B4', 'indianred': '#CD5C5C', 'indigo': '#4B0082', 'ivory': '#FFFFF0', 'khaki': '#F0E68C', 'lavender': '#E6E6FA', 'lavenderblush': '#FFF0F5', 'lawngreen': '#7CFC00', 'lemonchiffon': '#FFFACD', 'lightblue': '#ADD8E6', 'lightcoral': '#F08080', 'lightcyan': '#E0FFFF', 'lightgoldenrodyellow': '#FAFAD2', 'lightgray': '#D3D3D3', 'lightgreen': '#90EE90', 'lightpink': '#FFB6C1', 'lightsalmon': '#FFA07A', 'lightseagreen': '#20B2AA', 'lightskyblue': '#87CEFA', 'lightslategray': '#778899', 'lightsteelblue': '#B0C4DE', 'lightyellow': '#FFFFE0', 'lime': '#00FF00', 'limegreen': '#32CD32', 'linen': '#FAF0E6', 'magenta': '#FF00FF', 'maroon': '#800000', 'mediumaquamarine': '#66CDAA', 'mediumblue': '#0000CD', 'mediumorchid': '#BA55D3', 'mediumpurple': '#9370DB', 'mediumseagreen': '#3CB371', 'mediumslateblue': '#7B68EE', 'mediumspringgreen': '#00FA9A', 'mediumturquoise': '#48D1CC', 'mediumvioletred': '#C71585', 'midnightblue': '#191970', 'mintcream': '#F5FFFA', 'mistyrose': '#FFE4E1', 'moccasin': '#FFE4B5', 'navajowhite': '#FFDEAD', 'navy': '#000080', 'oldlace': '#FDF5E6', 'olive': '#808000', 'olivedrab': '#6B8E23', 'orange': '#FFA500', 'orangered': '#FF4500', 'orchid': '#DA70D6', 'palegoldenrod': '#EEE8AA', 'palegreen': '#98FB98', 'paleturquoise': '#AFEEEE', 'palevioletred': '#DB7093', 'papayawhip': '#FFEFD5', 'peachpuff': '#FFDAB9', 'peru': '#CD853F', 'pink': '#FFC0CB', 'plum': '#DDA0DD', 'powderblue': '#B0E0E6', 'purple': '#800080', 'red': '#FF0000', 'rosybrown': '#BC8F8F', 'royalblue': '#4169E1', 'saddlebrown': '#8B4513', 'salmon': '#FA8072', 'sandybrown': '#F4A460', 'seagreen': '#2E8B57', 'seashell': '#FFF5EE', 'sienna': '#A0522D', 'silver': '#C0C0C0', 'skyblue': '#87CEEB', 'slateblue': '#6A5ACD', 'slategray': '#708090', 'snow': '#FFFAFA', 'springgreen': '#00FF7F', 'steelblue': '#4682B4', 'tan': '#D2B48C', 'teal': '#008080', 'thistle': '#D8BFD8', 'tomato': '#FF6347', 'turquoise': '#40E0D0', 'violet': '#EE82EE', 'wheat': '#F5DEB3', 'white': '#FFFFFF', 'whitesmoke': '#F5F5F5', 'yellow': '#FFFF00', 'yellowgreen': '#9ACD32' } gmplot-1.1.1/gmplot/gmplot.py 0000644 0000765 0000024 00000040150 12762101412 016621 0 ustar mwoods staff 0000000 0000000 import math import requests import json import os from .color_dicts import mpl_color_map, html_color_codes def safe_iter(var): try: return iter(var) except TypeError: return [var] class GoogleMapPlotter(object): def __init__(self, center_lat, center_lng, zoom): self.center = (float(center_lat), float(center_lng)) self.zoom = int(zoom) self.grids = None self.paths = [] self.shapes = [] self.points = [] self.heatmap_points = [] self.radpoints = [] self.gridsetting = None self.coloricon = os.path.join(os.path.dirname(__file__), 'markers/%s.png') self.color_dict = mpl_color_map self.html_color_codes = html_color_codes @classmethod def from_geocode(cls, location_string, zoom=13): lat, lng = cls.geocode(location_string) return cls(lat, lng, zoom) @classmethod def geocode(self, location_string): geocode = requests.get( 'http://maps.googleapis.com/maps/api/geocode/json?address="%s"' % location_string) geocode = json.loads(geocode.text) latlng_dict = geocode['results'][0]['geometry']['location'] return latlng_dict['lat'], latlng_dict['lng'] def grid(self, slat, elat, latin, slng, elng, lngin): self.gridsetting = [slat, elat, latin, slng, elng, lngin] def marker(self, lat, lng, color='#FF0000', c=None, title="no implementation"): if c: color = c color = self.color_dict.get(color, color) color = self.html_color_codes.get(color, color) self.points.append((lat, lng, color[1:], title)) def scatter(self, lats, lngs, color=None, size=None, marker=True, c=None, s=None, **kwargs): color = color or c size = size or s or 40 kwargs["color"] = color kwargs["size"] = size settings = self._process_kwargs(kwargs) for lat, lng in zip(lats, lngs): if marker: self.marker(lat, lng, settings['color']) else: self.circle(lat, lng, size, **settings) def circle(self, lat, lng, radius, color=None, c=None, **kwargs): color = color or c kwargs.setdefault('face_alpha', 0.5) kwargs.setdefault('face_color', "#000000") kwargs.setdefault("color", color) settings = self._process_kwargs(kwargs) path = self.get_cycle(lat, lng, radius) self.shapes.append((path, settings)) def _process_kwargs(self, kwargs): settings = dict() settings["edge_color"] = kwargs.get("color", None) or \ kwargs.get("edge_color", None) or \ kwargs.get("ec", None) or \ "#000000" settings["edge_alpha"] = kwargs.get("alpha", None) or \ kwargs.get("edge_alpha", None) or \ kwargs.get("ea", None) or \ 1.0 settings["edge_width"] = kwargs.get("edge_width", None) or \ kwargs.get("ew", None) or \ 1.0 settings["face_alpha"] = kwargs.get("alpha", None) or \ kwargs.get("face_alpha", None) or \ kwargs.get("fa", None) or \ 0.3 settings["face_color"] = kwargs.get("color", None) or \ kwargs.get("face_color", None) or \ kwargs.get("fc", None) or \ "#000000" settings["color"] = kwargs.get("color", None) or \ kwargs.get("c", None) or \ settings["edge_color"] or \ settings["face_color"] # Need to replace "plum" with "#DDA0DD" and "c" with "#00FFFF" (cyan). for key, color in settings.items(): if 'color' in key: color = self.color_dict.get(color, color) color = self.html_color_codes.get(color, color) settings[key] = color settings["closed"] = kwargs.get("closed", None) return settings def plot(self, lats, lngs, color=None, c=None, **kwargs): color = color or c kwargs.setdefault("color", color) settings = self._process_kwargs(kwargs) path = zip(lats, lngs) self.paths.append((path, settings)) def heatmap(self, lats, lngs, threshold=10, radius=10, gradient=None, opacity=0.6, dissipating=True): """ :param lats: list of latitudes :param lngs: list of longitudes :param threshold: :param radius: The hardest param. Example (string): :return: """ settings = {} settings['threshold'] = threshold settings['radius'] = radius settings['gradient'] = gradient settings['opacity'] = opacity settings['dissipating'] = dissipating settings = self._process_heatmap_kwargs(settings) heatmap_points = [] for lat, lng in zip(lats, lngs): heatmap_points.append((lat, lng)) self.heatmap_points.append((heatmap_points, settings)) def _process_heatmap_kwargs(self, settings_dict): settings_string = '' settings_string += "heatmap.set('threshold', %d);\n" % settings_dict['threshold'] settings_string += "heatmap.set('radius', %d);\n" % settings_dict['radius'] settings_string += "heatmap.set('opacity', %f);\n" % settings_dict['opacity'] dissipation_string = 'true' if settings_dict['dissipating'] else 'false' settings_string += "heatmap.set('dissipating', %s);\n" % (dissipation_string) gradient = settings_dict['gradient'] if gradient: gradient_string = "var gradient = [\n" for r, g, b, a in gradient: gradient_string += "\t" + "'rgba(%d, %d, %d, %d)',\n" % (r, g, b, a) gradient_string += '];' + '\n' gradient_string += "heatmap.set('gradient', gradient);\n" settings_string += gradient_string return settings_string def polygon(self, lats, lngs, color=None, c=None, **kwargs): color = color or c kwargs.setdefault("color", color) settings = self._process_kwargs(kwargs) shape = zip(lats, lngs) self.shapes.append((shape, settings)) # create the html file which include one google map and all points and # paths def draw(self, htmlfile): f = open(htmlfile, 'w') f.write('\n') f.write('
\n') f.write( '\n') f.write( '\n') f.write('