package china; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.ApiModelProperty; import org.springframework.http.ResponseEntity; import org.springframework.util.CollectionUtils; import org.springframework.web.client.RestTemplate; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; /** * 获取中国行政区域测试类 * * @author yang */ public class ChinaRegionalTest { public static void main(String[] args) throws Exception { String url = "https://restapi.amap.com/v3/config/district?keywords=100000&subdistrict=3&key=<用户的key>"; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class); String body = forEntity.getBody(); ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> value = objectMapper.readValue(body, new TypeReference<Map<String, Object>>() { }); Object districts = value.get("districts"); List<ChinaRegionalBean> country = objectMapper.convertValue(districts, new TypeReference<List<ChinaRegionalBean>>() { }); ChinaRegionalBean china = country.get(0); Deque<ChinaRegionalBean> regionalDeque = new ArrayDeque<>(); regionalDeque.add(china); List<ChinaRegionalBean> chinaRegionals = new ArrayList<>(); String streetLevel = "street"; AtomicInteger atomicInteger = new AtomicInteger(); ChinaRegionalBean regional; while ((regional = regionalDeque.pollFirst()) != null) { atomicInteger.set(0); String adcode = regional.getAdcode(); String level = regional.getLevel(); Object citycode = regional.getCitycode(); if (citycode instanceof String) { regional.setCitycode(String.valueOf(citycode)); } Integer hierarchy = null; switch (level) { case "country": hierarchy = 0; break; case "province": hierarchy = 1; break; case "city": hierarchy = 2; break; case "district": hierarchy = 3; break; case "street": hierarchy = 3; break; default: break; } regional.setHierarchy(hierarchy); chinaRegionals.add(regional); List<ChinaRegionalBean> child = regional.getDistricts(); if (CollectionUtils.isEmpty(child)) { continue; } child.forEach(chinaRegionalBean -> { chinaRegionalBean.setParentcode(adcode); //解决省直辖县级行政区域没有区县信息导致区域编码重复问题 if (streetLevel.equals(chinaRegionalBean.getLevel())) { String formatStr = String.format("%02d", atomicInteger.incrementAndGet()); chinaRegionalBean.setAdcode(chinaRegionalBean.getAdcode() + formatStr); } regionalDeque.add(chinaRegionalBean); }); regional.setDistricts(null); } System.out.println(chinaRegionals.size()); } } @JsonIgnoreProperties(ignoreUnknown = true) class ChinaRegionalBean { @ApiModelProperty(value = "城市编码") private Object citycode; @ApiModelProperty(value = "区域编码") private String adcode; @ApiModelProperty(value = "行政区名称") private String name; @ApiModelProperty(value = "区域中心点") private String center; @ApiModelProperty(value = "行政区划级别:country:国家 province:省份 city:市 district:区县") private String level; @ApiModelProperty(value = "行政区划层级: 0:国家 1:省份 2:市 3:区县") private Integer hierarchy; @ApiModelProperty(value = "上级区域编码") private String parentcode; private List<ChinaRegionalBean> districts; public Object getCitycode() { return citycode; } public void setCitycode(Object citycode) { this.citycode = citycode; } public String getAdcode() { return adcode; } public void setAdcode(String adcode) { this.adcode = adcode; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCenter() { return center; } public String getParentcode() { return parentcode; } public void setParentcode(String parentcode) { this.parentcode = parentcode; } public void setCenter(String center) { this.center = center; } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; } public List<ChinaRegionalBean> getDistricts() { return districts; } public void setDistricts(List<ChinaRegionalBean> districts) { this.districts = districts; } public Integer getHierarchy() { return hierarchy; } public void setHierarchy(Integer hierarchy) { this.hierarchy = hierarchy; } }
调用高德地图api获取全国行政区域及经纬度
于 2022-06-23 10:06:51 首次发布