From 949bca2c1c1026a40df363b130ec283eae6e629a Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 26 Sep 2019 15:43:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=A4=E7=82=B9=E9=97=B4?= =?UTF-8?q?=E6=AD=A5=E8=A1=8C=E8=B7=9D=E7=A6=BB=E5=87=BD=E6=95=B0=EF=BC=9A?= =?UTF-8?q?WalkingDistance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platformapi/autonavi/autonavi.go | 25 ++++++++++++++++++++++--- platformapi/autonavi/autonavi_test.go | 5 +++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/platformapi/autonavi/autonavi.go b/platformapi/autonavi/autonavi.go index 5a75f3f3..9ff7e07c 100644 --- a/platformapi/autonavi/autonavi.go +++ b/platformapi/autonavi/autonavi.go @@ -133,6 +133,10 @@ func (a *API) signParams(mapData map[string]interface{}) string { return fmt.Sprintf("%X", md5.Sum([]byte(finalStr))) } +func coordinate2String(lng, lat float64) (str string) { + return fmt.Sprintf("%.6f,%.6f", lng, lat) +} + func (a *API) AccessAPI(apiStr string, params map[string]interface{}) (retVal ResponseResult, err error) { params2 := utils.MergeMaps(utils.Params2Map("key", a.key, "output", "json"), params) params2[signKey] = a.signParams(params2) @@ -183,7 +187,7 @@ func (a *API) CoordinateConvert(lng, lat float64, coordsys string) (retLng, retL return 0.0, 0.0, nil } params := map[string]interface{}{ - "locations": fmt.Sprintf("%.6f,%.6f", lng, lat), + "locations": coordinate2String(lng, lat), "coordsys": coordsys, } result, err := a.AccessAPI("assistant/coordinate/convert", params) @@ -201,7 +205,7 @@ func (a *API) BatchCoordinateConvert(coords []*Coordinate, coordsys string) (out } var coordsStrList []string for _, v := range coords { - coordsStrList = append(coordsStrList, fmt.Sprintf("%.6f,%.6f", v.Lng, v.Lat)) + coordsStrList = append(coordsStrList, coordinate2String(v.Lng, v.Lat)) } params := map[string]interface{}{ "locations": strings.Join(coordsStrList, "|"), @@ -260,7 +264,7 @@ func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) { func (a *API) GetCoordinateAreaInfo(lng, lat float64) (areaInfo map[string]interface{}, err error) { params := map[string]interface{}{ - "location": fmt.Sprintf("%.6f,%.6f", lng, lat), + "location": coordinate2String(lng, lat), } result, err := a.AccessAPI("geocode/regeo", params) return result, err @@ -325,3 +329,18 @@ func (a *API) getDistrictsFromInterface(districts interface{}) (districtList []* func GetDistrictLevel(levelName string) (level int) { return levelStr2IntMap[levelName] } + +// 两点之间的步行距离,单位为米 +func (a *API) WalkingDistance(lng1, lat1, lng2, lat2 float64) (distance float64) { + params := map[string]interface{}{ + "origin": coordinate2String(lng1, lat1), + "destination": coordinate2String(lng2, lat2), + } + result, err := a.AccessAPI("direction/walking", params) + if err == nil { + if paths, _ := result["route"].(map[string]interface{})["paths"].([]interface{}); len(paths) > 0 { + distance = utils.Interface2Float64WithDefault(paths[0].(map[string]interface{})["distance"], 0) + } + } + return distance +} diff --git a/platformapi/autonavi/autonavi_test.go b/platformapi/autonavi/autonavi_test.go index 4e21dd05..26fd32a1 100644 --- a/platformapi/autonavi/autonavi_test.go +++ b/platformapi/autonavi/autonavi_test.go @@ -88,3 +88,8 @@ func TestGetCoordinateFromAddress(t *testing.T) { lng, lat, districtCode := autonaviAPI.GetCoordinateFromAddress("天府广场", "成都市") t.Logf("lng:%f, lat:%f, districtCode:%d", lng, lat, districtCode) } + +func TestWalkingDistance(t *testing.T) { + distance := autonaviAPI.WalkingDistance(104.057289, 30.694798, 104.066289, 30.695598) + t.Logf("distance:%f", distance) +}