69 lines
2.1 KiB
Go
69 lines
2.1 KiB
Go
// ============================================
|
|
// db/gps_links.go
|
|
// Génération de liens GPS vers différentes plateformes
|
|
// ============================================
|
|
|
|
package db
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// MapLinks contient les liens vers différentes plateformes de cartographie
|
|
type MapLinks struct {
|
|
GoogleMaps string `json:"google_maps"`
|
|
GoogleMapsApp string `json:"google_maps_app"`
|
|
Waze string `json:"waze"`
|
|
WazeApp string `json:"waze_app"`
|
|
AppleMaps string `json:"apple_maps"`
|
|
OpenStreetMap string `json:"openstreetmap"`
|
|
BingMaps string `json:"bing_maps"`
|
|
HereMaps string `json:"here_maps"`
|
|
}
|
|
|
|
func wazeAppLink(lat, lon float64) string {
|
|
return fmt.Sprintf("waze://?ll=%.6f,%.6f&navigate=yes", lat, lon)
|
|
}
|
|
|
|
// GenerateMapLinks génère tous les liens de cartes pour une position GPS
|
|
func (d *Database) GenerateMapLinks(lat, lon float64, label string) MapLinks {
|
|
return MapLinks{
|
|
WazeApp: wazeAppLink(lat, lon),
|
|
}
|
|
}
|
|
|
|
// GenerateNavigationLink génère un lien de navigation vers une destination
|
|
// fromLat/fromLon sont ignorés : Waze part toujours de la position GPS courante
|
|
func (d *Database) GenerateNavigationLink(fromLat, fromLon, toLat, toLon float64, platform string) string {
|
|
return wazeAppLink(toLat, toLon)
|
|
}
|
|
|
|
// GenerateMapLinksForCommand génère les liens de navigation pour une commande
|
|
func (d *Database) GenerateMapLinksForCommand(commandID int, deliverymanUsername string) (map[string]string, error) {
|
|
_, _, err := d.GetDeliveryPersonLocation(deliverymanUsername)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("position livreur non disponible: %w", err)
|
|
}
|
|
|
|
command, err := d.GetCommandByID(commandID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("commande non trouvée: %w", err)
|
|
}
|
|
|
|
var destLat, destLon float64
|
|
if v, ok := command["dest_latitude"].(float64); ok {
|
|
destLat = v
|
|
}
|
|
if v, ok := command["dest_longitude"].(float64); ok {
|
|
destLon = v
|
|
}
|
|
|
|
if destLat == 0 && destLon == 0 {
|
|
return nil, fmt.Errorf("coordonnées destination invalides")
|
|
}
|
|
|
|
return map[string]string{
|
|
"waze_app": wazeAppLink(destLat, destLon),
|
|
}, nil
|
|
}
|