【问题标题】:How can I get Latitude and Longitude From JSON web Service?如何从 JSON Web 服务获取纬度和经度?
【发布时间】:2014-04-12 12:23:42
【问题描述】:

我正在将字符串格式国家/地区名称转换为经度和纬度

为此,我正在使用以下 JSON 网络服务

https://maps.googleapis.com/maps/api/geocode/json?address=India&sensor=true

我不知道如何从该 JSON 中获取 经度和纬度

帮我从上述网络服务获取经度和纬度。

我试过下面的代码,但我不确定它是否正确:

try 
{
                    Log.v("MAPS","Lang-Lat::1");
                    String myjsonstring = stringBuffer.toString();
                    Log.v("My JSON STRING",""+myjsonstring);
                    Log.v("MAPS","Lang-Lat::2");    
                    JSONArray jsonArray = new JSONArray(myjsonstring);

                    Log.v("MAPS","Lang-Lat::3");
                    JSONObject jsonObj = null;

                    String status = jsonObj.getString("status");
                    Log.v("MAPS","Lang-Lat::4");
                    if (status.equals("OK")) 
                    {
                        Log.v("Log Receive","Json String:::"+myjsonstring);                 

                        jsonObj = jsonArray.getJSONObject(0);

                        JSONObject JSONObject2=jsonObj.getJSONObject("geometry");

                        JSONObject JSONObject3=JSONObject2.getJSONObject("bounds");

                        JSONObject JSONObject4=JSONObject3.getJSONObject("northeast");

                        for(int i=0; i<JSONObject4.length();i++)
                        {
                            lang = JSONObject4.getDouble("lng");
                            lat=JSONObject4.getDouble("lat");

                            Log.v("Lang:",""+lang);
                            Log.v("Lat",""+lat);

                        }
                    }
                } 
                catch (Exception e) 
                {
                    Log.v("Map_View::","Call JSON Exception in Getting Map--->"+e.toString());
                    e.printStackTrace();
                }

我们将不胜感激。

提前致谢。

【问题讨论】:

  • 您是否尝试过任何用于 json 解析的代码?如果是,请在此处发布您的代码
  • 我对解析 JSON 数据的解析不太了解,但是 JSON 上面的格式很混乱,请帮帮我。
  • @yuvaツ 查看我的代码更新问题

标签: android json google-maps latitude-longitude


【解决方案1】:
public class ParseLatitudeLng {

    public static JSONObject getLocationInfo(String address) {
        StringBuilder stringBuilder = new StringBuilder();
        try {

        address = address.replaceAll(" ","%20");    

        HttpPost httppost = new HttpPost("http://maps.google.com/maps/api/geocode/json?address=" + address + "&sensor=false");
        HttpClient client = new DefaultHttpClient();
        HttpResponse response;
        stringBuilder = new StringBuilder();


            response = client.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }

        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = new JSONObject(stringBuilder.toString());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return jsonObject;
    }

}

/********从地址获取纬度和经度*********/

public class GetLatLngAsyncTask extends AsyncTask<ArrayList<String>, Void, String>{

        JSONObject jObject;
        JSONObject places = null;
        String lat;


        protected void onPreExecute() {

        }
        @Override
        protected String doInBackground(ArrayList<String>... params) {
            //ParseLatitudeLng placeJsonParser = new ParseLatitudeLng();
            ArrayList<String> inSync=params[0];

            double lng1 = 0,lat1 = 0;

            try{
                    lng1=lat1=0;


                    places = ParseLatitudeLng.getLocationInfo(YOUR_ADDRESS);
                    lng1 = ((JSONArray)places.get("results")).getJSONObject(0)
                            .getJSONObject("geometry").getJSONObject("location")
                            .getDouble("lng");

                    lat1 = ((JSONArray)places.get("results")).getJSONObject(0)
                            .getJSONObject("geometry").getJSONObject("location")
                            .getDouble("lat");



                }catch(Exception e){
                    Log.d("Exception",e.toString());
                }


            return lat;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);


        }

    }

调用Asynctask获取经纬度

【讨论】:

  • 嗯谢谢但是我应该在哪里调用 GetLatLngAsyncTask ParseLatitudeLng 中的类
  • No..你必须在你的代码中调用 asynctask。通过我的代码一次。我在 asynctask 中调用了 ParseLatitudeLng。我已经给你工作代码。你只需要调用 asynctask。
  • 好的,你能告诉我什么是 ParsingCount=j;因为我不知道 ParsingCount 的格式是整数吗? +1 为您提供非常好的答案。
  • 它不需要你。如果它的工作标记我的答案
  • 出现错误。 :( 我在其他异步类 postexecute 方法中使用你的异步类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2016-04-07
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多