def convert(response, category_formatter=str): """ :param response: :return: """ if hasattr(response.aggregations, "categories"): for category in response.aggregations.categories: for bucket in category.grids: x, y = lnglat_to_meters(bucket.centroid.location.lon, bucket.centroid.location.lat) yield { "lon": bucket.centroid.location.lon, "lat": bucket.centroid.location.lat, "x": x, "y": y, "c": bucket.centroid.count, "t": category_formatter(category.key), } else: for bucket in response.aggregations.grids: lon = bucket.centroid.location.lon lat = bucket.centroid.location.lat x, y = lnglat_to_meters(lon, lat) yield { "lon": lon, "lat": lat, "x": x, "y": y, "c": bucket.centroid.count }
def project_to_meters(self, df, x, y): try: df.loc[:, "x_meters"], df.loc[:, "y_meters"] = lnglat_to_meters( df[x], df[y]) geometry = [Point(xy) for xy in zip(df.x_meters, df.y_meters)] web_merc = {"init": "epsg:3857"} return gpd.GeoDataFrame(df, crs=web_merc, geometry=geometry) except: print( """Could not project specified coordinate fields to meters. Make sure the X Field and Y Field values have been set correctly.\n""")
def convert_composite(response, categorical, filter_buckets, histogram_interval, category_type, category_format): if categorical and filter_buckets == False: # Convert a regular terms aggregation for bucket in response: for category in bucket.categories: lon, lat = geotile_bucket_to_lonlat(bucket) x, y = lnglat_to_meters(lon, lat) raw = category.key # Bin the data if histogram_interval is not None: # Format with pynumeral if provided if category_format: label = "%s-%s" % ( pynumeral.format(float(raw), category_format), pynumeral.format( float(raw) + histogram_interval, category_format), ) else: label = "%s-%s" % (float(raw), float(raw) + histogram_interval) else: if category_type == "number": try: label = pynumeral.format(to_32bit_float(raw), category_format) except ValueError: label = str(raw) else: label = str(raw) yield { "lon": lon, "lat": lat, "x": x, "y": y, "c": category.doc_count, "t": label, } elif categorical and filter_buckets == True: # Convert a filter bucket aggregation for bucket in response: for key in bucket.categories.buckets: category = bucket.categories.buckets[key] if category.doc_count > 0: lon, lat = geotile_bucket_to_lonlat(bucket) x, y = lnglat_to_meters(lon, lat) if category_type == "number": try: label = pynumeral.format(to_32bit_float(key), category_format) except ValueError: label = str(key) else: label = str(key) yield { "lon": lon, "lat": lat, "x": x, "y": y, "c": category.doc_count, "t": label, } else: # Non-categorical for bucket in response: lon, lat = geotile_bucket_to_lonlat(bucket) x, y = lnglat_to_meters(lon, lat) yield { "lon": lon, "lat": lat, "x": x, "y": y, "c": bucket.doc_count }
def transform_coords(df): df = df.copy() df.loc[:, 'longitude'], df.loc[:, 'latitude'] = \ du.lnglat_to_meters(df.longitude,df.latitude) return df
def to_meters(row): return lnglat_to_meters(row["LON"], row["LAT"])
export = partial(export_image, background=background, export_path="export") #cm = partial(colormap_select, reverse=(background!="black")) cm = partial(colormap_select, reverse=(background != "black")) display(HTML("<style>.container {width:100%} !important; }</style>")) cvs = ds.Canvas(plot_width, plot_height, *FFM) agg = cvs.points(new_df, 'RECHTSWERT', 'HOCHWERT') export(tf.shade(agg, cmap=cm(fire, 0.4), how='log'), "Frankfurt_Baumbestand_nach_2000") # In[17]: from datashader.utils import lnglat_to_meters df.loc[:, 'lon'], df.loc[:, 'lat'] = lnglat_to_meters(df.lon, df.lat) # In[12]: import holoviews as hv from holoviews.element.tiles import EsriImagery from holoviews.operation.datashader import datashade #from datashader.utils import lnglat_to_meters hv.extension('bokeh') from colorcet import fire #df.loc[:, 'lon'], df.loc[:, 'lat'] = lnglat_to_meters(df.lon,df.lat) map_tiles = EsriImagery().opts(alpha=0.5, width=900, height=600, bgcolor='black')