diff --git a/platformapi/autonavi/autonavi.go b/platformapi/autonavi/autonavi.go index 291a2aca..76ee869c 100644 --- a/platformapi/autonavi/autonavi.go +++ b/platformapi/autonavi/autonavi.go @@ -41,6 +41,10 @@ const ( CoordSysBaidu = "baidu" ) +const ( + FakeDistrictPadding = 9000000 +) + var ( exceedLimitCodes = map[string]int{ InfoCode_ACCESS_TOO_FREQUENT: 1, @@ -164,6 +168,7 @@ func (a *API) CoordinateConvert(lng, lat float64, coordsys string) (retLng, retL return lng, lat, err } +// 有些市是没有区的,比如东莞,这种情况下返回的区码是一个假的区域,即市的编码加上9000000 func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) { params := map[string]interface{}{ "location": fmt.Sprintf("%.6f,%.6f", lng, lat), @@ -174,6 +179,9 @@ func (a *API) GetCoordinateDistrictCode(lng, lat float64) (districtCode int) { addressComponent := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{}) if strAdcode, ok := addressComponent["adcode"].(string); ok { districtCode = int(utils.Str2Int64WithDefault(strAdcode, 0)) + if _, ok := addressComponent["district"].(string); !ok { + districtCode += FakeDistrictPadding + } } } return districtCode diff --git a/platformapi/autonavi/autonavi_test.go b/platformapi/autonavi/autonavi_test.go index 03ef5a37..9a0592bc 100644 --- a/platformapi/autonavi/autonavi_test.go +++ b/platformapi/autonavi/autonavi_test.go @@ -37,13 +37,24 @@ func TestCoordinateConvert(t *testing.T) { } func TestGetCoordinateCodes(t *testing.T) { - // districtCode := autonaviAPI.GetCoordinateDistrictCode(119.40695, 32.38755) - districtCode := autonaviAPI.GetCoordinateDistrictCode(104.053567, 30.576072) + dongguanLng := 113.703870 + dongguanLat := 22.833210 + districtCode := autonaviAPI.GetCoordinateDistrictCode(dongguanLng, dongguanLat) + if districtCode != 9441900 { + t.Fatalf("TestGetCoordinateCodes failed") + } else { + t.Log(districtCode) + } + + cdgxWuhouLng := 104.052971 + cdgxWuhouLat := 30.576076 + districtCode = autonaviAPI.GetCoordinateDistrictCode(cdgxWuhouLng, cdgxWuhouLat) if districtCode != 510107 { t.Fatalf("TestGetCoordinateCodes failed") } else { t.Log(districtCode) } + districtCode = autonaviAPI.GetCoordinateDistrictCode(0, 0) if districtCode != 0 { t.Fatalf("TestGetCoordinateCodes failed")