in gemini/agents/research-multi-agents/ev_agent/api_handler/api_01_NeighborhoodSummary.py [0:0]
def process_area_metrics(location_data: Dict, elements: List[Dict]) -> AreaMetrics:
metrics = AreaMetrics()
# Get bounds
bbox = location_data["bbox"]
(
metrics.bounds_south,
metrics.bounds_north,
metrics.bounds_west,
metrics.bounds_east,
) = map(float, bbox)
# Calculate raw areas
lat1, lat2 = math.radians(metrics.bounds_south), math.radians(
metrics.bounds_north
)
lon1, lon2 = math.radians(metrics.bounds_west), math.radians(
metrics.bounds_east
)
# Simple area calculation
R = 6371 # Earth radius in km
width = R * abs(lon2 - lon1) * math.cos(0.5 * (lat2 + lat1))
height = R * abs(lat2 - lat1)
metrics.total_area_sqkm = width * height
# Count areas by type (no processing, just raw counts converted to area)
water_ways = sum(
1
for e in elements
if e.get("type") == "way" and e.get("tags", {}).get("natural") == "water"
)
green_ways = sum(
1
for e in elements
if e.get("type") == "way" and e.get("tags", {}).get("landuse") == "grass"
)
built_ways = sum(
1
for e in elements
if e.get("type") == "way"
and e.get("tags", {}).get("landuse")
in ["residential", "commercial", "industrial"]
)
# Simple proportional area assignment
total_counted_ways = water_ways + green_ways + built_ways
if total_counted_ways > 0:
metrics.water_area_sqkm = (
water_ways / total_counted_ways
) * metrics.total_area_sqkm
metrics.green_area_sqkm = (
green_ways / total_counted_ways
) * metrics.total_area_sqkm
metrics.built_area_sqkm = (
built_ways / total_counted_ways
) * metrics.total_area_sqkm
return metrics