Find adresser i en radius eller et polygon
Hent alle adresser inden for en cirkel eller et tegnet område med cirkel og polygon, URL-encod polygonet korrekt og bladr gennem store resultater.
Et forsyningsselskab skal varsle alle husstande inden for 300 meter af et ledningsbrud. En kommune vil have adresserne i et lokalplanområde. En ejendomsmægler vil vise alle huse i et tegnet område på kortet. Det er rumlige søgninger, og /adgangsadresser og /adresser har to filtre til dem: cirkel og polygon.
Brug /adgangsadresser, når du vil have én række pr. bygningsindgang (en husstand pr. hus, et punkt pr. opgang). Brug /adresser, når du skal have hver lejlighed med.
Cirkel
Formatet er cirkel=længdegrad,breddegrad,radius_i_meter:
curl -s "https://api.danadresse.dk/adgangsadresser?cirkel=12.5683,55.6761,100&struktur=mini&per_side=5" \ -H "X-Api-Key: $DANADRESSE_API_KEY"
- Resultaterne er sorteret efter afstand, nærmeste først. Afstanden står ikke i svaret.
- Radius skal være mellem 1 og 50 000 meter. Andre værdier giver
400med kodeninvalid_cirkel. - Med
srid=25832angiver du centrum i UTM32-meter:cirkel=724400,6175700,100&srid=25832. Koordinaterne i svaret kommer så også i meter. - Du kan kombinere med
postnr,kommunekode,statusogmedtagnedlagte. Udenstatusogmedtagnedlagtefår du gældende og foreløbige adresser.
Polygon
polygon tager den ydre ring af et GeoJSON-polygon som JSON: [[[lon,lat],[lon,lat],…]]. Ringen skal have mindst tre punkter, og det er god skik at lukke den ved at gentage det første punkt til sidst.
Polygonet indeholder [, ] og ,, så det skal URL-encodes. Lad dit HTTP-bibliotek gøre det:
import json import os import requests ring = [ [12.5665, 55.6750], [12.5700, 55.6750], [12.5700, 55.6770], [12.5665, 55.6770], [12.5665, 55.6750], ] polygon = json.dumps([ring], separators=(",", ":")) s = requests.Session() s.headers["X-Api-Key"] = os.environ["DANADRESSE_API_KEY"] alle, side, per_side = [], 1, 100 while side <= 5: r = s.get( "https://api.danadresse.dk/adgangsadresser", params={"polygon": polygon, "struktur": "mini", "per_side": per_side, "side": side}, timeout=30, ) r.raise_for_status() rows = r.json() alle.extend(rows) if len(rows) < per_side: break side += 1 print(f"{len(alle)} adgangsadresser i polygonet") for a in alle[:3]: print(" ", a["betegnelse"])
Med curl kan du bruge -G --data-urlencode, så klarer curl encodingen:
curl -s -G "https://api.danadresse.dk/adgangsadresser" \ --data-urlencode 'polygon=[[[12.5665,55.6750],[12.5700,55.6750],[12.5700,55.6770],[12.5665,55.6750]]]' \ --data-urlencode "struktur=mini" \ --data-urlencode "per_side=3" \ -H "X-Api-Key: $DANADRESSE_API_KEY"
Regler for polygon:
- Kun den ydre ring bruges. Huller i polygonet (indre ringe) ignoreres.
- Færre end tre punkter eller ugyldig JSON giver
400med kodeninvalid_polygon. - Med
srid=25832er punkterne i UTM32-meter. - Resultaterne er sorteret efter id, så siderne aldrig overlapper. De er ikke sorteret efter afstand.
- Polygonet sendes i URL'en, og der findes ingen POST-variant. Forenkl store polygoner til få hundrede punkter, så URL'en holder sig under cirka 8 KB.
Bladr gennem resultaterne
per_side er højst 1000 (standard 100), og side starter ved 1. Der er ingen header med det samlede antal, så bliv ved, til du får en side med færre rækker end per_side.
På /adresser med cirkel eller polygon tæller per_side adresser (lejligheder), som på alle andre lister. Adresserne kommer bygning for bygning, med den nærmeste bygning først ved cirkel.
const url = new URL("https://api.danadresse.dk/adresser"); url.searchParams.set("cirkel", "12.5757,55.7326,40"); url.searchParams.set("struktur", "mini"); url.searchParams.set("per_side", "20"); const alle = []; for (let side = 1; side <= 10; side++) { url.searchParams.set("side", String(side)); const res = await fetch(url, { headers: { "X-Api-Key": process.env.DANADRESSE_API_KEY } }); if (!res.ok) throw new Error(`HTTP ${res.status}`); const rows = await res.json(); alle.push(...rows); if (rows.length < 20) break; // sidste side } console.log(`${alle.length} adresser i alt`); console.log(alle.slice(0, 3).map((a) => a.betegnelse).join("\n"));
Direkte på et kort
Med format=geojson får du en FeatureCollection, som Leaflet, MapLibre og QGIS kan læse direkte. crs angiver koordinatsystemet (EPSG:25832 med srid=25832), og properties har de samme felter som det almindelige JSON-svar (forkortet her):
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "EPSG:4326" } },
"features": [
{
"type": "Feature",
"geometry": { "type": "Point", "coordinates": [12.56823601, 55.67611003] },
"properties": {
"id": "0a3f507a-ec03-32b8-e044-0003ba298018",
"kvh": "01016152___3",
"status": 1,
"betegnelse": "Rådhuspladsen 3, 1550 København V"
}
}
]
}Se Formater: JSON, CSV, GeoJSON og NDJSON for de andre formater.
Store områder
En cirkel eller et polygon må højst dække 50 000 adgangsadresser (målt på det omsluttende rektangel). Er området større, svarer API'et 400 med koden area_too_large i stedet for at returnere et ufuldstændigt resultat. Del store områder op i mindre stykker (f.eks. én cirkel pr. postnummer-område eller et gitter af polygoner), eller tilføj postnr eller kommunekode, og fjern dubletter på id bagefter. Skal du bruge alle adresser i en kommune eller et postnummer, så brug filtrene kommunekode eller postnr i stedet.
Næste skridt
Relaterede guides
Markdown-kilde Fejl i guiden? Skriv til os API-reference (Swagger)