Aadressivaliku juhend

Balti aadressikataloog (Eesti, Läti ja Leedu): päri aadress ID järgi, hangi aadressi ülemobjektide ahel ja sirvi aadressipuud kaskaad-valikutena. Riigi valib parameeter c=ee|lv|lt (vaikimisi Eesti).

Päris näited. Päringud ja vastused on tehtud teenuse vastu https://pump.elemroot.com/Gazetter. Teenus tagastab alati JSON-i ja iga vastus sisaldab välja success.
Sisukord

Endpointid ja marsruutimine

Baas: https://pump.elemroot.com/Gazetter. Igal alateenusel on oma tee:

TeeOtstarveParameetrid
/layer/getDescription/Täisaadress ID järgiid
/layer/getFillInfo/Ülemobjektide ahelid
/layer/currentLayer/Aadressinimekiri tasemell, p, g, c

Kõik kolm endpointi võtavad lisaks riigiparameetri c (ee / lv / lt, vaikimisi ee): vt riikide peatükki.

Sama saab kutsuda ka parameetriga layer:

https://pump.elemroot.com/Gazetter/?key=docs_382d376eaaa6d004b7b93b7d&layer=getdescription&id=3069760

Väärtused: getdescription, getfillinfo, currentlayer. Ilma layer-ita tagastatakse {"success": false}.

Kaks vormi käituvad erinevalt. Tee-vorm (/layer/currentLayer/) on tõstutundlik: /layer/CURRENTLAYER/ annab 404. Parameetri-vorm (?layer=…) on tõstutundetu. Lõpukaldkriips ei ole kummaski kohustuslik.

Mõlemad vormid võtavad vastu ka POST-i (application/x-www-form-urlencoded). NB: key peab ka siis olema URL-is, mitte ainult vormikehas.

Riigid: Eesti, Läti, Leedu (parameeter c)

Gazetteer katab kolm riiki. Riigi valib parameeter c: ee (vaikimisi), lv või lt; tundmatu väärtus käitub nagu ee. Parameeter kehtib kõigil kolmel endpointil ja ID-d on riigisisesed: sama id tähendab eri riikides eri objekti, seega anna c kaasa ka getDescription / getFillInfo päringutele.

Päring: Läti 1. tase
curl "https://pump.elemroot.com/Gazetter/layer/currentLayer/?key=docs_382d376eaaa6d004b7b93b7d&l=1&c=lv"
Vastus (lühendatud)
{
  "success": true,
  "addressList": [
    { "id": 1100016630, "nimi": "Aizkraukles nov." },
    { "id": 1100003028, "nimi": "Jelgava" },
    { "id": 1100003003, "nimi": "Rīga" }
  ]
}

Tasemed riigiti

Tasemeskaala l=1–6 on kõigil riikidel sama, aga sisu erineb ja tasemed ei ole omavahel samatähenduslikud. Kõige olulisem erinevus: Läti ja Leedu 1. tase on omavalitsus, Eestis on omavalitsus 2. tasemel: Lätis kaotati rajoonid 2009 ja Leedu apskritis ei kuulu ametlikku aadressi, seega maakonna-tasandit neil ei ole. Sama loogika kehtib 2. tasemel: Läti pagasts ja Leedu seniūnija ei ole omavalitsused, vaid omavalitsuse territoriaalsed allüksused.

lEestiLätiLeedu
1MaakondNovads / valstspilsētaSavivaldybė
2OmavalitsusPagasts / novadu pilsētaSeniūnija (linnades puudub)
3AsustusüksusCiemsGyvenamoji vietovė (miestas / kaimas / miestelis / viensėdis)
4Tänav / väikekohtIelaGatvė
5MajaMāja (number või nimi)Namas
6KorterDzīvoklisButas

Vormi ehitades arvesta riikide eripäradega:

ID-d ja väljad LV/LT vastustes

Parameetrite koondtabel

ParamTähendusVõimalikud väärtused / näideVaikimisi
id *Objekti AADRESS_ID (getDescription, getFillInfo)3069760—
cRiik: tundmatu väärtus käitub nagu eeee, lv, ltee
callbackJSONP callbackfunktsiooni nimi, nt cb—
key *API-võti (ilma võtmeta 403)docs_…—
l *Tase 1…6: tasemetel 5-6 on p või g kohustuslik1 maakond … 4 tänav/väikekoht, 5 maja, 6 korter—
pVanema AADRESS_ID (üks tase üleval)2822791—
gVanavanema AADRESS_ID: arvestatakse ainult siis, kui p puudub2822791—

Aadress AADRESS_ID järgi (getDescription)

Tagastab kogu aadressikirje antud id (= AADRESS_ID) järgi. See on otsetee, kui sul on aadressi ID juba olemas: näiteks geokodeerimise väljundist (AADRESS_ID / <aid>; Eesti ID-d lähevad sisse muutmata, LV/LT ID-d vajavad tasandiprefiksit, vt eespool).

Päring
curl "https://pump.elemroot.com/Gazetter/layer/getDescription/?key=docs_382d376eaaa6d004b7b93b7d&id=3069760"
Vastus
{
  "object": {
    "R_ID": 3069760,
    "AADRESS_ID": 3069760,
    "KOODAADRESS": null,
    "POSTIINDEKS": "60532",
    "E": 26.74628263,
    "N": 58.39577394,
    "AADRESS_ID_YLES": 3040077,
    "A_LOOMISE_AEG": null,
    "A_MUUTMISE_AEG": null,
    "A_STAATUS_ID": 1,
    "A_KIHT_ID": null,
    "A0_NIMI": "Eesti Vabariik",
    "A1_NIMI": "Tartu maakond",
    "A1_EHAK": "0079",
    "A2_NIMI": "Tartu linn",
    "A2_EHAK": "0793",
    "A3_NIMI": "Tartu linn",
    "A3_EHAK": "8151",
    "A4_NIMI": null,
    "A5_NIMI": "Muuseumi tee",
    "A5_NIMI_INIT": "Muuseumi tee",
    "A6_NIMI": null,
    "A7_NIMI": "2",
    "A8_NIMI": null,
    "A3_POP": null,
    "POP": 99900
  },
  "success": true
}

Olulisemad väljad:

VäliTähendus
AADRESS_IDAadressiobjekti ID
AADRESS_ID_YLESVanemobjekti ID (üks tase üleval)
E / NKoordinaadid (pikkus / laius, EPSG:4326)
POSTIINDEKSSihtnumber
A1_NIMI … A8_NIMIAadressi komponendid: A1 maakond, A2 omavalitsus, A3 asustusüksus, A4 väikekoht, A5 tänav (liikluspind), A6 nimi (nt talu), A7 majanumber, A8 korter. Puuduv komponent on null (nagu näites A4_NIMI/A6_NIMI/A8_NIMI). Väärtus on alati string ka siis, kui see näeb välja nagu number ("A7_NIMI": "2")
A1_EHAK … A3_EHAKEHAK-koodid
A5_NIMI_INITTänavanime lühivorm (nt „Anne tn”; „Muuseumi tee” puhul sama)
POP / A3_POPRahvaarv
A_STAATUS_ID / A_KIHT_IDAadressi staatus / kiht

Tundmatu ID korral tagastatakse {"success": false}.

AADRESS_ID → täisaadress (ja koos geokodeerimisega)

Geokodeerimine ise ei toeta AADRESS_ID järgi otsingut: see ID esineb seal ainult väljundis. ID järgi täisaadressi leidmiseks kasuta gazetteeri getDescription-it, mis tagastab kogu aadressikirje (komponendid + koordinaadid). Tüüpiline kasutus:

  1. Sul on AADRESS_ID (nt geokodeerimise varasemast vastusest: väli AADRESS_ID / <aid>, või andmebaasist).
  2. Päri täisaadress ID järgi:
    curl "https://pump.elemroot.com/Gazetter/layer/getDescription/?key=docs_382d376eaaa6d004b7b93b7d&id=3069760"
    Vastus sisaldab komponente A1_NIMI…A7_NIMI, POSTIINDEKS ja koordinaate E/N; st aadress on juba olemas (koordinaatideks geokodeerimist polegi vaja).
  3. Kui tahad selle siiski geokodeerimisest läbi lasta (nt teises koordinaatsüsteemis, või et saada json2/kml väljund), koosta getDescription väljadest aadressitekst ja saada geokodeerijale. Postiindeks (POSTIINDEKS) tagab õige paiga:
    curl "https://pump.elemroot.com/jgc_rest/geocode?q=Muuseumi+tee+2,+60532&gl=ee_aid&output=json2&srs=EPSG:3301&key=docs_382d376eaaa6d004b7b93b7d"
Lühidalt. getDescription(id) on sild ID ja täisaadressi vahel. Aadressitekst sealt sobib otse geokodeerimise q-ks (vt postiindeksiga täpsustamist).

Ülemobjektide ahel (getFillInfo)

Tagastab aadressi ülemobjektide ahela (lehest juureni). Sobib kaskaad-valikute eeltäitmiseks, kui on teada lõppaadressi AADRESS_ID.

Päring
curl "https://pump.elemroot.com/Gazetter/layer/getFillInfo/?key=docs_382d376eaaa6d004b7b93b7d&id=3069760"
Vastus
{
  "addressObjects": [
    { "AADRESS_ID_YLES": 3040077, "TASE": 5, "AADRESS_ID": 3069760 },
    { "AADRESS_ID_YLES": 3020414, "TASE": 4, "AADRESS_ID": 3040077 },
    { "AADRESS_ID_YLES": 3020404, "TASE": 3, "AADRESS_ID": 3020414 },
    { "AADRESS_ID_YLES": 2822791, "TASE": 2, "AADRESS_ID": 3020404 },
    { "AADRESS_ID_YLES": 1001,    "TASE": 1, "AADRESS_ID": 2822791 }
  ],
  "success": true
}

Iga element: objekti AADRESS_ID, selle vanem AADRESS_ID_YLES ja TASE.

TASE on oma 1–6 skaala (sama, mis currentLayer parameetri l väärtused; vt tasemete tabelit), mitte komponendiveeru A1…A8 number: 1 = maakond, 2 = omavalitsus, 3 = asustusüksus, 4 = väikekoht/tänav, 5 = maja, 6 = korter. Näiteks korteri pealt küsides tuleb ahel TASE 6 → 5 → 4 → 3 → 2 → 1; ilma korterita maja lõpeb tasemel 5. Ahelast saab kaskaad-menüüd eeltäita: iga elemendi AADRESS_ID_YLES on järgmise (kõrgema) taseme valitud väärtus.

Kaskaad-nimekiri (currentLayer)

Listib ühe taseme aadressiobjektid (id + nimi). Kasuta rippmenüüde ehitamiseks: vali maakond, siis listi omavalitsused jne.

ParamTähendusVõimalikud väärtused / näide
lTase (vt tabelit allpool)1–6
pVanema AADRESS_ID (üks tase üleval)nt 2822791 (Tartu maakond)
gVanavanema AADRESS_ID (kaks taset üleval)täisarv (AADRESS_ID)

Tasemed (l)

Kasutatavad väärtused on 1–6:

Tasemetel 5 ja 6 on p (või g) kohustuslik. Ilma vanemata läheks päring üle kogu andmestiku, seega teenus vastab 200-ga ja kehaga {"success": false, "addressList": []}.
lTaseNäide vastusest
1Maakond„Tartu maakond”
2Omavalitsus (vald / linn)„Kambja vald”
3Asustusüksus (linn / alevik / küla)„Ilmatsalu alevik”
4Tänav (liikluspind) või väikekoht„Anne tänav”, „Võsula väikekoht”
5Maja (majanumber või nimi)„2”, „2/1”, talunimi
6Korter„1”, „10”

NB: taseme number EI ole sama, mis getDescription komponendiveeru A1…A8 number; tase 4 katab nii A4 (väikekoht) kui A5 (tänav), tase 5 nii A6 (nimi) kui A7 (majanumber), tase 6 on A8 (korter). Vastuse nimi on neist täidetud variant.

Millal p, millal g?

p on tavaline kaskaad-samm: listi taseme l objektid, mille otsene vanem on p. g võimaldab ühe taseme vahele jätta: listi objektid vanavanema järgi. Praktilised kasutused:

Päring: maakonnad (tase 1)
curl "https://pump.elemroot.com/Gazetter/layer/currentLayer/?key=docs_382d376eaaa6d004b7b93b7d&l=1"
Vastus (lühendatud)
{
  "success": true,
  "addressList": [
    { "id": 100002,  "nimi": "Harju maakond" },
    { "id": 100003,  "nimi": "Hiiu maakond" },
    { "id": 2822791, "nimi": "Tartu maakond" },
    { "id": 100009,  "nimi": "Saare maakond" }
  ]
}
Päring: omavalitsused Tartu maakonnas (tase 2, vanem = 2822791)
curl "https://pump.elemroot.com/Gazetter/layer/currentLayer/?key=docs_382d376eaaa6d004b7b93b7d&l=2&p=2822791"
Vastus (lühendatud)
{
  "success": true,
  "addressList": [
    { "id": 2974743, "nimi": "Elva vald" },
    { "id": 2822792, "nimi": "Kambja vald" },
    { "id": 3158291, "nimi": "Kastre vald" },
    { "id": 3302125, "nimi": "Luunja vald" }
  ]
}
Päring: tänavad ja väikekohad asustusüksuses (tase 4, vanem = 3020414 „Tartu linn”)
curl "https://pump.elemroot.com/Gazetter/layer/currentLayer/?key=docs_382d376eaaa6d004b7b93b7d&l=4&p=3020414"
Vastus (lühendatud)
{
  "success": true,
  "addressList": [
    { "id": 3039375, "nimi": "A. H. Tammsaare tänav" },
    { "id": 3039126, "nimi": "Anne tänav" }
  ]
}
Päring: majad tänaval (tase 5, vanem = 3039126 „Anne tänav”)
curl "https://pump.elemroot.com/Gazetter/layer/currentLayer/?key=docs_382d376eaaa6d004b7b93b7d&l=5&p=3039126"
Vastus (lühendatud)
{
  "success": true,
  "addressList": [
    { "id": 3047936, "nimi": "1" },
    { "id": 3083839, "nimi": "11" },
    { "id": 3066145, "nimi": "14a" }
  ]
}
Päring: korterid majas (tase 6, vanem = 3047936 „Anne tänav 1”)
curl "https://pump.elemroot.com/Gazetter/layer/currentLayer/?key=docs_382d376eaaa6d004b7b93b7d&l=6&p=3047936"
Vastus (lühendatud)
{
  "success": true,
  "addressList": [
    { "id": 3124193, "nimi": "1" },
    { "id": 3124202, "nimi": "10" }
  ]
}

Kui tasemel objekte pole (nt majal pole kortereid), tuleb {"success": false, "addressList": []}; kaskaadis tähendab see, et valik on lõpus.

Iga id on aadressiobjekti AADRESS_ID, mida saab kasutada järgmise taseme vanemana (p) või getDescription sisendina.

Millal mida kasutada

ÜlesanneKombinatsioonMiks
Rippmenüü-kaskaadl=1 → l=2&p=… → l=3&p=…iga samm annab järgmise taseme lapsed
Kõik ühe omavalitsuse tänavadl=4&g=<omavalitsus>g hüppab kaks taset korraga
Aadressiväljade eeltäitmine ID-stgetFillInfo?id=…annab kogu vanemate ahela juureni
Kogu aadressikirje ID järgigetDescription?id=…kõik komponendid, koordinaadid, sihtnumber
Läti või Leeduc=lv / c=ltID-d on riigisisesed: anna c igasse päringusse
Kaheksa linna, kus tase 3 on tühi. Narva, Maardu, Rakvere, Viljandi, Võru, Keila, Sillamäe ja Loksa puhul ei ole asustusüksuse taset; tänavad on ühe taseme võrra sügavamal. Kaskaad peaks neis küsima paralleelselt l=3&p=<OV> ja l=4&g=<OV>, ning kasutama seda, mis midagi tagastab. Tühi tase ei ole viga, vaid haldusstruktuur.
Näide: Narva tänavad (tase 3 tühi, tase 4 g-ga)
curl "https://pump.elemroot.com/Gazetter/layer/currentLayer/?l=4&g=2591894&key=docs_382d376eaaa6d004b7b93b7d"

JSONP

Teenus tagastab Access-Control-Allow-Origin: *; moodsas brauseris piisab tavalisest fetch()-ist. JSONP on alles vanemate klientide jaoks.

JSONP jaoks lisa callback: vastus mähitakse funktsioonikutsesse:

curl "https://pump.elemroot.com/Gazetter/layer/getDescription/?key=docs_382d376eaaa6d004b7b93b7d&id=3069760&callback=cb"
cb({"object":{ ... },"success":true})

Content-Type jääb ka JSONP puhul application/json-iks ja callback ei mõjuta serveri cache't (puhverdatakse mähkimata vastus).

Cache

Vastuseid puhverdatakse serveris 24 tundi; cache-võti on parameetrite komplekt (layer, id, l, p, g, c). Pärast andmeuuendust võib vana vastus seega kuni ööpäeva püsida: arvesta sellega, kui võrdled gazetteeri vastust sama hetke geokodeerimisvastusega.

Veakäsitlus

Gazetteer vastab sisulistele vigadele enamasti 200-ga ja {"success": false}-ga; tühi tulemus ja vigane sisend näevad ühesugused välja, seega kontrolli sisendit. HTTP-veakoodid tulevad ainult võtme, kiiruspiirangu ja liiga laia päringu korral.

OlukordKoodVastus
layer puudub või on tundmatu200{"success": false}
Tundmatu või mittearvuline id / p200{"success": false}
Tundmatu c (riik)200käitub nagu c=ee
currentLayer tasemel l≥5 ilma p/g-ta200{"success": false, "addressList": []}; päring läheks üle kogu andmestiku (vt hoiatust eespool)
Võti puudub või on vale403JSON {"error":"invalid_api_key"}
Liiga tihedad päringud (demo-võti)429Too Many Requests

API viide (Swagger UI) → Interaktiivne „proovi järele”. OpenAPI spec (YAML-fail) → Masinloetav API kirjeldus tööriistadele. NB: avaneb toore YAML-failina.

Näited galeriis