118 lines
2.6 KiB
Go
118 lines
2.6 KiB
Go
package gao_map
|
|
|
|
import (
|
|
"github.com/duke-git/lancet/v2/convertor"
|
|
"github.com/duke-git/lancet/v2/netutil"
|
|
"github.com/duke-git/lancet/v2/strutil"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
const drivingUrl = "https://restapi.amap.com/v5/direction/driving" //驾车
|
|
|
|
type Direction struct {
|
|
client *AmapClient
|
|
}
|
|
|
|
type DrivingRequest struct {
|
|
Origin string
|
|
Destination string
|
|
Strategy int
|
|
Waypoints []string
|
|
ShowFields string
|
|
}
|
|
|
|
type BicyclingRequest struct {
|
|
Origin string
|
|
Destination string
|
|
ShowFields string
|
|
}
|
|
|
|
type Route struct {
|
|
Origin string `json:"origin"`
|
|
Destination string `json:"destination"`
|
|
Paths []struct {
|
|
Distance float64 `json:"distance,string"`
|
|
|
|
Steps []struct {
|
|
Cost struct {
|
|
Duration float64 `json:"duration,string"`
|
|
Tolls float64 `json:"tolls,string"`
|
|
TollsDistance float64 `json:"tolls_distance,string"`
|
|
} `json:"cost"`
|
|
Cities []struct {
|
|
Adcode string `json:"adcode"`
|
|
Citycode string `json:"citycode"`
|
|
City string `json:"city"`
|
|
} `json:"cities"`
|
|
Polyline string `json:"polyline"`
|
|
} `json:"steps"`
|
|
} `json:"paths"`
|
|
}
|
|
|
|
type DrivingResponse struct {
|
|
Response
|
|
|
|
Count int `json:"count,string"`
|
|
Route Route `json:"route"`
|
|
}
|
|
|
|
type BicyclingResponse struct {
|
|
Response
|
|
|
|
Count int `json:"count,string"`
|
|
Route Route `json:"route"`
|
|
}
|
|
|
|
func (d *Direction) Bicycling(request *BicyclingRequest) (*BicyclingResponse, error) {
|
|
val := url.Values{}
|
|
val.Set("origin", request.Origin)
|
|
val.Set("destination", request.Destination)
|
|
if !strutil.IsBlank(request.ShowFields) {
|
|
val.Set("show_fields", request.ShowFields)
|
|
}
|
|
|
|
resp, err := d.client.DoRequest(drivingUrl, "POST", val)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var data BicyclingResponse
|
|
|
|
if err = netutil.ParseHttpResponse(resp, &data); err != nil {
|
|
return nil, err
|
|
} else if err = checkResponse(data.Response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &data, err
|
|
}
|
|
|
|
func (d *Direction) Driving(request *DrivingRequest) (*DrivingResponse, error) {
|
|
val := url.Values{}
|
|
val.Set("origin", request.Origin)
|
|
val.Set("destination", request.Destination)
|
|
val.Set("strategy", convertor.ToString(request.Strategy))
|
|
if len(request.Waypoints) > 0 {
|
|
val.Set("waypoints", strings.Join(request.Waypoints, ";"))
|
|
}
|
|
if !strutil.IsBlank(request.ShowFields) {
|
|
val.Set("show_fields", request.ShowFields)
|
|
}
|
|
|
|
resp, err := d.client.DoRequest(drivingUrl, "POST", val)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var data DrivingResponse
|
|
|
|
if err = netutil.ParseHttpResponse(resp, &data); err != nil {
|
|
return nil, err
|
|
} else if err = checkResponse(data.Response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &data, err
|
|
}
|