mirror of
https://bitbucket.org/s_l_teichmann/mtsatellite
synced 2024-11-17 15:48:17 +01:00
mtwebmapper: Cleaned up gorilla mux usage a bit. Added stub for post target to get changes from mtredisalize server.
This commit is contained in:
parent
e81051a84c
commit
ed9e37e892
@ -15,31 +15,42 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var (
|
var (
|
||||||
port int
|
webPort int
|
||||||
host string
|
webHost string
|
||||||
webDir string
|
webDir string
|
||||||
mapDir string
|
mapDir string
|
||||||
|
redisPort int
|
||||||
|
redisHost string
|
||||||
)
|
)
|
||||||
flag.IntVar(&port, "port", 8808, "port of the web server")
|
flag.IntVar(&webPort, "web-port", 8808, "port of the web server")
|
||||||
flag.IntVar(&port, "p", 8808, "port of the web server (shorthand)")
|
flag.IntVar(&webPort, "p", 8808, "port of the web server (shorthand)")
|
||||||
flag.StringVar(&host, "host", "localhost", "address to bind")
|
flag.StringVar(&webHost, "web-host", "localhost", "address to bind web server")
|
||||||
flag.StringVar(&host, "h", "localhost", "address to bind (shorthand)")
|
flag.StringVar(&webHost, "h", "localhost", "address to bind web server(shorthand)")
|
||||||
flag.StringVar(&webDir, "web", "web", "static served web files.")
|
flag.StringVar(&webDir, "web", "web", "static served web files.")
|
||||||
flag.StringVar(&webDir, "w", "web", "static served web files (shorthand)")
|
flag.StringVar(&webDir, "w", "web", "static served web files (shorthand)")
|
||||||
flag.StringVar(&mapDir, "map", "map", "directory of prerendered tiles")
|
flag.StringVar(&mapDir, "map", "map", "directory of prerendered tiles")
|
||||||
flag.StringVar(&mapDir, "m", "map", "directory of prerendered tiles (shorthand)")
|
flag.StringVar(&mapDir, "m", "map", "directory of prerendered tiles (shorthand)")
|
||||||
|
flag.StringVar(&redisHost, "redis-host", "", "address of the backend Redis server")
|
||||||
|
flag.StringVar(&redisHost, "rh", "", "address of the backend Redis server (shorthand)")
|
||||||
|
flag.IntVar(&redisPort, "redis-port", 6379, "port of the backend Redis server")
|
||||||
|
flag.IntVar(&redisPort, "rp", 6379, "port of the backend Redis server (shorthand)")
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
r := mux.NewRouter()
|
router := mux.NewRouter()
|
||||||
r.HandleFunc("/map/{z:[0-9]+}/{x:[0-9]+}/{y:[0-9]+}.png",
|
|
||||||
func(rw http.ResponseWriter, r *http.Request) {
|
|
||||||
createTiles(rw, r, mapDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
r.PathPrefix("/").Handler(http.FileServer(http.Dir(webDir)))
|
subBaseLine := newSubBaseLine(mapDir)
|
||||||
http.Handle("/", r)
|
router.Path("/map/{z:[0-9]+}/{x:[0-9]+}/{y:[0-9]+}.png").Handler(subBaseLine)
|
||||||
addr := fmt.Sprintf("%s:%d", host, port)
|
|
||||||
|
if redisHost != "" {
|
||||||
|
tileUpdater := newTileUpdater(mapDir, redisHost, redisPort)
|
||||||
|
router.Path("/update").Methods("POST").Handler(tileUpdater)
|
||||||
|
}
|
||||||
|
|
||||||
|
router.PathPrefix("/").Handler(http.FileServer(http.Dir(webDir)))
|
||||||
|
http.Handle("/", router)
|
||||||
|
|
||||||
|
addr := fmt.Sprintf("%s:%d", webHost, webPort)
|
||||||
if err := http.ListenAndServe(addr, nil); err != nil {
|
if err := http.ListenAndServe(addr, nil); err != nil {
|
||||||
log.Fatalf("Starting server failed: %s\n", err)
|
log.Fatalf("Starting server failed: %s\n", err)
|
||||||
}
|
}
|
||||||
|
@ -19,39 +19,15 @@ import (
|
|||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
func blowUp(src image.Image) *image.RGBA {
|
type subBaseLine struct {
|
||||||
|
mapDir string
|
||||||
// TODO: Fast path for image.RGBA
|
|
||||||
|
|
||||||
dst := image.NewRGBA(image.Rect(0, 0, 256, 256))
|
|
||||||
|
|
||||||
// fix point numbers x:8
|
|
||||||
dx, dy := src.Bounds().Dx(), src.Bounds().Dy()
|
|
||||||
|
|
||||||
bx, by := src.Bounds().Min.X<<8, src.Bounds().Min.Y<<8
|
|
||||||
|
|
||||||
py := by
|
|
||||||
for y := 0; y < 256; y++ {
|
|
||||||
sy := (py >> 8) & 0xff
|
|
||||||
ox := -1
|
|
||||||
px := bx
|
|
||||||
var col color.Color
|
|
||||||
for x := 0; x < 256; x++ {
|
|
||||||
sx := (px >> 8) & 0xff
|
|
||||||
if sx != ox { // Minimize interface indirection access.
|
|
||||||
ox = sx
|
|
||||||
col = src.At(sx, sy)
|
|
||||||
}
|
|
||||||
dst.Set(x, y, col)
|
|
||||||
px += dx
|
|
||||||
}
|
|
||||||
py += dy
|
|
||||||
}
|
|
||||||
|
|
||||||
return dst
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTiles(rw http.ResponseWriter, r *http.Request, mapDir string) {
|
func newSubBaseLine(mapDir string) *subBaseLine {
|
||||||
|
return &subBaseLine{mapDir: mapDir}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sb *subBaseLine) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
xs := vars["x"]
|
xs := vars["x"]
|
||||||
ys := vars["y"]
|
ys := vars["y"]
|
||||||
@ -60,7 +36,7 @@ func createTiles(rw http.ResponseWriter, r *http.Request, mapDir string) {
|
|||||||
x, y, z := toUint(xs), toUint(ys), toUint(zs)
|
x, y, z := toUint(xs), toUint(ys), toUint(zs)
|
||||||
if z < 9 {
|
if z < 9 {
|
||||||
filename := fmt.Sprintf("%d/%d/%d.png", z, x, y)
|
filename := fmt.Sprintf("%d/%d/%d.png", z, x, y)
|
||||||
http.ServeFile(rw, r, filepath.Join(mapDir, filename))
|
http.ServeFile(rw, r, filepath.Join(sb.mapDir, filename))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +46,7 @@ func createTiles(rw http.ResponseWriter, r *http.Request, mapDir string) {
|
|||||||
tx := x >> (z - 8)
|
tx := x >> (z - 8)
|
||||||
ty := y >> (z - 8)
|
ty := y >> (z - 8)
|
||||||
|
|
||||||
baseTile := filepath.Join(mapDir, fmt.Sprintf("8/%d/%d.png", tx, ty))
|
baseTile := filepath.Join(sb.mapDir, fmt.Sprintf("8/%d/%d.png", tx, ty))
|
||||||
|
|
||||||
var etag string
|
var etag string
|
||||||
var err error
|
var err error
|
||||||
@ -138,6 +114,38 @@ func createTiles(rw http.ResponseWriter, r *http.Request, mapDir string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func blowUp(src image.Image) *image.RGBA {
|
||||||
|
|
||||||
|
// TODO: Fast path for image.RGBA
|
||||||
|
|
||||||
|
dst := image.NewRGBA(image.Rect(0, 0, 256, 256))
|
||||||
|
|
||||||
|
// fix point numbers x:8
|
||||||
|
dx, dy := src.Bounds().Dx(), src.Bounds().Dy()
|
||||||
|
|
||||||
|
bx, by := src.Bounds().Min.X<<8, src.Bounds().Min.Y<<8
|
||||||
|
|
||||||
|
py := by
|
||||||
|
for y := 0; y < 256; y++ {
|
||||||
|
sy := (py >> 8) & 0xff
|
||||||
|
ox := -1
|
||||||
|
px := bx
|
||||||
|
var col color.Color
|
||||||
|
for x := 0; x < 256; x++ {
|
||||||
|
sx := (px >> 8) & 0xff
|
||||||
|
if sx != ox { // Minimize interface indirection access.
|
||||||
|
ox = sx
|
||||||
|
col = src.At(sx, sy)
|
||||||
|
}
|
||||||
|
dst.Set(x, y, col)
|
||||||
|
px += dx
|
||||||
|
}
|
||||||
|
py += dy
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
func createETag(path string) (etag string, err error) {
|
func createETag(path string) (etag string, err error) {
|
||||||
var fi os.FileInfo
|
var fi os.FileInfo
|
||||||
if fi, err = os.Stat(path); err != nil {
|
if fi, err = os.Stat(path); err != nil {
|
||||||
|
25
cmd/mtwebmapper/tilesupdater.go
Normal file
25
cmd/mtwebmapper/tilesupdater.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright 2014 by Sascha L. Teichmann
|
||||||
|
// Use of this source code is governed by the MIT license
|
||||||
|
// that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
type tileUpdater struct {
|
||||||
|
mapDir string
|
||||||
|
redisHost string
|
||||||
|
redisPort int
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTileUpdater(mapDir, redisHost string, redisPort int) *tileUpdater {
|
||||||
|
return &tileUpdater{
|
||||||
|
mapDir: mapDir,
|
||||||
|
redisHost: redisHost,
|
||||||
|
redisPort: redisPort}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tu *tileUpdater) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
|
||||||
|
// TODO: Implement me!
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user