From 4a1037f88fe12b0f8190754041a1cfcbc56ca1f8 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 6 Dec 2018 10:31:33 +0800 Subject: [PATCH] - normalize autonavi.GetDistricts --- platformapi/autonavi/autonavi.go | 49 +++++++++++++++------------ platformapi/autonavi/autonavi_test.go | 6 ++-- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/platformapi/autonavi/autonavi.go b/platformapi/autonavi/autonavi.go index 76ee869c..65a81a2c 100644 --- a/platformapi/autonavi/autonavi.go +++ b/platformapi/autonavi/autonavi.go @@ -7,6 +7,7 @@ import ( "sort" "strings" + "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/platformapi" "git.rosy.net.cn/baseapi/utils" ) @@ -168,13 +169,13 @@ func (a *API) CoordinateConvert(lng, lat float64, coordsys string) (retLng, retL return lng, lat, err } -// 有些市是没有区的,比如东莞,这种情况下返回的区码是一个假的区域,即市的编码加上9000000 +// 这里的District指的是实际的District,有些市是没有区的,比如东莞,这种情况下返回的区码是一个假的区域,即市的编码加上9000000 func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) { params := map[string]interface{}{ "location": fmt.Sprintf("%.6f,%.6f", lng, lat), } result, err := a.AccessAPI("geocode/regeo", params) - // baseapi.SugarLogger.Debug(utils.Format4Output(result, false)) + baseapi.SugarLogger.Debug(utils.Format4Output(result, false)) if err == nil { addressComponent := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{}) if strAdcode, ok := addressComponent["adcode"].(string); ok { @@ -187,6 +188,8 @@ func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) { return districtCode } +// 这里的District指的是地点,不是实际上的区,具体级别看level +// 这个函数返回的可能不是同级别的地点 func (a *API) GetDistricts(subDistrict int, keywords string) (districtList []*District, err error) { params := map[string]interface{}{ "subdistrict": subDistrict, @@ -198,32 +201,34 @@ func (a *API) GetDistricts(subDistrict int, keywords string) (districtList []*Di result, err := a.AccessAPI("config/district", params) // baseapi.SugarLogger.Debug(utils.Format4Output(result, false)) if err == nil { - return a.GetDistrictsFromInterface(result["districts"].([]interface{})[0].(map[string]interface{})["districts"]), nil + return a.getDistrictsFromInterface(result["districts"]), nil } return nil, err } -func (a *API) GetDistrictsFromInterface(districts interface{}) (districtList []*District) { - districts2 := districts.([]interface{}) - districtList = make([]*District, len(districts2)) - for k, v := range districts2 { - v2 := v.(map[string]interface{}) - districtList[k] = &District{ - Adcode: utils.Interface2String(v2["adcode"]), - Name: utils.Interface2String(v2["name"]), - Level: GetDistrictLevel(utils.Interface2String(v2["level"])), - } - coordStrNodes := strings.Split(utils.Interface2String(v2["center"]), ",") - if len(coordStrNodes) == 2 { - if coordStrNodes[0] != "" && coordStrNodes[1] != "" { - districtList[k].Lng = utils.Str2Float64(coordStrNodes[0]) - districtList[k].Lat = utils.Str2Float64(coordStrNodes[1]) +func (a *API) getDistrictsFromInterface(districts interface{}) (districtList []*District) { + if districts != nil { + districts2 := districts.([]interface{}) + districtList = make([]*District, len(districts2)) + for k, v := range districts2 { + v2 := v.(map[string]interface{}) + districtList[k] = &District{ + Adcode: utils.Interface2String(v2["adcode"]), + Name: utils.Interface2String(v2["name"]), + Level: GetDistrictLevel(utils.Interface2String(v2["level"])), } + coordStrNodes := strings.Split(utils.Interface2String(v2["center"]), ",") + if len(coordStrNodes) == 2 { + if coordStrNodes[0] != "" && coordStrNodes[1] != "" { + districtList[k].Lng = utils.Str2Float64(coordStrNodes[0]) + districtList[k].Lat = utils.Str2Float64(coordStrNodes[1]) + } + } + if cityCodeStr, ok := v2["citycode"].(string); ok { + districtList[k].Citycode = cityCodeStr + } + districtList[k].Districts = a.getDistrictsFromInterface(v2["districts"]) } - if cityCodeStr, ok := v2["citycode"].(string); ok { - districtList[k].Citycode = cityCodeStr - } - districtList[k].Districts = a.GetDistrictsFromInterface(v2["districts"]) } return districtList } diff --git a/platformapi/autonavi/autonavi_test.go b/platformapi/autonavi/autonavi_test.go index 9a0592bc..c61126db 100644 --- a/platformapi/autonavi/autonavi_test.go +++ b/platformapi/autonavi/autonavi_test.go @@ -36,7 +36,7 @@ func TestCoordinateConvert(t *testing.T) { } } -func TestGetCoordinateCodes(t *testing.T) { +func TestGetCoordinateDistrictCode(t *testing.T) { dongguanLng := 113.703870 dongguanLat := 22.833210 districtCode := autonaviAPI.GetCoordinateDistrictCode(dongguanLng, dongguanLat) @@ -63,8 +63,8 @@ func TestGetCoordinateCodes(t *testing.T) { } } -func TestGetDistrict(t *testing.T) { - districtList, err := autonaviAPI.GetDistricts(4, "东莞") +func TestGetDistricts(t *testing.T) { + districtList, err := autonaviAPI.GetDistricts(1, "东莞") if err != nil { t.Fatal(err) }