hgt

package module
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Apr 21, 2021 License: MIT Imports: 10 Imported by: 3

README

HGT

Go module to read elevation data from SRTM HGT files.

Supported data

  • 30m (1 arc second)
  • 90m (3 arc seconds)

Usage

Read from data directory
h, err := hgt.OpenDataDir("data", nil)
if err != nil {
    log.Fatal(err)
}
e, r, err := h.ElevationAt(48.7162, 21.2613)
if err != nil {
    log.Println(err)
}
log.Printf("elevation=%d resolution=%d", e, r)

Example using custom cache with module golang-lru.

lruCache, err := lru.NewWithEvict(1000, func(key, value interface{}) {
    if file, ok := value.(*hgt.File); ok {
        file.Close()
    }
})
if err != nil {
    log.Fatal(err)
}
cache := &hgt.Cache{
    OnGet: func(key string) (*hgt.File, bool) {
        if v, ok := lruCache.Get(key); ok {
            return v.(*hgt.File), true
        }
        return nil, false
    },
    OnAdd: func(key string, value *hgt.File) {
        lruCache.Add(key, value)
    },
    OnClear: func() error {
        lruCache.Purge()
        return nil
    },
}
h, err := hgt.OpenDataDir("data", &hgt.DataDirOptions{
    Cache:          cache,
    RangeValidator: hgt.DefaultRangeValidator(),
})
if err != nil {
    log.Fatal(err)
}
defer h.Close()
e, r, err := h.ElevationAt(48.7162, 21.2613)
if err != nil {
    log.Println(err)
}
log.Printf("elevation=%d resolution=%d", e, r)
Read from single file
h, err := hgt.Open("data/N48E021.hgt", nil)
if err != nil {
    log.Fatal(err)
}
defer h.Close()
e, r, err := h.ElevationAt(48.7162, 21.2613)
if err != nil {
    log.Println(err)
}
log.Printf("elevation=%d resolution=%d", e, r)
Range validator

Default range validator respects SRTM latitude limits. For other datasets it is possible to configure custom validator.

h, err := hgt.OpenDataDir("data", &hgt.DataDirOptions{
    Cache: hgt.DefaultCache(),
    RangeValidator: func(lat, lon float64) error {
        if lat < 48.5 || lat >= 48.7 {
            return hgt.ErrorOutOfRange
        }
        return nil
    },
})
if err != nil {
    log.Fatal(err)
}

License

Licensed under MIT license.

Documentation

Index

Constants

View Source
const (
	// Resolution1ArcSecond ...
	Resolution1ArcSecond = 1
	// Resolution3ArcSecond ...
	Resolution3ArcSecond = 3
)

Variables

View Source
var (
	// ErrorUnsupportedResolution ...
	ErrorUnsupportedResolution = errors.New("unsupported resolution")
	// ErrorInvalidFileName ...
	ErrorInvalidFileName = errors.New("invalid file name")
	// ErrorOutOfRange ...
	ErrorOutOfRange = errors.New("out of range")
)

Functions

func DefaultRangeValidator

func DefaultRangeValidator() func(lat, lon float64) error

DefaultRangeValidator ...

Types

type Cache

type Cache struct {
	OnGet   func(key string) (*File, bool)
	OnAdd   func(key string, value *File)
	OnClear func() error
}

Cache ...

func DefaultCache

func DefaultCache() *Cache

DefaultCache ...

type DataDir

type DataDir struct {
	// contains filtered or unexported fields
}

DataDir ...

func OpenDataDir

func OpenDataDir(dir string, options *DataDirOptions) (*DataDir, error)

OpenDataDir ...

func (*DataDir) Close

func (h *DataDir) Close() error

Close ...

func (*DataDir) ElevationAt

func (h *DataDir) ElevationAt(lat, lon float64) (int16, int, error)

ElevationAt ...

type DataDirOptions

type DataDirOptions struct {
	Cache          *Cache
	RangeValidator func(lat, lon float64) error
}

DataDirOptions ...

type File

type File struct {
	// contains filtered or unexported fields
}

File ...

func Open

func Open(name string, options *FileOptions) (*File, error)

Open ...

func (*File) Close

func (f *File) Close() error

Close ...

func (*File) ElevationAt

func (f *File) ElevationAt(lat, lon float64) (int16, int, error)

ElevationAt ...

func (*File) File

func (f *File) File() *os.File

File ...

type FileOptions

type FileOptions struct {
	RangeValidator       func(lat, lon float64) error
	IgnoreTileValidation bool
}

FileOptions ...

Jump to

Keyboard shortcuts

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