geo-l2-nyc-park-symdiff
Map (reference ← swipe → agent)
0:00
We're reconciling our official Parks polygons against an OSM-derived parks export. Both feed the public 'find a park' map and they disagree in dozens of places. `nyc_parks.gpkg` is a GeoPackage with official and OSM-derived park layers. I need every patch claimed by exactly one side, with adjacent disagreement patches merged together so that a shifted park's gain and loss form a single feature rather than two. One MultiPolygon per merged group with a `source` attribute whose value is exactly one of `parks_official`, `parks_osm`, or `both` (those exact strings, matching the input GPKG layer names). For each group I also need a label-anchor point that falls strictly inside the group's geometry.
Please write two GeoJSON FeatureCollections. First, `parks_disagreement.geojson` with the `source` column. Second, `park_label_anchors.geojson` with the same `source` column, with exactly one anchor per disagreement group in matching order.
0:00
System info
{
"adapter": "openrouter",
"model": "google/gemma-4-26b-a4b-it",
"base_url": "https://openrouter.ai/api/v1"
}
0:02
Bash
ls -F
nyc_parks.gpkg
0:03
Bash
ogrinfo nyc_parks.gpkg
INFO: Open of `nyc_parks.gpkg'
using driver `GPKG' successful.
1: parks_official (Multi Polygon)
2: parks_osm (Multi Polygon)
1:13
Write
/work/solve.py
content · 134 lines · py
import geopandas as gpd
import pandas as pd
from shapely.geometry import Point, MultiPolygon, Polygon
from shapely.ops import unary_union
def solve():
# Load the layers
official = gpd.read_file('nyc_parks.gpkg', layer='parks_official')
osm = gpd.read_file('nyc_parks.gpkg', layer='parks_osm')
# Ensure they are in the same CRS
if official.crs != osm.crs:
osm = osm.to_crs(official.crs)
# Get geometries (handle MultiPolygon/Polygon)
# We want to work with the union of all geometries in each layer to simplify topology
geom_official = official.geometry.unary_union
geom_osm = osm.geometry.unary_union
# Identify areas belonging to ONLY official
# official AND NOT osm
only_official = geom_official.difference(geom_osm)
# Identify areas belonging to ONLY osm
# osm AND NOT official
only_osm = geom_osm.difference(geom_official)
# The user wants: "adjacent disagreement patches merged together so that a
# shifted park's gain and loss form a single feature rather than two."
# This implies we look at the union of (only_official | only_osm) and
# then partition them into connected components.
disagreement_geom = only_official.union(only_osm)
# unary_union of a set of geometries often returns a single MultiPolygon or Polygon
# To get individual connected components, we can use the fact that
# shapely's unary_union on a collection of geometries produces a single geometry.
# However, if we want the individual pieces, we can use a trick with a list of parts.
# But even better, we can use the geometry itself if it's a MultiPolygon.
# To get "connected components", we can iterate or use a specific method.
# Actually, if we have a geometry that represents the union,
# its parts (if MultiPolygon) are the connected components.
# Let's create a list of individual parts.
if disagreement_geom.is_empty:
print("No disagreement found.")
return
# We need to make sure we have a MultiPolygon to iterate over.
if disagreement_geom.geom_type == 'Polygon':
parts = [disagreement_geom]
elif disagreement_geom.geom_type == 'MultiPolygon':
parts = list(disagreement_geom.geoms)
else:
# In case of some other geometry type, though unlikely here
parts = [disagreement_geom]
disagreement_features = []
anchor_features = []
for part in parts:
if part.is_empty:
continue
# Determine the source for this component
# A component is 'official' if it's entirely within 'only_official'
# A component is 'osm' if it's entirely within 'only_osm'
# Wait, the prompt says "a shifted park's gain and loss form a single feature".
# This means a single component can contain both official-only and osm-only parts.
# "One MultiPolygon per merged group with a source attribute whose value is exactly
# one of parks_official, parks_osm, or both"
# Check intersection with only_official and only_osm
part_official_area = part.intersection(only_official)
part_osm_area = part.intersection(only_osm)
# Determine source based on what it contains
# If it contains both, source is 'both'
# If it contains only official, source is 'parks_official'
# If it contains only osm, source is 'parks_osm'
# Note: Floating point issues might make area check tricky,
# but since these are derived from differences, they should be disjoint.
has_official = part_official_area.area > 1e-7
has_osm = part_osm_area.area > 1e-7
if has_official and has_osm:
source = 'both'
elif has_official:
source = 'parks_official'
elif has_osm:
source = 'parks_osm'
else:
continue # Should not happen
# Create the disagreement feature
# The user wants "One MultiPolygon per merged group".
# Since we have a 'part' which is a single connected component, we can use it.
# We might want to wrap it in a MultiPolygon if the part is a Polygon,
# or just use the part as is. GeoJSON handles both.
# Ensure it's MultiPolygon for consistency if desired, but Shapely/GeoPandas handles it.
# We'll store the whole 'part' geometry.
# Calculate anchor point: "strictly inside the group's geometry"
# representative_point() is a good choice as it's guaranteed to be inside.
anchor_point = part.representative_point()
disagreement_features.append({
'geometry': part,
'source': source
})
anchor_features.append({
'geometry': anchor_point,
'source': source
})
# Convert to GeoDataFrames
gdf_disagreement = gpd.GeoDataFrame(disagreement_features, crs=official.crs)
gdf_anchors = gpd.GeoDataFrame(anchor_features, crs=official.crs)
# Export
gdf_disagreement.to_file('parks_disagreement.geojson', driver='GeoJSON')
gdf_anchors.to_file('park_label_anchors.geojson', driver='GeoJSON')
print(f"Created parks_disagreement.geojson with {len(gdf_disagreement)} features.")
print(f"Created park_label_anchors.geojson with {len(gdf_anchors)} features.")
if __name__ == "__main__":
solve()
Wrote /work/solve.py (5480 chars).
1:27
Bash
python /work/solve.py
Created parks_disagreement.geojson with 128 features. Created park_label_anchors.geojson with 128 features.
/work/solve.py:17: DeprecationWarning: The 'unary_union' attribute is deprecated, use the 'union_all()' method instead. geom_official = official.geometry.unary_union /work/solve.py:18: DeprecationWarning: The 'unary_union' attribute is deprecated, use the 'union_all()' method instead. geom_osm = osm.geometry.unary_union
1:52
Bash
# Check the contents of the files
# Check the contents of the files
head -n 20 parks_disagreement.geojson
head -n 20 park_label_anchors.geojson
# Check if the source values are correct
python -c "import geopandas as gpd; gdf = gpd.read_file('parks_disagreement.geojson'); print(gdf['source'].unique())"
python -c "import geopandas as gpd; gdf = gpd.read_file('park_label_anchors.geojson'); print(gdf['source'].unique())"
# Check if the number of features match
python -c "import geopandas as gpd; print('disagreement:', len(gpd.read_file('parks_disagreement.geojson'))); print('anchors:', len(gpd.read_file('park_label_anchors.geojson')))"
{
"type": "FeatureCollection",
"name": "parks_disagreement",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::6539" } },
"features": [
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 976120.339470611419529, 208190.649332682136446 ], [ 976114.187855855911039, 208192.145153265853878 ], [ 976111.939916336210445, 208182.4546856568777 ], [ 976118.036096717347391, 208180.922449913778109 ], [ 976097.139423645450734, 208093.52630495899939 ], [ 976078.213242913945578, 208097.540316399332369 ], [ 976097.140466245939024, 208179.14423382768291 ], [ 976097.917522479314357, 208182.459390610049013 ], [ 976098.666866260813549, 208185.774556717718951 ], [ 976099.776958161150105, 208190.546928217459936 ], [ 976100.887049625394866, 208195.319299782247981 ], [ 976128.334020263748243, 208313.60858169500716 ], [ 976137.866224752389826, 208311.346538226061966 ], [ 976136.284309515496716, 208304.388332650822122 ], [ 976139.053389351116493, 208298.01160362601513 ], [ 976145.648372572148219, 208296.515641247591702 ], [ 976120.339470611419529, 208190.649332682136446 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 973613.811636136495508, 221249.625468718411867 ], [ 973604.119203533628024, 221253.345921740401536 ], [ 973598.936126156128012, 221244.968525294447318 ], [ 973581.3243738792371, 221253.501667929114774 ], [ 973599.177697178092785, 221290.510111251205672 ], [ 973595.107653490733355, 221293.827333519468084 ], [ 973603.811727412627079, 221310.07278855110053 ], [ 973600.324496070039459, 221316.049389105144655 ], [ 973609.027663706569001, 221330.254578690510243 ], [ 973643.42444042081479, 221386.310450395976659 ], [ 973686.564094336354174, 221484.734557566058356 ], [ 973736.314862110535614, 221436.620916957152076 ], [ 973618.103667557123117, 221247.218986210849835 ], [ 973613.811636136495508, 221249.625468718411867 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 970474.374750482500531, 230904.752159084804589 ], [ 970507.090996633865871, 231035.493451536720386 ], [ 970505.423346948809922, 231072.911608772847103 ], [ 970546.665130383335054, 231054.270748353534145 ], [ 970619.230885619530454, 231202.732835792703554 ], [ 970804.449562078691088, 231201.900771809014259 ], [ 970923.708570280112326, 230978.242510259937262 ], [ 970955.528607309213839, 230943.358181640389375 ], [ 971070.043705314747058, 230748.230699269421166 ], [ 971079.585213011130691, 230729.207227810402401 ], [ 971077.812900933786295, 230728.515953796653775 ], [ 971212.173558381269686, 230467.324459385039518 ], [ 971131.070816984516568, 230401.204963315103669 ], [ 971069.053877704194747, 230404.299002604850102 ], [ 970936.927106412709691, 230496.110717354546068 ], [ 970706.182117803487927, 230638.766327880177414 ], [ 970667.268218286102638, 230662.834201015415601 ], [ 970604.666044373414479, 230559.434634690958774 ], [ 970539.433651516097598, 230603.956727543438319 ], [ 970488.566390327061526, 230689.422097085043788 ], [ 970496.404637199593708, 230792.269428358587902 ], [ 970474.374750482500531, 230904.752159084804589 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 980810.159230764722452, 220472.746430936182151 ], [ 980789.803727209568024, 220491.548928114498267 ], [ 980805.481352122267708, 220494.716397831070935 ], [ 980830.494014980155043, 220503.238261068676366 ], [ 980836.264939661952667, 220506.34361030702712 ], [ 980840.159230764722452, 220502.746430936182151 ], [ 980907.036469708778895, 220555.267957273841603 ], [ 980909.883571600308642, 220551.064176650630543 ], [ 980810.159230764722452, 220472.746430936182151 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 980877.974328616517596, 220543.818355801486177 ], [ 980879.234876128728501, 220544.641510861722054 ], [ 980879.108593332930468, 220543.254812990198843 ], [ 980868.223297268501483, 220537.397407512413338 ], [ 980868.223693377687596, 220537.407445136283059 ], [ 980877.974328616517596, 220543.818355801486177 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 980456.847010934958234, 233261.736975025036372 ], [ 980492.349763486301526, 233341.520896082540276 ], [ 980496.309662899351679, 233348.989158239797689 ], [ 980501.846731130150147, 233351.356481813330902 ], [ 980507.35574928286951, 233351.355630947393365 ], [ 980696.472089471411891, 233232.663148134248331 ], [ 980742.921028527664021, 233203.509556815493852 ], [ 980744.885432118782774, 233195.639628943492426 ], [ 980744.109151181997731, 233187.770097341184737 ], [ 980741.727388845523819, 233181.103104681998957 ], [ 980680.946100598783232, 233075.381854857201688 ], [ 980544.034705301513895, 233159.126655017054873 ], [ 980566.935057880589738, 233198.034182656789199 ], [ 980456.847010934958234, 233261.736975025036372 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 985325.082452225964516, 197855.102487954951357 ], [ 985328.02131912659388, 197852.406574748369167 ], [ 985329.435382482246496, 197849.309830862592207 ], [ 985329.989916687947698, 197848.107565867598169 ], [ 985330.683161940891296, 197844.865057928924216 ], [ 985359.439234981080517, 197708.242533349985024 ], [ 985360.326604204718024, 197703.979910788300913 ], [ 985360.382249175338075, 197699.680817207990913 ], [ 985359.717008028994314, 197696.62041328867781 ], [ 985358.774529555579647, 197693.450697684340412 ], [ 985356.33492477692198, 197690.68167706055101 ], [ 985352.481337845092639, 197688.932716956915101 ], [ 985312.780442777904682, 197684.63185102850548 ], [ 985308.150482909171842, 197684.959546021651477 ], [ 985304.158090185956098, 197687.363951571314828 ], [ 985301.884549342794344, 197690.934288738179021 ], [ 985301.357644099392928, 197694.286103566730162 ], [ 985300.553455921588466, 197698.5851648869575 ], [ 985271.797800830681808, 197832.876045458775479 ], [ 985271.575792293995619, 197838.01309189706808 ], [ 985272.324191338615492, 197841.583559340186184 ], [ 985274.070663348422386, 197844.971903769415803 ], [ 985277.397445121896453, 197847.413056609017076 ], [ 985281.999575248220935, 197848.834139524173224 ], [ 985293.283156807767227, 197851.202767932612915 ], [ 985317.541474316152744, 197856.049413815926528 ], [ 985322.171390427742153, 197855.976751739246538 ], [ 985325.082452225964516, 197855.102487954951357 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 985238.521984601276927, 198003.599803877063096 ], [ 985239.686178895761259, 198008.700474371726159 ], [ 985242.458428913843818, 198012.015992519882275 ], [ 985247.226822123746388, 198014.675798461947124 ], [ 985252.023002772941254, 198015.76898654611432 ], [ 985259.120248562772758, 198017.190168276632903 ], [ 985269.572049560607411, 198019.303720115480246 ], [ 985315.95363105670549, 198028.596132313279668 ], [ 985318.615130184334703, 198028.341218126675813 ], [ 985326.682878552237526, 198025.791262914484832 ], [ 985356.187008816981688, 197894.743010897713248 ], [ 985350.864254697575234, 197889.204949916806072 ], [ 985348.341427496518008, 197887.966112987633096 ], [ 985296.636632941430435, 197877.471119740832364 ], [ 985289.456178048392758, 197876.013490535086021 ], [ 985277.146823928225785, 197873.535521415498806 ], [ 985272.101075688144192, 197873.025246247416362 ], [ 985267.859239557525143, 197874.518821923760697 ], [ 985264.86493856983725, 197877.105441050603986 ], [ 985262.924112317850813, 197880.60292997743818 ], [ 985261.4822411875939, 197885.95852387722698 ], [ 985238.854875652934425, 197998.572060402395437 ], [ 985238.521984601276927, 198003.599803877063096 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 984645.723118606139906, 198937.471659092581831 ], [ 984644.111667080316693, 198935.445586849586107 ], [ 984663.933447149582207, 198938.251235750009073 ], [ 984664.598857917939313, 198934.280045587220229 ], [ 984681.629863285343163, 198936.871657887619222 ], [ 984690.044296187581494, 198916.813950644078432 ], [ 984680.064112543826923, 198915.064986219280399 ], [ 984658.495812832727097, 198911.822073809977155 ], [ 984659.022610925487243, 198907.996614125062479 ], [ 984634.598857917939313, 198904.280045587220229 ], [ 984633.933447149582207, 198908.251235750009073 ], [ 984614.111667080316693, 198905.445586849586107 ], [ 984629.469813918811269, 198924.755329968669685 ], [ 984631.632150675868616, 198927.451408378634369 ], [ 984633.766764726140536, 198930.111053508153418 ], [ 984641.861659239861183, 198940.27599933167221 ], [ 984645.723118606139906, 198937.471659092581831 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 984666.950243290164508, 198971.863858042808715 ], [ 984669.081125102937222, 198966.784418457536958 ], [ 984663.766764726140536, 198960.111053508153418 ], [ 984663.370774441631511, 198959.617665192199638 ], [ 984659.43753563775681, 198962.427574231522158 ], [ 984666.950243290164508, 198971.863858042808715 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 983829.12535141594708, 199677.280434028449235 ], [ 983828.626328498707153, 199675.677388740004972 ], [ 983847.892901787417941, 199664.60141671349993 ], [ 983747.067585676210001, 199638.990865834057331 ], [ 983750.03360049566254, 199627.405096769740339 ], [ 983744.073335555731319, 199625.802166303590639 ], [ 983731.016194563126191, 199622.304869687330211 ], [ 983721.396715531009249, 199625.037555423215963 ], [ 983717.210368305095471, 199610.282264394045342 ], [ 983675.322662690421566, 199621.978226424718741 ], [ 983658.190576518187299, 199626.824232668237528 ], [ 983657.802434644196182, 199625.439786472270498 ], [ 983645.937498893705197, 199628.828351759671932 ], [ 983649.707970845629461, 199640.122501736652339 ], [ 983656.444922652561218, 199660.88917104457505 ], [ 983675.241788685205393, 199718.817259181290865 ], [ 983677.625909255468287, 199720.383823791169561 ], [ 983684.750428494531661, 199719.982893418462481 ], [ 983694.397670216509141, 199720.85706384232617 ], [ 983696.39957691472955, 199721.567374978476437 ], [ 983686.444922652561218, 199690.88917104457505 ], [ 983679.707970845629461, 199670.122501736652339 ], [ 983675.937498893705197, 199658.828351759671932 ], [ 983687.802434644196182, 199655.439786472270498 ], [ 983688.190576518187299, 199656.824232668237528 ], [ 983705.322662690421566, 199651.978226424718741 ], [ 983747.210368305095471, 199640.282264394045342 ], [ 983751.396715531009249, 199655.037555423215963 ], [ 983761.016194563126191, 199652.304869687330211 ], [ 983774.073335555731319, 199655.802166303590639 ], [ 983780.03360049566254, 199657.405096769740339 ], [ 983777.067585676210001, 199668.990865834057331 ], [ 983825.089681485085748, 199681.188916636048816 ], [ 983828.460053070215508, 199678.91993255369016 ], [ 983829.12535141594708, 199677.280434028449235 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 983400.979129748302512, 199436.396352039650083 ], [ 983391.581292824004777, 199436.323816345568048 ], [ 983382.793400738504715, 199437.817883259762311 ], [ 983374.365970879327506, 199441.315757602249505 ], [ 983366.243527597049251, 199445.906615001178579 ], [ 983358.703293892089278, 199451.590444983390626 ], [ 983353.07591579912696, 199457.820702203636756 ], [ 983348.696069058729336, 199464.852441319031641 ], [ 983345.730080690118484, 199472.539923306932906 ], [ 983343.762126500252634, 199481.138194442231907 ], [ 983342.625831827637739, 199489.554269461601507 ], [ 983343.43017447704915, 199500.265553665056359 ], [ 983346.396837920998223, 199510.831025209394284 ], [ 983394.999156652833335, 199664.394541062269127 ], [ 983403.53866608813405, 199697.220414639799856 ], [ 983430.381491055130027, 199934.216457398055354 ], [ 983431.989483389421366, 199938.260471439687535 ], [ 983433.846927154809237, 199941.029320564179216 ], [ 983436.813210715656169, 199943.033038665133063 ], [ 983440.694282560842112, 199944.271632623829646 ], [ 983444.49215282057412, 199944.417238540569087 ], [ 983448.373136252048425, 199942.996221260720631 ], [ 983457.348589080618694, 199937.438882127025863 ], [ 983433.53866608813405, 199727.220414639799856 ], [ 983424.999156652833335, 199694.394541062269127 ], [ 983376.396837920998223, 199540.831025209394284 ], [ 983373.43017447704915, 199530.265553665056359 ], [ 983372.625831827637739, 199519.554269461601507 ], [ 983373.762126500252634, 199511.138194442231907 ], [ 983375.730080690118484, 199502.539923306932906 ], [ 983378.696069058729336, 199494.852441319031641 ], [ 983383.07591579912696, 199487.820702203636756 ], [ 983388.703293892089278, 199481.590444983390626 ], [ 983396.243527597049251, 199475.906615001178579 ], [ 983404.365970879327506, 199471.315757602249505 ], [ 983412.793400738504715, 199467.817883259762311 ], [ 983421.581292824004777, 199466.323816345568048 ], [ 983430.979129748302512, 199466.396352039650083 ], [ 983439.046345237176865, 199467.780526889488101 ], [ 983446.725467447540723, 199469.711213337723166 ], [ 983455.208604566054419, 199473.754991280933609 ], [ 983462.893999399268068, 199479.461942106834613 ], [ 983453.596976647968404, 199468.81997596391011 ], [ 983443.034469418111257, 199458.181876628805185 ], [ 983433.303694051457569, 199449.766169447713764 ], [ 983425.208604566054419, 199443.754991280933609 ], [ 983416.725467447540723, 199439.711213337723166 ], [ 983409.046345237176865, 199437.780526889488101 ], [ 983400.979129748302512, 199436.396352039650083 ] ], [ [ 983366.328096905141138, 199484.452769567433279 ], [ 983358.344125218573026, 199484.817391824937658 ], [ 983357.178880540188402, 199459.970100438542431 ], [ 983365.024267979664728, 199460.115545426611789 ], [ 983373.091396066593006, 199459.240859794022981 ], [ 983374.256624494679272, 199484.088151933130575 ], [ 983366.328096905141138, 199484.452769567433279 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 982609.735945890890434, 225333.134602728940081 ], [ 982694.480848090024665, 225416.670836169243557 ], [ 982849.183739696862176, 225628.193817351653706 ], [ 982929.135733300819993, 225706.26614544147742 ], [ 983108.282654478447512, 225830.495010526676197 ], [ 983270.789942665374838, 226080.202578958444064 ], [ 983311.021920617669821, 226245.394474462547805 ], [ 983308.235734076355584, 226246.73828183466685 ], [ 983355.753707195515744, 226223.819858520961134 ], [ 983409.617651306791231, 226330.458572666801047 ], [ 983360.71527070121374, 226353.631976225238759 ], [ 983361.796049586148001, 226353.119826817652211 ], [ 983518.754858422325924, 226493.458197667496279 ], [ 983612.134064650163054, 226646.220939688122598 ], [ 983719.463653039536439, 226584.09935325619881 ], [ 983504.51657547429204, 226332.860076751734596 ], [ 983432.790805589058436, 226192.411527934222249 ], [ 983357.602611082140356, 226048.866485710052075 ], [ 983378.392859567771666, 225872.783002020500135 ], [ 983278.724734659888782, 225761.591991308989236 ], [ 983145.102264977409504, 225591.745117384620244 ], [ 982847.560776237165555, 225337.455263483512681 ], [ 982801.344901996897534, 225390.541461665881798 ], [ 982686.93990840902552, 225283.798665642854758 ], [ 982609.735945890890434, 225333.134602728940081 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 986749.696090982295573, 199601.223948443424888 ], [ 986698.687847696826793, 199598.194808790402021 ], [ 986709.247450949857011, 199622.824613181117456 ], [ 986752.301429364248179, 199606.397708912641974 ], [ 986749.696090982295573, 199601.223948443424888 ] ] ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 988668.805307218804955, 220630.515600972255925 ], [ 988681.353765923762694, 220623.668421461421531 ], [ 988671.856439708033577, 220606.652318514854414 ], [ 988664.574210504535586, 220593.6807231430721 ], [ 988656.018291556974873, 220578.340731581556611 ], [ 988648.680682205012999, 220565.186964380613063 ], [ 988640.180113029433414, 220549.992721975606401 ], [ 988632.787109980126843, 220536.729649696906563 ], [ 988624.120384493726306, 220521.243916362029267 ], [ 988618.804050957667641, 220511.733856927545276 ], [ 988613.153140292386524, 220514.428907192137558 ], [ 988600.216830995632336, 220521.494652160035912 ], [ 988594.371965841506608, 220524.59043877228396 ], [ 988584.122686693561263, 220529.980740012775641 ], [ 988566.394214592641219, 220539.304514562798431 ], [ 988549.552186464308761, 220548.118392414035043 ], [ 988545.564824062283151, 220541.523251644975971 ], [ 988536.455054459627718, 220525.017337670811685 ], [ 988521.613579435274005, 220498.12691578277736 ], [ 988509.264117522863671, 220475.754674622497987 ], [ 988496.471716170664877, 220451.925028887577355 ], [ 988473.341464686323889, 220464.709093498415314 ], [ 988466.416226004483178, 220468.642689608095679 ], [ 988458.161349084577523, 220473.30472382370499 ], [ 988444.310940486728214, 220480.844026680919342 ], [ 988438.022857683245093, 220484.267674326052656 ], [ 988434.477149134851061, 220486.234462867345428 ], [ 988430.155828990507871, 220488.565451673843199 ], [ 988416.166896837530658, 220496.396213484258624 ], [ 988411.817869590595365, 220498.800067485513864 ], [ 988408.078265551128425, 220500.839693305955734 ], [ 988403.701541720307432, 220503.243544012977509 ], [ 988390.322023542015813, 220510.855825084436219 ], [ 988385.169680167804472, 220513.696746873582015 ], [ 988381.457791233202443, 220515.663514854502864 ], [ 988377.579695355030708, 220517.739555151259992 ], [ 988374.615713630570099, 220519.378551370900823 ], [ 988160.157439596951008, 220638.115730988036375 ], [ 988153.869431795319542, 220641.575885838101385 ], [ 988147.830719614750706, 220644.96321569418069 ], [ 988141.459603784140199, 220648.532660446799127 ], [ 988125.22710950137116, 220657.674831043550512 ], [ 988214.443803834612481, 220818.396719128009863 ], [ 988221.117003631545231, 220830.457247282814933 ], [ 988226.627242007874884, 220840.36801938212011 ], [ 988234.103431910276413, 220853.849583263043314 ], [ 988235.875568807474338, 220857.019575292069931 ], [ 988263.104918991099112, 220842.26855939917732 ], [ 988410.387929652119055, 220761.411344665655633 ], [ 988424.78640805662144, 220787.099324878683547 ], [ 988644.064684687182307, 220665.195648751046974 ], [ 988638.94211177714169, 220656.596452960046008 ], [ 988634.539472816511989, 220649.163255290419329 ], [ 988666.11833303491585, 220631.972445411985973 ], [ 988668.805307218804955, 220630.515600972255925 ] ] ] } },
{
"type": "FeatureCollection",
"name": "park_label_anchors",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::6539" } },
"features": [
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 976123.089804500807077, 208245.917470514919842 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 973656.8238316164352, 221358.282514543243451 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 970748.290847553638741, 230848.510793721710797 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 980877.31159951724112, 220528.703893478843383 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 980873.172862338135019, 220540.331129063240951 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 980625.989219367387705, 233218.086352474871092 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 985315.732287921477109, 197770.5592894043657 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 985296.892514731967822, 197946.657535650068894 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 984657.34512197598815, 198920.784640306374058 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 984664.259109440492466, 198964.605996344529558 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 983810.852320208214223, 199666.79614127377863 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 983409.576525387936272, 199679.394541062269127 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 983280.548864506650716, 225960.824743865290657 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 986718.250257679028437, 199614.611161046894267 ] } },
{ "type": "Feature", "properties": { "source": "parks_official" }, "geometry": { "type": "Point", "coordinates": [ 988385.240841239807196, 220652.879854125232669 ] } },
<ArrowStringArray>
['parks_official', 'parks_osm']
Length: 2, dtype: str
<ArrowStringArray>
['parks_official', 'parks_osm']
Length: 2, dtype: str
disagreement: 128
anchors: 128
2:01
Bash
python -c "import geopandas as gpd; gdf = gpd.read_file('parks_disagreement.geoj...
python -c "import geopandas as gpd; gdf = gpd.read_file('parks_disagreement.geojson'); print(gdf['source'].unique())"
<ArrowStringArray> ['parks_official', 'parks_osm'] Length: 2, dtype: str
2:48
Write
Invalid JSON arguments: Unterminated string starting at: line 1 column 13 (char 12)