initial import

This commit is contained in:
Kyle Isom 2023-12-19 10:14:00 -08:00
commit 14f29f88d3
3 changed files with 104 additions and 0 deletions

9
go.mod Normal file
View File

@ -0,0 +1,9 @@
module git.wntrmute.dev/kyle/gridsq
go 1.21.3
require (
git.wntrmute.dev/kyle/goutils v1.7.4 // indirect
github.com/logocomune/maidenhead v1.0.1 // indirect
gopkg.in/billups/golang-geo.v2 v2.0.0-20170124000346-c2931833be19 // indirect
)

6
go.sum Normal file
View File

@ -0,0 +1,6 @@
git.wntrmute.dev/kyle/goutils v1.7.4 h1:kbvUoxRwAEemz4jL52AUKaOipuCX8F8PGTQHS5V3lRY=
git.wntrmute.dev/kyle/goutils v1.7.4/go.mod h1:1PGn83Ac98KWyI6yfpCVyP1Ji61PX6lFpROxY+IoTJg=
github.com/logocomune/maidenhead v1.0.1 h1:WnBpC/LIhc81QnwDdxEPKHwSAspMCWwsYMuM9vQMFgA=
github.com/logocomune/maidenhead v1.0.1/go.mod h1:FLkUKuGyo4uKESNlXG8jgQgaTSApyR2ZZfq7m2Btmjs=
gopkg.in/billups/golang-geo.v2 v2.0.0-20170124000346-c2931833be19 h1:vu0Y9rNRRTFG70fnQ/W/CG4N629vz9uaqaY7R7fXnVo=
gopkg.in/billups/golang-geo.v2 v2.0.0-20170124000346-c2931833be19/go.mod h1:Wo/E84lJTIKl9WdTGYGLAG+q9zRxnl9RnCZenHqASWk=

89
main.go Normal file
View File

@ -0,0 +1,89 @@
package main
import (
"flag"
"fmt"
"git.wntrmute.dev/kyle/goutils/die"
"github.com/logocomune/maidenhead"
geo "gopkg.in/billups/golang-geo.v2"
)
var qths = map[int]string{
4: "CM97",
6: "CM97cq",
8: "CM97cq53",
10: "CM97cq53CI",
}
var kmToMile = 0.621371
func cToP(c maidenhead.Coordinate) *geo.Point {
return geo.NewPoint(c.Lat, c.Lng)
}
func distBearing(qth, qsl string) (err error) {
var cqth, cqsl maidenhead.Coordinate
cqth.Lat, cqth.Lng, err = maidenhead.GridCenter(qth)
if err != nil {
return err
}
cqsl.Lat, cqsl.Lng, err = maidenhead.GridCenter(qsl)
if err != nil {
return err
}
pqth := cToP(cqth)
pqsl := cToP(cqsl)
dist := pqth.GreatCircleDistance(pqsl)
bearing := pqth.BearingTo(pqsl)
fmt.Printf("%s => %s: distance %0.2f miles, bearing %0.1f°\n",
qth, qsl, dist*kmToMile, bearing)
return nil
}
func main() {
var lat, lon float64
var precision int64
flag.Float64Var(&lat, "lat", 0.0, "latitude of grid")
flag.Float64Var(&lon, "lon", 0.0, "longitude of grid")
flag.Int64Var(&precision, "d", 6, "number of digits")
flag.Parse()
if flag.NArg() == 0 {
fmt.Println("nothing")
return
}
cmd := flag.Arg(0)
switch cmd {
case "geo":
grid, err := maidenhead.Locator(lat, lon, int(precision))
die.If(err)
fmt.Printf("%0.6f %0.6f: ", lat, lon)
fmt.Println(grid)
case "qth":
grid, ok := qths[int(precision)]
if !ok {
fmt.Println(qths[6])
} else {
fmt.Println(grid)
}
case "db":
var qth, qsl string
if flag.NArg() == 2 {
qsl = flag.Arg(1)
qth = qths[len(qsl)]
} else {
qsl = flag.Arg(2)
qth = flag.Arg(1)
}
err := distBearing(qth, qsl)
die.If(err)
}
}