47 lines
964 B
Go
47 lines
964 B
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
)
|
|
|
|
func Run(ctx context.Context) error {
|
|
m, err := NewMapsOf(ctx, os.Args[1])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
results, err := m.Search(ctx, os.Args[2], 5.0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
type geoJson struct {
|
|
Type string `json:"type"`
|
|
Properties struct {
|
|
Name string `json:"name"`
|
|
} `json:"properties"`
|
|
Geometry struct {
|
|
Type string `json:"type"`
|
|
Coordinates []float64 `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].Geometry.Type = "Point"
|
|
geoJsons[i].Geometry.Coordinates = []float64{results[i].Lng, results[i].Lat}
|
|
}
|
|
b, _ := json.Marshal(map[string]any{
|
|
"features": geoJsons,
|
|
"type": "FeatureCollection",
|
|
})
|
|
fmt.Printf("%s\n", b)
|
|
|
|
return ctx.Err()
|
|
}
|