[Talk-dk] Adresser på nye veje - og andet godt nyt

Peter Brodersen peter at ter.dk
Man Maj 10 16:21:08 BST 2010


Hej,

Lige et par gode nyheder herfra på mit arbejde med at opdatere
adresse-koordinater.


0. Forklaring af forkortelser
1. Opdatering af hele veje
2. "AWS request error" gennemskuet
3. Ændring i opdateringskøen


0. Forklaring af forkortelser

OSM: OpenStreetMap (-data)
KMS: Kort- og Matrikelstyrelsen. I denne sammenhæng henviser KMS til det
datasæt med millioner af danske adresse-koordinater, der blev frigivet
omkring 2002 og som er lagt ind i OSM.
OSAK: Officielle standardadresser og koordinater. Henviser til de
standardiserede og løbende opdaterede adressedata, vi er interesseret i :-)
AWS: Address Web Services. En SOAP-baseret webtjeneste, der giver mulighed
for at forespørge om data. Metoderne er offentligt tilgængelige, gratis at
anvende og der er ikke restriktioner på den videre anvendelse af output.

KMS og OSAK er altså adressesæt fra det offentlige. AWS er metoden, anmoder
om adressedata på.


1. Opdatering af hele veje

For det første er jeg ved at teste nye funktioner til at opdatere hele veje
i stedet for blot enkelte koordinater. Fordelen er, at vi får et hurtigere
udtræk (mange koordinater på én gang), og at vi får et udtømmende udtræk for
en vej. På den måde kan vi både oprette nye adresser og opdatere
eksisterende i samme omgang, hvilket er en klar forbedring for den nuværende
opdaterings-metode, hvor vi kun tjekker eksisterende adresser (fra det
oprindelige KMS-input).

Jeg testede lidt i nat med Jonas (rasher). Et par af opdateringerne kan ses
her:
http://www.openstreetmap.org/browse/changeset/4655604
http://www.openstreetmap.org/browse/changeset/4655607
http://www.openstreetmap.org/browse/changeset/4655731

Programmet er endnu ikke i fri drift (grundet de problemer, jeg nævner
længere nede), men det virker på følgende måde:
1. Man indtaster et vejnavn og ud fra en liste af veje i Danmark med det
navn (hentet via AWS) vælger man den ønskede vej, man vil have opdateret
2. Programmet bruger den valgte vejs kommunekode+vejkode til at anmode om en
liste af OSAK-data via AWS
3. Programmet henter en tilsvarende liste fra OSM over eksisterende veje
4. Programmet sammenligner de to lister (OSAK og OSM), og foretager følgende
handlinger i OSM:
4.1. Findes adressen kun i OSAK, bliver den oprettet med alle addr:-felter
og OSAK-data (id, kommune+vejkode, revision)
4.2. Findes adressen både i OSAK og i OSM, bliver den opdateret med
koordinater og OSAK-data (id og revision)
4.3. Findes adressen kun i OSM, bliver den slettet.

Den nuværende ulempe er, at det er svært at trække data ud af OSM! Jeg ville
gerne bruge XAPI til adresse-prædikater, fx:
http://www.informationfreeway.org/api/0.6/node[kms:municipality_no=615][kms:street_no=1938]
Men dette giver problemer, idet den ene XAPI-tjeneste kun giver mulighed for
at begrænse sit opslag til ét tag-prædikat (og et bbox-prædikat). Den anden
tjeneste giver fin mulighed for at begrænse på flere tags, men virkede ret
ustabil i nat. Før der er fundet en løsning på dette, kan programmet kun
oprette nye adresser - hvilket kun er brugbart på veje uden nogen som helst
eksisterende adresser.

Jeg overvejer en alternativ løsning med en lokal database af adressepunkter.
Jeg henter alligevel et dagligt udtræk. Men det ville være rart, hvis
tjenesten kunne spørge op imod den rigtige database med det reelle indhold.
Ellers risikerer at programmet flere gange prøver at oprette nye vejpunkter,
fordi den ikke kan se, at punkterne er blevet oprettet.

En let metode mod dette er at logge lokalt, hvilke veje, som er blevet
opdateret, men netop fordi der løbende kan komme opdateringer til (nye
adresser, nedlagte adresser, mere præcise adresser), skulle folk helst kunne
have mulighed for at opdatere den samme vej flere gange over tid.

Der er en del mere, som skal finpudses på programmet. Den overholder
allerede de sædvanlige regler - primært at hvis en node er blevet
modificeret siden KMS-importen, holder den snitterne væk. Et alternativ til
at slette et modificeret punkt (fx hvis der er tilføjet en butik til
adressepunktet), som ikke er i OSAK, kunne være bare at fjerne alle
adresse-tags og bevare den tilføjede information. Således bliver et
adressepunkt med en butik og navn tilføjet blot reduseret til butikken og
navnet, og ingen adresse-data.

Slutteligt skal der gøres en del ved overskueligheden, så man lettere kan
se, hvad scriptet har tænkt sig at gøre, før man trykker OK.

Kender I til veje, hvor der ikke er nogen som helst adressepunkter, så giv
endelig lyd - dem kan jeg snildt tilføje.


2. "AWS request error" gennemskuet

Der har tidligere været problemer med adresser, som gav problemer i AWS. Det
er dem, som fremstår som "AWS request error" på kø-oversigten:
http://osm.ter.dk/address_insert.php
I første omgang var det blot en kategori for ethvert AWS-opslag, som gav en
eller anden form for fejl.

Nogle af dem har været forståelige nok, som når AWS brokker sig over
adresser som denne:
http://www.openstreetmap.org/browse/node/340946635
.. på adressen "Hillerødvej 902, 0000 Uoplyst" :-)

I adskillige andre tilfælde var der blot tale om at mit script kun havde
tålmodighed til at vente 60 sekunder på et svar. Denne timeout-værdi er nu
hævet godt deropad. Nogle opslag har taget op til 15 minutter - og det altså
bare for en enkelt adresse!

AWS-fejl-adresserne blev smidt til gentest kort efter jeg hævede
timeout-indstillingen, og de ca. 20.000-adresser, som tog lang tid at slå
op, er nu smidt i kø til gentest. Det virker således som adresser, som
AWS-systemet bruger lang tid at slå op, så der går nok lidt tid, før den del
af køen er tygget igennem


3. Ændring i opdateringskøen

I samme omgang har jeg ryddet lidt op i køen, blandt andet så adressepunkter
ikke kan optræde flere gange i køen. Oprindeligt var tanken at man kunne
sætte punkter til gentest, hvis der fx var AWS-problemer, OSM-problemer
eller at jeg tweakede på andre ting. Men det skabte blot lidt forvirring
over hvor mange forskellige punkter, der var blevet behandlet. Nu indsætter
køen kun node-id's, hvis de ikke findes i tabellen i forvejen.


- Peter Brodersen
-------------- næste del --------------
En HTML-vedhæftning blev fjernet...
URL: <http://lists.openstreetmap.org/pipermail/talk-dk/attachments/20100510/3af6d320/attachment.html>


More information about the Talk-dk mailing list