-
-
Notifications
You must be signed in to change notification settings - Fork 191
/
debug.go
105 lines (86 loc) · 2.19 KB
/
debug.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// The debug provider returns features that are helpful for debugging a tile
// including a box for the tile edges and a point in the middle of the tile
// with z,x,y values encoded
package debug
import (
"context"
"fmt"
"github.com/go-spatial/geom"
"github.com/go-spatial/tegola"
"github.com/go-spatial/tegola/dict"
"github.com/go-spatial/tegola/provider"
)
const Name = "debug"
const (
LayerDebugTileOutline = "debug-tile-outline"
LayerDebugTileCenter = "debug-tile-center"
)
func init() {
provider.Register(Name, NewTileProvider, nil)
}
// NewProvider Setups a debug provider. there are not currently any config params supported
func NewTileProvider(config dict.Dicter) (provider.Tiler, error) {
return &Provider{}, nil
}
// Provider provides the debug provider
type Provider struct{}
func (p *Provider) TileFeatures(ctx context.Context, layer string, tile provider.Tile, fn func(f *provider.Feature) error) error {
// get tile bounding box
ext, srid := tile.Extent()
switch layer {
case "debug-tile-outline":
debugTileOutline := provider.Feature{
ID: 0,
Geometry: ext.AsPolygon(),
SRID: srid,
Tags: map[string]interface{}{
"type": "debug_buffer_outline",
},
}
if err := fn(&debugTileOutline); err != nil {
return err
}
case "debug-tile-center":
xlen := ext.XSpan()
ylen := ext.YSpan()
z, x, y := tile.ZXY()
debugTileCenter := provider.Feature{
ID: 1,
Geometry: geom.Point{
// Minx
ext.MinX() + (xlen / 2),
// Miny
ext.MinY() + (ylen / 2),
},
SRID: srid,
Tags: map[string]interface{}{
"type": "debug_text",
"zxy": fmt.Sprintf("Z:%v, X:%v, Y:%v", z, x, y),
},
}
if err := fn(&debugTileCenter); err != nil {
return err
}
}
return nil
}
// Layers returns information about the various layers the provider supports
func (p *Provider) Layers() ([]provider.LayerInfo, error) {
layers := []Layer{
{
name: "debug-tile-outline",
geomType: geom.Line{},
srid: tegola.WebMercator,
},
{
name: "debug-tile-center",
geomType: geom.Point{},
srid: tegola.WebMercator,
},
}
var ls []provider.LayerInfo
for i := range layers {
ls = append(ls, layers[i])
}
return ls, nil
}