- autonavi.GetDistricts
This commit is contained in:
@@ -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 ResponseResult map[string]interface{}
|
||||||
|
|
||||||
type API struct {
|
type API struct {
|
||||||
@@ -160,3 +178,60 @@ func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) {
|
|||||||
}
|
}
|
||||||
return districtCode
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -51,3 +51,14 @@ func TestGetCoordinateCodes(t *testing.T) {
|
|||||||
t.Log(districtCode)
|
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))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user