- normalize autonavi.GetDistricts
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi"
|
||||||
"git.rosy.net.cn/baseapi/platformapi"
|
"git.rosy.net.cn/baseapi/platformapi"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"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
|
return lng, lat, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 有些市是没有区的,比如东莞,这种情况下返回的区码是一个假的区域,即市的编码加上9000000
|
// 这里的District指的是实际的District,有些市是没有区的,比如东莞,这种情况下返回的区码是一个假的区域,即市的编码加上9000000
|
||||||
func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) {
|
func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) {
|
||||||
params := map[string]interface{}{
|
params := map[string]interface{}{
|
||||||
"location": fmt.Sprintf("%.6f,%.6f", lng, lat),
|
"location": fmt.Sprintf("%.6f,%.6f", lng, lat),
|
||||||
}
|
}
|
||||||
result, err := a.AccessAPI("geocode/regeo", params)
|
result, err := a.AccessAPI("geocode/regeo", params)
|
||||||
// baseapi.SugarLogger.Debug(utils.Format4Output(result, false))
|
baseapi.SugarLogger.Debug(utils.Format4Output(result, false))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
addressComponent := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})
|
addressComponent := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})
|
||||||
if strAdcode, ok := addressComponent["adcode"].(string); ok {
|
if strAdcode, ok := addressComponent["adcode"].(string); ok {
|
||||||
@@ -187,6 +188,8 @@ func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) {
|
|||||||
return districtCode
|
return districtCode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 这里的District指的是地点,不是实际上的区,具体级别看level
|
||||||
|
// 这个函数返回的可能不是同级别的地点
|
||||||
func (a *API) GetDistricts(subDistrict int, keywords string) (districtList []*District, err error) {
|
func (a *API) GetDistricts(subDistrict int, keywords string) (districtList []*District, err error) {
|
||||||
params := map[string]interface{}{
|
params := map[string]interface{}{
|
||||||
"subdistrict": subDistrict,
|
"subdistrict": subDistrict,
|
||||||
@@ -198,32 +201,34 @@ func (a *API) GetDistricts(subDistrict int, keywords string) (districtList []*Di
|
|||||||
result, err := a.AccessAPI("config/district", params)
|
result, err := a.AccessAPI("config/district", params)
|
||||||
// baseapi.SugarLogger.Debug(utils.Format4Output(result, false))
|
// baseapi.SugarLogger.Debug(utils.Format4Output(result, false))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return a.GetDistrictsFromInterface(result["districts"].([]interface{})[0].(map[string]interface{})["districts"]), nil
|
return a.getDistrictsFromInterface(result["districts"]), nil
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *API) GetDistrictsFromInterface(districts interface{}) (districtList []*District) {
|
func (a *API) getDistrictsFromInterface(districts interface{}) (districtList []*District) {
|
||||||
districts2 := districts.([]interface{})
|
if districts != nil {
|
||||||
districtList = make([]*District, len(districts2))
|
districts2 := districts.([]interface{})
|
||||||
for k, v := range districts2 {
|
districtList = make([]*District, len(districts2))
|
||||||
v2 := v.(map[string]interface{})
|
for k, v := range districts2 {
|
||||||
districtList[k] = &District{
|
v2 := v.(map[string]interface{})
|
||||||
Adcode: utils.Interface2String(v2["adcode"]),
|
districtList[k] = &District{
|
||||||
Name: utils.Interface2String(v2["name"]),
|
Adcode: utils.Interface2String(v2["adcode"]),
|
||||||
Level: GetDistrictLevel(utils.Interface2String(v2["level"])),
|
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])
|
|
||||||
}
|
}
|
||||||
|
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
|
return districtList
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ func TestCoordinateConvert(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetCoordinateCodes(t *testing.T) {
|
func TestGetCoordinateDistrictCode(t *testing.T) {
|
||||||
dongguanLng := 113.703870
|
dongguanLng := 113.703870
|
||||||
dongguanLat := 22.833210
|
dongguanLat := 22.833210
|
||||||
districtCode := autonaviAPI.GetCoordinateDistrictCode(dongguanLng, dongguanLat)
|
districtCode := autonaviAPI.GetCoordinateDistrictCode(dongguanLng, dongguanLat)
|
||||||
@@ -63,8 +63,8 @@ func TestGetCoordinateCodes(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetDistrict(t *testing.T) {
|
func TestGetDistricts(t *testing.T) {
|
||||||
districtList, err := autonaviAPI.GetDistricts(4, "东莞")
|
districtList, err := autonaviAPI.GetDistricts(1, "东莞")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user