Skip to content

Commit

Permalink
update mission2kml for multi-mission
Browse files Browse the repository at this point in the history
  • Loading branch information
stronnag committed Jun 12, 2022
1 parent aafa1be commit 3459091
Show file tree
Hide file tree
Showing 8 changed files with 180 additions and 84 deletions.
28 changes: 19 additions & 9 deletions cmd/flightlog2kml/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@ func main() {
dump_log := os.Getenv("DUMP_LOG") != ""
files, _ := options.ParseCLI(getVersion)
if len(files) == 0 {
options.Usage()
if len(options.Config.Mission) > 0 {
outms := kmlgen.GenKmlName(options.Config.Mission, options.Config.MissionIndex)
kmlgen.GenerateMissionOnly(outms)
show_output(outms)
} else {
options.Usage()
}
os.Exit(1)
}

Expand Down Expand Up @@ -92,14 +98,7 @@ func main() {
if !res {
fmt.Fprintf(os.Stderr, "*** skipping KML/Z for log with no valid geospatial data\n")
} else {
if outfn != "" {
rp, err := realpath.Realpath(outfn)
if err != nil || rp == "" {
fmt.Printf("%-8.8s : <%s> <%s>\n", "RealPath", rp, err)
rp = outfn
}
fmt.Printf("%-8.8s : %s\n", "Output", rp)
}
show_output(outfn)
}
fmt.Println()
}
Expand All @@ -109,3 +108,14 @@ func main() {
}
}
}

func show_output(outfn string) {
if outfn != "" {
rp, err := realpath.Realpath(outfn)
if err != nil || rp == "" {
fmt.Printf("%-8.8s : <%s> <%s>\n", "RealPath", rp, err)
rp = outfn
}
fmt.Printf("%-8.8s : %s\n", "Output", rp)
}
}
50 changes: 39 additions & 11 deletions cmd/mission2kml/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package main
import (
"flag"
"fmt"
types "github.com/stronnag/bbl2kml/pkg/api/types"
mission "github.com/stronnag/bbl2kml/pkg/mission"
kml "github.com/twpayne/go-kml"
"log"
"os"
"path/filepath"
Expand Down Expand Up @@ -68,7 +70,7 @@ Examples:

flag.BoolVar(&dms, "dms", dms, "Show positions as DMS (vice decimal degrees)")
flag.StringVar(&homepos, "home", homepos, "Use home location")
flag.IntVar(&idx, "mission-index", 1, "Mission Index")
flag.IntVar(&idx, "mission-index", 0, "Mission Index")
flag.Parse()
files := flag.Args()
if len(files) == 0 {
Expand Down Expand Up @@ -99,18 +101,44 @@ Examples:
}
}
}
err := generateKML(files[0], idx, dms, home)
if err != nil {
log.Fatalf("mission2kmk: %+v\n", err)
}
}

_, m, err := mission.Read_Mission_File_Index(files[0], idx)
if m != nil && err == nil {
if len(home) == 0 {
if m.Metadata.Homey != 0 && m.Metadata.Homex != 0 {
home = append(home, m.Metadata.Homey, m.Metadata.Homex)
func generateKML(mfile string, idx int, dms bool, homep []float64) error {
kname := filepath.Base(mfile)
d := kml.Folder(kml.Name(kname)).Add(kml.Open(true))
_, mm, err := mission.Read_Mission_File(mfile)
if err == nil {
isviz := true
for nm, _ := range mm.Segment {
nmx := nm + 1
if idx == 0 || nmx == idx {
ms := mm.To_mission(nmx)
if len(homep) == 0 {
if ms.Metadata.Homey != 0 && ms.Metadata.Homex != 0 {
homep = append(homep, ms.Metadata.Homey, ms.Metadata.Homex)
}
}
var hpos types.HomeRec
if len(homep) == 2 {
hpos.HomeLat = homep[0]
hpos.HomeLon = homep[1]
hpos.Flags = types.HOME_ARM
}
if len(homep) > 2 {
hpos.HomeAlt = homep[2]
hpos.Flags |= types.HOME_ALT
}
mf := ms.To_kml(hpos, dms, false, nmx, isviz)
d.Add(mf)
isviz = false
}
}

m.Dump(dms, home...)
}
if err != nil {
log.Fatalf("mission2kmk: %+v\n", err)
k := kml.KML(d)
k.WriteIndent(os.Stdout, "", " ")
}
return err
}
2 changes: 1 addition & 1 deletion meson.build
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
project('flightlog2kml', version : '1.0.3-rc1')
project('flightlog2kml', version : '1.0.4-rc1')
meson.add_install_script('meson/post_install.py')
version = get_option('version')
commit = get_option('commit')
Expand Down
77 changes: 68 additions & 9 deletions pkg/kmlgen/kmlbuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"image/color"
"log"
"os"
"path/filepath"
"strings"
)

Expand Down Expand Up @@ -470,6 +471,39 @@ func add_ground_track(rec types.LogRec) kml.Element {
return f
}

func GenerateMissionOnly(outfn string) {
kname := filepath.Base(options.Config.Mission)
d := kml.Folder(kml.Name(kname)).Add(kml.Open(true))
_, mm, err := mission.Read_Mission_File(options.Config.Mission)
if err == nil {
isviz := true
for nm, _ := range mm.Segment {
nmx := nm + 1
if options.Config.MissionIndex == 0 || nmx == options.Config.MissionIndex {
ms := mm.To_mission(nmx)
if geo.Getfrobnication() {
for k, mi := range ms.MissionItems {
if mi.Is_GeoPoint() {
ms.MissionItems[k].Lat, ms.MissionItems[k].Lon, _ = geo.Frobnicate_move(ms.MissionItems[k].Lat, ms.MissionItems[k].Lon, 0)
}
}
}
var hpos types.HomeRec

if ms.Metadata.Homey != 0 && ms.Metadata.Homex != 0 {
hpos.HomeLat = ms.Metadata.Homey
hpos.HomeLon = ms.Metadata.Homex
hpos.Flags = types.HOME_ARM
}
mf := ms.To_kml(hpos, options.Config.Dms, false, nmx, isviz)
d.Add(mf)
isviz = false
}
}
write_kml(outfn, d)
}
}

func GenerateKML(hpos types.HomeRec, rec types.LogRec, outfn string,
meta types.FlightMeta, smap types.MapRec) {

Expand All @@ -485,20 +519,42 @@ func GenerateKML(hpos types.HomeRec, rec types.LogRec, outfn string,
d.Add(add_ground_track(rec))

if len(options.Config.Mission) > 0 {
_, ms, err := mission.Read_Mission_File_Index(options.Config.Mission, options.Config.MissionIndex)
_, mm, err := mission.Read_Mission_File(options.Config.Mission)
if err == nil {
if geo.Getfrobnication() {
for k, mi := range ms.MissionItems {
if mi.Is_GeoPoint() {
ms.MissionItems[k].Lat, ms.MissionItems[k].Lon, _ = geo.Frobnicate_move(ms.MissionItems[k].Lat, ms.MissionItems[k].Lon, 0)
isviz := true
for nm, _ := range mm.Segment {
nmx := nm + 1
if options.Config.MissionIndex == 0 || nmx == options.Config.MissionIndex {
ms := mm.To_mission(nmx)
if geo.Getfrobnication() {
for k, mi := range ms.MissionItems {
if mi.Is_GeoPoint() {
ms.MissionItems[k].Lat, ms.MissionItems[k].Lon, _ = geo.Frobnicate_move(ms.MissionItems[k].Lat, ms.MissionItems[k].Lon, 0)
}
}
}
mf := ms.To_kml(hpos, options.Config.Dms, false, nmx, isviz)
d.Add(mf)
isviz = false
}
}
mf := ms.To_kml(hpos, options.Config.Dms, false)
d.Add(mf)
} else {
fmt.Fprintf(os.Stderr, "* Failed to read mission file %s\n", options.Config.Mission)
}
/**
_, ms, err := mission.Read_Mission_File_Index(options.Config.Mission, options.Config.MissionIndex)
if err == nil {
if geo.Getfrobnication() {
for k, mi := range ms.MissionItems {
if mi.Is_GeoPoint() {
ms.MissionItems[k].Lat, ms.MissionItems[k].Lon, _ = geo.Frobnicate_move(ms.MissionItems[k].Lat, ms.MissionItems[k].Lon, 0)
}
}
}
mf := ms.To_kml(hpos, options.Config.Dms, false)
d.Add(mf)
} else {
fmt.Fprintf(os.Stderr, "* Failed to read mission file %s\n", options.Config.Mission)
}
**/
}

e := kml.ExtendedData(kml.Data(kml.Name("Log"), kml.Value(meta.LogName())))
Expand Down Expand Up @@ -558,7 +614,10 @@ func GenerateKML(hpos types.HomeRec, rec types.LogRec, outfn string,
d.Add(f1)
}
}
write_kml(outfn, d)
}

func write_kml(outfn string, d *kml.CompoundElement) {
var err error
if strings.HasSuffix(outfn, ".kmz") {
z := kmz.NewKMZ(d)
Expand Down
16 changes: 12 additions & 4 deletions pkg/mission/mission-read.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"os"
)

func (mm *MultiMission) to_mission(mi int) *Mission {
func (mm *MultiMission) To_mission(mi int) *Mission {
m := &Mission{}
if mi > len(mm.Segment) {
mi = len(mm.Segment)
Expand All @@ -20,7 +20,7 @@ func (mm *MultiMission) to_mission(mi int) *Mission {
return m
}

func Read_Mission_File_Index(path string, idx int) (string, *Mission, error) {
func Read_Mission_File(path string) (string, *MultiMission, error) {
var dat []byte
r, err := os.Open(path)
if err == nil {
Expand All @@ -33,9 +33,17 @@ func Read_Mission_File_Index(path string, idx int) (string, *Mission, error) {
mtype, mm := handle_mission_data(dat, path)
if mm == nil {
fmt.Fprintf(os.Stderr, "Note: Mission fails verification %s\n", mtype)
return mtype, nil, nil
}
m := mm.to_mission(idx)
return mtype, mm, nil
}
}

func Read_Mission_File_Index(path string, idx int) (string, *Mission, error) {
mtype, mm, err := Read_Mission_File(path)
if err == nil {
m := mm.To_mission(idx)
return mtype, m, nil
} else {
return mtype, nil, err
}
}
2 changes: 1 addition & 1 deletion pkg/mission/mission.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ func (m *Mission) Dump(dms bool, homep ...float64) {
hpos.HomeAlt = homep[2]
hpos.Flags |= types.HOME_ALT
}
k := kml.KML(m.To_kml(hpos, dms, true))
k := kml.KML(m.To_kml(hpos, dms, true, 1, true))
k.WriteIndent(os.Stdout, "", " ")
}

Expand Down
Loading

0 comments on commit 3459091

Please sign in to comment.