package service import ( "fmt" "net/http" "strconv" "git.zhouxhere.com/zhouxhere/maptile/util/maptool" "github.com/labstack/echo/v4" ) // GetMBTilesByName 获取指定名称的MBTiles瓦片 // @Summary 获取指定名称的MBTiles瓦片 // @Description 获取指定名称的MBTiles瓦片 // @Tags MBTiles // @Accept json // @Produce json // @Param name path string true "MBTiles名称" // @Success 200 {object} model.TileJSON // @Router /mbtiles/{name} [get] func (s *MapService) GetMBTilesByName(c echo.Context) error { name := c.Param("name") if ok := s.store.Tile.CheckPool(maptool.MBTilesName, name); !ok { return c.String(http.StatusBadRequest, "MBTiles not found") } data, err := s.store.Tile.GetTileJSON(maptool.MBTilesName, name) if err != nil { return c.String(http.StatusBadRequest, "Failed to get metadata") } data.Tiles = []string{fmt.Sprintf("http://localhost:8080/map/mbtiles/%s/{z}/{x}/{y}", name)} return c.JSON(http.StatusOK, data) } // GetMBTilesByNameAndZAndXAndY 获取指定名称、z、x、y的MBTiles瓦片 // @Summary 获取指定名称、z、x、y的MBTiles瓦片 // @Description 获取指定名称、z、x、y的MBTiles瓦片 // @Tags MBTiles // @Accept json // @Produce application/x-protobuf // @Param name path string true "MBTiles名称" // @Param z path string true "z值" // @Param x path string true "x值" // @Param y path string true "y值" // @Success 200 {string} string "成功" // @Router /mbtiles/{name}/{z}/{x}/{y} [get] func (s *MapService) GetMBTilesByNameAndZAndXAndY(c echo.Context) error { name := c.Param("name") z := c.Param("z") zValue, err := strconv.Atoi(z) if err != nil { return c.String(http.StatusBadRequest, "Invalid z value") } x := c.Param("x") xValue, err := strconv.Atoi(x) if err != nil { return c.String(http.StatusBadRequest, "Invalid x value") } y := c.Param("y") yValue, err := strconv.Atoi(y) if err != nil { return c.String(http.StatusBadRequest, "Invalid y value") } if ok := s.store.Tile.CheckPool(maptool.MBTilesName, name); !ok { return c.String(http.StatusBadRequest, "MBTiles not found") } data, err := s.store.Tile.GetTile(maptool.MBTilesName, name, zValue, xValue, yValue) if err != nil { return c.String(http.StatusNotFound, "Tile not found") } if len(data) > 0 && data[0] == 0x1f && data[1] == 0x8b { c.Response().Header().Set("Content-Encoding", "gzip") } return c.Blob(http.StatusOK, "application/x-protobuf", data) }