plot-finder¶
Find land parcels across Europe by id, address or coordinates โ one API, one object.
plot-finder wraps the official open cadastre of each supported country behind a
single Plot class. You pick the country, pass a query, and get
back a normalized parcel with geometry, area, centroid and country-specific
attributes.
from plot_finder import Plot
plot = Plot(country="PL", plot_id="141201_1.0001.6509")
plot.voivodeship # 'mazowieckie' โ country attribute (from the Poland class)
plot.area # 6509.0 โ shared, computed from geometry
plot.centroid # (x, y)
Supported countries¶
Coordinates are lon/lat (EPSG:4326) everywhere; geometry is returned in
EPSG:4326 by default (set srid= for another output CRS).
| Country | country |
Attribute class | Data source | Coordinates |
|---|---|---|---|---|
| Poland ๐ต๐ฑ | "PL" |
Poland |
ULDK / GUGiK | lon/lat (EPSG:4326) |
| France ๐ซ๐ท | "FR" |
France |
IGN apicarto cadastre | lon/lat (EPSG:4326) |
| Spain ๐ช๐ธ | "ES" |
Spain |
Direcciรณn General del Catastro | lon/lat (EPSG:4326) |
| Netherlands ๐ณ๐ฑ | "NL" |
Netherlands |
PDOK Kadaster | lon/lat (EPSG:4326) |
| Switzerland ๐จ๐ญ | "CH" |
Switzerland |
swisstopo / geo.admin.ch | lon/lat (EPSG:4326) |
| Estonia ๐ช๐ช | "EE" |
Estonia |
Maa-amet | lon/lat (EPSG:4326) |
| Cyprus ๐จ๐พ | "CY" |
Cyprus |
DLS (Lands & Surveys) | lon/lat (EPSG:4326) |
| Lithuania ๐ฑ๐น | "LT" |
Lithuania |
Registrลณ centras (geoportal.lt) | lon/lat (EPSG:4326) |
| Latvia ๐ฑ๐ป | "LV" |
Latvia |
VZD (kadastrs.lv) | lon/lat (EPSG:4326) |
| Portugal ๐ต๐น | "PT" |
Portugal |
DGT SNIC | lon/lat (EPSG:4326) |
| Slovenia ๐ธ๐ฎ | "SI" |
Slovenia |
GURS (e-prostor) | lon/lat (EPSG:4326) |
| Italy ๐ฎ๐น | "IT" |
Italy |
Agenzia delle Entrate | lon/lat (EPSG:4326) |
| Germany ๐ฉ๐ช | "DE" |
Germany |
state ALKIS / INSPIRE (10 states) | lon/lat (EPSG:4326) |
| Norway ๐ณ๐ด | "NO" |
Norway |
Kartverket (Matrikkelen) | lon/lat (EPSG:4326) |
| Denmark ๐ฉ๐ฐ | "DK" |
Denmark |
DAWA / SDFI (Matriklen) | lon/lat (EPSG:4326) |
| Belgium ๐ง๐ช | "BE" |
Belgium |
FPS Finance CadGIS | lon/lat (EPSG:4326) |
Installation¶
Requirements: Python 3.10+ ยท pydantic httpx shapely pyproj
How it works¶
country is required and selects which cadastre to query. Every country has
a matching class in plot_finder.countries (Poland, France, Spain,
Netherlands) that:
- defines the country-specific attributes (e.g.
voivodeship,department), - knows how to fetch a parcel from that country's API.
The Plot sources those attributes from the matching class and exposes them
flat, next to the shared fields:
Plot(country="FR", x=-0.5792, y=44.8378).department # from the France class
Plot(country="ES", x=-3.6999, y=40.4211).province # from the Spain class
Three ways to query¶
Every country supports the same three entry points (details and formats differ per country โ see each page):
Plot(country="PL", plot_id="...") # by cadastral id / reference
Plot(country="PL", x=639231, y=486743) # by coordinates
Plot(country="PL", address="Warszawa, ...") # by address (geocoded)
Addresses are geocoded with OpenStreetMap Nominatim;
you must provide at least one of plot_id, address, or both x and y.
Shared properties¶
Regardless of country, every Plot exposes:
| Property | Type | Description |
|---|---|---|
geojson |
dict |
Geometry as GeoJSON |
area |
float |
Geodesic area in mยฒ (WGS84 ellipsoid) |
centroid |
(float, float) |
Centroid of the geometry |
bbox |
(float, float, float, float) |
Bounding box (minx, miny, maxx, maxy) |
Coordinate systems¶
Input coordinates are lon/lat (EPSG:4326) for every country. Geometry is
returned as geojson in EPSG:4326 by default; set srid for another output CRS:
Plot(country="PL", x=21.0122, y=52.2297) # geometry in EPSG:4326
Plot(country="PL", x=21.0122, y=52.2297, srid=2180) # geometry in EPSG:2180
Serialization¶
Plot is a Pydantic v2 model, so a parcel round-trips to plain data:
plot.model_dump() # flat dict: common fields + country attributes + computed props
plot.model_dump_json() # JSON string
Errors¶
from plot_finder import (
PlotNotFoundError, # no parcel for the given query
AddressNotFoundError, # geocoder returned no result
ULDKError, # Poland (ULDK) API failure
IGNError, # France (IGN) API failure
CatastroError, # Spain (Catastro) API failure
KadasterError, # Netherlands (PDOK Kadaster) API failure
GeoAdminError, # Switzerland (geo.admin.ch) API failure
MaaametError, # Estonia (Maa-amet) API failure
DLSError, # Cyprus (DLS) API failure
RCError, # Lithuania (geoportal.lt) API failure
VZDError, # Latvia (VZD) API failure
DGTError, # Portugal (DGT SNIC) API failure
GURSError, # Slovenia (GURS) API failure
AdEError, # Italy (Agenzia delle Entrate) API failure
ALKISError, # Germany (state ALKIS) API failure
KartverketError, # Norway (Kartverket) API failure
DAWAError, # Denmark (DAWA / SDFI) API failure
CadGISError, # Belgium (FPS Finance CadGIS) API failure
)
See the reference for the full field list and model details.