-
Notifications
You must be signed in to change notification settings - Fork 2
/
tiles.go
68 lines (64 loc) · 1.65 KB
/
tiles.go
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
57
58
59
60
61
62
63
64
65
66
67
68
package mbt
import (
"github.com/buckhx/diglet/mbt/mvt"
"github.com/buckhx/diglet/util"
"github.com/buckhx/mbtiles"
"github.com/buckhx/tiles"
)
type Tileset struct {
tileset *mbtiles.Tileset
args map[string]string
}
func InitTiles(mbtpath string, upsert bool, desc string, extent int) (t Tileset, err error) {
tiles.TileSize = extent
var ts *mbtiles.Tileset
if upsert {
ts, err = mbtiles.ReadTileset(mbtpath)
} else {
attrs := map[string]string{
"name": util.SlugBase(mbtpath),
"type": "overlay",
"version": "1",
"description": desc,
"format": "pbf.gz",
}
ts, err = mbtiles.InitTileset(mbtpath, attrs)
}
if err != nil {
return
}
t = Tileset{tileset: ts}
return
}
func (t Tileset) Build(source FeatureSource, layerName string, zmin, zmax int) (err error) {
//TODO goroutine per level
features, err := source.Publish(1) //TODO cores
if err != nil {
return err //shadowed
}
c, err := newFeatureCache(".feature.cache")
if err != nil {
return err //shadowed
}
defer c.close()
c.indexFeatures(features, zmax)
for tf := range c.tileFeatures(zmin, zmax) {
tile := tf.t
features := tf.f
util.Info("Building tile %v with %d features", tile, len(features))
aTile := mvt.NewTileAdapter(tile.X, tile.Y, tile.Z)
aLayer := aTile.NewLayer(layerName, tiles.TileSize)
for _, feature := range features {
//fmt.Println(feature, "\n", tile, "\n")
aFeature := MvtAdapter(feature, tile)
aLayer.AddFeature(aFeature)
}
gz, err := aTile.GetTileGz()
if err != nil {
return err //shadowed
}
//fmt.Println(tile, tile.QuadKey(), "\n")
t.tileset.WriteOSMTile(tile.X, tile.Y, tile.Z, gz)
}
return
}