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