关于本文章说明:
本文章的想法来源于:爬了大量的数据后,想利用GIS技术把数据展示在地图上。但是爬的数据又没有经纬度坐标,就无法在地图上进行展示了,所以用了百度地图的正/逆地理编码。
计算机行业招聘智能分析平台效果
先看下我们团队爬的数据
如下图:
处理后的数据:
数据处理的流程:上图就是处理后的数据结果。
清洗思路:
思想:因为我有公司名称、省份或市、区或县三个字段的数据。直接由公司名称获取的经纬度相对来说比较准确。从而引入这段代码的核心思想:先尝试使用公司名称获取经纬度,如果不成功就省份或市+区或县+公司名称获取经纬度,如果还不成功就直接获取省份或市+区或县,如果还不成功就没办法了。成功不成功我是用异常捕捉进行判断的。因为数组会越界。
原始数据:
数据清洗后的数据都有公司名称,还有地点,能到区。那这个就好办了。
既然我有了这些数据,还怕找不到经纬度吗?
就在百度,谷歌,搜呀搜呀搜。找到了一个好的网站
http://www.gpsspg.com/maps.htm
是如果我又几条,几十条的数据还好说。如果我又几十万,几百万的数据该怎么办呢?
突然想到了百度地图,腾讯地图,高德地图,谷歌地图等。
翻遍了这些地图的文档,加上百度的一些资料,常识了各种大佬的代码,最终确定了使用百度地图的地理编码的功能。
打开百度地图开放平台的官网,进行注册
http://lbsyun.baidu.com/
然后打开控制台、应用管理、我的应用、创建一个应用、拿到AK
注册好之后创建一个web应用,把key保留好,一会要用
如果你是maven+SpringBoot项目可以在pom文件导入相关的依赖:
如果不了解SpringBoot和Maven可以翻翻我的个人主页
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
为什么要导入这些包?因为我想实现java中访问浏览器的网页,然后把返回的json数据进行反序列化,最终就可以拿到经纬度的值了。
思想:
因为我有公司名称、省份或市、区或县三个字段的数据。
直接由公司名称获取的经纬度相对来说比较准确。
从而引入这段代码的核心思想:
先常识使用公司名称获取经纬度,如果不成功就省份或市+区或县+公司名称获取经纬度,如果还不成功就直接获取省份或市+区或县,如果还不成功就没办法了。
成功不成功我是用异常捕捉进行判断的。因为数组会越界。
核心代码
public static void main(String[] args) {
String address = "山东建筑大学";
String url="http://restapi.amap.com/v3/geocode/geo?key=389880a06e3f893ea46036f030c94700&s=rsv3&city=35&address="+address;
ResponseEntity<String> forEntity = template.getForEntity(url, String.class);
System.out.println(forEntity.getBody());
}
运行结果
所有代码
package cn.bigdata.util;
import cn.bigdata.entity.employment;
import cn.bigdata.service.EmploymentService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* 对数据的经纬度进行处理
*/
@RequestMapping("/bigData/baiduMap")
@Controller
public class 经纬度数据清洗_百度 {
@Autowired
EmploymentService employmentService;
static RestTemplate template = new RestTemplate();
@RequestMapping("/jingwiedu")
@ResponseBody
public String qingxijingweidu(){
List<employment> employmentMessageList = employmentService.getEmploymentDataAll();
System.out.println("长度:"+employmentMessageList.size());
for (int i = 0; i <employmentMessageList.size() ; i++) {
employment employment = employmentMessageList.get(i);
try {
//通过公司名称查经纬度
JSONObject object = (JSONObject) JSONObject.parse(client(employment.getCompanyName()));
System.out.println("正在执行第:"+i+"个,,,"+employment.toString());
JSONObject geocodes = (JSONObject) JSONObject.parse(object.getJSONArray("geocodes").get(0).toString());
String jingweidu = String.valueOf(geocodes.get("location"));
String[] split = jingweidu.split(",");
Double jingdu = Double.valueOf(split[0]);
Double weidu = Double.valueOf(split[1]);
employment.setLatitude(jingdu);
employment.setLongitude(weidu);
System.out.println("正在修改:"+employment.getCompanyName());
employmentService.updateEmplJingWeiDu(employment);
}catch (IndexOutOfBoundsException e ){ //如果通过公司名称查出的经纬度有错误 || NullPointerException ee
try {
//如果通过公司名称查出的经纬度有错误 ,, 就通过省市县查询
JSONObject object = (JSONObject) JSONObject.parse(client(employment.getProvinceCity()+employment.getCompanyCounty()));
System.out.println("又出错了e1-----,正在执行第:"+i+"个,,,"+employment.toString());
JSONObject geocodes = (JSONObject) JSONObject.parse(object.getJSONArray("geocodes").get(0).toString());
String jingweidu = String.valueOf(geocodes.get("location"));
String[] split = jingweidu.split(",");
Double jingdu = Double.valueOf(split[0]);
Double weidu = Double.valueOf(split[1]);
employment.setLatitude(jingdu);
employment.setLongitude(weidu);
System.out.println("正在修改:"+employment.getCompanyName());
employmentService.updateEmplJingWeiDu(employment);
}
catch (IndexOutOfBoundsException e2){ //如果省市县查询的经纬度有问题
try {
//就通过省查询
JSONObject object = (JSONObject) JSONObject.parse(client(employment.getProvinceCity()));
System.out.println("又出错了e2-----,正在执行第:"+i+"个,,,"+employment.toString());
JSONObject geocodes = (JSONObject) JSONObject.parse(object.getJSONArray("geocodes").get(0).toString());
String jingweidu = String.valueOf(geocodes.get("location"));
String[] split = jingweidu.split(",");
Double jingdu = Double.valueOf(split[0]);
Double weidu = Double.valueOf(split[1]);
employment.setLatitude(jingdu);
employment.setLongitude(weidu);
System.out.println("正在修改:"+employment.getCompanyName());
employmentService.updateEmplJingWeiDu(employment);
}catch (IndexOutOfBoundsException e3){ //如果通过省查询的经纬度有问题
try {
//就通过市查询
JSONObject object = (JSONObject) JSONObject.parse(client(employment.getCompanyCounty()));
System.out.println("又出错了e3-----,正在执行第:"+i+"个,,,"+employment.toString());
JSONObject geocodes = (JSONObject) JSONObject.parse(object.getJSONArray("geocodes").get(0).toString());
String jingweidu = String.valueOf(geocodes.get("location"));
String[] split = jingweidu.split(",");
Double jingdu = Double.valueOf(split[0]);
Double weidu = Double.valueOf(split[1]);
employment.setLatitude(jingdu);
employment.setLongitude(weidu);
System.out.println("正在修改:"+employment.getCompanyName());
employmentService.updateEmplJingWeiDu(employment);
} catch (IndexOutOfBoundsException e4){
System.out.println("又出错了,实在是没法整了e4");
}
}
}
}catch (NullPointerException ee){
System.out.println("又出错了,实在是没法整了NullPointerExceptionNullPointerException");
}
}
return "OK啦";
}
public String client(String address){
System.out.println("正在清洗:"+address);
String url="http://restapi.amap.com/v3/geocode/geo?key=389880a06e3f893ea46036f030c94700&s=rsv3&city=35&address="+address;
String url1 = "http://api.map.baidu.com/geocoding/v3/?output=json&ak=rOQPEGba85e3kFdP0tIMW58MwvCwCmMg&pois=1&address="+address;
ResponseEntity<String> forEntity = template.getForEntity(url1, String.class);
return forEntity.getBody();
}
}
战果:经纬度搞定
1 润德教育佛山运营中心 佛山 禅城区 23.028959 113.125185
2 汕头市悦和电子商务有限责任公司 汕头 禅城区 23.354091 116.681972
3 珠海中海控股集团有限公司 珠海 香洲区 22.265811 113.543785
4 广州军信软件有限公司 佛山 禅城区 23.009505 113.12244
5 佛山市粉盟科技有限公司 佛山 顺德区 23.021548 113.121416
6 广东嘉盛达科技有限公司 佛山 顺德区 22.80524 113.293359
7 惠州市惠城区悦洲邦德华纳教育培训中心 惠州 顺德区 23.071063 114.408019
8 珠海横琴新区骜创信息科技有限公司 珠海 珠海高新区 22.11338 113.548333
9 江门宏库科技有限公司 江门 珠海高新区 22.615051 113.08165
10 上海芮想信息科技有限公司 佛山 顺德区 22.80524 113.293359
11 南里(广州)科技有限公司 珠海 珠海高新区 22.353699 113.59692
12 北京泛鹏天地科技股份有限公司 北京 珠海高新区 39.958099 116.463612
13 广州仲昌一科信息科技有限公司 佛山 珠海高新区 23.021548 113.121416
14 遊澳集团有限公司 珠海 香洲区 26.666475 119.57354
15 天宇正清科技有限公司 珠海 横琴新区 39.808346 116.515114
16 广东天耘科技有限公司 珠海 珠海高新区 23.141133 113.343807
17 广亚铝业有限公司 佛山 珠海高新区 23.116942 113.175192
18 惠州中威网科技有限公司 惠州 珠海高新区 23.111847 114.416196
19 广州南天电脑系统有限公司 珠海 珠海高新区 23.058707 113.2995
20 广东创我科技发展有限公司 珠海 珠海高新区 22.370639 113.572733
21 广州市泽晖珩信科技有限责任公司 佛山 顺德区 23.129162 113.264434
22 广东海聊科技有限公司 佛山 南海区 23.025412 113.147759
23 佛山市蠢材科技有限公司 佛山 南海区 23.02665 113.176216
24 上海艾融软件股份有限公司 珠海 香洲区 31.226829 121.549968
25 广州市天太信息技术有限公司 肇庆 香洲区 23.133661 113.358206
26 数安时代科技股份有限公司 佛山 南海区 23.039959 113.139632
27 佛山市金政信息科技有限公司 佛山 南海区 23.027401 113.107921
28 惠州市德赛西威汽车电子股份有限公司 广东省 南海区 23.044242 114.347242
29 中星电子股份有限公司 珠海 横琴新区 30.248341 120.194435
30 北京中星微电子有限公司 珠海 横琴新区 39.985914 116.352382
31 澳发科技(珠海横琴)有限公司 珠海 横琴新区 22.168024 113.28147
32 凯通科技股份有限公司 佛山 禅城区 23.009505 113.12244
33 山东舜德数据管理软件工程有限公司 广州 天河区 36.66853 117.020359
34 百硕同兴科技(北京)有限公司 佛山 天河区 40.01392 116.472136
35 广东尚源信息技术有限公司 佛山 天河区 23.021548 113.121416
36 北京亿信华辰软件有限责任公司 珠海 香洲区 40.046084 116.357044
37 广州数驰信息科技有限公司 佛山 香洲区 22.995694 113.333302
38 深圳华钦软件技术有限公司 珠海 香洲区 22.265811 113.543785
39 珠海市同海科技股份有限公司 珠海 香洲区 22.252594 113.580561
40 广州拓腾贸易有限公司 佛山 南海区 23.129453 113.377798
41 天阳宏业 佛山 南海区 23.025412 113.147759
42 珠海金山网络游戏科技有限公司 珠海 南海区 22.252654 113.579873
43 广州尚观信息科技有限公司 佛山 南海区 23.025412 113.147759
44 珠海蜂窝网络科技有限公司 珠海 南海区 22.270715 113.576726
45 佛山中网易信科技有限公司 佛山 禅城区 23.070938 113.103794
46 大连东软思维科技发展有限公司 佛山 顺德区 38.794508 121.191362
47 佛山市品智信息技术有限公司 佛山 顺德区 23.021548 113.121416
48 珠海一讯牵通信科技有限公司 珠海 香洲区 22.25329 113.57641
49 广东嘉行科技有限公司 中山 香洲区 22.517645 113.392782
50 珠海科亚信息技术有限公司 珠海 香洲区 22.370834 113.564804
51 佛山市佛盈盘古信息科技有限公司 佛山 香洲区 23.021548 113.121416
52 维恩贝特科技有限公司 珠海 香洲区 22.265811 113.543785
53 海通安恒科技有限公司 珠海 香洲区 33.804855 120.340927
54 广东千玺餐饮管理有限公司 佛山 顺德区 22.80524 113.293359
55 广东所能网络有限公司 佛山 禅城区 23.028343 113.06826
56 中山市环盈网络信息科技有限公司 中山 禅城区 22.517645 113.392782
57 珠海提阿非罗网络科技有限公司 珠海 禅城区 22.270715 113.576726
58 广州市柏思创业贸易有限公司 珠海 香洲区 22.995053 113.451334
59 中山嚞仁企业管理有限公司 中山 香洲区 22.531263 113.392105
60 揭阳市聆讯软件有限公司 揭阳 香洲区 23.504248 116.427105
61 广州软拓信息科技有限公司 佛山 香洲区 23.021548 113.121416
62 中海油信息科技有限公司湛江分公司 湛江 香洲区 21.249017 110.439045
63 珠海安联锐视科技股份有限公司 珠海 香洲区 22.391515 113.547571
64 珠海耀阳电子科技有限公司 珠海 香洲区 22.373293 113.573248
65 乐宜嘉家居集团有限公司 中山 香洲区 22.517645 113.392782
66 广州博纳信息技术有限公司 佛山 香洲区 23.133077 113.276446
67 珠海宏桥高科技有限公司 珠海 香洲区 22.371168 113.571179
68 彩讯科技股份有限公司 中山 香洲区 22.517645 113.392782
69 惠州华阳通用电子有限公司 惠州 香洲区 23.120366 114.507735
70 深圳华工能源技术有限公司 深圳 龙岗区 22.720968 114.246899
71 珠海凡星科技有限公司 珠海 龙岗区 22.270715 113.576726
72 肇庆市华盈体育科技有限公司 肇庆 龙岗区 23.047191 112.465091
73 深圳市蓝凌软件股份有限公司 佛山 顺德区 22.541284 113.939999
74 珠海创思新能源科技有限公司 珠海 顺德区 22.220485 113.472702
75 广东淘家科技有限公司 佛山 顺德区 23.003731 113.097935
76 珠海红塔仁恒包装股份有限公司 珠海 顺德区 22.235717 113.500698
77 广州今之港教育咨询有限公司 广州 番禺区 22.937244 113.384129
78 TCL通讯惠州研发中心 惠州 番禺区 23.029918 114.354392
79 佛山吉方信息科技有限公司 佛山 番禺区 23.070938 113.103794
80 浪潮世科(山东)信息技术有限公司 佛山 南海区 36.670725 117.13392
81 汇业(广州)投资管理咨询有限公司 珠海 南海区 22.270715 113.576726
82 珠海佳讯赛特电子有限公司 珠海 南海区 22.387197 113.55365
83 山南远宏科技有限公司 珠海 南海区 29.236597 91.756723
84 广东知一数据有限公司 佛山 南海区 23.025412 113.147759
85 佛山耀立电气有限公司 佛山 南海区 23.070938 113.103794
86 广州市正盟计算机科技有限公司 清远 南海区 23.125169 113.369025
87 珠海艾派克微电子有限公司 珠海 香洲区 22.267939 113.511647
88 北京瑞达恒科技有限公司 清远 香洲区 39.809955 116.552174
89 珠海幸福家网络科技股份有限公司 珠海 香洲区 22.249062 113.588592
90 广东顶点科技有限公司 湛江 香洲区 21.270707 110.359377
91 江门宏库科技有限公司 江门 香洲区 22.615051 113.08165
92 瑞仕格(上海)商贸有限公司 佛山 顺德区 31.208594 121.519365
93 广东迪浪科技股份有限公司 江门 顺德区 22.606221 113.098714
94 昆明瑶池科技有限公司 昆明 顺德区 24.960685 102.741057
95 电讯盈科HKT 珠海 顺德区 22.270715 113.576726
96 纳思达股份有限公司 珠海 顺德区 24.0235 104.298927
97 TCL电子 惠州 顺德区 22.515368 113.375008
98 TCL电子 惠州 顺德区 22.515368 113.375008
99 TCL电子 惠州 顺德区 22.515368 113.375008
100 广州市柏思创业贸易有限公司 珠海 香洲区 22.995053 113.451334