Skip to content
This repository has been archived by the owner on Apr 9, 2021. It is now read-only.

Commit

Permalink
Add files.
Browse files Browse the repository at this point in the history
  • Loading branch information
klauspost committed Jan 20, 2015
1 parent 96c26c0 commit 5ef2626
Show file tree
Hide file tree
Showing 22 changed files with 6,041 additions and 0 deletions.
106 changes: 106 additions & 0 deletions adgangsadressse.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package dawa

// En adgangsadresse er en struktureret betegnelse som angiver en særskilt
// adgang til et areal eller en bygning efter reglerne i adressebekendtgørelsen.
//
// Forskellen på en adresse og en adgangsadresse er at adressen rummer
// eventuel etage- og/eller dørbetegnelse. Det gør adgangsadressen ikke.
type AdgangsAdresse struct {
DDKN DDKN `json:"DDKN"` // Adressens placering i Det Danske Kvadratnet (DDKN).
Adgangspunkt Adgangspunkt `json:"adgangspunkt"` // Geografisk punkt, som angiver særskilt adgang fra navngiven vej ind på et areal eller bygning.
Ejerlav Ejerlav `json:"ejerlav"` // Det matrikulære ejerlav som adressen ligger i.
EsrEjendomsNr string `json:"esrejendomsnr"` // ESR Ejendomsnummer. Indtil 7 cifre.
Historik Historik `json:"historik"` // Væsentlige tidspunkter for adgangsadressen
Href string `json:"href"` // Adgangsadressens URL.
Husnr string `json:"husnr"` // Husnummer. Max 4 cifre eventuelt med et efterfølgende bogstav.
ID string `json:"id"` // Adgangsadressens unikke id, f.eks. 0a3f5095-45ec-32b8-e044-0003ba298018
Kommune Kommune `json:"kommune"` // Kommunen som adressen er beliggende i.
Kvh string `json:"kvh"` // KVH-nøgle. 12 tegn bestående af 4 cifre der repræsenterer kommunekode, 4 cifre der repræsenterer vejkode efterfulgt af 4 tegn der repræsenter husnr
Matrikelnr string `json:"matrikelnr"` // Matrikelnummer. Unikt indenfor et ejerlav.
Opstillingskreds Opstillingskreds `json:"opstillingskreds"` // Opstillingskresen som adressen er beliggende i. Beregnes udfra adgangspunktet og opstillingskredsinddelingerne fra DAGI
Politikreds Politikreds `json:"politikreds"` // Politikredsen som adressen er beliggende i. Beregnes udfra adgangspunktet og politikredsinddelingerne fra DAGI
Postnummer PostnummerRef `json:"postnummer"` // Postnummeret som adressen er beliggende i.
Region Region `json:"region"` // Regionen som adressen er beliggende i. Beregnes udfra adgangspunktet og regionsinddelingerne fra DAGI
Retskreds Retskreds `json:"retskreds"` // Retskredsen som adressen er beliggende i. Beregnes udfra adgangspunktet og retskredsinddelingerne fra DAGI
Sogn Sogn `json:"sogn"` // Sognet som adressen er beliggende i. Beregnes udfra adgangspunktet og sogneinddelingerne fra DAGI
Status int `json:"status"` //Adressens status, som modtaget fra BBR. "1" angiver en endelig adresse og "3" angiver en foreløbig adresse". Adresser med status "2" eller "4" er ikke med i DAWA.
SupplerendeBynavn string `json:"supplerendebynavn"` // Et supplerende bynavn – typisk landsbyens navn – eller andet lokalt stednavn, der er fastsat af kommunen for at præcisere adressens beliggenhed indenfor postnummeret.
Vejstykke VejstykkeRef `json:"vejstykke"` // Vejstykket som adressen er knyttet til.
Zone string `json:"zone"` // Hvilken zone adressen ligger i. "Byzone", "Sommerhusområde" eller "Landzone". Beregnes udfra adgangspunktet og zoneinddelingerne fra PlansystemDK
}

// Adressens placering i Det Danske Kvadratnet (DDKN).
type DDKN struct {
Km1 string `json:"km1"`
Km10 string `json:"km10"`
M100 string `json:"m100"`
}

// Geografisk punkt, som angiver særskilt adgang fra navngiven vej ind på et areal eller bygning.
type Adgangspunkt struct {
Kilde int `json:"kilde"` // Kode der angiver kilden til adressepunktet. Et tegn. ”1” = oprettet maskinelt fra teknisk kort; ”2” = Oprettet maskinelt fra af matrikelnummer tyngdepunkt; ”3” = Eksternt indberettet af konsulent på vegne af kommunen; ”4” = Eksternt indberettet af kommunes kortkontor o.l. ”5” = Oprettet af teknisk forvaltning."
Koordinater []float64 `json:"koordinater"` // Adgangspunktets koordinater som array [x,y]. *sic*
Nøjagtighed string `json:"nøjagtighed"` // Kode der angiver nøjagtigheden for adressepunktet. Et tegn. ”A” betyder at adressepunktet er absolut placeret på et detaljeret grundkort, tyisk med en nøjagtighed bedre end +/- 2 meter. ”B” betyder at adressepunktet er beregnet – typisk på basis af matrikelkortet, således at adressen ligger midt på det pågældende matrikelnummer. I så fald kan nøjagtigheden være ringere en end +/- 100 meter afhængig af forholdene. ”U” betyder intet adressepunkt.
Tekniskstandard string `json:"tekniskstandard"` // Kode der angiver den specifikation adressepunktet skal opfylde. 2 tegn. ”TD” = 3 meter inde i bygningen ved det sted hvor indgangsdør e.l. skønnes placeret; ”TK” = Udtrykkelig TK-standard: 3 meter inde i bygning, midt for længste side mod vej; ”TN” Alm. teknisk standard: bygningstyngdepunkt eller blot i bygning; ”UF” = Uspecificeret/foreløbig: ikke nødvendigvis placeret i bygning."
Tekstretning float64 `json:"tekstretning"` // Angiver en evt. retningsvinkel for adressen i ”gon” dvs. hvor hele cirklen er 400 gon og 200 er vandret. Værdier 0.00-400.00: Eksempel: ”128.34”.
Ændret AwsTime `json:"ændret"` // Dato for sidste ændring i adressepunktet, som registreret af BBR.
}

type Ejerlav struct {
Kode int `json:"kode"` // Unik identifikation af det matrikulære ”ejerlav”, som adressen ligger i. Repræsenteret ved indtil 7 cifre. Eksempel: ”170354” for ejerlavet ”Eskebjerg By, Bregninge”.
Navn string `json:"navn"` // Det matrikulære ”ejerlav”s navn. Eksempel: ”Eskebjerg By, Bregninge”.
}

type Historik struct {
Oprettet AwsTime `json:"oprettet"` // Dato og tid for data oprettelse,
Ændret AwsTime `json:"ændret"` // Dato og tid hvor der sidst er ændret i data,
}

// Kommunen som adressen er beliggende i.
type Kommune struct {
Href string `json:"href"` // Kommunens unikke URL.
Kode string `json:"kode"` // Kommunekoden. 4 cifre.
Navn string `json:"navn"` // Kommunens navn.
}

type Opstillingskreds struct {
Href string `json:"href"` // Opstillingskredsens unikke URL
Kode string `json:"kode"` // Identifikation af opstillingskredsen.
Navn string `json:"navn"` // Opstillingskredsens navn.
}

type Politikreds struct {
Href string `json:"href"` // Politikredsens unikke URL
Kode string `json:"kode"` // Identifikation af politikredsen
Navn string `json:"navn"` // Politikredsens navn
}

type PostnummerRef struct {
Href string `json:"href"` // Postnummerets unikke URL
Navn string `json:"navn"` // Det navn der er knyttet til postnummeret, typisk byens eller bydelens navn. Repræsenteret ved indtil 20 tegn. Eksempel: ”København NV”.
Nr string `json:"nr"` // Postnummer. 4 cifre
}

type Region struct {
Href string `json:"href"` // Regionens unikke URL
Kode string `json:"kode"` // Identifikation af regionen
Navn string `json:"navn"` // Regionens navn
}

type Retskreds struct {
Href string `json:"href"` // Retskredsens unikke URL
Kode string `json:"kode"` // Identifikation af retskredsen
Navn string `json:"navn"` // Retskredsens navn
}

type Sogn struct {
Href string `json:"href"` // Sognets unikke URL
Kode string `json:"kode"` // Identifikation af sognet
Navn string `json:"navn"` // Sognets navn
}

type VejstykkeRef struct {
Href string `json:"href"`
Kode string `json:"kode"` // Vejkoden. 4 cifre.
Navn string `json:"navn"` // Vejnavn. Der skelnes mellem store og små bogstaver.
}
13 changes: 13 additions & 0 deletions adresse.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package dawa

type Adresse struct {
Adgangsadresse AdgangsAdresse `json:"adgangsadresse"` // Adressens adgangsadresse
Adressebetegnelse string `json:"adressebetegnelse"` // (unknown)
Dør string `json:"dør"` // Dørbetegnelse. Tal fra 1 til 9999, små og store bogstaver samt tegnene / og -.
Etage string `json:"etage"` // Etagebetegnelse. Hvis værdi angivet kan den antage følgende værdier: tal fra 1 til 99, st, kl, kl2 op til kl9.
Historik Historik `json:"historik"` // Væsentlige tidspunkter for adressen
Href string `json:"href"` // Adgangsadressens URL.
ID string `json:"id"` // Adressens unikke id, f.eks. 0a3f5095-45ec-32b8-e044-0003ba298018.
Kvhx string `json:"kvhx"` // KVHX-nøgle. 19 tegn bestående af 4 cifre der repræsenterer kommunekode, 4 cifre der repræsenterer vejkode, 4 tegn der repræsenter husnr, 3 tegn der repræsenterer etage og 4 tegn der repræsenter dør.
Status int `json:"status"` // Adressens status. 1 indikerer en gældende adresse, 3 indikerer en foreløbig adresse.
}
97 changes: 97 additions & 0 deletions awstime.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
package dawa

import (
"encoding/gob"
"strings"
"time"
)

// Since this is not a standard encoded field, we must create out own type.
type AwsTime time.Time

var location *time.Location

func init() {
var err error
location, err = time.LoadLocation("Europe/Copenhagen")
if err != nil {
panic(err)
}
// Register it as Gob
gob.Register(AwsTime{})
}

// ParseTime will return the time encoding for a single field
// It the input must be AWS formatted encoding
func ParseTime(s string) (*AwsTime, error) {
result, err := time.ParseInLocation("2006-01-02T15:04:05.000", string(s), location)
if err != nil {
return nil, err
}
t := AwsTime(result)
return &t, nil
}

func (t AwsTime) MarshalText() (text []byte, err error) {
return t.MarshalJSON()
}

func (t *AwsTime) UnmarshalText(text []byte) error {
return t.UnmarshalJSON(text)
}

// UnmarshalJSON a single time field
// It will attempt AWS encoding, and if that fails standard UnmarshalJSON for time.Time
func (t *AwsTime) UnmarshalJSON(b []byte) error {
unquoted := strings.Trim(string(b), "\"")
result, err := time.ParseInLocation("2006-01-02T15:04:05.000", unquoted, location)

// Could not parse, attempt standard unmarshall
if err != nil {
var t2 time.Time
err = t2.UnmarshalJSON([]byte(unquoted))
if err != nil {
return err
}
*t = AwsTime(t2)
return nil
}

*t = AwsTime(result)
return nil
}

// Time will return the underlying time.Time object
func (t AwsTime) Time() time.Time {
return time.Time(t)
}

// MarshalJSON will send it as ordinary Javascipt date
func (t AwsTime) MarshalJSON() ([]byte, error) {
return time.Time(t).MarshalJSON()
}

// GobEncode (as time.Time)
func (t AwsTime) GobEncode() ([]byte, error) {
return time.Time(t).GobEncode()
}

// GobDecode (as time.Time)
func (t *AwsTime) GobDecode(data []byte) error {
return (*time.Time)(t).GobDecode(data)
}

/*
// GetBSON provides BSON encoding of the Kid
func (t AwsTime) GetBSON() (interface{}, error) {
return time.Time(t), nil
}
// SetBSON provides BSON decoding
func (t *AwsTime) SetBSON(raw bson.Raw) error {
var t2 time.Time
err := raw.Unmarshal(&t2)
*t = AwsTime(t2)
return errgo.Mask(err)
}
*/
36 changes: 36 additions & 0 deletions examples/adgangs-adresser-json.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import (
"github.com/klauspost/dawa"
"io"
"log"
"os"
"time"
)

func main() {
file, err := os.Open("adgangsadresser.json") // For read access.
if err != nil {
log.Fatal(err)
}

iter, err := aws.ImportAdgangsAdresserJSON(file)
if err != nil {
log.Fatal(err)
}

n := 0
t := time.Now()
for {
a, err := iter.Next()
if err == io.EOF {
log.Printf("Finished reading %d entries in %v.\n", n, time.Now().Sub(t))
return
}
if err != nil {
log.Fatal(err)
}
n++
log.Printf("Entry:%#v\n", a)
}
}
36 changes: 36 additions & 0 deletions examples/adgangsadresser-csv.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import (
"github.com/klauspost/dawa"
"io"
"log"
"os"
"time"
)

func main() {
file, err := os.Open("adgangsadresser.csv") // For read access.
if err != nil {
log.Fatal(err)
}

iter, err := aws.ImportAdgangsAdresserCSV(file)
if err != nil {
log.Fatal(err)
}

n := 0
t := time.Now()
for {
a, err := iter.Next()
if err == io.EOF {
log.Printf("Finished reading %d entries in %v.\n", n, time.Now().Sub(t))
return
}
if err != nil {
log.Fatal(err)
}
n++
log.Printf("Entry:%#v\n", a)
}
}
36 changes: 36 additions & 0 deletions examples/adgangsadresser-json.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import (
"github.com/klauspost/dawa"
"io"
"log"
"os"
"time"
)

func main() {
file, err := os.Open("adgangsadresser.json") // For read access.
if err != nil {
log.Fatal(err)
}

iter, err := aws.ImportAdgangsAdresserJSON(file)
if err != nil {
log.Fatal(err)
}

n := 0
t := time.Now()
for {
a, err := iter.Next()
if err == io.EOF {
log.Printf("Finished reading %d entries in %v.\n", n, time.Now().Sub(t))
return
}
if err != nil {
log.Fatal(err)
}
n++
log.Printf("Entry:%#v\n", a)
}
}
35 changes: 35 additions & 0 deletions examples/adresser-csv.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package main

import (
"github.com/klauspost/dawa"
"io"
"log"
"os"
"time"
)

func main() {
file, err := os.Open("adresser.csv") // For read access.
if err != nil {
log.Fatal(err)
}

iter, err := aws.ImportAdresserCSV(file)
if err != nil {
log.Fatal(err)
}
n := 0
t := time.Now()
for {
a, err := iter.Next()
if err == io.EOF {
log.Printf("Finished reading %d entries in %v.\n", n, time.Now().Sub(t))
return
}
if err != nil {
log.Fatal(err)
}
n++
log.Printf("Entry:%s\n", a.ID)
}
}
Loading

0 comments on commit 5ef2626

Please sign in to comment.