# 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.
>
> https://danadresse.dk/guides/adresser-i-radius-og-polygon · verified 2026-11-02
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`:

```bash id=cirkel-curl run=live expect="betegnelse"
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 `400` med koden `invalid_cirkel`.
- Med `srid=25832` angiver 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`, `status` og `medtagnedlagte`. Uden `status` og `medtagnedlagte` få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:

```python id=polygon-python run=live expect="adgangsadresser i polygonet"
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:

```bash id=polygon-curl run=live expect="betegnelse"
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 `400` med koden `invalid_polygon`.
- Med `srid=25832` er 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`.

```js id=cirkel-node run=live expect="i alt"
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):

```json id=geojson-svar run=no
{
  "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](/guides/formater-json-csv-geojson) 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

- [Find adressen ud fra en GPS-position](/guides/reverse-geokodning-gps)
- [Paginering med side og per_side](/guides/paginering)
- [Koordinater og srid 4326/25832](/guides/koordinater-srid)
