crs-l2-svalbard-polar-areas

Status: done
Score: 94
Duration: 2:12
Cost: 0.44¢
Model: google/gemma-4-26b-a4b-it

Map (reference ← swipe → agent)

0:00
svalbard_glaciers — I need an honest size ranking of these high-latitude glaciers using true geographic area, not the distorted values you'd get from raw lat/lon coordinates. Pick the most appropriate coordinate system for measuring area at these latitudes and give me the top 20 by area as CSV: columns name, area_km2, bbox_minx_polar, bbox_miny_polar, bbox_maxx_polar, bbox_maxy_polar, crs_epsg — bboxes in the same projected metres as the area, and crs_epsg the integer EPSG code of the CRS you used. Sort by area_km2 descending. File: svalbard_glaciers_top20.csv.
0:00
System info
{
  "adapter": "openrouter",
  "model": "google/gemma-4-26b-a4b-it",
  "base_url": "https://openrouter.ai/api/v1"
}
0:01
Bash ls -R /work
ls -R /work
/work:
svalbard_glaciers_wgs84.gpkg
0:13
Write /work/check_data.py
content · 11 lines · py
import geopandas as gpd

# Load the data to check CRS and structure
gdf = gpd.read_file('svalbard_glaciers_wgs84.gpkg')

print(f"CRS: {gdf.crs}")
print(f"Columns: {gdf.columns}")
print(f"First 5 rows:")
print(gdf.head())
print(f"Total number of features: {len(gdf)}")
Wrote /work/check_data.py (268 chars).
0:15
Bash python /work/check_data.py
python /work/check_data.py
CRS: EPSG:4326
Columns: Index(['id', 'name', 'subtype', 'class', 'geometry'], dtype='str')
First 5 rows:
                                     id  ...                                           geometry
0  af2fac62-8f17-35dd-bb4b-cd7ac5f906b0  ...  MULTIPOLYGON (((22.78865 80.14451, 22.73235 80...
1  12ba70b6-6f49-35fa-a072-bfdc8321c987  ...  MULTIPOLYGON (((14.02517 77.97816, 14.02557 77...
2  5919887f-cdb2-3283-a884-b1146bdda8ee  ...  MULTIPOLYGON (((16.06338 78.22499, 16.06381 78...
3  cdbc3ec1-ce56-3dbc-89fe-f4bce34bd5a8  ...  MULTIPOLYGON (((12.92179 78.40649, 12.95164 78...
4  81e675dd-427e-3cd8-ac05-929fbbd3c30e  ...  MULTIPOLYGON (((11.88304 78.88352, 11.88399 78...

[5 rows x 5 columns]
Total number of features: 169
1:05
Write /work/solve.py
content · 53 lines · py
import geopandas as gpd
import pandas as pd

# Load data
gdf = gpd.read_file('svalbard_glaciers_wgs84.gpkg')

# Svalbard is roughly at 78 deg N.
# We need a projection suitable for area measurement in Svalbard.
# NSIDC Sea Ice Polar Stereographic (EPSG:3413) is common for high latitudes.
# Or UTM zones. Svalbard is in UTM zones 33, 34, 35.
# However, Polar Stereographic is generally better for area across a large high-latitude region.
# EPSG:3413 (NSIDC Sea Ice Polar Stereographic North) is a good candidate.
# Let's use EPSG:3413.

target_crs = "EPSG:3413"

# Project to the chosen CRS
gdf_projected = gdf.to_crs(target_crs)

# Calculate area in m^2 and convert to km^2
gdf_projected['area_km2'] = gdf_projected.geometry.area / 10**6

# Get bounding box in the projected CRS
# bounds returns (minx, miny, maxx, maxy)
gdf_projected['bbox_minx_polar'] = gdf_projected.geometry.bounds.minx
gdf_projected['bbox_miny_polar'] = gdf_projected.geometry.bounds.miny
gdf_projected['bbox_maxx_polar'] = gdf_projected.geometry.bounds.maxx
gdf_projected['bbox_maxy_polar'] = gdf_projected.geometry.bounds.maxy

# Get EPSG code
epsg_code = gdf_projected.crs.to_epsg()

# Select top 20 by area descending
top_20 = gdf_projected.sort_values(by='area_km2', ascending=False).head(20)

# Prepare final dataframe with requested columns
# columns: name, area_km2, bbox_minx_polar, bbox_miny_polar, bbox_maxx_polar, bbox_maxy_polar, crs_epsg
result = pd.DataFrame({
    'name': top_20['name'],
    'area_km2': top_20['area_km2'],
    'bbox_minx_polar': top_20['bbox_minx_polar'],
    'bbox_miny_polar': top_20['bbox_miny_polar'],
    'bbox_maxx_polar': top_20['bbox_maxx_polar'],
    'bbox_maxy_polar': top_20['bbox_maxy_polar'],
    'crs_epsg': epsg_code
})

# Save to CSV
result.to_csv('svalbard_glaciers_top20.csv', index=False)

print("Top 20 glaciers processed and saved to svalbard_glaciers_top20.csv")
print(result.head())
Wrote /work/solve.py (1914 chars).
1:08
Bash python /work/solve.py
python /work/solve.py
Top 20 glaciers processed and saved to svalbard_glaciers_top20.csv
              name     area_km2  ...  bbox_maxy_polar  crs_epsg
140       Sørfonna  4146.995028  ...   -365990.290930      3413
156      Vestfonna  2272.183117  ...   -420978.166085      3413
168    Åsgardfonna   872.249186  ...   -525034.100104      3413
78   Kvitøyjøkulen   595.277158  ...   -211860.173706      3413
149   Valhallfonna   405.018065  ...   -505582.963556      3413

[5 rows x 7 columns]
1:12
Bash head -n 25 svalbard_glaciers_top20.csv
head -n 25 svalbard_glaciers_top20.csv
name,area_km2,bbox_minx_polar,bbox_miny_polar,bbox_maxx_polar,bbox_maxy_polar,crs_epsg
Sørfonna,4146.995028319491,1018600.817882212,-472800.3912665622,1093407.1674378568,-365990.2909299612,3413
Vestfonna,2272.1831167032924,955923.9805055511,-493366.30464676005,1014589.5375176889,-420978.1660846758,3413
Åsgardfonna,872.2491860794605,970672.3159938941,-558393.7394266115,1024973.2110542867,-525034.1001042881,3413
Kvitøyjøkulen,595.2771582678471,1028269.5074980733,-251073.05692732212,1052280.1255731431,-211860.17370643766,3413
Valhallfonna,405.0180652770844,971511.670097754,-527453.9846470426,1003139.1997554839,-505582.9635556986,3413
Nordmannsfonna,125.59503297052574,1128862.4515745593,-577716.8410743554,1149204.2654806755,-563508.01562506,3413
Sveabreen,121.14271431301484,1042378.8994917835,-645032.4615881244,1070491.2293700927,-634900.8738330957,3413
Gruvfonna,109.26581602996173,1144708.8887145082,-629651.8176660625,1156022.2028977482,-608114.4276372788,3413
Veteranen,92.38270394195997,1023748.0056298103,-552570.0665400377,1045629.5864769553,-532772.4118134979,3413
Himingbjørgfonna,80.514240197884,1019942.2563029992,-558249.7214880211,1032767.2559255561,-542067.4595360316,3413
Hellefonna,78.93980447182193,1137721.2132937114,-599557.1616786135,1153448.587803471,-586377.0729442405,3413
Heuglinbreen,68.22624231495472,1124554.481148079,-561227.6610193359,1137550.8359948718,-552367.730796976,3413
Eidembreen,64.22378265622439,1067450.8900832098,-670591.5306250262,1073502.0562839245,-653568.1741950389,3413
Nordenskiöldbreen,64.19128040224581,1082148.1499660225,-580288.628157692,1091821.8942982997,-569000.2227019768,3413
Isrosa,45.113467299742624,1145941.681893076,-580366.4889922002,1153648.207848919,-567251.2212087518,3413
Edvardbreen,44.47313938975286,1164648.5289905206,-614218.8502931708,1173314.2171653411,-600447.1240089986,3413
Esmarkbreen,41.16028919582775,1075609.0346814487,-661298.8628999034,1088684.5918938657,-653342.4655558533,3413
Venernbreen,40.83531751434477,1074998.6217814437,-669967.1837736613,1081719.4183093198,-657177.4317250035,3413
Dunérbreen,38.70074899616643,970877.7430687764,-526415.3522561246,984408.4476399018,-519393.1545105753,3413
Fridtjovbreen,37.598264379331,1131454.2915404618,-675329.6423005203,1145279.019816095,-669881.6382822026,3413
1:20
Bash # No changes needed, the output seems to meet the requirements.
# No changes needed, the output seems to meet the requirements.
# Double check the sorting and number of rows.
wc -l svalbard_glaciers_top20.csv
21 svalbard_glaciers_top20.csv
1:46
Write /work/solve.py
content · 44 lines · py
import geopandas as gpd
import pandas as pd

# Load data
gdf = gpd.read_file('svalbard_glaciers_wgs84.gpkg')

# Target CRS: EPSG:3413 (NSIDC Sea Ice Polar Stereographic North)
target_crs = "EPSG:3413"

# Project to the chosen CRS
gdf_projected = gdf.to_crs(target_crs)

# Calculate area in m^2 and convert to km^2
gdf_projected['area_km2'] = gdf_projected.geometry.area / 10**6

# Get bounding box in the projected CRS
gdf_projected['bbox_minx_polar'] = gdf_projected.geometry.bounds.minx
gdf_projected['bbox_miny_polar'] = gdf_projected.geometry.bounds.miny
gdf_projected['bbox_maxx_polar'] = gdf_projected.geometry.bounds.maxx
gdf_projected['bbox_maxy_polar'] = gdf_projected.geometry.bounds.maxy

# Get EPSG code
epsg_code = gdf_projected.crs.to_epsg()

# Select top 20 by area descending
top_20 = gdf_projected.sort_values(by='area_km2', ascending=False).head(20)

# Prepare final dataframe with requested columns
# columns: name, area_km2, bbox_minx_polar, bbox_miny_polar, bbox_maxx_polar, bbox_maxy_polar, crs_epsg
result = pd.DataFrame({
    'name': top_20['name'],
    'area_km2': top_20['area_km2'],
    'bbox_minx_polar': top_20['bbox_minx_polar'],
    'bbox_miny_polar': top_20['bbox_miny_polar'],
    'bbox_maxx_polar': top_20['bbox_maxx_polar'],
    'bbox_maxy_polar': top_20['bbox_maxy_polar'],
    'crs_epsg': epsg_code
})

# Save to CSV
result.to_csv('svalbard_glaciers_top20.csv', index=False)

print(f"Successfully saved top 20 glaciers to svalbard_glaciers_top20.csv using EPSG:{epsg_code}")
Wrote /work/solve.py (1512 chars).
1:49
Bash python /work/solve.py
python /work/solve.py
Successfully saved top 20 glaciers to svalbard_glaciers_top20.csv using EPSG:3413
2:10