23

Android 用の Google Maps API v2 を使用していますが、正常に動作します。ただし、ジオコーダーを使用して住所の経度と緯度を取得しようとしていますが、成功しません。

v2からやり方変わった?

従来のコードを使用しています

Geocoder gc = new Geocoder(context);
//...
  List<Address> list = gc.getFromLocationName("1600 Amphitheatre Parkway, Mountain View, CA", 1);

  Address address = list.get(0);

  double lat = address.getLatitude();
  double lng = address.getLongitude();
//...

常に強制シャットダウンを返し、ログは何も解決しません。try / catch のブロックを使用すると、マップが開きますが、常に同じ場所で インターネット許可を使用します。COARSE_LOCATION もプロジェクトに含めました。ここや他のサイトにあるさまざまなコードを使用しましたが、成功しませんでした。

前もって感謝します。

4

5 に答える 5

54

次の URL の例を使用して、このソリューションを試してください。

http://maps.google.com/maps/api/geocode/json?address=ムンバイ&sensor=false

of のjson形式でデータを返します。lat/lngaddress

private class DataLongOperationAsynchTask extends AsyncTask<String, Void, String[]> {
   ProgressDialog dialog = new ProgressDialog(MainActivity.this);
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.setMessage("Please wait...");
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }

    @Override
    protected String[] doInBackground(String... params) {
        String response;
        try {
            response = getLatLongByURL("http://maps.google.com/maps/api/geocode/json?address=mumbai&sensor=false");
            Log.d("response",""+response);
            return new String[]{response};
        } catch (Exception e) {
            return new String[]{"error"};
        }
    }

    @Override
    protected void onPostExecute(String... result) {
        try {
            JSONObject jsonObject = new JSONObject(result[0]);

            double lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                    .getJSONObject("geometry").getJSONObject("location")
                    .getDouble("lng");

            double lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                    .getJSONObject("geometry").getJSONObject("location")
                    .getDouble("lat");

            Log.d("latitude", "" + lat);
            Log.d("longitude", "" + lng);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        if (dialog.isShowing()) {
            dialog.dismiss();
        }
    }
}


public String getLatLongByURL(String requestURL) {
    URL url;
    String response = "";
    try {
        url = new URL(requestURL);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(15000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        conn.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");
        conn.setDoOutput(true);
        int responseCode = conn.getResponseCode();

        if (responseCode == HttpsURLConnection.HTTP_OK) {
            String line;
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            while ((line = br.readLine()) != null) {
                response += line;
            }
        } else {
            response = "";
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return response;
}

これがお役に立てば幸いです。

于 2013-04-01T16:43:31.290 に答える
0

私にとってうまくいった簡単な修正は、デバイスでインターネット接続を有効にすることです. Pxamlによる提案。

于 2018-03-01T11:03:58.287 に答える
-11

この簡単なコードで現在地の緯度と経度を取得できます

GPS_Location mGPS = new GPS_Location(MyApplication.getAppContext());

    if (mGPS.canGetLocation) {

        mLat = mGPS.getLatitude();
        mLong = mGPS.getLongitude();

    } else {
        System.out.println("cannot find");
    }

gps やその他の権限をアプリに追加する必要があります

于 2013-06-08T12:38:01.670 に答える