首页 > 其他 > 详细

清洗数据之地理纬度

时间:2020-03-12 21:11:06      阅读:83      评论:0      收藏:0      [点我收藏+]

今天的一大半时间都在和百度api打交道。解析一个地址都花费了很长时间,主要是思路不知道怎么从哪儿开始。

最后在网上看到了经纬度的一篇内容,突然有了启发,可以通过先查找地方在经纬度上,然后在根据经纬度查找省市区。

有了这个启示,思路就通畅了起来,接下来就是一直在细节上完善,最后清洗出来了地域维度,之后的行政区划还没有用时良好的

的方法,之后会努力思考。

package area;    

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

import java.util.HashMap;

import java.util.Map;

import net.sf.json.JSONObject;

 

/** 

 * @author 作者 : 

 * @createDate 创建时间:

 * 类说明 -- 百度地图经纬度和地址相互转换的工具类

 */

public class BaiduMapUtils {

    /**

     * 百度地图通过经纬度来获取地址,传入参数纬度lat、经度lng

     * @param lat

     * @param lng

     * @return

     */

    public static String getCity(String lat, String lng) {    


        JSONObject obj = getLocationInfo(lat, lng).getJSONObject("result").getJSONObject("addressComponent");
        String province,city,district;
        province=obj.getString("province");
        city=obj.getString("city");
        district=obj.getString("district");    
        if(province.equals(city))
            return city+district;
        else
            return province+city+district;

    }    

    public static JSONObject getLocationInfo(String lat, String lng) {
        
        String url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=gLqsnc20FauWMcSsu3kWgo0iUi61cYDr&output=json&coordtype=wgs84ll&location="+ lat + "," + lng ;
        JSONObject obj = JSONObject.fromObject(loadJSON(url));


        return obj;

    }

 

    /**

     * 百度地图通过地址来获取经纬度,传入参数address

     * @param address

     * @return

     */

    public static Map<String,Double> getLngAndLat(String address){

        Map<String,Double> map=new HashMap<String, Double>();

        String url = "http://api.map.baidu.com/geocoding/v3/?address="+address+"&output=json&ak=gLqsnc20FauWMcSsu3kWgo0iUi61cYDr&coordtype=wgs84ll";
        JSONObject obj = JSONObject.fromObject(loadJSON(url));
        //System.out.println(obj);
        if(obj.get("status").toString().equals("0")){

            double lng=obj.getJSONObject("result").getJSONObject("location").getDouble("lng");

            double lat=obj.getJSONObject("result").getJSONObject("location").getDouble("lat");

            map.put("lng", lng);

            map.put("lat", lat);

            //System.out.println("经度:" + lng + "--- 纬度:" + lat);

        }else{

            map.put("lng", 0.00);
            map.put("lat", 0.00);
        }

        return map;
    }

    public static String loadJSON (String url) {

        StringBuilder json = new StringBuilder();

        try {

            URL oracle = new URL(url);

            URLConnection yc = oracle.openConnection();

            BufferedReader in = new BufferedReader(new InputStreamReader(

                    yc.getInputStream()));

            String inputLine = null;

            while ( (inputLine = in.readLine()) != null) {

                json.append(inputLine);

            }

            in.close();

        } catch (Exception e) {

        }
        return json.toString();
       

    }
 

    /*public static void main(String[] args)
    {
        String area="";
         Map<String,Double> map=new HashMap<String, Double>();
         map=getLngAndLat(area);
    }*/

}

参考代码:https://blog.csdn.net/a497785609/article/details

清洗数据之地理纬度

原文:https://www.cnblogs.com/Evak/p/12481954.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!