清洗数据之地理纬度

今天的一大半时间都在和百度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

posted @ 2020-03-12 18:52  Evak  阅读(432)  评论(0编辑  收藏  举报