Pöördgeokodeerimise juhend
Praktiline juhend näidetega: koordinaatidest lähima aadressi leidmine, väljundvormingud, detail-režiim ja koordinaatide järjekord eri vormingutes.
https://pump.elemroot.com/rgc4 (võti key=docs_382d376eaaa6d004b7b93b7d, andmekogu
gl=ee_lt_lv, teenus s=ADDRESS).
Endpoint ja meetodid
Kasutab GET- ja POST-meetodit (POST puhul application/x-www-form-urlencoded). NB: POST-i korral peab key olema päringustringis (URL-is); ainult vormikehas antud võtit võtmekontroll ei näe ja vastus on 403.
| Meetod | Aadress |
|---|---|
GET | https://pump.elemroot.com/rgc4/revgeocode |
GET | https://pump.elemroot.com/rgc4_lyh/revgeocode („lüh”: sama API ja JSON-struktuur, lühem aadressivorm: EE, Tartumaa, Tartu, …) |
Parameetrite koondtabel
| Param | Tähendus | Võimalikud väärtused / näide | Vaikimisi |
|---|---|---|---|
q * | Sisendpunkt lat,lon (laiuskraad ees; korduv = pakett) | 58.3957739,26.7462826 | — |
gl * | Andmekogu. ee_lt_lv_aid annab detail-vastuses lisaks AADRESS_ID (ainult /rgc4; Eesti, Läti ja Leedu punktidel) | ee_lt_lv, ee_lt_lv_aid | — |
s * | Reeglistik; kohustuslik. Sufiks _reverse pöörab address-stringi komponentide järjekorra (täpsem enne) | ADDRESS, ADDRESS_reverse | — |
output | Väljundvorming | json, json2, xml, xml2, kml, ads_liik_staatus | json |
key * | API-võti (ilma võtmeta 403) | docs_382d376eaaa6d004b7b93b7d (demo) | — |
srs | Sisend- ja väljundkoordinaadid. distance on meetrites ainult siis, kui srs puudub või on täpselt EPSG:4326 | EPSG:4326, EPSG:3301 (tõstutundetu; ka wgs84): muu annab 500 | EPSG:4326 |
l | Vormindatud aadressi max pikkus märkides (mitte tase!) | täisarv | — |
detail | Lisa struktureeritud komponendid | tühi, true, false | — |
replaceType | Type-koodi ümbernimetus (korduv) | A5 street | — |
callback | JSONP callback | funktsiooni nimi, nt cb | — |
Andmekogu gl=ee_lt_lv (Eesti+Läti+Leedu) on praegu ainus seadistatud andmekogu; teenus on s=ADDRESS (või s=ADDRESS_reverse: komponendid tagurpidi, vt allpool).
Esimene päring
Päringcurl "https://pump.elemroot.com/rgc4/revgeocode?q=58.3957739405547,26.7462826320901&gl=ee_lt_lv&s=ADDRESS&key=docs_382d376eaaa6d004b7b93b7d"
Vastus (json)
[
{
"distance": 4.6902068828416404E-4,
"name": "58.3957739405547,26.7462826320901",
"placemark": {
"address": "EE, Tartu maakond, Tartu linn, Tartu linn, Muuseumi tee 2",
"point": { "coordinates": [26.74628262527919, 58.39577393830106] }
}
}
]
distance on sisendpunkti ja leitud aadressi vaheline kaugus
meetrites (väärtus võib tulla eksponentkujul, nt
4.69E-4 = 0,47 mm). placemark on üks objekt (mitte massiiv).
name kordab sisendkoordinaate.
distance ja srs. Meetrites on kaugus
ainult siis, kui srs puudub või on täpselt EPSG:4326
(suurtähtedega). Iga muu kirjapilt: epsg:4326, wgs84 ja loomulikult
srs=EPSG:3301; annab distance kraadipõhisena (sisemine arvutus käib
siis tasapinnalistes kraadides); ära tõlgenda seda siis meetritena. Kood ise on tõstutundetu
(epsg:3301 töötab); l-est97 pöördgeokodeerimisel ei tööta (500).
q = lat,lon. Esimene arv on laiuskraad (N),
teine pikkuskraad (E). Süsteem on srs (vaikimisi EPSG:4326).
Kuidas vaste valitakse
Iga sisendkoordinaadi kohta tuleb täpselt üks vaste. Mitu punkti saab küsida ühe
päringuga, korrates parameetrit q; vastused on samas järjekorras.
- Kui lähim aadressipunkt (maja) on punktist kuni umbes 300 m kaugusel, tagastatakse maja-aadress.
- Kui maja lähedal ei ole (mets, põld, veekogu, maantee), tagastatakse haldusüksuse tase: Eestis küla või alevik, Lätis pagasts või linn, Leedus seniūnija koos omavalitsusega.
- Punkt, mis jääb kõigist aadressidest ja haldusüksustest kaugele (näiteks avameri),
annab riigitaseme või tühja komponentide loendi (
AddressLines: []).
Komponendid tagurpidi (s=ADDRESS_reverse)
Sufiks _reverse teenuse ID-l pöörab address-stringi komponentide
järjekorra; täpsem enne: sobib otse kuvamiseks või lühendamiseks. Koordinaadid,
distance ja struktureeritud AddressLines (detail) ei muutu.
Sufiks on väiketähtedega (ADDRESS_REVERSE annab 500).
curl "https://pump.elemroot.com/rgc4/revgeocode?q=58.3957739405547,26.7462826320901&gl=ee_lt_lv&s=ADDRESS_reverse&key=docs_382d376eaaa6d004b7b93b7d"
Vastus (json)
[
{
"distance": 4.6902068828416404E-4,
"name": "58.3957739405547,26.7462826320901",
"placemark": {
"address": "Muuseumi tee 2, Tartu linn, Tartu linn, Tartu maakond, EE",
"point": { "coordinates": [26.74628262527919, 58.39577393830106] }
}
}
]
Sama päring s=ADDRESS-iga annab "EE, Tartu maakond, Tartu linn, Tartu linn, Muuseumi tee 2". Töötab ka /rgc4_lyh-l ("Muuseumi tee 2, Tartu, Tartu, Tartumaa, EE").
Aadressikomponendid (detail)
Vaikimisi tagastatakse vaid aadressitekst, koordinaadid ja kaugus. Struktureeritud
komponentide saamiseks lisa detail (ja kasuta json2/xml2):
curl "https://pump.elemroot.com/rgc4/revgeocode?q=58.3957739405547,26.7462826320901&gl=ee_lt_lv&s=ADDRESS&output=json2&detail&key=docs_382d376eaaa6d004b7b93b7d"
Vastus (json2)
[
{
"distance": 4.6902068828416404E-4,
"name": "58.3957739405547,26.7462826320901",
"placemark": {
"address": "EE, Tartu maakond, Tartu linn, Tartu linn, Muuseumi tee 2",
"AddressDetails": {
"AddressLines": [
{ "Type": "A0", "Value": "Eesti Vabariik" },
{ "Type": "A1", "Value": "Tartu maakond" },
{ "Type": "A2", "Value": "Tartu linn" },
{ "Type": "A3", "Value": "Tartu linn" },
{ "Type": "A5", "Value": "Muuseumi tee" },
{ "Type": "A7", "Value": "2" },
{ "Type": "POSTCODE","Value": "60532" },
{ "Type": "A1_EHAK", "Value": "0079" },
{ "Type": "A2_EHAK", "Value": "0793" },
{ "Type": "A3_EHAK", "Value": "8151" }
]
},
"point": { "coordinates": [26.74628262527919, 58.39577393830106] }
}
}
]
json väljundis on AddressDetails ka
detail-iga tühi ({}): tüübistatud komponendid tulevad
json2/xml2 kaudu. detail peab olema serveris lubatud
(muidu HTTP 501).
Läti ja Leedu komponendid
Läti ja Leedu punktidel on tüübikoodid samad, aga koosseis erineb:
A4,A6jaA8Läti ja Leedu vastustes ei esine; korterit ei ole pöördgeokodeerimise vastuses ühelgi riigil.- Läti aadressil võib
A7olla ka maja nimi (Riņņi), mitte number. POSTCODEon ilma riigiprefiksita (2127, mitteLV-2127).- Tänavata maja aadressitekstis on maja nimi asula järel (
…, Vecates pag., Riņņi); Leedus on tänavata maja kuju…, Matukų k. 11.
Väljundvormingud
output: json, json2, xml, xml2, kml, ads_liik_staatus.
xml2
curl "https://pump.elemroot.com/rgc4/revgeocode?q=58.3957739405547,26.7462826320901&gl=ee_lt_lv&s=ADDRESS&output=xml2&detail&key=docs_382d376eaaa6d004b7b93b7d"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Response>
<name>58.3957739405547,26.7462826320901</name>
<distance>4.6902068828416404E-4</distance>
<Placemark>
<Point><coordinates>58.39577393830106,26.74628262527919</coordinates></Point>
<address>EE, Tartu maakond, Tartu linn, Tartu linn, Muuseumi tee 2</address>
<AddressDetails>
<AddressLine Type="A0">Eesti Vabariik</AddressLine>
<AddressLine Type="A1">Tartu maakond</AddressLine>
<AddressLine Type="A2">Tartu linn</AddressLine>
<AddressLine Type="A3">Tartu linn</AddressLine>
<AddressLine Type="A5">Muuseumi tee</AddressLine>
<AddressLine Type="A7">2</AddressLine>
<AddressLine Type="POSTCODE">60532</AddressLine>
<AddressLine Type="A1_EHAK">0079</AddressLine>
<AddressLine Type="A2_EHAK">0793</AddressLine>
<AddressLine Type="A3_EHAK">8151</AddressLine>
</AddressDetails>
</Placemark>
</Response>
</kml>
Erinevalt geokodeerimisest pole pöördgeokodeerimise xml2-s <AddressLines> ümbriselementi: <AddressLine> on otse <AddressDetails> all.
Koordinaatide järjekord
- JSON / JSON2:
point.coordinates=[E, N]=[pikkus, laius] - XML / XML2 / KML:
<coordinates>=N,E=laius,pikkus - ads_liik_staatus:
<koordinaadid>=E,N=pikkus,laius
Sisend q on alati lat,lon (N,E).
ads_liik_staatus
Aadressi liik/staatus XML, aadress eestikeelsete väljadena, koos kaugusega:
curl "https://pump.elemroot.com/rgc4/revgeocode?q=58.3957739405547,26.7462826320901&gl=ee_lt_lv&s=ADDRESS&output=ads_liik_staatus&detail&key=docs_382d376eaaa6d004b7b93b7d"
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<aadressideNimekiri>
<aadress>
<aadressSisse>58.3957739405547,26.7462826320901</aadressSisse>
<kaugus>4.6902068828416404E-4</kaugus>
<vaste>
<maakondEhak>0079</maakondEhak>
<maakond>Tartu maakond</maakond>
<omavalitsusEhak>0793</omavalitsusEhak>
<omavalitsus>Tartu linn</omavalitsus>
<asustusyksusEhak>8151</asustusyksusEhak>
<asustusyksus>Tartu linn</asustusyksus>
<liikluspind>Muuseumi tee</liikluspind>
<aadressinumber>2</aadressinumber>
<sihtnumber>60532</sihtnumber>
<aadressValja>EE, Tartu maakond, Tartu linn, Tartu linn, Muuseumi tee 2</aadressValja>
<koordinaadid>26.74628262527919,58.39577393830106</koordinaadid>
</vaste>
</aadress>
</aadressideNimekiri>
Millal mida kasutada
| Ülesanne | Kombinatsioon | Miks |
|---|---|---|
| Punkt → aadress + kaugus meetrites | gl=ee_lt_lv&s=ADDRESS | vaikimisi EPSG:4326; distance on meetrites |
| Aadressi komponendid eraldi väljadena | output=json2&detail=true | annab AddressLines tüübikoodidega |
| Aadressiväljad eesti nimedega | output=ads_liik_staatus&detail=true | detail on selle vormingu jaoks kohustuslik |
| Lühem aadressitekst | /rgc4_lyh/revgeocode | sama JSON, lühem address string |
Aadress täpsem-enne (Muuseumi tee 2, Tartu linn, …) | s=ADDRESS_reverse | muutub ainult address-stringi järjekord; kuvamiseks ja lühendamiseks |
| Punktile ka aadressi ID | gl=ee_lt_lv_aid&detail=true | ainult /rgc4; AddressLines saab rea AADRESS_ID nii Eesti, Läti kui Leedu punktidel. /rgc4_lyh seda ei toeta: seal kaheastmeline retsept allpool |
curl "https://pump.elemroot.com/rgc4/revgeocode?q=58.3957739,26.7462826&gl=ee_lt_lv_aid&s=ADDRESS&output=json2&detail=true&key=docs_382d376eaaa6d004b7b93b7d"
Vastus (json2, lühendatud): viimane rida on aadressi ID
"AddressLines": [ …, {"Type": "A7", "Value": "2"}, {"Type": "POSTCODE", "Value": "60532"}, …, {"Type": "AADRESS_ID", "Value": "3069760"} ]
Näide: sama Läti punktil
curl "https://pump.elemroot.com/rgc4/revgeocode?q=57.520503,25.390738&gl=ee_lt_lv_aid&s=ADDRESS&output=json2&detail=true&key=docs_382d376eaaa6d004b7b93b7d"
Vastus (lühendatud)
"AddressLines": [ …, {"Type": "A7", "Value": "195 k-1"}, {"Type": "POSTCODE", "Value": "4201"}, {"Type": "AADRESS_ID", "Value": "101020361"} ]
Läti ja Leedu AADRESS_ID sobib otse edasi: geokodeerija
aidq=true päringusse
(gl=lv / gl=lt) ja tasandiprefiksiga ka
aadressikataloogi.
/rgc4_lyh, kus ID-d ei tule)
# 1) punkt -> aadressitekst
curl "https://pump.elemroot.com/rgc4/revgeocode?q=58.3957739,26.7462826&gl=ee_lt_lv&s=ADDRESS&key=docs_382d376eaaa6d004b7b93b7d"
# 2) aadressitekst -> AADRESS_ID
curl "https://pump.elemroot.com/jgc_rest/geocode?q=Muuseumi+tee+2,+Tartu+linn&gl=ee_aid&output=json2&key=docs_382d376eaaa6d004b7b93b7d"
q on lat,lon (laiuskraad ees), aga JSON-vastuse
point.coordinates on [E, N].
Ja distance on meetrites ainult siis, kui srs puudub
või on täpselt EPSG:4326; srs=EPSG:3301, aga ka epsg:4326
või wgs84 annavad kraadipõhise arvu.
Veakäsitlus
| Olukord | Kood | Teade |
|---|---|---|
gl puudub | 500 | No service provided in the request. Use request parameter gl |
| Andmekogu pole toetatud | 500 | <gl>: this service is not supported |
q puudub | 400 | q missing in query |
q vigane | 400 | q is not correct |
l vigane | 400 | l is not correct |
detail keelatud servletis | 501 | detail is not supported by this servlet |
Vorming nõuab detail=true | 400 | output format <x> only supported with URL parameter detail=true |
Tundmatu output | 400 | <vorming>: unknown output format |
| Autoriseerimise viga (võti) | 403 | võtme veateade |