Documentation
¶
Overview ¶
Package tzf is a package convert (lng,lat) to timezone.
Inspired by timezonefinder https://github.com/jannikmi/timezonefinder, fast python package for finding the timezone of any point on earth (coordinates) offline.
Index ¶
- Variables
- func SetDropPBTZ(opt *Option)
- type DefaultFinder
- type F
- func NewDefaultFinder() (F, error)
- func NewFinderFromCompressed(input *pb.CompressedTimezones, opts ...OptionFunc) (F, error)
- func NewFinderFromPB(input *pb.Timezones, opts ...OptionFunc) (F, error)
- func NewFinderFromRawJSON(input *convert.BoundaryFile, opts ...OptionFunc) (F, error)
- func NewFuzzyFinderFromPB(input *pb.PreindexTimezones) (F, error)
- type Finder
- type FuzzyFinder
- type Option
- type OptionFunc
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ErrNoTimezoneFound = errors.New("tzf: no timezone found")
Functions ¶
func SetDropPBTZ ¶ added in v0.9.2
func SetDropPBTZ(opt *Option)
SetDropPBTZ will make Finder not save github.com/ringsaturn/tzf/pb.Timezone in memory
Types ¶
type DefaultFinder ¶ added in v0.9.0
type DefaultFinder struct {
// contains filtered or unexported fields
}
DefaultFinder is a finder impl combine both FuzzyFinder and Finder.
It's designed for performance first and allow some not so correct return at some area.
func (*DefaultFinder) DataVersion ¶ added in v0.13.0
func (f *DefaultFinder) DataVersion() string
func (*DefaultFinder) GetTimezoneName ¶ added in v0.9.0
func (f *DefaultFinder) GetTimezoneName(lng float64, lat float64) string
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
)
func main() {
finder, err := tzf.NewDefaultFinder()
if err != nil {
panic(err)
}
fmt.Println(finder.GetTimezoneName(116.6386, 40.0786)) // In longitude-latitude order
}
Output: Asia/Shanghai
func (*DefaultFinder) GetTimezoneNames ¶ added in v0.10.0
func (f *DefaultFinder) GetTimezoneNames(lng float64, lat float64) ([]string, error)
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
)
func main() {
finder, err := tzf.NewDefaultFinder()
if err != nil {
panic(err)
}
fmt.Println(finder.GetTimezoneNames(87.6168, 43.8254)) // In longitude-latitude order
}
Output: [Asia/Shanghai Asia/Urumqi] <nil>
func (*DefaultFinder) TimezoneNames ¶ added in v0.9.0
func (f *DefaultFinder) TimezoneNames() []string
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
)
func main() {
finder, err := tzf.NewDefaultFinder()
if err != nil {
panic(err)
}
fmt.Println(finder.TimezoneNames())
}
type F ¶ added in v0.12.0
type F interface {
GetTimezoneName(lng float64, lat float64) string
GetTimezoneNames(lng float64, lat float64) ([]string, error)
TimezoneNames() []string
DataVersion() string
}
func NewDefaultFinder ¶ added in v0.9.0
func NewFinderFromCompressed ¶ added in v0.8.0
func NewFinderFromCompressed(input *pb.CompressedTimezones, opts ...OptionFunc) (F, error)
func NewFinderFromPB ¶
func NewFinderFromPB(input *pb.Timezones, opts ...OptionFunc) (F, error)
func NewFinderFromRawJSON ¶ added in v0.2.0
func NewFinderFromRawJSON(input *convert.BoundaryFile, opts ...OptionFunc) (F, error)
func NewFuzzyFinderFromPB ¶ added in v0.9.0
func NewFuzzyFinderFromPB(input *pb.PreindexTimezones) (F, error)
type Finder ¶
type Finder struct {
// contains filtered or unexported fields
}
Finder is based on point-in-polygon search algo.
Memory will use about 100MB if lite data and 1G if full data. Performance is very stable and very accuate.
func (*Finder) DataVersion ¶ added in v0.13.0
func (*Finder) GetTimezoneName ¶
GetTimezoneName will use alphabet order and return first matched result.
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
tzfrellite "github.com/ringsaturn/tzf-rel-lite"
pb "github.com/ringsaturn/tzf/gen/go/tzf/v1"
"google.golang.org/protobuf/proto"
)
func main() {
input := &pb.Timezones{}
if err := proto.Unmarshal(tzfrellite.LiteData, input); err != nil {
panic(err)
}
finder, _ := tzf.NewFinderFromPB(input)
fmt.Println(finder.GetTimezoneName(116.6386, 40.0786))
}
Output: Asia/Shanghai
func (*Finder) GetTimezoneNames ¶ added in v0.10.0
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
tzfrellite "github.com/ringsaturn/tzf-rel-lite"
pb "github.com/ringsaturn/tzf/gen/go/tzf/v1"
"google.golang.org/protobuf/proto"
)
func main() {
input := &pb.Timezones{}
if err := proto.Unmarshal(tzfrellite.LiteData, input); err != nil {
panic(err)
}
finder, _ := tzf.NewFinderFromPB(input)
fmt.Println(finder.GetTimezoneNames(87.6168, 43.8254))
}
Output: [Asia/Shanghai Asia/Urumqi] <nil>
func (*Finder) TimezoneNames ¶ added in v0.6.2
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
tzfrellite "github.com/ringsaturn/tzf-rel-lite"
pb "github.com/ringsaturn/tzf/gen/go/tzf/v1"
"google.golang.org/protobuf/proto"
)
func main() {
input := &pb.Timezones{}
if err := proto.Unmarshal(tzfrellite.LiteData, input); err != nil {
panic(err)
}
finder, _ := tzf.NewFinderFromPB(input)
fmt.Println(finder.TimezoneNames())
}
type FuzzyFinder ¶ added in v0.9.0
type FuzzyFinder struct {
// contains filtered or unexported fields
}
FuzzyFinder use a tile map to store timezone name. Data are made by github.com/ringsaturn/tzf/cmd/preindextzpb which powerd by github.com/ringsaturn/tzf/preindex.PreIndexTimezones.
func (*FuzzyFinder) DataVersion ¶ added in v0.13.0
func (f *FuzzyFinder) DataVersion() string
func (*FuzzyFinder) GetTimezoneName ¶ added in v0.9.0
func (f *FuzzyFinder) GetTimezoneName(lng float64, lat float64) string
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
tzfrellite "github.com/ringsaturn/tzf-rel-lite"
pb "github.com/ringsaturn/tzf/gen/go/tzf/v1"
"google.golang.org/protobuf/proto"
)
func main() {
input := &pb.PreindexTimezones{}
if err := proto.Unmarshal(tzfrellite.PreindexData, input); err != nil {
panic(err)
}
finder, _ := tzf.NewFuzzyFinderFromPB(input)
fmt.Println(finder.GetTimezoneName(116.6386, 40.0786)) // In longitude-latitude order
}
Output: Asia/Shanghai
func (*FuzzyFinder) GetTimezoneNames ¶ added in v0.10.0
func (f *FuzzyFinder) GetTimezoneNames(lng float64, lat float64) ([]string, error)
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
tzfrellite "github.com/ringsaturn/tzf-rel-lite"
pb "github.com/ringsaturn/tzf/gen/go/tzf/v1"
"google.golang.org/protobuf/proto"
)
func main() {
input := &pb.PreindexTimezones{}
if err := proto.Unmarshal(tzfrellite.PreindexData, input); err != nil {
panic(err)
}
finder, _ := tzf.NewFuzzyFinderFromPB(input)
fmt.Println(finder.GetTimezoneNames(87.6168, 43.8254))
}
Output: [Asia/Shanghai Asia/Urumqi] <nil>
func (*FuzzyFinder) TimezoneNames ¶ added in v0.11.2
func (f *FuzzyFinder) TimezoneNames() []string
Example ¶
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
tzfrellite "github.com/ringsaturn/tzf-rel-lite"
pb "github.com/ringsaturn/tzf/gen/go/tzf/v1"
"google.golang.org/protobuf/proto"
)
func main() {
input := &pb.PreindexTimezones{}
if err := proto.Unmarshal(tzfrellite.PreindexData, input); err != nil {
panic(err)
}
finder, _ := tzf.NewFuzzyFinderFromPB(input)
fmt.Println(finder.TimezoneNames())
}
type OptionFunc ¶ added in v0.9.2
type OptionFunc = func(opt *Option)
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
checkboundaryrelease
command
|
|
|
compresstzpb
command
CLI tool to reduce polygon filesize
|
CLI tool to reduce polygon filesize |
|
geojson2tzpb
command
CLI tool to convert GeoJSON based Timezone boundary to tzf's Probuf format.
|
CLI tool to convert GeoJSON based Timezone boundary to tzf's Probuf format. |
|
preindextzpb
command
CLI tool to preindex timezone shape.
|
CLI tool to preindex timezone shape. |
|
reducetzpb
command
CLI tool to reduce polygon filesize
|
CLI tool to reduce polygon filesize |
|
tzf
command
tzf-cli tool for local query.
|
tzf-cli tool for local query. |
|
gen
|
|
|
internal
|
|
|
maps
Package maps defines various functions useful with maps of any type.
|
Package maps defines various functions useful with maps of any type. |
|
Package preindex
|
Package preindex |
|
Package reduce could reduce Polygon size both polygon lines and float precise.
|
Package reduce could reduce Polygon size both polygon lines and float precise. |
