This repository has been archived by the owner on Apr 9, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
22 changed files
with
6,041 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
} |
Oops, something went wrong.