Spaces:
Sleeping
Sleeping
File size: 4,133 Bytes
164d1c0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | # Example taken from here - https://shinylive.io/py/examples/#map
import os
from shiny import reactive
from shiny.express import input, render, ui
from shinywidgets import render_widget
import ipyleaflet as ipyl
import pandas as pd
import geopandas as gpd
from ipyleaflet import Map, Rectangle, basemaps, basemap_to_tiles, LayersControl, ColorMap, FeatureGroup
from branca.colormap import linear
from shapely.geometry import box
def point_to_square(row, size=0.0009):
x, y = row.geometry.x, row.geometry.y
half = size / 2
return box(x - half, y - half, x + half, y + half)
df = pd.read_csv("example.csv")
# Step 2: Create GeoDataFrame with UTM Zone 15N
gdf = gpd.GeoDataFrame(
df,
geometry=gpd.points_from_xy(df['x'], df['y']),
crs="EPSG:32615" # <- Your current system
)
# Step 3: Reproject to WGS84 (lat/lon)
gdf = gdf.to_crs("EPSG:4326")
# Convert points to small square polygons
gdf["geometry_box"] = gdf.apply(point_to_square, axis=1)
print(gdf.head())
# Step 4: Extract lat/lon columns for ipyleaflet
gdf["lat"] = gdf.geometry.y
gdf["lon"] = gdf.geometry.x
temp_colormap = linear.YlOrRd_09.scale(df['LST'].min(), df['LST'].max())
# def generate_temp_layer():
# rectangles = []
# for _, row in gdf.iterrows():
# lat = row['lat']
# lon = row['lon']
# size_deg = 0.0009 # Approx ~100m (latitude degrees)
# bounds = [
# (lat - size_deg / 2, lon - size_deg / 2),
# (lat + size_deg / 2, lon + size_deg / 2)
# ]
# color = temp_colormap(row['LST'])
# rect = Rectangle(
# bounds=bounds,
# color=color,
# fill_color=color,
# fill_opacity=0.5,
# weight=0
# )
# rectangles.append(rect)
# return rectangles
city_centers = {
"London": (51.5074, 0.1278),
"Paris": (48.8566, 2.3522),
"New York": (40.7128, -74.0060),
"Guatemala city": (14.6349149, -90.5068824),
"Zone 15": (14.61925, -90.49386)
}
ui.input_text("Text", "Some vector", "Zone 15")
@render_widget
def map():
city = use_in_model(input.Text())
center = city_centers.get(city, (0, 0))
m = Map(center=center, zoom=13, basemap=basemaps.OpenStreetMap.Mapnik)
# Add rectangle overlay
geo_data = ipyl.GeoData(
geo_dataframe=gdf,
style={
"color": "black",
"fillColor": "#3366cc",
"opacity": 0.05,
"weight": 1.9,
"dashArray": "2",
"fillOpacity": 0.6,
},
hover_style={"fillColor": "red", "fillOpacity": 0.2},
name="Temperature",
)
m.add(geo_data)
m.add(ipyl.LayersControl())
return m
# @render_widget
# def map():
# city = use_in_model(input.Text())
# center = city_centers.get(city, (0, 0))
# # m = Map(center=center, zoom=13, basemap=basemaps.OpenStreetMap.Mapnik)
# m = Map(center=city_centers["Guatemala city"], zoom=13, basemap=basemaps.OpenStreetMap.Mapnik)
# print(f"Centering on city: {city}")
# # Add rectangle overlay
# for rect in generate_temp_layer():
# m.add_layer(rect)
# # Optional: Add color legend
# # m.add_control(temp_colormap.legend(title= "Temp"))
# # Add controls
# m.add_control(LayersControl(position="topright"))
# return m
def use_in_model(x):
# TODO: Call some model loaded in huggingface_hub.
# Define the client once then just call the
# client from here.
# from huggingface_hub import InferenceClient
# client = InferenceClient(
# api_key=os.environ["HF_TOKEN"],
# provider="auto",
# )
#
# completion = client.chat.completions.create(
# model="deepseek-ai/DeepSeek-V3-0324",
# messages=[{"role": "user", "content": "A story about hiking in the mountains"}]
# )
return x
@render.text
def text():
return ("You entered: " + use_in_model(input.Text()))
@reactive.effect
def _():
try:
map.widget.center = city_centers[use_in_model(input.Text())]
except:
pass |