- autonavi.GetDistricts

This commit is contained in:
gazebo
2018-12-04 16:44:24 +08:00
parent 57c6abbac0
commit 395c2418ab
2 changed files with 86 additions and 0 deletions

View File

@@ -57,6 +57,24 @@ var (
}
)
const (
DistrictLevelCountry = 0
DistrictLevelProvince = 1
DistrictLevelCity = 2
DistrictLevelDistrict = 3
DistrictLevelStreet = 4
)
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 ResponseResult map[string]interface{}
type API struct {
@@ -160,3 +178,60 @@ func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) {
}
return districtCode
}
func (a *API) GetDistricts(subDistrict int, keywords string) (districtList []*District, err error) {
params := map[string]interface{}{
"subdistrict": subDistrict,
}
if keywords != "" {
params["keywords"] = keywords
}
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 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])
}
}
if cityCodeStr, ok := v2["citycode"].(string); ok {
districtList[k].Citycode = cityCodeStr
}
districtList[k].Districts = a.GetDistrictsFromInterface(v2["districts"])
}
return districtList
}
func GetDistrictLevel(levelName string) (level int) {
switch levelName {
case "country":
level = 0
case "province":
level = 1
case "city":
level = 2
case "district":
level = 3
case "street":
level = 4
}
return level
}

View File

@@ -51,3 +51,14 @@ func TestGetCoordinateCodes(t *testing.T) {
t.Log(districtCode)
}
}
func TestGetDistrict(t *testing.T) {
districtList, err := autonaviAPI.GetDistricts(4, "东莞")
if err != nil {
t.Fatal(err)
}
if len(districtList) == 0 {
t.Fatal("should have ditrict")
}
// t.Log(utils.Format4Output(districtList, false))
}