teryt

package module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 22, 2020 License: Apache-2.0 Imports: 7 Imported by: 0

README

teryt CI

TERYT - Krajowy Rejestr Urzędowy Podziału Terytorialnego Kraju is an Polish official registry of country administrative division.

Source: http://eteryt.stat.gov.pl/eTeryt/rejestr_teryt/udostepnianie_danych/baza_teryt/uzytkownicy_indywidualni/pobieranie/pliki_pelne_struktury.aspx

The registry has four parts:

  • TERC - identifiers and names of administrative units,
  • SIMC - identifiers nad names of places,
  • BREC - statistical regions and census areas,
  • NOBC - (it includes ULIC), address identification of streets, estate, buildings and apartments.

This library provides parser for the TERC, SIMC, ULIC datasets.

The full data files are available at official GUS website: http://eteryt.stat.gov.pl/eTeryt/rejestr_teryt/udostepnianie_danych/baza_teryt/uzytkownicy_indywidualni/pobieranie/pobieranie.aspx?contrast=default

Install

go get github.com/datainq/teryt

Usage

You need to download data files. After loading you can work on it.

Check example search program in cmd/search.go. You can run it by executing in a main repo directory:

> go run cmd/search.go -simc data/SIMC_Urzedowy_2020-09-26.zip -terc data/TERC_Urzedowy_2020-09-26.zip

INFO[0000] terc: data/TERC_Urzedowy_2020-09-26.zip
INFO[0000] simc: data/SIMC_Urzedowy_2020-09-26.zip
>Olsztyn
search for "olsztyn"
Results: (24.767138ms)
0. dist 0: WARMIŃSKO-MAZURSKIE Olsztyn (miasto na prawach powiatu)
1. dist 0: ŚLĄSKIE częstochowski Olsztyn (gmina wiejska)
2. dist 0: ŚLĄSKIE częstochowski Olsztyn Olsztyn (wieś)
3. dist 1: WIELKOPOLSKIE wolsztyński Wolsztyn (gmina miejsko-wiejska)
4. dist 1: WIELKOPOLSKIE wolsztyński Wolsztyn (miasto)
5. dist 1: WIELKOPOLSKIE wolsztyński Wolsztyn (obszar wiejski)
6. dist 1: LUBELSKIE bialski Rokitno Olszyn (wieś)
7. dist 1: WIELKOPOLSKIE wolsztyński Wolsztyn Wolsztyn (miasto)
8. dist 1: WIELKOPOLSKIE czarnkowsko-trzcianecki Wieleń Folsztyn (wieś)
9. dist 2: DOLNOŚLĄSKIE lubański Olszyna (gmina miejsko-wiejska)
>

Benchmarks

go test -test.v -test.bench ^BenchmarkSearch_Search.*$ -test.run ^$ -benchtime=5s
goos: linux
goarch: amd64
pkg: github.com/datainq/teryt/search
BenchmarkSearch_SearchOld
BenchmarkSearch_SearchOld-8   	     172	  34626860 ns/op	 1804163 B/op	  114175 allocs/op
BenchmarkSearch_Search
BenchmarkSearch_Search-8      	     770	   7788946 ns/op	  923129 B/op	   57257 allocs/op
BenchmarkSearch_SearchV3
BenchmarkSearch_SearchV3/parallel-1
BenchmarkSearch_SearchV3/parallel-1-8         	     901	   6752492 ns/op	     690 B/op	      22 allocs/op
BenchmarkSearch_SearchV3/parallel-2
BenchmarkSearch_SearchV3/parallel-2-8         	    1743	   3525559 ns/op	    1055 B/op	      28 allocs/op
BenchmarkSearch_SearchV3/parallel-3
BenchmarkSearch_SearchV3/parallel-3-8         	    2450	   2430533 ns/op	    1412 B/op	      34 allocs/op
BenchmarkSearch_SearchV3/parallel-4
BenchmarkSearch_SearchV3/parallel-4-8         	    3187	   2001791 ns/op	    1778 B/op	      40 allocs/op
BenchmarkSearch_SearchV3/parallel-5
BenchmarkSearch_SearchV3/parallel-5-8         	    2359	   2427669 ns/op	    2154 B/op	      46 allocs/op
BenchmarkSearch_SearchV3/parallel-6
BenchmarkSearch_SearchV3/parallel-6-8         	    2626	   2103522 ns/op	    2491 B/op	      52 allocs/op
BenchmarkSearch_SearchV3/parallel-7
BenchmarkSearch_SearchV3/parallel-7-8         	    2953	   1835657 ns/op	    2869 B/op	      58 allocs/op
BenchmarkSearch_SearchV3/parallel-8
BenchmarkSearch_SearchV3/parallel-8-8         	    3070	   1693271 ns/op	    3211 B/op	      64 allocs/op
PASS
ok  	github.com/datainq/teryt/search	84.667s

Benchmark of levenstein function

/tmp/___BenchmarkAll_in_github_com_datainq_teryt_search -test.v -test.bench ^\QBenchmarkAll\E$ -test.run ^$
goos: linux
goarch: amd64
pkg: github.com/datainq/teryt/search

BenchmarkAll

BenchmarkAll/ASCII
BenchmarkAll/ASCII/agniva
BenchmarkAll/ASCII/agniva-8  	 3696501	       319 ns/op
BenchmarkAll/ASCII/m1ome
BenchmarkAll/ASCII/m1ome-8   	 2402422	       501 ns/op
BenchmarkAll/ASCII/arbovm
BenchmarkAll/ASCII/arbovm-8  	 2978025	       401 ns/op
BenchmarkAll/ASCII/dgryski
BenchmarkAll/ASCII/dgryski-8 	 2841715	       419 ns/op
BenchmarkAll/ASCII/datainq
BenchmarkAll/ASCII/datainq-8 	 3842545	       306 ns/op
BenchmarkAll/ASCII/datainq2
BenchmarkAll/ASCII/datainq2-8         	 4183891	       283 ns/op

BenchmarkAll/Polish
BenchmarkAll/Polish/agniva
BenchmarkAll/Polish/agniva-8          	 3356847	       357 ns/op
BenchmarkAll/Polish/m1ome
BenchmarkAll/Polish/m1ome-8           	 2727634	       436 ns/op
BenchmarkAll/Polish/arbovm
BenchmarkAll/Polish/arbovm-8          	 3106969	       378 ns/op
BenchmarkAll/Polish/dgryski
BenchmarkAll/Polish/dgryski-8         	 3026116	       396 ns/op
BenchmarkAll/Polish/datainq
BenchmarkAll/Polish/datainq-8         	 3573074	       336 ns/op
BenchmarkAll/Polish/datainq2
BenchmarkAll/Polish/datainq2-8        	 3883668	       304 ns/op

BenchmarkAll/French
BenchmarkAll/French/agniva
BenchmarkAll/French/agniva-8          	 2499796	       481 ns/op
BenchmarkAll/French/m1ome
BenchmarkAll/French/m1ome-8           	 3454462	       340 ns/op
BenchmarkAll/French/arbovm
BenchmarkAll/French/arbovm-8          	 2388702	       489 ns/op
BenchmarkAll/French/dgryski
BenchmarkAll/French/dgryski-8         	 2227182	       544 ns/op
BenchmarkAll/French/datainq
BenchmarkAll/French/datainq-8         	 2646777	       462 ns/op
BenchmarkAll/French/datainq2
BenchmarkAll/French/datainq2-8        	 2740575	       428 ns/op

BenchmarkAll/Nordic
BenchmarkAll/Nordic/agniva
BenchmarkAll/Nordic/agniva-8          	 1236994	       986 ns/op
BenchmarkAll/Nordic/m1ome
BenchmarkAll/Nordic/m1ome-8           	 2088196	       520 ns/op
BenchmarkAll/Nordic/arbovm
BenchmarkAll/Nordic/arbovm-8          	 1243872	       952 ns/op
BenchmarkAll/Nordic/dgryski
BenchmarkAll/Nordic/dgryski-8         	 1000000	      1044 ns/op
BenchmarkAll/Nordic/datainq
BenchmarkAll/Nordic/datainq-8         	 1356010	       877 ns/op
BenchmarkAll/Nordic/datainq2
BenchmarkAll/Nordic/datainq2-8        	 1271364	       881 ns/op

BenchmarkAll/Tibetan
BenchmarkAll/Tibetan/agniva
BenchmarkAll/Tibetan/agniva-8         	 1413631	       873 ns/op
BenchmarkAll/Tibetan/m1ome
BenchmarkAll/Tibetan/m1ome-8          	 1459371	       750 ns/op
BenchmarkAll/Tibetan/arbovm
BenchmarkAll/Tibetan/arbovm-8         	 1330542	       961 ns/op
BenchmarkAll/Tibetan/dgryski
BenchmarkAll/Tibetan/dgryski-8        	 1212814	      1022 ns/op
BenchmarkAll/Tibetan/datainq
BenchmarkAll/Tibetan/datainq-8        	 1391295	       867 ns/op
BenchmarkAll/Tibetan/datainq2
BenchmarkAll/Tibetan/datainq2-8       	 1497633	       811 ns/op
PASS

Process finished with exit code 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	RodzGmi_miejska                = RodzGmi(1)
	RodzGmi_wiejska                = RodzGmi(2)
	RodzGmi_miejskoWiejska         = RodzGmi(3)
	RodzGmi_miastoWGminieMW        = RodzGmi(4)
	RodzGmi_obszarWiejskiWGminieMW = RodzGmi(5)
	RodzGmi_dzielnicaWarszawy      = RodzGmi(8)
	RodzGmi_delegatura             = RodzGmi(9)
)
View Source
var SIMCParser = &csvlib.RowParser{
	P: []csvlib.Parser{
		csvlib.Int32Parser{Name: "WOJ", Optional: true, Default: 0},
		csvlib.Int32Parser{Name: "POW", Optional: true, Default: 0},
		csvlib.Int32Parser{Name: "GMI", Optional: true, Default: 0},
		csvlib.Int32Parser{Name: "RODZ_GMI", Optional: true, Default: 0},
		csvlib.Int32Parser{Name: "RM", Optional: true, Default: 0},
		csvlib.Int32Parser{Name: "MZ", Optional: true, Default: 0},
		csvlib.StringParser{Name: "NAZWA"},
		csvlib.StringParser{Name: "SYM"},
		csvlib.StringParser{Name: "SYMPOD"},
		csvlib.TimeParser{Name: "STAN_NA", Layout: "2006-01-02"},
	},
}
View Source
var TERCParser = &csvlib.RowParser{
	P: []csvlib.Parser{
		csvlib.Int32Parser{Name: "WOJ", Optional: true, Default: 0},
		csvlib.Int32Parser{Name: "POW", Optional: true, Default: 0},
		csvlib.Int32Parser{Name: "GMI", Optional: true, Default: 0},
		csvlib.Int32Parser{Name: "RODZ", Optional: true, Default: 0},
		csvlib.StringParser{Name: "NAZWA"},
		csvlib.StringParser{Name: "NAZDOD"},
		csvlib.TimeParser{Name: "STAN_NA", Layout: "2006-02-02"},
	},
}
View Source
var ULICParser = &csvlib.RowParser{
	P: []csvlib.Parser{
		csvlib.Int32Parser{Name: "WOJ"},
		csvlib.Int32Parser{Name: "POW"},
		csvlib.Int32Parser{Name: "GMI"},
		csvlib.Int32Parser{Name: "RODZ_GMI"},
		csvlib.StringParser{Name: "SYM"},
		csvlib.StringParser{Name: "SYM_UL"},
		csvlib.StringParser{Name: "CECHA"},
		csvlib.StringParser{Name: "NAZWA_1"},
		csvlib.StringParser{Name: "NAZWA_2"},
		csvlib.TimeParser{Name: "STAN_NA", Layout: "2006-01-02"},
	},
}

Functions

func GetRodzMiejscowosci

func GetRodzMiejscowosci(v string) int

Types

type Config

type Config struct {
	Separator string
}

type Location

type Location struct {
	ID       string
	Type     string
	Name     string
	Parts    []string
	FullName string

	ParentID string
	Parent   *Location
	Children []*Location
}

func BuildLocations

func BuildLocations(tercData []SetTERC, simcData []SetSIMC) (*Location, error)

func (*Location) Build

func (l *Location) Build(cfg Config)

type RodzGmi

type RodzGmi int

func (RodzGmi) Name

func (r RodzGmi) Name() string

type RodzMiejscowosci

type RodzMiejscowosci int
var (
	RodzMiej_CzescMiejscowosci     RodzMiejscowosci = 0
	RodzMiej_Wies                  RodzMiejscowosci = 1
	RodzMiej_Kolonia               RodzMiejscowosci = 2
	RodzMiej_Przysiolek            RodzMiejscowosci = 3
	RodzMiej_Osada                 RodzMiejscowosci = 4
	RodzMiej_OsadaLesna            RodzMiejscowosci = 5
	RodzMiej_Osiedle               RodzMiejscowosci = 6
	RodzMiej_SchroniskoTurystyczne RodzMiejscowosci = 7
	RodzMiej_DzielnicaMStWarszawy  RodzMiejscowosci = 95
	RodzMiej_Miasto                RodzMiejscowosci = 96
	RodzMiej_Delegatura            RodzMiejscowosci = 98
	RodzMiej_CzescMiasta           RodzMiejscowosci = 99
)

func (RodzMiejscowosci) Name

func (r RodzMiejscowosci) Name() string

type SetSIMC

type SetSIMC struct {
	// WOJ - symbol województwa - 2 zn. C
	Woj int

	// POW - symbol powiatu - 2 zn. C
	Pow int

	// GMI - symbol gminy - 2 zn. C
	Gmi int

	// RODZ_GMI - symbol rodzaju jednostki
	// 1 - gmina miejska,
	// 2 - gmina wiejska,
	// 3 - gmina miejsko-wiejska,
	// 4 - miasto w gminie miejsko-wiejskiej,
	// 5 - obszar wiejski w gminie miejsko-wiejskiej,
	// 8 - dzielnica w m.st. Warszawa,
	// 9 - delegatury miast: Kraków, Łódź, Poznań i Wrocław
	// 1 zn. C
	RodzGmi RodzGmi

	// RM - rodzaj miejscowości
	// 00 - część miejscowości
	// 01 - wieś
	// 02 - kolonia
	// 03 - przysiółek
	// 04 - osada
	// 05 - osada leśna
	// 06 - osiedle
	// 07 - schronisko turystyczne
	// 95 - dzielnica m. st. Warszawy
	// 96 - miasto
	// 98 - delegatura
	// 99 - część miasta
	// 2 zn. C
	Rm RodzMiejscowosci

	// MZ - występowanie nazwy zwyczajowej (0-tak,1-nie) - 1 zn. C
	Mz bool

	// NAZWA - nazwa miejscowości - 100 zn. C
	Nazwa string

	// SYM - identyfikator miejscowości - 7 zn. C
	Sym string

	// SYMPOD - identyfikator miejscowości podstawowej
	// - dla części miejscowości wiejskich - identyfikator miejscowości, do której dana część należy,
	// - dla części miast - identyfikator danego miasta (w miastach posiadających dzielnice/delegatury - identyfikator tej jednostki).
	// 7 zn. C
	SymPod string

	// STAN_NA - data aktualizacji danych w podsystemie SIMC w formacie RRRR-MM-DD. - 10 zn. C
	StanNa time.Time
}

func SIMCFromFile

func SIMCFromFile(file string) ([]SetSIMC, error)

func SIMCFromReader

func SIMCFromReader(reader io.Reader) ([]SetSIMC, error)

type SetTERC

type SetTERC struct {
	// WOJ - symbol województwa - 2 zn. C
	Woj int

	// POW - symbol powiatu - 2 zn. C
	Pow int

	// GMI - symbol gminy - 2 zn. C
	Gmi int

	// RODZ - symbol rodzaju jednostki
	// 1 - gmina miejska,
	// 2 - gmina wiejska,
	// 3 - gmina miejsko-wiejska,
	// 4 - miasto w gminie miejsko-wiejskiej,
	// 5 - obszar wiejski w gminie miejsko-wiejskiej,
	// 8 - dzielnica w m.st. Warszawa,
	// 9 - delegatury miast: Kraków, Łódź, Poznań i Wrocław
	// 1 zn. C
	Rodz int

	// NAZWA - nazwa województwa/ powiatu/ gminy - 100 zn. C
	Nazwa string

	// NAZDOD - określenie jednostki - (województwo; powiat; miasto na prawach powiatu; miasto stołeczne, na prawach powiatu; gmina miejska, miasto stołeczne; gmina miejska; gmina wiejska; gmina miejsko-wiejska; miasto; obszar wiejski; dzielnica; delegatura) -50 zn. C
	Nazdod string

	// STAN_NA - data aktualizacji danych w systemie TERC w formacie RRRR-MM-DD - 10 zn. C
	StanNa time.Time
}

func TERCFromFile

func TERCFromFile(file string) ([]SetTERC, error)

func TERCFromReader

func TERCFromReader(reader io.Reader) ([]SetTERC, error)

type SetULIC

type SetULIC struct {
	// WOJ - symbol województwa - 2 zn. C
	Woj int

	// POW - symbol powiatu - 2 zn. C
	Pow int

	// GMI - symbol gminy - 2 zn. C
	Gmi int

	// RODZ_GMI - symbol rodzaju jednostki
	// 1 - gmina miejska,
	// 2 - gmina wiejska,
	// 3 - gmina miejsko-wiejska,
	// 4 - miasto w gminie miejsko-wiejskiej,
	// 5 - obszar wiejski w gminie miejsko-wiejskiej,
	// 8 - dzielnica w m.st. Warszawa,
	// 9 - delegatury miast: Kraków, Łódź, Poznań i Wrocław
	// 1 zn. C
	RodzGmi RodzGmi

	// SYM - identyfikator miejscowości - 7 zn. C
	Sym string

	// SYM_UL - identyfikator nazwy ulicy - 5 zn. C
	SymUl string

	// CECHA - określenie rodzaju ulicy - 5 zn. C
	// (ul., al., pl., skwer, bulw., rondo, park, rynek, szosa, droga, os.,
	// ogród, wyspa, wyb., inne)
	Cecha string

	// NAZWA_1 - część nazwy począwszy od słowa, które decyduje o pozycji
	// ulicy w układzie alfabetycznym, aż do końca nazwy - 100 zn. C
	Nazwa1 string

	// NAZWA_2 - pozostała część nazwy lub pole puste - 100 zn. C
	//
	// W przypadku, gdy pole Nazwa_2 nie jest puste, aby otrzymać nazwę ulicy
	// w pełnym brzmieniu, człony nazwy należy ułożyć w kolejności:
	// Nazwa_2, Nazwa_1.
	Nazwa2 string

	// STAN_NA - data aktualizacji danych w podsystemie ULIC w formacie RRRR-MM-DD. - 10 zn. C
	StanNa time.Time
}

func ULICFromFile

func ULICFromFile(file string) ([]SetULIC, error)

func ULICFromReader

func ULICFromReader(reader io.Reader) ([]SetULIC, error)

type SetWMRODZ

type SetWMRODZ struct {
	// RM - symbol rodzaju miejscowości - 2 zn. C
	Rm int

	// NAZWA_RM - nazwa rodzaju miejscowości - 100 zn. C
	NazwaRm string

	// STAN_NA - data aktualizacji danych w podsystemie WMRODZ w formacie RRRR-MM-DD. - 10 zn. C
	StanNa time.Time
}

Directories

Path Synopsis
search.go implements a super simple location search by name.
search.go implements a super simple location search by name.
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL