package app import ( "mapserver/colormapping" "mapserver/db" "mapserver/mapblockaccessor" "mapserver/mapblockrenderer" "mapserver/mapobjectdb" "mapserver/params" "mapserver/tilerenderer" "mapserver/worldconfig" "github.com/sirupsen/logrus" "errors" ) func Setup(p params.ParamsType, cfg *Config) (*App, error) { a := App{} a.Params = p a.Config = cfg //Parse world config a.Worldconfig = worldconfig.Parse("world.mt") logrus.WithFields(logrus.Fields{"version": Version}).Info("Starting mapserver") if a.Worldconfig.Backend != worldconfig.BACKEND_SQLITE3 { return nil, errors.New("no supported backend found!") } //create db accessor var err error a.Blockdb, err = db.NewSqliteAccessor("map.sqlite") if err != nil { return nil, err } //migrate block db err = a.Blockdb.Migrate() if err != nil { return nil, err } //mapblock accessor a.BlockAccessor = mapblockaccessor.NewMapBlockAccessor(a.Blockdb) //color mapping a.Colormapping = colormapping.NewColorMapping() err = a.Colormapping.LoadVFSColors(false, "/colors.txt") if err != nil { return nil, err } //mapblock renderer a.Mapblockrenderer = mapblockrenderer.NewMapBlockRenderer(a.BlockAccessor, a.Colormapping) //tile database a.Objectdb, err = mapobjectdb.NewSqliteAccessor("mapserver.sqlite") if err != nil { return nil, err } //migrate tile database err = a.Objectdb.Migrate() if err != nil { return nil, err } //setup tile renderer a.Tilerenderer = tilerenderer.NewTileRenderer( a.Mapblockrenderer, a.Objectdb, a.Blockdb, a.Config.Layers, ) return &a, nil }