Add tiles management
This commit is contained in:
49
tiles/tiles-handler.go
Normal file
49
tiles/tiles-handler.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package tiles
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"git.coopgo.io/coopgo-platform/carpool-service/storage"
|
||||
"github.com/paulmach/orb"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
type TilesHandler struct {
|
||||
Config *viper.Viper
|
||||
PersistentStorage storage.Storage
|
||||
|
||||
CachedTileset map[string]Tileset
|
||||
}
|
||||
|
||||
func NewTilesHandler(cfg *viper.Viper, persistantStorage storage.Storage) (*TilesHandler, error) {
|
||||
return &TilesHandler{
|
||||
Config: cfg,
|
||||
PersistentStorage: persistantStorage,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetTiles retrieves tiles
|
||||
func (h *TilesHandler) GetTiles(driverOrPassenger string, date time.Time, points ...orb.Point) (*Tileset, error) {
|
||||
result := Tileset{}
|
||||
|
||||
grid_ids := []GridId{}
|
||||
|
||||
nb_points := len(points)
|
||||
|
||||
if nb_points > 1 {
|
||||
grid_ids = LineStringGridIds(orb.LineString(points))
|
||||
} else if nb_points == 1 {
|
||||
grid_ids = []GridId{PointGridId(points[0])}
|
||||
}
|
||||
|
||||
dateString := date.Format("2006-01-02")
|
||||
for _, gid := range grid_ids {
|
||||
tile, err := h.GetTile(driverOrPassenger, date, gid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result[dateString] = tile
|
||||
}
|
||||
|
||||
return &result, nil
|
||||
}
|
||||
Reference in New Issue
Block a user