经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
解析高德地图api获取省市区,生成最新三级联动sql表
来源:cnblogs  作者:致未来的自己  时间:2019/2/12 9:40:29  对本文有异议

 前言:

  最近项目中用到了全国省市区三级信息,但是网上找到的信息都是比较旧的信息。与现在最新的地区信息匹配不上。后来想到高德地图上可能有这些信息。所以解析了一下api接口,生成了相关省市区的sql信息。(注意:这里面没有港台地区)具体的请参看高德地图文档。

  alibaba.fastjson解析+mysql表 

 

1、高德地图api调用接口说明文档:https://lbs.amap.com/api/webservice/guide/api/district/#limit

  具体数据接口:

  1.   https://restapi.amap.com/v3/config/district?subdistrict=4&key=bb4198a1f146184af53322d424732f6b

  注意:如果想调用此接口需要申请一个key,免费的,注册就可以获取

 

2、我的码云代码:https://gitee.com/liran123/yft-evidence

 

3、java代码如下:

  1. @RequestMapping("/getAll")
  2. public Object getMasterList() throws Exception {
  3. HttpClientResult result = HttpClientUtils.doGet("https://restapi.amap.com/v3/config/district?subdistrict=4&key=bb4198a1f146184af53322d424732f6b");
  4. String jsonString = result.getContent();
  5. //数据结构如下
  6. /* String jsonString = "{\n" +
  7. " \"status\": \"1\",\n" +
  8. " \"info\": \"OK\",\n" +
  9. " \"infocode\": \"10000\",\n" +
  10. " \"count\": \"1\",\n" +
  11. " \"suggestion\": {\n" +
  12. " \"keywords\": [],\n" +
  13. " \"cities\": []\n" +
  14. " },\n" +
  15. " \"districts\": [{\n" +
  16. " \"citycode\": [],\n" +
  17. " \"adcode\": \"100000\",\n" +
  18. " \"name\": \"中华人民共和国\",\n" +
  19. " \"center\": \"116.3683244,39.915085\",\n" +
  20. " \"level\": \"country\",\n" +
  21. " \"districts\": [{\n" +
  22. " \"citycode\": [],\n" +
  23. " \"adcode\": \"410000\",\n" +
  24. " \"name\": \"河南省\",\n" +
  25. " \"center\": \"113.665412,34.757975\",\n" +
  26. " \"level\": \"province\",\n" +
  27. " \"districts\": [{\n" +
  28. " \"citycode\": \"0393\",\n" +
  29. " \"adcode\": \"410900\",\n" +
  30. " \"name\": \"濮阳市\",\n" +
  31. " \"center\": \"115.041299,35.768234\",\n" +
  32. " \"level\": \"city\",\n" +
  33. " \"districts\": [{\n" +
  34. " \"citycode\": \"0393\",\n" +
  35. " \"adcode\": \"410923\",\n" +
  36. " \"name\": \"南乐县\",\n" +
  37. " \"center\": \"115.204336,36.075204\",\n" +
  38. " \"level\": \"district\",\n" +
  39. " \"districts\": [{\n" +
  40. " \"citycode\": \"0393\",\n" +
  41. " \"adcode\": \"410923\",\n" +
  42. " \"name\": \"福坎镇\",\n" +
  43. " \"center\": \"115.398,36.0869\",\n" +
  44. " \"level\": \"street\",\n" +
  45. " \"districts\": []\n" +
  46. " }]\n" +
  47. " }]\n" +
  48. " }]\n" +
  49. " }]\n" +
  50. " }]\n" +
  51. "}";//result.getContent();*/
  52. JSONObject jsonObject = JSONObject.parseObject(jsonString);
  53. //获取到国家及下面所有的信息 开始循环插入,这里可以写成递归调用,但是不如这样方便查看、理解
  54. JSONArray countryAll = jsonObject.getJSONArray("districts");
  55. for (int i = 0; i < countryAll.size(); i++) {
  56. JSONObject countryLeve0 = countryAll.getJSONObject(i);
  57. String citycode0 = countryLeve0.getString("citycode");
  58. String adcode0 = countryLeve0.getString("adcode");
  59. String name0 = countryLeve0.getString("name");
  60. String center0 = countryLeve0.getString("center");
  61. String country = countryLeve0.getString("level");
  62. int level = 0;
  63. if (country.equals("country")) {
  64. level = 0;
  65. }
  66. //插入国家
  67. Integer id1 = insert(0, adcode0, citycode0, name0, center0, level, name0);
  68. JSONArray province0 = countryLeve0.getJSONArray("districts");
  69. for (int j = 0; j < province0.size(); j++) {
  70. JSONObject province1 = province0.getJSONObject(j);
  71. String citycode1 = province1.getString("citycode");
  72. String adcode1 = province1.getString("adcode");
  73. String name1 = province1.getString("name");
  74. String center1 = province1.getString("center");
  75. String province = province1.getString("level");
  76. int level1 = 0;
  77. if (province.equals("province")) {
  78. level1 = 1;
  79. }
  80. //插入省
  81. Integer id2 = insert(id1, adcode1, citycode1, name1, center1, level1, name0, name1);
  82. JSONArray city0 = province1.getJSONArray("districts");
  83. for (int z = 0; z < city0.size(); z++) {
  84. JSONObject city2 = city0.getJSONObject(z);
  85. String citycode2 = city2.getString("citycode");
  86. String adcode2 = city2.getString("adcode");
  87. String name2 = city2.getString("name");
  88. String center2 = city2.getString("center");
  89. String city = city2.getString("level");
  90. int level2 = 0;
  91. if (city.equals("city")) {
  92. level2 = 2;
  93. }
  94. //插入市
  95. Integer id3 = insert(id2, adcode2, citycode2, name2, center2, level2, name0, name1, name2);
  96. JSONArray street0 = city2.getJSONArray("districts");
  97. for (int w = 0; w < street0.size(); w++) {
  98. JSONObject street3 = street0.getJSONObject(w);
  99. String citycode3 = street3.getString("citycode");
  100. String adcode3 = street3.getString("adcode");
  101. String name3 = street3.getString("name");
  102. String center3 = street3.getString("center");
  103. String street = street3.getString("level");
  104. int level3 = 0;
  105. if (street.equals("street")) {
  106. level3 = 2;
  107. }
  108. //插入区县
  109. insert(id3, adcode3, citycode3, name3, center3, level3, name0, name1, name2, name3);
  110. // JSONArray street = street3.getJSONArray("districts");
  111. //有需要可以继续向下遍历
  112. }
  113. }
  114. }
  115. }
  116. return getSuccessResult();
  117. }
  118. /**
  119. * 公共的插入方法
  120. *
  121. * @param parentId 父id
  122. * @param citycode 城市编码
  123. * @param adcode 区域编码 街道没有独有的adcode,均继承父类(区县)的adcode
  124. * @param name 城市名称 (行政区名称)
  125. * @param center 地理坐标
  126. * @param level 等级 0 国家,1省,...依次排
  127. * @param mergeName 把名称拼接成全名
  128. * @return
  129. */
  130. public Integer insert(Integer parentId, String citycode, String adcode, String name, String center, int level, String... mergeName) {
  131. // \"citycode\": [],\n" +
  132. // " \"adcode\": \"100000\",\n" +
  133. // " \"name\": \"中华人民共和国\",\n" +
  134. // " \"center\": \"116.3683244,39.915085\",\n" +
  135. // " \"level\": \"country\",\n" +
  136. RegionAmap record = new RegionAmap();
  137. if (!adcode.equals("[]")) {
  138. record.setAdcode(adcode);
  139. }
  140. record.setCitycode(Integer.parseInt(citycode));
  141. record.setCenter(center);
  142. record.setLevel(level);
  143. record.setName(name);
  144. record.setParentId(parentId);
  145. String megName = "";
  146. for (int i = 0; i < mergeName.length; i++) {
  147. megName = megName + mergeName[i];
  148. if (i < mergeName.length - 1) {
  149. megName = megName + ",";
  150. }
  151. }
  152. record.setMergerName(megName);
  153. regionAmapMapperCustom.insertSelective(record);
  154. return record.getCitycode();
  155. }
  156. /**
  157. * 生成的sql顺序重新排序
  158. *
  159. * @return
  160. */
  161. @RequestMapping("/order")
  162. public Object order() {
  163. RegionAmapExample example = new RegionAmapExample();
  164. example.setOrderByClause("citycode, adcode");
  165. List<RegionAmap> selectByExample = regionAmapMapperCustom.selectByExample(example);
  166. for (RegionAmap regionAmap : selectByExample) {
  167. RegionOrder record = new RegionOrder();
  168. record.setAdcode(regionAmap.getAdcode());
  169. record.setCitycode(regionAmap.getCitycode());
  170. record.setCenter(regionAmap.getCenter());
  171. record.setLevel(regionAmap.getLevel());
  172. record.setMergerName(regionAmap.getMergerName());
  173. record.setName(regionAmap.getName());
  174. record.setParentId(regionAmap.getParentId());
  175. regionOrderMapper.insertSelective(record);
  176. }
  177. return getSuccessResult();
  178. }

 

注意:第一次调用接口解析的省市区不是按顺序解析,需要调用排序接口重新生成。最后看排序后的 region_order 表就可以

 

原文链接:http://www.cnblogs.com/liran123/p/10362623.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号