添加两点间步行距离函数:WalkingDistance
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user