plot-finder
One Plot class per country — geometry, area and the local cadastral attributes.
Installation
pip install plot-finder
Quick start
Every country supports the same three lookup modes (where the cadastre exposes them):
from plot_finder import Plot
Plot(country="PL", plot_id="141201_1.0001.6509") # by cadastral id
Plot(country="PL", x=21.0122, y=52.2297) # by coordinates
Plot(country="PL", address="Warszawa, Marszalkowska 1") # by address
Coordinates are lon/lat in EPSG:4326. Set srid= for another output CRS.
Every Plot has:
plot.geojson # geometry as GeoJSON
plot.bbox # bounding box (minx, miny, maxx, maxy)
plot.centroid # (x, y)
plot.area # m²
plot.datasource # which cadastre answered
Coverage
| Country | id | coords | address | Notes |
|---|---|---|---|---|
| 🇵🇱 Poland | ✓ | ✓ | ✓ | |
| 🇫🇷 France | ✓ | ✓ | ✓ | |
| 🇪🇸 Spain | ✓ | ✓ | ✓ | |
| 🇳🇱 Netherlands | ✓ | ✓ | ✓ | |
| 🇨🇭 Switzerland | ✓ | ✓ | ✓ | |
| 🇪🇪 Estonia | ✓ | ✓ | ✓ | |
| 🇨🇾 Cyprus | ✓ | ✓ | ✓ | |
| 🇱🇹 Lithuania | ✓ | ✓ | ✓ | |
| 🇱🇻 Latvia | ✓ | ✓ | ✓ | |
| 🇵🇹 Portugal | ✓ | ✓ | — | partial coverage |
| 🇸🇮 Slovenia | ✓ | ✓ | — | |
| 🇮🇹 Italy | — | ✓ | ✓ | excl. Trento & Bolzano |
| 🇩🇪 Germany | — | ✓ | ✓ | 10 of 16 states |
| 🇳🇴 Norway | ✓ | ✓ | ✓ | |
| 🇩🇰 Denmark | ✓ | ✓ | ✓ | |
| 🇧🇪 Belgium | ✓ | ✓ | ✓ |
🇵🇱 Poland
Attributes: voivodeship, county, commune, region, parcel
plot = Plot(country="PL", plot_id="141201_1.0001.6509")
plot = Plot(country="PL", x=21.0122, y=52.2297)
plot = Plot(country="PL", address="Warszawa, Marszalkowska 1")
print(plot.voivodeship, plot.commune, plot.area)
🇫🇷 France
Attributes: department, insee, commune, section, numero
plot = Plot(country="FR", plot_id="33063000KE0078")
plot = Plot(country="FR", x=-0.5792, y=44.8378)
plot = Plot(country="FR", address="30 Rue Sainte-Catherine, Bordeaux")
print(plot.department, plot.commune, plot.area)
🇪🇸 Spain
Attributes: province, municipality
plot = Plot(country="ES", plot_id="0749407VK4704H") # cadastral reference
plot = Plot(country="ES", x=-3.6999, y=40.4211)
plot = Plot(country="ES", address="Calle de Alcalá 1, Madrid")
print(plot.province, plot.municipality, plot.area)
🇳🇱 Netherlands
Attributes: municipality, section, parcel_number
plot = Plot(country="NL", plot_id="AKM01 K 3785") # cadastral designation
plot = Plot(country="NL", x=4.6255, y=52.1987)
plot = Plot(country="NL", address="Dam 1, Amsterdam")
print(plot.municipality, plot.section, plot.area)
🇨🇭 Switzerland
Attributes: canton, municipality, egrid, parcel_number
plot = Plot(country="CH", plot_id="CH119192997709") # EGRID
plot = Plot(country="CH", x=8.5417, y=47.3769)
plot = Plot(country="CH", address="Bundesplatz 3, Bern")
print(plot.canton, plot.municipality, plot.area)
🇪🇪 Estonia
Attributes: county, municipality, settlement
plot = Plot(country="EE", plot_id="78401:114:0086") # katastritunnus
plot = Plot(country="EE", x=24.7536, y=59.437)
plot = Plot(country="EE", address="Viru väljak 4, Tallinn")
print(plot.county, plot.municipality, plot.area)
🇨🇾 Cyprus
Attributes: district_code, sheet, plan, parcel_number
plot = Plot(country="CY", plot_id="1000-21/450301-1-1-290")
plot = Plot(country="CY", x=33.3396, y=35.1787)
plot = Plot(country="CY", address="Nicosia, Cyprus")
print(plot.district_code, plot.parcel_number, plot.area)
🇱🇹 Lithuania
Attributes: cadastral_zone, municipality_code, purpose
plot = Plot(country="LT", plot_id="0101/0041:0121") # kadastro numeris
plot = Plot(country="LT", x=25.27904, y=54.68449)
plot = Plot(country="LT", address="Gedimino pr. 1, Vilnius")
print(plot.cadastral_zone, plot.purpose, plot.area)
🇱🇻 Latvia
Attributes: territory_code, group_code, parcel_number
plot = Plot(country="LV", plot_id="01000540120") # kadastra apzīmējums
plot = Plot(country="LV", x=24.0917, y=56.9276)
plot = Plot(country="LV", address="Rīga, Latvia")
print(plot.territory_code, plot.parcel_number, plot.area)
🇵🇹 Portugal
Attributes: municipality, parish, district_code
Partial coverage — no big cities or northern regions. Address lookup not supported.
plot = Plot(country="PT", plot_id="AAA000825807") # NIC
plot = Plot(country="PT", x=-7.7079, y=40.4210)
print(plot.municipality, plot.parish, plot.area)
🇸🇮 Slovenia
Attributes: ko_code, ko_name, municipality, parcel_number
Address lookup not supported.
plot = Plot(country="SI", plot_id="1725-3283/1") # KO code + parcel number
plot = Plot(country="SI", x=14.50582, y=46.05144)
print(plot.ko_name, plot.municipality, plot.area)
🇮🇹 Italy
Attributes: comune_code, foglio, particella
Coordinates and address only — no id lookup. Excludes Trento & Bolzano.
plot = Plot(country="IT", x=12.4922, y=41.8902)
plot = Plot(country="IT", address="Piazzale degli Uffizi, Firenze")
print(plot.comune_code, plot.foglio, plot.particella, plot.area)
🇩🇪 Germany
Attributes: land, gemarkung, flur, parcel_number
Coordinates and address only — no id lookup. 10 of 16 states (free ALKIS).
plot = Plot(country="DE", x=6.9583, y=50.9413)
plot = Plot(country="DE", address="Domkloster 4, Köln")
print(plot.land, plot.gemarkung, plot.parcel_number, plot.area)
🇳🇴 Norway
Attributes: municipality, municipality_code, gnr, bnr
plot = Plot(country="NO", plot_id="0301-209/494") # kommunenr-gnr/bnr
plot = Plot(country="NO", x=10.7330, y=59.9116)
plot = Plot(country="NO", address="Karl Johans gate 1, Oslo")
print(plot.municipality, plot.gnr, plot.bnr, plot.area)
🇩🇰 Denmark
Attributes: municipality, ejerlav, matrikelnr
plot = Plot(country="DK", plot_id="2000179-7000q") # ejerlavkode-matrikelnr
plot = Plot(country="DK", x=12.5683, y=55.6761)
plot = Plot(country="DK", address="Rådhuspladsen 1, København")
print(plot.municipality, plot.ejerlav, plot.matrikelnr, plot.area)
🇧🇪 Belgium
Attributes: nis_code, section, parcel_number
plot = Plot(country="BE", plot_id="41009A0063/00D000") # capakey
plot = Plot(country="BE", x=4.40262, y=51.21945)
plot = Plot(country="BE", address="Grote Markt 1, Antwerpen")
print(plot.nis_code, plot.section, plot.parcel_number, plot.area)
Documentation
Full docs: ernestilchenko.github.io/plot-finder
License
MIT
Metadata
Release files for plot-finder 1.11.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| plot_finder-1.11.0.tar.gz | 23.1 kB | Without provenance | Details for plot_finder-1.11.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| plot_finder-1.11.0-py3-none-any.whl | Python 3 | none | any | Details for plot_finder-1.11.0-py3-none-any.whl |
Total release size: 55.9 kB
Release files / plot_finder-1.11.0.tar.gz
| Download URL | plot_finder-1.11.0.tar.gz |
|---|---|
| Size | 23.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b298f8671311c8a4b83221dafd04f91e9c7e483346195152185ec442f3a89ace
|
|
BLAKE2b-256 checksum How to use checksums |
df166706a22db6ffdc5336dd021c561622ad6c08ae942c41632a67404e19147d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Release files / plot_finder-1.11.0-py3-none-any.whl
| Download URL | plot_finder-1.11.0-py3-none-any.whl |
|---|---|
| Size | 32.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
50f9c9924925573badeb6df31d682fb0aea5bdb3e86586e6b8073ab5b5bf0c16
|
|
BLAKE2b-256 checksum How to use checksums |
e4e4a5ffdd72adbb5b7dd3be2b8e769bf8cede717e7c9717bb9319bd665f46dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Security for plot-finder 1.11.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.