From 68f7ad68c6b55354bbe27d7399212c2f504e52ce Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:40:20 -0600 Subject: [PATCH] accept flags and -d for a box --- cmd/maps.go | 5 +++-- cmd/run.go | 35 +++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/cmd/maps.go b/cmd/maps.go index b55bb6c..6615fec 100644 --- a/cmd/maps.go +++ b/cmd/maps.go @@ -39,7 +39,7 @@ type Location struct { } func (m *Maps) textSearchOne(ctx context.Context, query string) (Location, error) { - results, err := m.Search(ctx, query) + results, err := m.Search(ctx, query, 1.0) if err != nil { return Location{}, err } else if len(results) < 1 { @@ -48,12 +48,13 @@ func (m *Maps) textSearchOne(ctx context.Context, query string) (Location, error return results[0], nil } +var convertToMiles = 69.0 + func (m *Maps) Search(ctx context.Context, query string, radius_miles float64) ([]Location, error) { results, err := m.search(ctx, query) for i := len(results) - 1; i >= 0; i-- { shouldKeep := true if m.around != (Location{}) { - convertToMiles := 69.0 a := m.around.Lat - results[i].Lat b := m.around.Lng - results[i].Lng dist := math.Sqrt(a*a + b*b) diff --git a/cmd/run.go b/cmd/run.go index 52c1764..5174344 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -3,18 +3,30 @@ package cmd import ( "context" "encoding/json" + "flag" "fmt" "os" "path" ) func Run(ctx context.Context) error { - m, err := NewMapsOf(ctx, os.Args[1]) + fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) + searchRadius := fs.Float64("r", 5.0, "search radius in miles") + area := fs.Float64("a", 0.5, "result radius in miles") + doArea := fs.Bool("d", false, "do result radius in miles") + if err := fs.Parse(os.Args[1:]); err != nil { + panic(err) + } + radius := *area / convertToMiles + radiusX := radius / 2 + radiusY := radius / 3 + + m, err := NewMapsOf(ctx, fs.Args()[0]) if err != nil { return err } - results, err := m.Search(ctx, os.Args[2], 5.0) + results, err := m.Search(ctx, fs.Args()[1], *searchRadius) if err != nil { return err } @@ -25,16 +37,27 @@ func Run(ctx context.Context) error { Name string `json:"name"` } `json:"properties"` Geometry struct { - Type string `json:"type"` - Coordinates []float64 `json:"coordinates"` + Type string `json:"type"` + Coordinates []any `json:"coordinates"` } `json:"geometry"` } geoJsons := make([]geoJson, len(results)) for i := range results { geoJsons[i].Type = "Feature" - geoJsons[i].Properties.Name = path.Join(os.Args[2], results[i].Name) + geoJsons[i].Properties.Name = path.Join(fs.Args()[1], results[i].Name) geoJsons[i].Geometry.Type = "Point" - geoJsons[i].Geometry.Coordinates = []float64{results[i].Lng, results[i].Lat} + geoJsons[i].Geometry.Coordinates = []any{results[i].Lng, results[i].Lat} + if *doArea { + geoJsons[i].Geometry.Type = "Polygon" + x, y := results[i].Lng, results[i].Lat + geoJsons[i].Geometry.Coordinates = []any{[]any{ + [2]float64{x - radiusX, y + radiusY}, // top left + [2]float64{x + radiusX, y + radiusY}, // top righ + [2]float64{x + radiusX, y - radiusY}, // bot righ + [2]float64{x - radiusX, y - radiusY}, // bot left + [2]float64{x - radiusX, y + radiusY}, // top left + }} + } } b, _ := json.Marshal(map[string]any{ "features": geoJsons,