dd-l1-london-parks-count
Map (reference ← swipe → agent)
0:00
I've got inner-London parks (london_parks) and I'm sizing the corpus before commissioning a green-space accessibility study. How many of those parks come in at one hectare or more, what's their combined area in hectares, and what bounding box would I draw around that subset on a WGS84 map? Output parks_summary.json with keys count, total_area_ha, and bbox_wgs84 (as a [xmin, ymin, xmax, ymax] array).
0:00
System info
{
"adapter": "openrouter",
"model": "google/gemma-4-26b-a4b-it",
"base_url": "https://openrouter.ai/api/v1"
}
0:01
Bash
ls -F
ls -F
london_parks.fgb
0:21
Write
/work/solve.py
content · 58 lines · py
import geopandas as gpd
import json
def main():
# Load the data
gdf = gpd.read_file('london_parks.fgb')
# Assuming the area is in some projected CRS (like EPSG:27700 for UK).
# If it's in WGS84, we need to reproject to get accurate areas.
# Let's check the CRS first.
print(f"Original CRS: {gdf.crs}")
# Ensure we have an area column in hectares.
# We'll project to a metric CRS (EPSG:27700 is standard for UK) to calculate area accurately.
if gdf.crs.is_geographic:
gdf_projected = gdf.to_crs(epsg=27700)
else:
gdf_projected = gdf.copy()
# Calculate area in square meters, then convert to hectares (1 ha = 10,000 m2)
# We use the projected geometry for area calculation.
gdf_projected['area_ha'] = gdf_projected.geometry.area / 10000.0
# Filter parks that are 1 hectare or more
large_parks = gdf_projected[gdf_projected['area_ha'] >= 1.0].copy()
# Count
count = len(large_parks)
# Total area in hectares
total_area_ha = large_parks['area_ha'].sum()
# Calculate Bounding Box in WGS84
# We need to transform back to WGS84 for the bbox
if count > 0:
large_parks_wgs84 = large_parks.to_crs(epsg=4326)
bounds = large_parks_wgs84.total_bounds # [xmin, ymin, xmax, ymax]
bbox_wgs84 = bounds.tolist()
else:
bbox_wgs84 = []
# Create output dictionary
summary = {
"count": int(count),
"total_area_ha": float(total_area_ha),
"bbox_wgs84": bbox_wgs84
}
# Save to JSON
with open('parks_summary.json', 'w') as f:
json.dump(summary, f, indent=4)
print("Summary generated successfully.")
print(summary)
if __name__ == "__main__":
main()
Wrote /work/solve.py (1776 chars).
0:23
Bash
python solve.py
python solve.py
Original CRS: EPSG:27700
Summary generated successfully.
{'count': 42, 'total_area_ha': 519.1620805430861, 'bbox_wgs84': [-0.19932378751294652, 51.49147199538401, -0.08248178747996572, 51.54706589542573]}
0:25
Bash
cat parks_summary.json
cat parks_summary.json
{
"count": 42,
"total_area_ha": 519.1620805430861,
"bbox_wgs84": [
-0.19932378751294652,
51.49147199538401,
-0.08248178747996572,
51.54706589542573
]
}
0:32
Edit
/work/solve.py
Edited /work/solve.py.
0:35
Bash
python solve.py
python solve.py
Original CRS: EPSG:27700
Summary generated successfully.
{'count': 42, 'total_area_ha': np.float64(519.16), 'bbox_wgs84': [-0.199324, 51.491472, -0.082482, 51.547066]}
0:51
Write
/work/solve.py
content · 49 lines · py
import geopandas as gpd
import json
import numpy as np
def main():
# Load the data
gdf = gpd.read_file('london_parks.fgb')
# The original CRS is EPSG:27700 (British National Grid)
# Area calculation in square meters is accurate in this projection.
gdf_projected = gdf.copy()
# Calculate area in hectares (1 ha = 10,000 m2)
gdf_projected['area_ha'] = gdf_projected.geometry.area / 10000.0
# Filter parks that are 1 hectare or more
large_parks = gdf_projected[gdf_projected['area_ha'] >= 1.0].copy()
# Count
count = len(large_parks)
# Total area in hectares
total_area_ha = large_parks['area_ha'].sum()
# Calculate Bounding Box in WGS84
if count > 0:
large_parks_wgs84 = large_parks.to_crs(epsg=4326)
bounds = large_parks_wgs84.total_bounds # [xmin, ymin, xmax, ymax]
bbox_wgs84 = bounds.tolist()
else:
bbox_wgs84 = []
# Create output dictionary with clean types and rounding
summary = {
"count": int(count),
"total_area_ha": float(round(total_area_ha, 2)),
"bbox_wgs84": [float(round(x, 6)) for x in bbox_wgs84]
}
# Save to JSON
with open('parks_summary.json', 'w') as f:
json.dump(summary, f, indent=4)
print("Summary generated successfully.")
print(summary)
if __name__ == "__main__":
main()
Wrote /work/solve.py (1397 chars).
0:53
Bash
python solve.py
python solve.py
Summary generated successfully.
{'count': 42, 'total_area_ha': 519.16, 'bbox_wgs84': [-0.199324, 51.491472, -0.082482, 51.547066]}
0:57
Bash
cat parks_summary.json
cat parks_summary.json
{
"count": 42,
"total_area_ha": 519.16,
"bbox_wgs84": [
-0.199324,
51.491472,
-0.082482,
51.547066
]
}
1:02