Skip to content

Instantly share code, notes, and snippets.

@peterhellberg
Last active February 27, 2019 18:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peterhellberg/6fffe01a268e2b9724d2739269ecbd57 to your computer and use it in GitHub Desktop.
Save peterhellberg/6fffe01a268e2b9724d2739269ecbd57 to your computer and use it in GitHub Desktop.
Carto Basemaps animation using gfx. https://carto.com/location-data-services/basemaps/
package main
import "github.com/peterhellberg/gfx"
const (
zoomLevels = 18
tileSize = 512
tileFormat = "https://a.basemaps.cartocdn.com/rastertiles/voyager/%d/%d/%d@2x.png"
)
func main() {
pos := gfx.GP(59.270889, 18.048125)
a := gfx.Animation{Delay: 50, LoopCount: -1}
for zoom := 0; zoom < zoomLevels; zoom++ {
gt := pos.GeoTile(zoom)
src, err := gfx.GetImage(gt.Rawurl(tileFormat))
if err != nil {
continue
}
m := gfx.NewImage(tileSize/2+tileSize, tileSize/2+tileSize)
c := gfx.BoundsCenter(m.Bounds())
gfx.Draw(m, m.Bounds().Add(c.Pt()).Sub(pos.In(gt, tileSize).Pt()), src)
gfx.DrawCircleFilled(m, c, 2, gfx.ColorBlack)
a.AddFrame(m, append(PaletteBasemaps, gfx.ColorMagenta).AsColorPalette())
}
a.SaveGIF("gfx-geo-tiles-carto-basemaps-animated.gif")
}
var PaletteBasemaps = gfx.Palette{
{0x41, 0x5C, 0x77, 0xFF},
{0x56, 0x6E, 0x85, 0xFF},
{0x68, 0x7D, 0x91, 0xFF},
{0x87, 0x91, 0x9D, 0xFF},
{0x8B, 0x94, 0xA0, 0xFF},
{0x95, 0x9F, 0xAA, 0xFF},
{0x96, 0xA4, 0xB0, 0xFF},
{0x9B, 0xA3, 0xAD, 0xFF},
{0xA4, 0xAB, 0xB3, 0xFF},
{0xAE, 0xCE, 0xD4, 0xFF},
{0xB3, 0xD1, 0xD6, 0xFF},
{0xB9, 0xBF, 0xC5, 0xFF},
{0xBB, 0xD6, 0xDB, 0xFF},
{0xBC, 0xD4, 0xD5, 0xFF},
{0xBE, 0xC3, 0xC8, 0xFF},
{0xC0, 0xDB, 0xE0, 0xFF},
{0xC2, 0xC9, 0xCE, 0xFF},
{0xC3, 0xDC, 0xE1, 0xFF},
{0xC6, 0xDE, 0xE2, 0xFF},
{0xC8, 0xE0, 0xE4, 0xFF},
{0xC9, 0xD6, 0xC9, 0xFF},
{0xCB, 0xE0, 0xE3, 0xFF},
{0xCB, 0xE1, 0xE5, 0xFF},
{0xCD, 0xCC, 0xCA, 0xFF},
{0xCE, 0xE3, 0xE6, 0xFF},
{0xD1, 0xE5, 0xE9, 0xFF},
{0xD3, 0xE6, 0xEA, 0xFF},
{0xD5, 0xE3, 0xD7, 0xFF},
{0xD5, 0xE8, 0xEB, 0xFF},
{0xD7, 0xD8, 0xD9, 0xFF},
{0xD9, 0xE7, 0xCE, 0xFF},
{0xDA, 0xE8, 0xCF, 0xFF},
{0xDC, 0xE9, 0xDB, 0xFF},
{0xDD, 0xE0, 0xE0, 0xFF},
{0xDF, 0xDE, 0xDD, 0xFF},
{0xE1, 0xC7, 0xC9, 0xFF},
{0xE1, 0xE0, 0xDF, 0xFF},
{0xE2, 0xEB, 0xEB, 0xFF},
{0xE2, 0xED, 0xD8, 0xFF},
{0xE3, 0xE1, 0xDA, 0xFF},
{0xE3, 0xE2, 0xE0, 0xFF},
{0xE3, 0xE5, 0xE4, 0xFF},
{0xE3, 0xEC, 0xD9, 0xFF},
{0xE4, 0xDC, 0xD1, 0xFF},
{0xE4, 0xE3, 0xE0, 0xFF},
{0xE5, 0xDB, 0xC7, 0xFF},
{0xE5, 0xEE, 0xDB, 0xFF},
{0xE5, 0xEE, 0xED, 0xFF},
{0xE6, 0xE5, 0xE1, 0xFF},
{0xE6, 0xEF, 0xDD, 0xFF},
{0xE7, 0xDA, 0xC8, 0xFF},
{0xE7, 0xDB, 0xCA, 0xFF},
{0xE7, 0xE0, 0xD5, 0xFF},
{0xE8, 0xDB, 0xB8, 0xFF},
{0xE8, 0xF0, 0xDD, 0xFF},
{0xE9, 0xD6, 0xD6, 0xFF},
{0xE9, 0xE9, 0xE9, 0xFF},
{0xE9, 0xF0, 0xDF, 0xFF},
{0xEA, 0xD5, 0xD7, 0xFF},
{0xEA, 0xE2, 0xD6, 0xFF},
{0xEA, 0xE4, 0xDF, 0xFF},
{0xEB, 0xDD, 0xC9, 0xFF},
{0xEB, 0xE4, 0xDA, 0xFF},
{0xEB, 0xEB, 0xE8, 0xFF},
{0xEC, 0xE2, 0xDD, 0xFF},
{0xEC, 0xF1, 0xEE, 0xFF},
{0xED, 0xE7, 0xDD, 0xFF},
{0xED, 0xF2, 0xE4, 0xFF},
{0xEE, 0xDD, 0xDE, 0xFF},
{0xEE, 0xE1, 0xCE, 0xFF},
{0xEE, 0xE5, 0xE3, 0xFF},
{0xEE, 0xE9, 0xCE, 0xFF},
{0xEE, 0xEE, 0xEC, 0xFF},
{0xEE, 0xF2, 0xF1, 0xFF},
{0xEF, 0xEA, 0xE0, 0xFF},
{0xEF, 0xEE, 0xEA, 0xFF},
{0xF0, 0xEE, 0xE7, 0xFF},
{0xF1, 0xE6, 0xD6, 0xFF},
{0xF1, 0xEE, 0xE3, 0xFF},
{0xF1, 0xF2, 0xEE, 0xFF},
{0xF2, 0xE6, 0xE5, 0xFF},
{0xF2, 0xE9, 0xDA, 0xFF},
{0xF2, 0xF0, 0xEA, 0xFF},
{0xF2, 0xF5, 0xF8, 0xFF},
{0xF3, 0xF6, 0xED, 0xFF},
{0xF4, 0xEB, 0xD4, 0xFF},
{0xF4, 0xEC, 0xE0, 0xFF},
{0xF4, 0xF2, 0xEE, 0xFF},
{0xF5, 0xED, 0xE3, 0xFF},
{0xF5, 0xF3, 0xF0, 0xFF},
{0xF5, 0xF5, 0xF2, 0xFF},
{0xF6, 0xEF, 0xE5, 0xFF},
{0xF6, 0xF0, 0xE5, 0xFF},
{0xF6, 0xF4, 0xEB, 0xFF},
{0xF6, 0xF6, 0xF5, 0xFF},
{0xF7, 0xF1, 0xE7, 0xFF},
{0xF8, 0xDD, 0xAA, 0xFF},
{0xF8, 0xF2, 0xEE, 0xFF},
{0xF8, 0xF4, 0xEB, 0xFF},
{0xF9, 0xE0, 0xAF, 0xFF},
{0xF9, 0xE6, 0xC3, 0xFF},
{0xF9, 0xF6, 0xEE, 0xFF},
{0xF9, 0xF6, 0xEF, 0xFF},
{0xFA, 0xDC, 0x9E, 0xFF},
{0xFA, 0xDD, 0xA1, 0xFF},
{0xFA, 0xE4, 0xBC, 0xFF},
{0xFA, 0xE7, 0xC0, 0xFF},
{0xFB, 0xED, 0xD2, 0xFF},
{0xFB, 0xEE, 0xD5, 0xFF},
{0xFB, 0xF8, 0xF3, 0xFF},
{0xFC, 0xE1, 0xA4, 0xFF},
{0xFC, 0xF2, 0xE3, 0xFF},
{0xFC, 0xFA, 0xF6, 0xFF},
{0xFD, 0xEB, 0xCE, 0xFF},
{0xFD, 0xEC, 0xD0, 0xFF},
{0xFD, 0xEF, 0xD6, 0xFF},
{0xFD, 0xFB, 0xF6, 0xFF},
{0xFE, 0xE8, 0xA9, 0xFF},
{0xFE, 0xF8, 0xED, 0xFF},
{0xFE, 0xF9, 0xEF, 0xFF},
{0xFE, 0xFC, 0xDA, 0xFF},
{0xFF, 0xE8, 0xB7, 0xFF},
{0xFF, 0xFF, 0xFE, 0xFF},
}
@peterhellberg
Copy link
Author

gfx-geo-tiles-carto-basemaps-animated

@peterhellberg
Copy link
Author

// PaletteBasemapsVoyager is the Basemaps Voyager palette.
var PaletteBasemapsVoyager = Palette{
	{0xE1, 0xC7, 0xC9, 0xFF},
	{0xEA, 0xD5, 0xD7, 0xFF},
	{0xEE, 0xDD, 0xDE, 0xFF},
	{0x41, 0x5C, 0x77, 0xFF},
	{0x56, 0x6E, 0x85, 0xFF},
	{0x68, 0x7D, 0x91, 0xFF},
	{0x96, 0xA4, 0xB0, 0xFF},
	{0xC2, 0xC9, 0xCE, 0xFF},
	{0x87, 0x91, 0x9D, 0xFF},
	{0x8B, 0x94, 0xA0, 0xFF},
	{0x95, 0x9F, 0xAA, 0xFF},
	{0x9B, 0xA3, 0xAD, 0xFF},
	{0xA4, 0xAB, 0xB3, 0xFF},
	{0xB9, 0xBF, 0xC5, 0xFF},
	{0xBE, 0xC3, 0xC8, 0xFF},
	{0xD7, 0xD8, 0xD9, 0xFF},
	{0xDD, 0xE0, 0xE0, 0xFF},
	{0xE3, 0xE5, 0xE4, 0xFF},
	{0xEC, 0xF1, 0xEE, 0xFF},
	{0xEB, 0xEB, 0xE8, 0xFF},
	{0xEE, 0xEE, 0xEC, 0xFF},
	{0xF6, 0xF6, 0xF5, 0xFF},
	{0xFF, 0xFF, 0xFE, 0xFF},
	{0xAE, 0xCE, 0xD4, 0xFF},
	{0xB3, 0xD1, 0xD6, 0xFF},
	{0xBC, 0xD4, 0xD5, 0xFF},
	{0xBB, 0xD6, 0xDB, 0xFF},
	{0xC0, 0xDB, 0xE0, 0xFF},
	{0xC3, 0xDC, 0xE1, 0xFF},
	{0xC6, 0xDE, 0xE2, 0xFF},
	{0xC8, 0xE0, 0xE4, 0xFF},
	{0xCB, 0xE1, 0xE5, 0xFF},
	{0xCB, 0xE0, 0xE3, 0xFF},
	{0xCE, 0xE3, 0xE6, 0xFF},
	{0xD3, 0xE6, 0xEA, 0xFF},
	{0xD1, 0xE5, 0xE9, 0xFF},
	{0xD5, 0xE8, 0xEB, 0xFF},
	{0xE5, 0xEE, 0xED, 0xFF},
	{0xE2, 0xEB, 0xEB, 0xFF},
	{0xC9, 0xD6, 0xC9, 0xFF},
	{0xD5, 0xE3, 0xD7, 0xFF},
	{0xD9, 0xE7, 0xCE, 0xFF},
	{0xDA, 0xE8, 0xCF, 0xFF},
	{0xDC, 0xE9, 0xDB, 0xFF},
	{0xE2, 0xED, 0xD8, 0xFF},
	{0xE6, 0xEF, 0xDD, 0xFF},
	{0xE5, 0xEE, 0xDB, 0xFF},
	{0xE3, 0xEC, 0xD9, 0xFF},
	{0xE8, 0xF0, 0xDD, 0xFF},
	{0xE9, 0xF0, 0xDF, 0xFF},
	{0xED, 0xF2, 0xE4, 0xFF},
	{0xF3, 0xF6, 0xED, 0xFF},
	{0xEE, 0xE9, 0xCE, 0xFF},
	{0xFE, 0xFC, 0xDA, 0xFF},
	{0xE6, 0xE5, 0xE1, 0xFF},
	{0xEF, 0xEE, 0xEA, 0xFF},
	{0xF1, 0xEE, 0xE3, 0xFF},
	{0xF0, 0xEE, 0xE7, 0xFF},
	{0xF6, 0xF4, 0xEB, 0xFF},
	{0xE3, 0xE1, 0xDA, 0xFF},
	{0xE4, 0xE3, 0xE0, 0xFF},
	{0xF2, 0xF0, 0xEA, 0xFF},
	{0xE8, 0xDB, 0xB8, 0xFF},
	{0xF4, 0xEB, 0xD4, 0xFF},
	{0xF9, 0xF6, 0xEE, 0xFF},
	{0xFD, 0xFB, 0xF6, 0xFF},
	{0xF8, 0xF4, 0xEB, 0xFF},
	{0xF9, 0xF6, 0xEF, 0xFF},
	{0xFA, 0xDD, 0xA1, 0xFF},
	{0xFA, 0xDC, 0x9E, 0xFF},
	{0xFC, 0xE1, 0xA4, 0xFF},
	{0xFA, 0xE7, 0xC0, 0xFF},
	{0xFE, 0xE8, 0xA9, 0xFF},
	{0xFF, 0xE8, 0xB7, 0xFF},
	{0xE3, 0xE2, 0xE0, 0xFF},
	{0xF4, 0xF2, 0xEE, 0xFF},
	{0xEF, 0xEA, 0xE0, 0xFF},
	{0xE5, 0xDB, 0xC7, 0xFF},
	{0xCD, 0xCC, 0xCA, 0xFF},
	{0xF9, 0xE0, 0xAF, 0xFF},
	{0xFB, 0xED, 0xD2, 0xFF},
	{0xFB, 0xEE, 0xD5, 0xFF},
	{0xF8, 0xDD, 0xAA, 0xFF},
	{0xF9, 0xE6, 0xC3, 0xFF},
	{0xFA, 0xE4, 0xBC, 0xFF},
	{0xFD, 0xEF, 0xD6, 0xFF},
	{0xED, 0xE7, 0xDD, 0xFF},
	{0xF2, 0xE9, 0xDA, 0xFF},
	{0xFB, 0xF8, 0xF3, 0xFF},
	{0xFD, 0xEC, 0xD0, 0xFF},
	{0xFD, 0xEB, 0xCE, 0xFF},
	{0xE7, 0xE0, 0xD5, 0xFF},
	{0xF5, 0xF3, 0xF0, 0xFF},
	{0xFC, 0xF2, 0xE3, 0xFF},
	{0xF4, 0xEC, 0xE0, 0xFF},
	{0xEA, 0xE2, 0xD6, 0xFF},
	{0xEE, 0xE1, 0xCE, 0xFF},
	{0xF1, 0xE6, 0xD6, 0xFF},
	{0xF6, 0xEF, 0xE5, 0xFF},
	{0xEB, 0xDD, 0xC9, 0xFF},
	{0xEB, 0xE4, 0xDA, 0xFF},
	{0xE7, 0xDB, 0xCA, 0xFF},
	{0xE7, 0xDA, 0xC8, 0xFF},
	{0xE4, 0xDC, 0xD1, 0xFF},
	{0xF5, 0xED, 0xE3, 0xFF},
	{0xDF, 0xDE, 0xDD, 0xFF},
	{0xE1, 0xE0, 0xDF, 0xFF},
	{0xEA, 0xE4, 0xDF, 0xFF},
	{0xEC, 0xE2, 0xDD, 0xFF},
	{0xEE, 0xE5, 0xE3, 0xFF},
	{0xF2, 0xE6, 0xE5, 0xFF},
	{0xE9, 0xE9, 0xE9, 0xFF},
	{0xF1, 0xF2, 0xEE, 0xFF},
	{0xF5, 0xF5, 0xF2, 0xFF},
	{0xF8, 0xF2, 0xEE, 0xFF},
	{0xF7, 0xF1, 0xE7, 0xFF},
	{0xEE, 0xF2, 0xF1, 0xFF},
	{0xF2, 0xF5, 0xF8, 0xFF},
	{0xFE, 0xF8, 0xED, 0xFF},
	{0xFE, 0xF9, 0xEF, 0xFF},
	{0xF6, 0xF0, 0xE5, 0xFF},
	{0xFC, 0xFA, 0xF6, 0xFF},
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment