第一步:根据指定的URL从google 服务器上获得包含地址的json格式的数据(其还提供xml格式的,但json解析效率比xml高)
- private static StringBuffer getJSONData(String urlPath){
- try {
- URL url = new URL(urlPath);
- HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
- httpURLConnection.setReadTimeout(5000);
- httpURLConnection.setRequestMethod("GET");
- if(httpURLConnection.getResponseCode() == 200){
- InputStream inputStream = httpURLConnection.getInputStream();
- InputStreamReader isr = new InputStreamReader(inputStream);
- BufferedReader br = new BufferedReader(isr);
- String temp = null;
- StringBuffer jsonsb = new StringBuffer();
- while((temp = br.readLine()) != null){
- jsonsb.append(temp);
- }
- return jsonsb;
- }
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
传入经纬度作为参数
- /**
- * 根据经纬度获得地址
- * @param latitude
- * @param longitude
- * @return
- */
- public static StringBuffer getCurrentAddressByGPS(long latitude,long longitude){
- StringBuffer stringBuffer = new StringBuffer();
- stringBuffer.append(GOOGLE_GPS_PREFIX).append(latitude).append(",")
- .append(longitude).append(GOOGLE_GPS_SUFFIX);
- return getJSONData(stringBuffer.toString());
- }
- public static boolean parseAddressJSON(StringBuffer sb){
- try {
- if(sb != null){
- JSONObject jsonAllData = new JSONObject(sb.toString());
- /**
- * 获得一个长度为1的JSON数组,如:[{数据内容}]
- */
- String placemarkStr = jsonAllData.getString("Placemark");
- /**
- * 将placemarkStr数组类型字符串构造成一个JSONArray对象
- */
- JSONArray placemarkArray = new JSONArray(placemarkStr);
- /**
- * Placemark标签内容是一个长度为1的数组,获得数组的内容并转换成字符串
- */
- String jsonDataPlacemarkStr = placemarkArray.get(0).toString();
- /**
- * 对上面得到的JSON数据类型的字符串(jsonDataPlacemarkStr)进行解析
- */
- JSONObject jsonDataPlacemark = new JSONObject(jsonDataPlacemarkStr);
- /**
- * 获得标签AddressDetails的JSON数据
- */
- String jsonAddressDetails = jsonDataPlacemark.getString("AddressDetails");
- /**
- * 对上面得到的JSON数据类型的字符串(jsonAddressDetails)进行解析
- */
- JSONObject jsonDataAddressJDetails = new JSONObject(jsonAddressDetails);
- /**
- * 获得标签Country的JSON数据
- */
- String jsonCountry = jsonDataAddressJDetails.getString("Country");
- /**
- * 对上面得到的JSON数据类型的字符串(jsonCountry)进行解析
- */
- JSONObject jsonDataCountry = new JSONObject(jsonCountry);
- /**
- * 对解析出来的感兴趣的数据进行封装
- */
- LewatekGPSAddress lewatekGPSAddress = new LewatekGPSAddress();
- /**
- * 设置CountryName
- */
- lewatekGPSAddress.setCountryName(jsonDataCountry.getString("CountryName"));
- /**
- * 设置CountryNameCode
- */
- lewatekGPSAddress.setCountryNameCode(jsonDataCountry.getString("CountryNameCode"));
- /**
- * 获得标签AdministrativeArea的JSON数据
- */
- String jsonAdministrativeArea = jsonDataCountry.getString("AdministrativeArea");
- /**
- * 对上面得到的JSON数据类型的字符串(jsonAdministrativeArea)进行解析
- */
- JSONObject jsonDataAdministrativeArea = new JSONObject(jsonAdministrativeArea);
- /**
- * 设置AdministrativeAreaName
- */
- lewatekGPSAddress.setAdministrativeAreaName(jsonDataAdministrativeArea.getString("AdministrativeAreaName"));
- /**
- * 获得标签Locality的JSON数据
- */
- String jsonLocality = jsonDataAdministrativeArea.getString("Locality");
- /**
- * 对上面得到的JSON数据类型的字符串(jsonLocality)进行解析
- */
- JSONObject jsonDataLocality = new JSONObject(jsonLocality);
- /**
- * 设置LocalityName
- */
- lewatekGPSAddress.setLocalityName(jsonDataLocality.getString("LocalityName"));
- /**
- * 获得标签DependentLocality的JSON数据
- */
- String jsonDependentLocality = jsonDataLocality.getString("DependentLocality");
- /**
- * 对上面得到的JSON数据类型的字符串(jsonDependentLocality)进行解析
- */
- JSONObject jsonDataDependentLocality = new JSONObject(jsonDependentLocality);
- lewatekGPSAddress.setDependentLocalityName(jsonDataDependentLocality.getString("DependentLocalityName"));
- Log.e(TAG,lewatekGPSAddress.toString());
- return true;
- }
- } catch (JSONException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return false;
- }
- {
- "name": "31.20322202833381,121.59876351250254",
- "Status": {
- "code": 200,
- "request": "geocode"
- },
- "Placemark": [ {
- "id": "p1",
- "address": "中国上海市浦东新区祖冲之路994号-1088号",
- "AddressDetails": {
- "Accuracy" : 8,
- "Country" : {
- "AdministrativeArea" : {
- "AdministrativeAreaName" : "上海市",
- "Locality" : {
- "DependentLocality" : {
- "DependentLocalityName" : "浦东新区",
- "Thoroughfare" : {
- "ThoroughfareName" : "祖冲之路994号-1088号"
- }
- },
- "LocalityName" : "上海市"
- }
- },
- "CountryName" : "中国",
- "CountryNameCode" : "CN"
- }
- },
- "ExtendedData": {
- "LatLonBox": {
- "north": 31.2070152,
- "south": 31.2007199,
- "east": 121.6018752,
- "west": 121.5955799
- }
- },
- "Point": {
- "coordinates": [ 121.5986103, 31.2038252, 0 ]
- }
- } ]
- }
- Value [{"id":"p1","ExtendedData":{"LatLonBox":{"south":31.2007199,"west":121.5955799,"east":121.6018752,"north":31.2070152}},"address":"中国上海市浦东新区祖冲之路994号-1088号","Point":{"coordinates":[121.5986103,31.2038252,0]},"AddressDetails":{"Country":{"CountryNameCode":"CN","CountryName":"中国","AdministrativeArea":{"Locality":{"LocalityName":"上海市","DependentLocality":{"DependentLocalityName":"浦东新区","Thoroughfare":{"ThoroughfareName":"祖冲之路994号-1088号"}}},"AdministrativeAreaName":"上海市"}},"Accuracy":8}}] at Placemark of type org.json.JSONArray cannot be converted to JSONObject
该博客介绍了如何从Google服务器通过经纬度获取JSON格式的地址数据,并详细展示了如何解析这个JSON数据,包括提取国家、行政区域、本地化信息等步骤。
1602

被折叠的 条评论
为什么被折叠?



