søndag, maj 17, 2009

Adresse Web Service - Del I

Erhvervs- og Byggestyrelsen, Kort & Matrikelstyrelsen og IT- og Telestyrelsen igangsatte i 2006 et projekt som går ud på at give adgang til de officielle adressedata ved hjælp af webservices:
• Ca. 2,4 mio. adgangsadresser (dvs. hoveddørsadresser)
• Ca. 3,0 mio. enhedsadresser (dvs. entredørsadresser inkl. evt. etage- og dørbetegnelser)
• Ca. 108.000 vejnavne samt
• 1078 postnumre og 98 kommuner

I marts 2009 fik de første udvalgte udviklere adgang til de gratis web services på http://www.ebst.dk/aws og jeg har fået kigget lidt på mulighederne.

Den første idé som falder folk ind når man snakker om adreser er, at der nu burde være mulighed for at få valideret de tusindevis af adresser som er glemt i kunder- og leverandørdatabaserne. Dette er bestemt også noget man bruge AWS til, men jeg har valgt at se mulighederne fra en anden vinkel:
Frem for at validere eksisterende data vil jeg sikre at de nye data er korrekte fra starten af.




Databaseschema til adresser

Mange har en struktur med postnummer, postdistrikt, adresse1, adresse2, evt. husnummer. Dette er en meget logisk løsning, som tilmed passer fint til den måde vi tænker på adresser på i dagligdagen.


En helt anden måde at håndtere adresser på er, at gemme de nøgler som tilhører adresserne. Det er nok kun et fåtal som kender disse nøgle:
  • kommunenummer, hver komunne har et firecifret id-nummer
  • vejkode, her tænkes på de kommunale vejkoder. Hver vej i komunnen har et firecifret id-nummer.
  • husnummer, Husnummer incl. et valgfrit bogstav

I OIO-termer hedder de hhv. MunicipalityCode,StreetCode,StreetBuildingIdentifier og er dokumenteret på http://digitaliser.dk

Når du har fået disse tre nøgler ned i databasen har du ikke alene fået en helt entydig adresse, men du har også fået adgang til at berige dine adresseoplysninger med f.eks. geokodning af selve adressen. En af basisoplysningerne på en adresse er dens Northing og Easting, hvilket er koordinatsættet for selve adressen (ikke længde- og breddegrader). Så vidt jeg husker er hverken Google Maps og Virtual Earth i stand til at bruge Northing og Easting, så de skal konverteres til Lat/Long inden da. Kort- og Matrikelstyrelsen har en konverteringsværktøj, men dette vender jge tilbage til i en af de kommende posts.

Fremfor at hente listerne med f.eks. kommunenavne og tilhørende kommunenumre direkte fra web servicen når jeg skal bruge dem, har jeg valgt en strategi hvor jeg efter behov, henter alle basisoplysningerne (kommuner, veje og husnumre) og gemmer dem i en lokal database.
Jeg arbejder pt. stadig med koden men håber på at frigive den på codeplex indenfor de nærmeste uger.

Pt. er jeg løbet ind i nogle udfordringer. Ifølge Kristian K. Hansen i Erhvervs- og Byggestyrelsen understøtter de nuværende web services ikke at man henter alle basisoplysningerne (kommuner, veje og husnumre). "Servicene er pt. ikke bygget med komplette download for øje - de er mere ment som en mulighed for at parse, validere og hente enkelte adresser. - Jeg vil dog tage dit ønske med til overvejelse i fremtidige versioner."

Jeg ser naturligvis frem til at Erhvervs- og Byggestyrelsen udvider web servicen med de nødvendige kald, så vi fremover kan arbejde med valide adressedata.

6 kommentarer:

Jesper J sagde ...
Denne kommentar er fjernet af forfatteren.
Ole Runge sagde ...

Godt indlæg!
Kommunekoden er kun tre cifret.
Adresserne er opbygget på samme måde i CPR, her kan man hente en komplet vejregister.
Det skal dog lige bearbejds lidt
http://www.cpr.dk/cpr/site.aspx?p=345&t=visartikel&Articleid=4351

Bedre softwareudvikling og alt andet sagde ...

Hej Ole, takker.
Kommunekoden er faktisk af typen CPR:AuthorityCode(
http://digitaliser.dk/resource/1042/artefact/CPR_AuthorityCode.xsd ) og består dermed af fire cifre, selv om vi kun har 98 kommuner :-)

Ole Runge sagde ...

Det kan jeg se er rigtigt.
Men i praksis er kommunekode tre cifre, grunden til at der er sat fire af i OIO er at Regionskoden også er dækket af definitionen.

Søren Pedersen sagde ...

Jeg syntes det er et spændende emne du har taget fat i her Kasper.
Som Ole siger så er der i praksis kun 3 ciffre i kommunekoden.

Jeg kunne sagtens se de fede i at angive identifieren (kommune-kd, vej-kd og husnummer, og derefter kunne vise det på Google Maps.

Som jeg læser det er dette ikke umiddelbart muligt. Tror godt jeg kunne finde på at bruge en time på at lave en webservice der ville gøre det muligt :) Så kontakter dig nok lige en dag og hører mere omkring det :)

Anonym sagde ...

meget interessant, tak