OpenStreetMap but as terminal user interface (TUI) program and Bubble Tea Bubble.
$ go get
$ go build .
The binary is called mercator
mercator
accepts latitude and longitude as arguments, e.g.:
$ mercator 25.0782266 -77.3383438
It also accepts a location name or address, e.g.:
$ mercator miami
mercator
accepts the -style
flag with an integer value representing one of
the options listed as
Style
,
e.g.:
$ mercator -style 4 new york
arrow up
/k
: Move northarrow right
/l
: Move eastarrow down
/j
: Move southarrow left
/h
: Move west-
/_
: Zoom out+
/=
: Zoom in
You can embed the mapview
into your Bubble Tea application:
package main
import (
tea "github.com/charmbracelet/bubbletea"
"github.com/mrusme/mercator/mapview"
)
type model struct {
mv mapview.Model
}
func main() {
m := NewModel()
m.mv.SetLocation("jamaica", 15)
p := tea.NewProgram(m, tea.WithAltScreen())
if _, err := p.Run(); err != nil {
panic(err)
}
}
func NewModel() model {
m := model{}
m.mv = mapview.New(80, 24)
return m
}
func (m model) Init() tea.Cmd {
return tea.Batch(tea.EnterAltScreen)
}
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch mt := msg.(type) {
case tea.KeyMsg:
switch mt.String() {
case "q", "esc", "ctrl+c":
return m, tea.Quit
}
case tea.WindowSizeMsg:
m.mv.Width = mt.Width
m.mv.Height = mt.Height
return m, nil
}
var cmd tea.Cmd
m.mv, cmd = m.mv.Update(msg)
return m, cmd
}
func (m model) View() string {
return m.mv.View()
}