geo-l2-bangkok-landuse-intersect
Map (reference ← swipe → agent)
0:00
Working on a flood-mitigation green-cover briefing. `landcover` has land-cover polygons for the Bangkok metro; `study_area` defines the BMA boundary. I need the land-cover within the study area, simplified enough that the file is small for the policy lead to preview in a browser, with the original `class` string and a per-feature `area_m2` in square metres.
Write the result to `bma_landcover_intersect.geojson` as a GeoJSON FeatureCollection with every feature stored as a MultiPolygon.
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
bangkok_landcover.parquet bma_study_area.geojson
0:38
Write
/work/solve.py
content · 112 lines · py
import geopandas as gpd
def solve():
# Load datasets
# The prompt says 'landcover' and 'study_area', but the ls output shows:
# bangkok_landcover.parquet
# bma_study_area.geojson
# I will assume these are the files.
landcover = gpd.read_parquet('bangkok_landcover.parquet')
study_area = gpd.read_file('bma_study_area.geojson')
# Ensure same CRS
if landcover.crs != study_area.crs:
landcover = landcover.to_crs(study_area.crs)
# Intersect landcover with study area
# This clips the landcover polygons to the BMA boundary
intersected = gpd.overlay(landcover, study_area, how='intersection')
# Calculate area in square metres
# We need a projected CRS for accurate area calculation.
# If the input is WGS84 (EPSG:4326), we should project it.
# Let's check CRS first.
original_crs = intersected.crs
# Try to project to a metric CRS suitable for Bangkok (UTM Zone 47N - EPSG:32647)
projected_crs = 'EPSG:32647'
intersected_projected = intersected.to_crs(projected_crs)
intersected_projected['area_m2'] = intersected_projected.geometry.area
# Convert back to original CRS (likely 4326) for GeoJSON output
intersected_final = intersected_projected.to_crs(original_crs)
# The prompt asks for the original 'class' string.
# Overlay might have renamed columns or dropped them if they weren't in the study_area.
# But standard intersection keeps columns from both sides.
# Let's ensure 'class' is preserved.
# Simplify geometry to keep file size small for browser preview.
# We'll use a tolerance in degrees if it's 4326.
# 0.001 degrees is roughly 111m. Let's try something smaller like 0.0005 (~55m) or just use the metric projection.
# A better way: simplify in the metric CRS then convert back.
# We'll use a reasonable tolerance for "simplified enough".
# Let's say 10-50 meters.
# Let's see the structure of intersected_projected first to ensure columns are right.
# We'll keep 'class' and 'area_m2'.
# We also need every feature to be a MultiPolygon.
def ensure_multipolygon(gdf):
from shapely.geometry import MultiPolygon, Polygon
def to_multi(geom):
if geom.geom_type == 'Polygon':
return MultiPolygon([geom])
return geom
gdf['geometry'] = gdf['geometry'].apply(to_multi)
return gdf
# Apply simplification in metric CRS
# Tolerance in meters. 50m is usually good for a "preview".
intersected_simplified = intersected_projected.simplify(tolerance=50, preserve_topology=True)
# Re-attach area_m2 (it was calculated on projected)
intersected_simplified['area_m2'] = intersected_projected['area_m2']
# Re-attach 'class' (it should be there)
# Since we used overlay, 'class' should be in intersected_simplified.
# Let's make sure we only keep 'class' and 'area_m2' and geometry.
# Select required columns. The prompt says "with the original class string and a per-feature area_m2"
# It doesn't explicitly say to discard others, but usually, for "small" files, we keep only necessary ones.
# However, to be safe, I'll keep 'class' and 'area_m2'.
# If 'class' was renamed due to collision, we handle it.
# Let's check column names.
# Final conversion to original CRS and MultiPolygon
intersected_final = intersected_simplified.to_crs(original_crs)
intersected_final = ensure_multipolygon(intersected_final)
# Clean up: Keep only 'class', 'area_m2', and geometry
# Note: if overlay created 'class_1', etc, we'll have to be careful.
# Let's find the column that looks like 'class'.
cols_to_keep = ['area_m2', 'geometry']
# Try to find 'class' in columns
class_col = None
for col in intersected_final.columns:
if 'class' in col.lower():
class_col = col
break
if class_col:
cols_to_keep.append(class_col)
# Rename it back to 'class' if it was changed
if class_col != 'class':
intersected_final = intersected_final.rename(columns={class_col: 'class'})
cols_to_keep[-1] = 'class'
# Filter columns
final_output = intersected_final[cols_to_keep]
# Write to GeoJSON
final_output.to_file('bma_landcover_intersect.geojson', driver='GeoJSON')
print("Successfully created bma_landcover_intersect.geojson")
if __name__ == "__main__":
solve()
Wrote /work/solve.py (4552 chars).
0:39
Bash
python solve.py
Traceback (most recent call last):
File "/work/solve.py", line 111, in <module>
solve()
~~~~~^^
File "/work/solve.py", line 81, in solve
intersected_final = intersected_simplified.to_crs(original_crs)
File "/usr/local/lib/python3.14/site-packages/geopandas/geoseries.py", line 1251, in to_crs
self.values.to_crs(crs=crs, epsg=epsg), index=self.index, name=self.name
^^^^^^^^^^^^^^^^^^
AttributeError: 'numpy.ndarray' object has no attribute 'to_crs'
0:54
Edit
/work/solve.py
old_string not found in /work/solve.py
0:55
Read
/work/solve.py
1 import geopandas as gpd
2
3 def solve():
4 # Load datasets
5 # The prompt says 'landcover' and 'study_area', but the ls output shows:
6 # bangkok_landcover.parquet
7 # bma_study_area.geojson
8 # I will assume these are the files.
9
10 landcover = gpd.read_parquet('bangkok_landcover.parquet')
11 study_area = gpd.read_file('bma_study_area.geojson')
12
13 # Ensure same CRS
14 if landcover.crs != study_area.crs:
15 landcover = landcover.to_crs(study_area.crs)
16
17 # Intersect landcover with study area
18 # This clips the landcover polygons to the BMA boundary
19 intersected = gpd.overlay(landcover, study_area, how='intersection')
20
21 # Calculate area in square metres
22 # We need a projected CRS for accurate area calculation.
23 # If the input is WGS84 (EPSG:4326), we should project it.
24 # Let's check CRS first.
25
26 original_crs = intersected.crs
27 # Try to project to a metric CRS suitable for Bangkok (UTM Zone 47N - EPSG:32647)
28 projected_crs = 'EPSG:32647'
29
30 intersected_projected = intersected.to_crs(projected_crs)
31 intersected_projected['area_m2'] = intersected_projected.geometry.area
32
33 # Convert back to original CRS (likely 4326) for GeoJSON output
34 intersected_final = intersected_projected.to_crs(original_crs)
35
36 # The prompt asks for the original 'class' string.
37 # Overlay might have renamed columns or dropped them if they weren't in the study_area.
38 # But standard intersection keeps columns from both sides.
39 # Let's ensure 'class' is preserved.
40
41 # Simplify geometry to keep file size small for browser preview.
42 # We'll use a tolerance in degrees if it's 4326.
43 # 0.001 degrees is roughly 111m. Let's try something smaller like 0.0005 (~55m) or just use the metric projection.
44
45 # A better way: simplify in the metric CRS then convert back.
46 # We'll use a reasonable tolerance for "simplified enough".
47 # Let's say 10-50 meters.
48
49 # Let's see the structure of intersected_projected first to ensure columns are right.
50 # We'll keep 'class' and 'area_m2'.
51
52 # We also need every feature to be a MultiPolygon.
53 def ensure_multipolygon(gdf):
54 from shapely.geometry import MultiPolygon, Polygon
55 def to_multi(geom):
56 if geom.geom_type == 'Polygon':
57 return MultiPolygon([geom])
58 return geom
59 gdf['geometry'] = gdf['geometry'].apply(to_multi)
60 return gdf
61
62 # Apply simplification in metric CRS
63 # Tolerance in meters. 50m is usually good for a "preview".
64 intersected_simplified = intersected_projected.simplify(tolerance=50, preserve_topology=True)
65
66 # Re-attach area_m2 (it was calculated on projected)
67 intersected_simplified['area_m2'] = intersected_projected['area_m2']
68
69 # Re-attach 'class' (it should be there)
70 # Since we used overlay, 'class' should be in intersected_simplified.
71 # Let's make sure we only keep 'class' and 'area_m2' and geometry.
72
73 # Select required columns. The prompt says "with the original class string and a per-feature area_m2"
74 # It doesn't explicitly say to discard others, but usually, for "small" files, we keep only necessary ones.
75 # However, to be safe, I'll keep 'class' and 'area_m2'.
76
77 # If 'class' was renamed due to collision, we handle it.
78 # Let's check column names.
79
80 # Final conversion to original CRS and MultiPolygon
81 intersected_final = intersected_simplified.to_crs(original_crs)
82 intersected_final = ensure_multipolygon(intersected_final)
83
84 # Clean up: Keep only 'class', 'area_m2', and geometry
85 # Note: if overlay created 'class_1', etc, we'll have to be careful.
86 # Let's find the column that looks like 'class'.
87
88 cols_to_keep = ['area_m2', 'geometry']
89 # Try to find 'class' in columns
90 class_col = None
91 for col in intersected_final.columns:
92 if 'class' in col.lower():
93 class_col = col
94 break
95
96 if class_col:
97 cols_to_keep.append(class_col)
98 # Rename it back to 'class' if it was changed
99 if class_col != 'class':
100 intersected_final = intersected_final.rename(columns={class_col: 'class'})
101 cols_to_keep[-1] = 'class'
102
103 # Filter columns
104 final_output = intersected_final[cols_to_keep]
105
106 # Write to GeoJSON
107 final_output.to_file('bma_landcover_intersect.geojson', driver='GeoJSON')
108 print("Successfully created bma_landcover_intersect.geojson")
109
110 if __name__ == "__main__":
111 solve()
1:11
Write
/work/solve.py
content · 65 lines · py
import geopandas as gpd
from shapely.geometry import MultiPolygon, Polygon
def solve():
# Load datasets
landcover = gpd.read_parquet('bangkok_landcover.parquet')
study_area = gpd.read_file('bma_study_area.geojson')
# Ensure same CRS
if landcover.crs != study_area.crs:
landcover = landcover.to_crs(study_area.crs)
# Intersect landcover with study area
intersected = gpd.overlay(landcover, study_area, how='intersection')
# Calculate area in square metres
original_crs = intersected.crs
projected_crs = 'EPSG:32647'
intersected_projected = intersected.to_crs(projected_crs)
intersected_projected['area_m2'] = intersected_projected.geometry.area
# Simplify geometry in metric CRS
# We'll use 50m tolerance
intersected_simplified = intersected_projected.copy()
intersected_simplified.geometry = intersected_projected.geometry.simplify(tolerance=50, preserve_topology=True)
# Re-attach area_m2
intersected_simplified['area_m2'] = intersected_projected['area_m2']
# Convert back to original CRS
intersected_final = intersected_simplified.to_crs(original_crs)
# Ensure every feature is a MultiPolygon
def ensure_multipolygon(geom):
if geom.geom_type == 'Polygon':
return MultiPolygon([geom])
return geom
intersected_final['geometry'] = intersected_final['geometry'].apply(ensure_multipolygon)
# Find the column that contains 'class'
class_col = None
for col in intersected_final.columns:
if 'class' in col.lower():
class_col = col
break
if class_col:
if class_col != 'class':
intersected_final = intersected_final.rename(columns={class_col: 'class'})
# Keep only required columns
final_output = intersected_final[['class', 'area_m2', 'geometry']]
else:
# Fallback if class column not found
final_output = intersected_final[['area_m2', 'geometry']]
# Write to GeoJSON
final_output.to_file('bma_landcover_intersect.geojson', driver='GeoJSON')
print("Successfully created bma_landcover_intersect.geojson")
if __name__ == "__main__":
solve()
Wrote /work/solve.py (2223 chars).
1:12
Bash
python solve.py
Successfully created bma_landcover_intersect.geojson
1:16
Bash
head -n 20 bma_landcover_intersect.geojson
{
"type": "FeatureCollection",
"name": "bma_landcover_intersect",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::32647" } },
"features": [
{ "type": "Feature", "properties": { "class": "forest", "area_m2": 15735.747013974595 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 660072.922161049442366, 1501476.794875692343339 ], [ 659930.180432457127608, 1501520.909297995036468 ], [ 659911.933729707379825, 1501578.380825867177919 ], [ 660097.710782600566745, 1501553.894484266871586 ], [ 660072.922161049442366, 1501476.794875692343339 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "forest", "area_m2": 32598.532097501338 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 662162.934291072539054, 1503314.934880985412747 ], [ 661954.794069058727473, 1503433.504096211632714 ], [ 661948.524989750818349, 1503482.574783980846405 ], [ 662265.774107982288115, 1503526.7981465482153 ], [ 662162.934291072539054, 1503314.934880985412747 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "barren", "area_m2": 17000.227989052393 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 687414.870456927688792, 1509653.402658631326631 ], [ 687410.070811898331158, 1509819.254515853011981 ], [ 687563.57504868763499, 1509777.946887897327542 ], [ 687487.227518679690547, 1509721.192535776412115 ], [ 687524.27073346672114, 1509674.234507615910843 ], [ 687414.870456927688792, 1509653.402658631326631 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "crop", "area_m2": 106792.69901280098 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 688024.319563361466862, 1521450.52436828520149 ], [ 688096.422312867362052, 1521525.575542747974396 ], [ 688795.520723217283376, 1521593.776507570408285 ], [ 688752.747554976027459, 1521445.117914338828996 ], [ 688062.27974666794762, 1521391.612416255054995 ], [ 688024.319563361466862, 1521450.52436828520149 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "forest", "area_m2": 18200.655162916628 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 684185.566674074507318, 1508479.552663187030703 ], [ 684274.407128739752807, 1508466.511879204539582 ], [ 684358.22473280178383, 1508555.019270811462775 ], [ 684296.959745952510275, 1508372.607149695744738 ], [ 684185.566674074507318, 1508479.552663187030703 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "barren", "area_m2": 29790.838871911346 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 674114.816255399258807, 1531102.280241003958508 ], [ 674061.883940312778577, 1531166.911846376955509 ], [ 674201.000061679980718, 1531186.067800543038175 ], [ 674278.200039670802653, 1531351.154296043328941 ], [ 674329.183979353168979, 1531199.443071036133915 ], [ 674114.816255399258807, 1531102.280241003958508 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "crop", "area_m2": 1712149.0246051964 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 676885.011045465013012, 1498552.918485936941579 ], [ 676932.257560095866211, 1498613.683231338625774 ], [ 676857.027248166268691, 1498691.026628341525793 ], [ 676937.151310785207897, 1498795.574815756641328 ], [ 676776.637549304869026, 1498876.503765153931454 ], [ 676668.190342979505658, 1498727.276453367667273 ], [ 676696.066587811685167, 1498890.796930523356423 ], [ 676437.678204083116725, 1499400.879318340914324 ], [ 676439.3495435686782, 1499470.947184655349702 ], [ 676488.386805178015493, 1499486.814826200949028 ], [ 676525.720824807183817, 1499536.154767573112622 ], [ 676531.875729613821022, 1499586.644904396263883 ], [ 676462.826526544755325, 1499531.187286998378113 ], [ 676363.587289461051114, 1499626.243047690484673 ], [ 676634.71235150587745, 1499676.602396637899801 ], [ 676550.371731523890048, 1499602.237970513990149 ], [ 676764.275471888715401, 1499522.440553417196497 ], [ 676716.824659332633018, 1499655.232443161075935 ], [ 676829.704525278648362, 1499664.64220481319353 ], [ 676769.363773140357807, 1499707.344719844870269 ], [ 676805.970199164003134, 1499812.563388398615643 ], [ 676916.154849353479221, 1499862.288431031629443 ], [ 676812.165625603171065, 1499943.607618752401322 ], [ 676859.083573416341096, 1499844.137323309434578 ], [ 676803.959761064499617, 1499879.611720015062019 ], [ 676731.804723156616092, 1499758.851316747022793 ], [ 676630.715598296723329, 1499744.888558587059379 ], [ 676496.751678934320807, 1500009.772650578757748 ], [ 676531.1787966969423, 1500334.205501667456701 ], [ 676654.130298901814967, 1500562.798778561409563 ], [ 676609.885798365343362, 1500703.519172314554453 ], [ 676727.523788911406882, 1500763.731793489307165 ], [ 676652.031048067146912, 1501003.63167360634543 ], [ 676613.503110627643764, 1500877.949921278283 ], [ 676544.336735403747298, 1500987.377674222690985 ], [ 676620.81772950629238, 1501225.41800226829946 ], [ 676832.505144371185452, 1501119.893110323231667 ], [ 676841.934597629122436, 1500900.158343334216624 ], [ 677038.487884240457788, 1500798.585269565461203 ], [ 676818.543520110892132, 1500585.567982425913215 ], [ 677029.255897880997509, 1500608.773246161174029 ], [ 677102.301762523595244, 1500443.993810773361474 ], [ 677274.487173390807584, 1500333.967457616934553 ], [ 677272.407091859728098, 1500172.699827353237197 ], [ 677379.607975143590011, 1500234.773576794890687 ], [ 677509.227319252677262, 1500081.025150625733659 ], [ 677882.966072108829394, 1499956.042180051328614 ], [ 677835.948972174781375, 1499735.261175579624251 ], [ 677570.909410901018418, 1499810.206649117404595 ], [ 677660.041425218107179, 1499697.023146477760747 ], [ 677501.779789315769449, 1499087.519849661272019 ], [ 677587.868179869954474, 1499139.990139041095972 ], [ 677698.696497739641927, 1499087.131760925753042 ], [ 677460.013552640331909, 1498922.05046897334978 ], [ 677475.366826286190189, 1499008.133619319647551 ], [ 677346.684432128211483, 1498843.668171393685043 ], [ 677245.104313903488219, 1498860.257125367876142 ], [ 677276.019754693843424, 1498794.794062515022233 ], [ 676885.011045465013012, 1498552.918485936941579 ] ], [ [ 677494.146721287746914, 1499071.331600638339296 ], [ 677494.6626247682143, 1499072.73869319120422 ], [ 677493.109405596507713, 1499069.527697614394128 ], [ 677494.146721287746914, 1499071.331600638339296 ] ], [ [ 676956.705436163232662, 1499435.564283097162843 ], [ 677239.032651461428031, 1499307.809180855751038 ], [ 677141.200167988892645, 1499404.992270312039182 ], [ 677301.433175433427095, 1499549.76210308377631 ], [ 677357.364842079114169, 1500051.228406854206696 ], [ 677315.438123547355644, 1499899.762958648148924 ], [ 677029.742726546130143, 1499824.652698796009645 ], [ 677044.88400633551646, 1499601.661618786398321 ], [ 676976.710946760606021, 1499659.347996095195413 ], [ 676908.686155629809946, 1499580.398164868354797 ], [ 676956.705436163232662, 1499435.564283097162843 ] ], [ [ 676788.732498811441474, 1499433.53370411740616 ], [ 676905.297618491225876, 1499343.428782377624884 ], [ 676808.928807253018022, 1499540.636413486441597 ], [ 676788.732498811441474, 1499433.53370411740616 ] ], [ [ 676967.000206667114981, 1499779.625140499556437 ], [ 676907.195417174487375, 1499755.148047749651596 ], [ 676923.736962911323644, 1499714.390770392492414 ], [ 676967.312382096541114, 1499715.928004710003734 ], [ 676967.000206667114981, 1499779.625140499556437 ] ], [ [ 676678.249698679894209, 1501067.80521248281002 ], [ 676684.847517843591049, 1501100.53035454521887 ], [ 676671.605562362121418, 1501058.069548569386825 ], [ 676678.249698679894209, 1501067.80521248281002 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "forest", "area_m2": 16378.733461510034 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 662806.332369346637279, 1518955.371024852618575 ], [ 662829.994514154619537, 1519054.828495111782104 ], [ 662985.402795748203062, 1519017.464734055101871 ], [ 662877.776030125562102, 1518933.899289180058986 ], [ 662806.332369346637279, 1518955.371024852618575 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "shrub", "area_m2": 15409.145569360026 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 681537.249923350289464, 1508164.569169728085399 ], [ 681500.585250908276066, 1508250.91462528007105 ], [ 681554.506814898457378, 1508266.029896673746407 ], [ 681705.735926090041175, 1508160.765499935019761 ], [ 681537.249923350289464, 1508164.569169728085399 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "forest", "area_m2": 31707.380177552026 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 666079.456715354695916, 1498621.801338319201022 ], [ 665881.544167892308906, 1498810.156507245497778 ], [ 665889.659187324810773, 1498932.325487980386242 ], [ 666109.496039158664644, 1498749.461734840180725 ], [ 666079.456715354695916, 1498621.801338319201022 ] ], [ [ 665939.09837651590351, 1498845.920465293806046 ], [ 665950.360904940869659, 1498838.004479568218812 ], [ 665947.215252238675021, 1498842.738592712441459 ], [ 665939.09837651590351, 1498845.920465293806046 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "shrub", "area_m2": 17140.635589355243 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 688499.792456669965759, 1510002.322354628704488 ], [ 688415.424851531512104, 1510075.742465380812064 ], [ 688540.140442073927261, 1510176.986254582880065 ], [ 688571.115944048855454, 1510104.255558355944231 ], [ 688499.792456669965759, 1510002.322354628704488 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "urban", "area_m2": 18453.759907851821 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 686847.158829868771136, 1518920.123887893743813 ], [ 686832.105152781819925, 1519003.64466648362577 ], [ 686966.382233890937641, 1519119.845046094385907 ], [ 686957.005533566582017, 1518953.363570426823571 ], [ 686847.158829868771136, 1518920.123887893743813 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "crop", "area_m2": 104892.29522998309 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 683270.558237907709554, 1505774.600623219972476 ], [ 683275.017506942269392, 1506043.246439959155396 ], [ 683407.270219261059538, 1506080.459774289978668 ], [ 683592.328553969389759, 1505992.825281009078026 ], [ 683737.319358899607323, 1506086.098324346821755 ], [ 683855.10899799503386, 1506049.254195635439828 ], [ 683785.020683099050075, 1505953.736186240101233 ], [ 683838.950597484712489, 1505910.392961831064895 ], [ 683532.873925900086761, 1505933.830470031360164 ], [ 683380.287773933261633, 1505755.347858084831387 ], [ 683270.558237907709554, 1505774.600623219972476 ] ], [ [ 683435.645238881814294, 1505944.197113213595003 ], [ 683353.206252796808258, 1505972.788004387635738 ], [ 683293.715012973872945, 1505825.591660164296627 ], [ 683383.211779862176627, 1505807.981257560197264 ], [ 683435.645238881814294, 1505944.197113213595003 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "forest", "area_m2": 1010341.8073072585 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 682984.025057601509616, 1528390.263516089878976 ], [ 682963.011377458344214, 1528462.952847435837612 ], [ 682773.378985417773947, 1528423.612902587512508 ], [ 682717.185116310603917, 1528505.038437531329691 ], [ 682559.116277813329361, 1528440.224731244146824 ], [ 682413.195402410812676, 1528539.872618820052594 ], [ 682413.751081788330339, 1528635.6352755993139 ], [ 682501.143623694195412, 1528671.683237480930984 ], [ 682396.62571649486199, 1528787.382158938562497 ], [ 681909.478790726047009, 1528878.72491356311366 ], [ 681986.738467147340998, 1529076.753229982219636 ], [ 681927.129419107688591, 1529191.50037494674325 ], [ 681838.209208844928071, 1529145.951845724135637 ], [ 681741.305846881587058, 1529228.807608179980889 ], [ 681797.455420788028277, 1529465.560346734011546 ], [ 682248.696739221806638, 1528990.203622845932841 ], [ 682412.406443177605979, 1528997.959904297022149 ], [ 682828.641714949160814, 1528775.68503771466203 ], [ 683088.888087318046018, 1528957.223804996581748 ], [ 683092.117943669902161, 1529069.18780396389775 ], [ 682990.400647866306826, 1529096.656715599121526 ], [ 682983.174022354767658, 1529222.355551247484982 ], [ 682796.610581414075568, 1529412.378933317260817 ], [ 682795.71341042779386, 1529559.311058000428602 ], [ 682588.290468126768246, 1529567.652155387680978 ], [ 682692.472243828349747, 1529691.165133842732757 ], [ 682662.756882712244987, 1529792.734967547934502 ], [ 682432.88366044301074, 1530005.986799004953355 ], [ 681997.813221517950296, 1530127.88609187072143 ], [ 682061.189337517367676, 1530193.178813482867554 ], [ 682293.882259776350111, 1530280.302458473946899 ], [ 682384.439632528810762, 1530159.953821547795087 ], [ 682386.080389365088195, 1530289.670088531915098 ], [ 682487.886832373333164, 1530324.149665448116139 ], [ 682472.199082164559513, 1530111.808612063992769 ], [ 682535.016651077196002, 1530047.801263506058604 ], [ 682646.405921432888135, 1530116.824428035877645 ], [ 682839.031558471964672, 1530078.940017304150388 ], [ 682726.756649789051153, 1529908.364353206008673 ], [ 682763.455137935234234, 1529783.428190470905975 ], [ 683039.387844500364736, 1529621.208217477891594 ], [ 683045.26876983162947, 1529306.847210401436314 ], [ 683130.394398056669161, 1529183.145538177108392 ], [ 683402.255983130540699, 1529382.975525567308068 ], [ 683502.911381683661602, 1529334.839204259216785 ], [ 683521.834041312336922, 1529207.404627367854118 ], [ 683319.508435028605163, 1528976.037745956098661 ], [ 683283.181286378065124, 1528815.258674108190462 ], [ 683335.688382175634615, 1528492.308905904414132 ], [ 682984.025057601509616, 1528390.263516089878976 ] ] ] ] } },
{ "type": "Feature", "properties": { "class": "barren", "area_m2": 12450.458965432246 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 656675.06483999104239, 1506191.815712222130969 ], [ 656704.108187349862419, 1506308.403827912872657 ], [ 656782.628333493485115, 1506281.558562342775986 ], [ 656759.250989409163594, 1506176.997435768833384 ], [ 656675.06483999104239, 1506191.815712222130969 ] ] ] ] } },
1:35