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) +}