-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathzip.go
More file actions
56 lines (51 loc) · 1.36 KB
/
Copy pathzip.go
File metadata and controls
56 lines (51 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package elevation
import (
"archive/zip"
"encoding/binary"
"path/filepath"
"strings"
)
func parseFilename(name string) string {
return strings.TrimSuffix(filepath.Base(name), filepath.Ext(name))
}
func ProcessZippedHGT(zr *zip.ReadCloser) ([]HGTRecord, error) {
zf := zr.File[0]
fname := zr.File[0].Name
lat, lng, err := ParseTileName(parseFilename(fname))
if err != nil {
return nil, err
}
f, err := zf.Open()
if err != nil {
return nil, err
}
defer f.Close()
return ProcessHGTFile(f, lat, lng)
}
func GetDataFromZip(zr *zip.ReadCloser, resolution Resolution) ([]int16, int, int, error) {
zf := zr.File[0]
fname := zr.File[0].Name
tileLat, tileLng, err := ParseTileName(parseFilename(fname))
if err != nil {
return nil, tileLat, tileLng, err
}
f, err := zf.Open()
if err != nil {
return nil, tileLat, tileLng, err
}
defer f.Close()
data := make([]int16, resolution.Gridsize())
err = binary.Read(f, binary.BigEndian, data)
if err != nil {
return nil, tileLat, tileLng, err
}
return data, tileLat, tileLng, nil
}
// get the elevation of a (lat,lng) pair from a zip
func GetElevationFromZip(zr *zip.ReadCloser, lat float64, lng float64, resolution Resolution) (float64, error) {
data, tileLat, tileLng, err := GetDataFromZip(zr, resolution)
if err != nil {
return -1, err
}
return GetElevation(data, resolution, tileLat, tileLng, lat, lng)
}