大数据之数据清洗之爬取数据后如何根据地名或者公司名获取经纬度信息-地址逆解析经纬度

关于本文章说明:

本文章的想法来源于:爬了大量的数据后,想利用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
发布了79 篇原创文章 · 获赞 70 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_17623363/article/details/103796255
今日推荐