This commit is contained in:
邹宗楠
2024-07-31 13:14:24 +08:00
parent 8533b94f24
commit 8ecfd93781
4 changed files with 404 additions and 390 deletions

View File

@@ -1,385 +1,385 @@
package autonavi
//
//import (
// "bytes"
// "crypto/md5"
// "fmt"
// "git.rosy.net.cn/baseapi/platformapi"
// "git.rosy.net.cn/baseapi/utils"
// "net/http"
// "sort"
//)
//
//const (
// signKey = "sig"
// prodURL = "https://restapi.amap.com"
// prodURLv3 = "/v3"
// prodURLFullv3 = prodURL + prodURLv3
//
// batchAPIStr = "batch"
//)
//
//const (
// StatusCodeFailed = "0"
// StatusCodeSuccess = "1"
//)
//
//const (
// InfoCode_OK = "10000"
// InfoCode_ACCESS_TOO_FREQUENT = "10004"
// InfoCode_QPS_HAS_EXCEEDED_THE_LIMIT = "10014"
// InfoCode_SERVER_IS_BUSY = "10016"
// InfoCode_RESOURCE_UNAVAILABLE = "10017"
// InfoCode_CQPS_HAS_EXCEEDED_THE_LIMIT = "10019"
// InfoCode_CKQPS_HAS_EXCEEDED_THE_LIMIT = "10020"
// InfoCode_CIQPS_HAS_EXCEEDED_THE_LIMIT = "10021"
// InfoCode_CIKQPS_HAS_EXCEEDED_THE_LIMIT = "10022"
// InfoCode_KQPS_HAS_EXCEEDED_THE_LIMIT = "10023"
//)
//
//const (
// CoordSysAutonavi = "autonavi"
// CoordSysGPS = "gps"
// CoordSysMapbar = "mapbar"
// CoordSysBaidu = "baidu"
//)
//
//const (
// FakeDistrictPadding = 9000000
// MaxConvertCount = 40
//)
//
//var (
// exceedLimitCodes = map[string]int{
// InfoCode_ACCESS_TOO_FREQUENT: 1,
// InfoCode_QPS_HAS_EXCEEDED_THE_LIMIT: 1,
// InfoCode_CQPS_HAS_EXCEEDED_THE_LIMIT: 1,
// InfoCode_CKQPS_HAS_EXCEEDED_THE_LIMIT: 1,
// InfoCode_CIQPS_HAS_EXCEEDED_THE_LIMIT: 1,
// InfoCode_CIKQPS_HAS_EXCEEDED_THE_LIMIT: 1,
// InfoCode_KQPS_HAS_EXCEEDED_THE_LIMIT: 1,
// }
//
// canRetryCodes = map[string]int{
// InfoCode_SERVER_IS_BUSY: 1,
// }
//)
//
//const (
// DistrictLevelCountry = 0
// DistrictLevelProvince = 1
// DistrictLevelCity = 2
// DistrictLevelDistrict = 3
// DistrictLevelStreet = 4
//)
//
//const (
// RoadLevelAll = 0 // 显示所有道路
// RoadLevelMain = 1 // 过滤非主干道路,仅输出主干道路数据
//
// HomeOrCorpDef = 0 // 不对召回的排序策略进行干扰。
// HomeOrCorpPreferHome = 1 // 综合大数据分析将居家相关的 POI 内容优先返回,即优化返回结果中 pois 字段的poi顺序。
// HomeOrCorpPreferCorp = 2 // 综合大数据分析将公司相关的 POI 内容优先返回,即优化返回结果中 pois 字段的poi顺序。
//)
//
//var (
// levelStr2IntMap = map[string]int{
// "country": DistrictLevelCountry,
// "province": DistrictLevelProvince,
// "city": DistrictLevelCity,
// "district": DistrictLevelDistrict,
// "street": DistrictLevelStreet,
// }
//)
//
//type District struct {
// Adcode string `json:"adcode"` // 国家行政编码
// Lng float64 `json:"lng"`
// Lat float64 `json:"lat"`
// CityCode string `json:"citycode"` // 电话区号
// Level int `json:"level"`
// Name string `json:"name"`
// Districts []*District `json:"districts"`
//}
//
//type Coordinate struct {
// Lng float64 `json:"lng"`
// Lat float64 `json:"lat"`
//}
//
//type ResponseResult map[string]interface{}
//
//type API struct {
// platformapi.APICookie
//
// client *http.Client
// config *platformapi.APIConfig
// key string
//}
//
//func (a *API) SetKey(key string) {
// a.key = key
//}
//
//type BuildingOrNeighborInfo struct {
// Name string `json:"name"`
// Type string `json:"type"`
//}
//
//type BusinessAreaInfo struct {
// ID string `json:"id"`
// Location string `json:"location"`
// Name string `json:"name"`
//}
//
//type StreetNumberInfo struct {
// Direction string `json:"direction"`
// Distance string `json:"distance"`
// Location string `json:"location"`
// Number string `json:"number"`
// Street string `json:"street"`
//}
//
//type AoiInfo struct {
// Adcode string `json:"adcode"`
// Area string `json:"area"`
// Distance string `json:"distance"`
// ID string `json:"id"`
// Location string `json:"location"`
// Name string `json:"name"`
// Type string `json:"type"`
//}
//
//type PoiInfo struct {
// Address string `json:"address"`
// Businessarea string `json:"businessarea"`
// Direction string `json:"direction"`
// Distance string `json:"distance"`
// ID string `json:"id"`
// Location string `json:"location"`
// Name string `json:"name"`
// Poiweight string `json:"poiweight"`
// Tel string `json:"tel"`
// Type string `json:"type"`
//}
//
//type RoadinterInfo struct {
// Direction string `json:"direction"`
// Distance string `json:"distance"`
// FirstID string `json:"first_id"`
// FirstName string `json:"first_name"`
// Location string `json:"location"`
// SecondID string `json:"second_id"`
// SecondName string `json:"second_name"`
//}
//
//type RoadInfo struct {
// Direction string `json:"direction"`
// Distance string `json:"distance"`
// ID string `json:"id"`
// Location string `json:"location"`
// Name string `json:"name"`
//}
//
//type AddressComponentInfo struct {
// Adcode string `json:"adcode"`
// Building *BuildingOrNeighborInfo `json:"building"`
// // BusinessAreas []*BusinessAreaInfo `json:"businessAreas"`
// City string `json:"city"`
// Citycode string `json:"citycode"`
// Country string `json:"country"`
// District string `json:"district"`
// Neighborhood *BuildingOrNeighborInfo `json:"neighborhood"`
// Province string `json:"province"`
// StreetNumber *StreetNumberInfo `json:"streetNumber"`
// Towncode string `json:"towncode"`
// Township string `json:"township"`
//}
//
//type RegeoCodeInfo struct {
// AddressComponent *AddressComponentInfo `json:"addressComponent"`
// Aois []*AoiInfo `json:"aois"`
// FormattedAddress string `json:"formatted_address"`
// Pois []*PoiInfo `json:"pois"`
// Roadinters []*RoadinterInfo `json:"roadinters"`
// Roads []*RoadInfo `json:"roads"`
//}
//
//type tBatchAPIParams struct {
// APIStr string
// APIParams map[string]interface{}
//}
//
//type tBatchAPIResponse struct {
// Result ResponseResult
// Err error
//}
//
//func New(key string, config ...*platformapi.APIConfig) *API {
// curConfig := platformapi.DefAPIConfig
// if len(config) > 0 {
// curConfig = *config[0]
// }
// return &API{
// key: key,
// client: &http.Client{Timeout: curConfig.ClientTimeout},
// config: &curConfig,
// }
//}
//
//func (a *API) signParams(mapData map[string]interface{}) string {
// keys := make([]string, 0)
// for k := range mapData {
// if k != signKey {
// keys = append(keys, k)
// }
// }
// sort.Strings(keys)
//
// finalStr := ""
// for _, k := range keys {
// finalStr += k + "=" + fmt.Sprint(mapData[k])
// }
//
// 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)
//
// err = platformapi.AccessPlatformAPIWithRetry(a.client,
// func() *http.Request {
// request, _ := http.NewRequest(http.MethodGet, utils.GenerateGetURL(prodURLFullv3, apiStr, params2), nil)
// return request
// },
// a.config,
// func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
// if jsonResult1 == nil {
// return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
// }
// status := jsonResult1["status"].(string)
// if status == StatusCodeSuccess {
// retVal = jsonResult1
// return platformapi.ErrLevelSuccess, nil
// }
// infoCode := jsonResult1["infocode"].(string)
// newErr := utils.NewErrorCode(jsonResult1["info"].(string), infoCode)
// if _, ok := exceedLimitCodes[infoCode]; ok {
// return platformapi.ErrLevelExceedLimit, newErr
// } else if _, ok := canRetryCodes[infoCode]; ok {
// return platformapi.ErrLevelRecoverableErr, newErr
// } else {
// return platformapi.ErrLevelCodeIsNotOK, newErr
// }
// })
// return retVal, err
//}
//
//func (a *API) AccessAPI3(apiStr string, params map[string]interface{}) (retVal ResponseResult, err error) {
// err = platformapi.AccessPlatformAPIWithRetry(a.client,
// func() *http.Request {
// request, _ := http.NewRequest(http.MethodGet, utils.GenerateGetURL(BaseUrl, apiStr, params), nil)
// return request
// },
// a.config,
// func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
// if jsonResult1 == nil {
// return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
// }
// status := jsonResult1["status"].(string)
// if status == StatusCodeSuccess {
// retVal = jsonResult1
// return platformapi.ErrLevelSuccess, nil
// }
// infoCode := jsonResult1["infocode"].(string)
// newErr := utils.NewErrorCode(jsonResult1["info"].(string), infoCode)
// if _, ok := exceedLimitCodes[infoCode]; ok {
// return platformapi.ErrLevelExceedLimit, newErr
// } else if _, ok := canRetryCodes[infoCode]; ok {
// return platformapi.ErrLevelRecoverableErr, newErr
// } else {
// return platformapi.ErrLevelCodeIsNotOK, newErr
// }
// })
// return retVal, err
//}
//
//func (a *API) BatchAccessAPI(apiList []*tBatchAPIParams) (retVal []*tBatchAPIResponse, err error) {
// if len(apiList) == 0 {
// return nil, nil
// }
//
// var ops []map[string]interface{}
// for _, v := range apiList {
// params2 := utils.MergeMaps(utils.Params2Map("key", a.key, "output", "json"), v.APIParams)
// params2[signKey] = a.signParams(params2)
// op := make(map[string]interface{})
// op["url"] = utils.GenerateGetURL(prodURLv3, v.APIStr, params2)
// ops = append(ops, op)
// }
// params2 := map[string]interface{}{
// "ops": ops,
// }
//
// err = platformapi.AccessPlatformAPIWithRetry(a.client,
// func() *http.Request {
// request, _ := http.NewRequest(http.MethodGet, utils.GenerateGetURL(prodURLFullv3, batchAPIStr, utils.Params2Map("key", a.key)),
// bytes.NewReader(utils.MustMarshal(params2)))
// request.Header.Set("charset", "UTF-8")
// request.Header.Set("Content-Type", "application/json")
// return request
// },
// a.config,
// func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
// if jsonResult1 == nil {
// return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
// }
// if resultList, ok := jsonResult1[platformapi.KeyData].([]interface{}); ok {
// for _, v := range resultList {
// jsonResult1 := v.(map[string]interface{})
// status := int(utils.ForceInterface2Int64(jsonResult1["status"]))
// if status == http.StatusOK {
// jsonResult1 := v.(map[string]interface{})["body"].(map[string]interface{})
// var retVal2 map[string]interface{}
// var err2 error
// status := jsonResult1["status"].(string)
// if status == StatusCodeSuccess {
// retVal2 = jsonResult1
// } else {
// infoCode := jsonResult1["infocode"].(string)
// err2 = utils.NewErrorCode(jsonResult1["info"].(string), infoCode)
// }
// retVal = append(retVal, &tBatchAPIResponse{
// Result: retVal2,
// Err: err2,
// })
// }
// }
// errLevel = platformapi.ErrLevelSuccess
// } else {
// infoCode := jsonResult1["infocode"].(string)
// err = utils.NewErrorCode(jsonResult1["info"].(string), infoCode)
// if _, ok := exceedLimitCodes[infoCode]; ok {
// errLevel = platformapi.ErrLevelExceedLimit
// } else if _, ok := canRetryCodes[infoCode]; ok {
// errLevel = platformapi.ErrLevelRecoverableErr
// } else {
// errLevel = platformapi.ErrLevelCodeIsNotOK
// }
// }
// return errLevel, err
// })
// return retVal, err
//}
import (
"bytes"
"crypto/md5"
"fmt"
"git.rosy.net.cn/baseapi/platformapi"
"git.rosy.net.cn/baseapi/utils"
"net/http"
"sort"
"strings"
)
const (
signKey = "sig"
prodURL = "https://restapi.amap.com"
prodURLv3 = "/v3"
prodURLFullv3 = prodURL + prodURLv3
batchAPIStr = "batch"
)
const (
StatusCodeFailed = "0"
StatusCodeSuccess = "1"
)
const (
InfoCode_OK = "10000"
InfoCode_ACCESS_TOO_FREQUENT = "10004"
InfoCode_QPS_HAS_EXCEEDED_THE_LIMIT = "10014"
InfoCode_SERVER_IS_BUSY = "10016"
InfoCode_RESOURCE_UNAVAILABLE = "10017"
InfoCode_CQPS_HAS_EXCEEDED_THE_LIMIT = "10019"
InfoCode_CKQPS_HAS_EXCEEDED_THE_LIMIT = "10020"
InfoCode_CIQPS_HAS_EXCEEDED_THE_LIMIT = "10021"
InfoCode_CIKQPS_HAS_EXCEEDED_THE_LIMIT = "10022"
InfoCode_KQPS_HAS_EXCEEDED_THE_LIMIT = "10023"
)
const (
CoordSysAutonavi = "autonavi"
CoordSysGPS = "gps"
CoordSysMapbar = "mapbar"
CoordSysBaidu = "baidu"
)
const (
FakeDistrictPadding = 9000000
MaxConvertCount = 40
)
var (
exceedLimitCodes = map[string]int{
InfoCode_ACCESS_TOO_FREQUENT: 1,
InfoCode_QPS_HAS_EXCEEDED_THE_LIMIT: 1,
InfoCode_CQPS_HAS_EXCEEDED_THE_LIMIT: 1,
InfoCode_CKQPS_HAS_EXCEEDED_THE_LIMIT: 1,
InfoCode_CIQPS_HAS_EXCEEDED_THE_LIMIT: 1,
InfoCode_CIKQPS_HAS_EXCEEDED_THE_LIMIT: 1,
InfoCode_KQPS_HAS_EXCEEDED_THE_LIMIT: 1,
}
canRetryCodes = map[string]int{
InfoCode_SERVER_IS_BUSY: 1,
}
)
const (
DistrictLevelCountry = 0
DistrictLevelProvince = 1
DistrictLevelCity = 2
DistrictLevelDistrict = 3
DistrictLevelStreet = 4
)
const (
RoadLevelAll = 0 // 显示所有道路
RoadLevelMain = 1 // 过滤非主干道路,仅输出主干道路数据
HomeOrCorpDef = 0 // 不对召回的排序策略进行干扰。
HomeOrCorpPreferHome = 1 // 综合大数据分析将居家相关的 POI 内容优先返回,即优化返回结果中 pois 字段的poi顺序。
HomeOrCorpPreferCorp = 2 // 综合大数据分析将公司相关的 POI 内容优先返回,即优化返回结果中 pois 字段的poi顺序。
)
var (
levelStr2IntMap = map[string]int{
"country": DistrictLevelCountry,
"province": DistrictLevelProvince,
"city": DistrictLevelCity,
"district": DistrictLevelDistrict,
"street": DistrictLevelStreet,
}
)
type District struct {
Adcode string `json:"adcode"` // 国家行政编码
Lng float64 `json:"lng"`
Lat float64 `json:"lat"`
CityCode string `json:"citycode"` // 电话区号
Level int `json:"level"`
Name string `json:"name"`
Districts []*District `json:"districts"`
}
type Coordinate struct {
Lng float64 `json:"lng"`
Lat float64 `json:"lat"`
}
type ResponseResult map[string]interface{}
type API struct {
platformapi.APICookie
client *http.Client
config *platformapi.APIConfig
key string
}
func (a *API) SetKey(key string) {
a.key = key
}
type BuildingOrNeighborInfo struct {
Name string `json:"name"`
Type string `json:"type"`
}
type BusinessAreaInfo struct {
ID string `json:"id"`
Location string `json:"location"`
Name string `json:"name"`
}
type StreetNumberInfo struct {
Direction string `json:"direction"`
Distance string `json:"distance"`
Location string `json:"location"`
Number string `json:"number"`
Street string `json:"street"`
}
type AoiInfo struct {
Adcode string `json:"adcode"`
Area string `json:"area"`
Distance string `json:"distance"`
ID string `json:"id"`
Location string `json:"location"`
Name string `json:"name"`
Type string `json:"type"`
}
type PoiInfo struct {
Address string `json:"address"`
Businessarea string `json:"businessarea"`
Direction string `json:"direction"`
Distance string `json:"distance"`
ID string `json:"id"`
Location string `json:"location"`
Name string `json:"name"`
Poiweight string `json:"poiweight"`
Tel string `json:"tel"`
Type string `json:"type"`
}
type RoadinterInfo struct {
Direction string `json:"direction"`
Distance string `json:"distance"`
FirstID string `json:"first_id"`
FirstName string `json:"first_name"`
Location string `json:"location"`
SecondID string `json:"second_id"`
SecondName string `json:"second_name"`
}
type RoadInfo struct {
Direction string `json:"direction"`
Distance string `json:"distance"`
ID string `json:"id"`
Location string `json:"location"`
Name string `json:"name"`
}
type AddressComponentInfo struct {
Adcode string `json:"adcode"`
Building *BuildingOrNeighborInfo `json:"building"`
// BusinessAreas []*BusinessAreaInfo `json:"businessAreas"`
City string `json:"city"`
Citycode string `json:"citycode"`
Country string `json:"country"`
District string `json:"district"`
Neighborhood *BuildingOrNeighborInfo `json:"neighborhood"`
Province string `json:"province"`
StreetNumber *StreetNumberInfo `json:"streetNumber"`
Towncode string `json:"towncode"`
Township string `json:"township"`
}
type RegeoCodeInfo struct {
AddressComponent *AddressComponentInfo `json:"addressComponent"`
Aois []*AoiInfo `json:"aois"`
FormattedAddress string `json:"formatted_address"`
Pois []*PoiInfo `json:"pois"`
Roadinters []*RoadinterInfo `json:"roadinters"`
Roads []*RoadInfo `json:"roads"`
}
type tBatchAPIParams struct {
APIStr string
APIParams map[string]interface{}
}
type tBatchAPIResponse struct {
Result ResponseResult
Err error
}
func New(key string, config ...*platformapi.APIConfig) *API {
curConfig := platformapi.DefAPIConfig
if len(config) > 0 {
curConfig = *config[0]
}
return &API{
key: key,
client: &http.Client{Timeout: curConfig.ClientTimeout},
config: &curConfig,
}
}
func (a *API) signParams(mapData map[string]interface{}) string {
keys := make([]string, 0)
for k := range mapData {
if k != signKey {
keys = append(keys, k)
}
}
sort.Strings(keys)
finalStr := ""
for _, k := range keys {
finalStr += k + "=" + fmt.Sprint(mapData[k])
}
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)
err = platformapi.AccessPlatformAPIWithRetry(a.client,
func() *http.Request {
request, _ := http.NewRequest(http.MethodGet, utils.GenerateGetURL(prodURLFullv3, apiStr, params2), nil)
return request
},
a.config,
func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
if jsonResult1 == nil {
return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
}
status := jsonResult1["status"].(string)
if status == StatusCodeSuccess {
retVal = jsonResult1
return platformapi.ErrLevelSuccess, nil
}
infoCode := jsonResult1["infocode"].(string)
newErr := utils.NewErrorCode(jsonResult1["info"].(string), infoCode)
if _, ok := exceedLimitCodes[infoCode]; ok {
return platformapi.ErrLevelExceedLimit, newErr
} else if _, ok := canRetryCodes[infoCode]; ok {
return platformapi.ErrLevelRecoverableErr, newErr
} else {
return platformapi.ErrLevelCodeIsNotOK, newErr
}
})
return retVal, err
}
func (a *API) AccessAPI3(apiStr string, params map[string]interface{}) (retVal ResponseResult, err error) {
err = platformapi.AccessPlatformAPIWithRetry(a.client,
func() *http.Request {
request, _ := http.NewRequest(http.MethodGet, utils.GenerateGetURL(BaseUrl, apiStr, params), nil)
return request
},
a.config,
func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
if jsonResult1 == nil {
return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
}
status := jsonResult1["status"].(string)
if status == StatusCodeSuccess {
retVal = jsonResult1
return platformapi.ErrLevelSuccess, nil
}
infoCode := jsonResult1["infocode"].(string)
newErr := utils.NewErrorCode(jsonResult1["info"].(string), infoCode)
if _, ok := exceedLimitCodes[infoCode]; ok {
return platformapi.ErrLevelExceedLimit, newErr
} else if _, ok := canRetryCodes[infoCode]; ok {
return platformapi.ErrLevelRecoverableErr, newErr
} else {
return platformapi.ErrLevelCodeIsNotOK, newErr
}
})
return retVal, err
}
func (a *API) BatchAccessAPI(apiList []*tBatchAPIParams) (retVal []*tBatchAPIResponse, err error) {
if len(apiList) == 0 {
return nil, nil
}
var ops []map[string]interface{}
for _, v := range apiList {
params2 := utils.MergeMaps(utils.Params2Map("key", a.key, "output", "json"), v.APIParams)
params2[signKey] = a.signParams(params2)
op := make(map[string]interface{})
op["url"] = utils.GenerateGetURL(prodURLv3, v.APIStr, params2)
ops = append(ops, op)
}
params2 := map[string]interface{}{
"ops": ops,
}
err = platformapi.AccessPlatformAPIWithRetry(a.client,
func() *http.Request {
request, _ := http.NewRequest(http.MethodGet, utils.GenerateGetURL(prodURLFullv3, batchAPIStr, utils.Params2Map("key", a.key)),
bytes.NewReader(utils.MustMarshal(params2)))
request.Header.Set("charset", "UTF-8")
request.Header.Set("Content-Type", "application/json")
return request
},
a.config,
func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
if jsonResult1 == nil {
return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
}
if resultList, ok := jsonResult1[platformapi.KeyData].([]interface{}); ok {
for _, v := range resultList {
jsonResult1 := v.(map[string]interface{})
status := int(utils.ForceInterface2Int64(jsonResult1["status"]))
if status == http.StatusOK {
jsonResult1 := v.(map[string]interface{})["body"].(map[string]interface{})
var retVal2 map[string]interface{}
var err2 error
status := jsonResult1["status"].(string)
if status == StatusCodeSuccess {
retVal2 = jsonResult1
} else {
infoCode := jsonResult1["infocode"].(string)
err2 = utils.NewErrorCode(jsonResult1["info"].(string), infoCode)
}
retVal = append(retVal, &tBatchAPIResponse{
Result: retVal2,
Err: err2,
})
}
}
errLevel = platformapi.ErrLevelSuccess
} else {
infoCode := jsonResult1["infocode"].(string)
err = utils.NewErrorCode(jsonResult1["info"].(string), infoCode)
if _, ok := exceedLimitCodes[infoCode]; ok {
errLevel = platformapi.ErrLevelExceedLimit
} else if _, ok := canRetryCodes[infoCode]; ok {
errLevel = platformapi.ErrLevelRecoverableErr
} else {
errLevel = platformapi.ErrLevelCodeIsNotOK
}
}
return errLevel, err
})
return retVal, err
}
// 为了方便调用者编码,如果失败,也会返回未转换的原始值
/*func (a *API) CoordinateConvert(lng, lat float64, coordsys string) (retLng, retLat float64, err error) {
func (a *API) CoordinateConvert(lng, lat float64, coordsys string) (retLng, retLat float64, err error) {
// outCoords, err := a.BatchCoordinateConvert([]*Coordinate{
// &Coordinate{
// Lng: lng,
@@ -552,9 +552,9 @@ 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) {
func (a *API) WalkingDistance(lng1, lat1, lng2, lat2 float64) (distance float64) {
params := map[string]interface{}{
"origin": coordinate2String(lng1, lat1),
"destination": coordinate2String(lng2, lat2),
@@ -593,11 +593,9 @@ func (a *API) BatchWalkingDistance(srcLng, srcLat float64, destCoords []*Coordin
}
return distanceList, err
}
*/
/*-----------------------------------------------------*/
// 这里的District指的是实际的District有些市是没有区的比如东莞这种情况下返回的区码是一个假的区域即市的编码加上9000000
/*func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) {
func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) {
result, err := a.GetCoordinateAreaInfo(lng, lat)
if err == nil {
addressComponent := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})
@@ -651,4 +649,3 @@ func (a *API) GetCoordinateCityInfo(lng, lat float64) (cityName, cityCode string
}
return cityName, cityCode
}
*/

View File

@@ -1,6 +1,6 @@
package autonavi
/*import (
import (
"fmt"
"net/http"
"strings"
@@ -120,4 +120,3 @@ func (a *API) GetCoordinateFromAddressByPageAll(address string, cityCode int) (g
}
return getCoordinateFromAddressByPageAllResult, err
}
*/

View File

@@ -1,7 +1,13 @@
package autonavi
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"strings"
)
// GetCyclingPlan 获取骑手的骑行计划
/*func (a *API) GetCyclingPlan(origin, destination string) ([]string, int64, int64, error) {
func (a *API) GetCyclingPlan(origin, destination string) ([]string, int64, int64, error) {
param := map[string]interface{}{
"key": a.key,
"origin": origin,
@@ -39,4 +45,3 @@ package autonavi
return polyLineList, distance, duration, nil
}
*/

View File

@@ -1,5 +1,20 @@
package baidunavi
import (
"crypto/md5"
"encoding/json"
"errors"
"fmt"
"git.rosy.net.cn/baseapi/platformapi"
"git.rosy.net.cn/baseapi/utils"
"io/ioutil"
"net/http"
"net/url"
"sort"
"strings"
"time"
)
const (
signKey = "sn"
resultKey = "result"
@@ -32,7 +47,6 @@ const (
CoordSysBaidu2Gaode = "5" // 百度坐标转高德坐标
)
/*
const (
MaxCoordsConvBatchSize = 100
)
@@ -230,4 +244,3 @@ func (a *API) DirectionLiteRide(coords []*Coordinate) (retVal interface{}, err e
return nil, nil
}
*/