#!/usr/bin/env python # coding: utf-8 # # H3 Python API # In[1]: from h3 import h3 import folium def visualize_hexagons(hexagons, color="red", folium_map=None): """ hexagons is a list of hexcluster. Each hexcluster is a list of hexagons. eg. [[hex1, hex2], [hex3, hex4]] """ polylines = [] lat = [] lng = [] for hex in hexagons: polygons = h3.h3_set_to_multi_polygon([hex], geo_json=False) # flatten polygons into loops. outlines = [loop for polygon in polygons for loop in polygon] polyline = [outline + [outline[0]] for outline in outlines][0] lat.extend(map(lambda v:v[0],polyline)) lng.extend(map(lambda v:v[1],polyline)) polylines.append(polyline) if folium_map is None: m = folium.Map(location=[sum(lat)/len(lat), sum(lng)/len(lng)], zoom_start=13, tiles='cartodbpositron') else: m = folium_map for polyline in polylines: my_PolyLine=folium.PolyLine(locations=polyline,weight=8,color=color) m.add_child(my_PolyLine) return m def visualize_polygon(polyline, color): polyline.append(polyline[0]) lat = [p[0] for p in polyline] lng = [p[1] for p in polyline] m = folium.Map(location=[sum(lat)/len(lat), sum(lng)/len(lng)], zoom_start=13, tiles='cartodbpositron') my_PolyLine=folium.PolyLine(locations=polyline,weight=8,color=color) m.add_child(my_PolyLine) return m # In[2]: h3_address = h3.geo_to_h3(37.3615593, -122.0553238, 9) # lat, lng, hex resolution m = visualize_hexagons([h3_address]) display(m) # In[3]: h3_address = h3.geo_to_h3(37.3615593, -122.0553238, 9) # lat, lng, hex resolution hex_center_coordinates = h3.h3_to_geo(h3_address) # array of [lat, lng] hex_boundary = h3.h3_to_geo_boundary(h3_address) # array of arrays of [lat, lng] m = visualize_hexagons(list(h3.k_ring_distances(h3_address, 4)[3]), color="purple") m = visualize_hexagons(list(h3.k_ring_distances(h3_address, 4)[2]), color="blue", folium_map=m) m = visualize_hexagons(list(h3.k_ring_distances(h3_address, 4)[1]), color="green", folium_map=m) m = visualize_hexagons(list(h3.k_ring_distances(h3_address, 4)[0]), color = "red", folium_map=m) display(m) # In[4]: geoJson = {'type': 'Polygon', 'coordinates': [[[37.813318999983238, -122.4089866999972145], [ 37.7866302000007224, -122.3805436999997056 ], [37.7198061999978478, -122.3544736999993603], [ 37.7076131999975672, -122.5123436999983966 ], [37.7835871999971715, -122.5247187000021967], [37.8151571999998453, -122.4798767000009008]]] } polyline = geoJson['coordinates'][0] polyline.append(polyline[0]) lat = [p[0] for p in polyline] lng = [p[1] for p in polyline] m = folium.Map(location=[sum(lat)/len(lat), sum(lng)/len(lng)], zoom_start=13, tiles='cartodbpositron') my_PolyLine=folium.PolyLine(locations=polyline,weight=8,color="green") m.add_child(my_PolyLine) hexagons = list(h3.polyfill(geoJson, 8)) polylines = [] lat = [] lng = [] for hex in hexagons: polygons = h3.h3_set_to_multi_polygon([hex], geo_json=False) # flatten polygons into loops. outlines = [loop for polygon in polygons for loop in polygon] polyline = [outline + [outline[0]] for outline in outlines][0] lat.extend(map(lambda v:v[0],polyline)) lng.extend(map(lambda v:v[1],polyline)) polylines.append(polyline) for polyline in polylines: my_PolyLine=folium.PolyLine(locations=polyline,weight=8,color='red') m.add_child(my_PolyLine) display(m) # In[ ]: