geo-l2-bangkok-landuse-intersect

Status: done
Score: 87
Duration: 1:36
Cost: 0.41¢
Model: google/gemma-4-26b-a4b-it

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