反向GeoCoordinate类给出Location Not found错误

时间:2015-06-19 02:20:12

标签: android api google-maps google-maps-api-3 reverse-geocoding

我在我的应用中使用谷歌反向地理编码API,我可以使用谷歌地理定位API获得坐标。现在我试图从反向地理编码API获取位置名称,但始终返回位置未找到错误

这是我的代码:

  Geocoder geocoder= new Geocoder(MainActivity.this, Locale.ENGLISH);
    

  if(geocoder.isPresent()){
          List<Address> list;
	try {
			list = geocoder.getFromLocation(37.42279, -122.08506,1);
			 Address address = list.get(0);
			 Log.d("this is working","thsi sis working");

	         StringBuffer str = new StringBuffer();
	         str.append("Name: " + address.getLocality() + "\n");
	         str.append("Sub-Admin Ares: " + address.getSubAdminArea() + "\n");
	         str.append("Admin Area: " + address.getAdminArea() + "\n");
	         str.append("Country: " + address.getCountryName() + "\n");
	         str.append("Country Code: " + address.getCountryCode() + "\n");;

	         String strAddress = str.toString();
	         JsonDatas.setText(strAddress);
	          Log.d("Address", strAddress);
		} 
    catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

我有几个问题

  1. google如何知道哪个应用程序请求了API以及google如何确定该应用的配额。在谷歌API开发者控制台中,谷歌为app API提供了配额
  2. 为什么我找到位置未找到错误但在谷歌地图位置搜索正在显示
  3. 我是否需要将Google Geocoder APi密钥添加到我的应用中 - 现在我只使用Geolocation API密钥来检索坐标
  4. 请纠正我,如果我错了,请提出建议,以便我的代码能正常工作

    谢谢

1 个答案:

答案 0 :(得分:1)

确保您的项目中有最新的Google Play库。我正在使用此代码并为我工作。

 private class ReverseGeocodingTask extends AsyncTask<LatLng, Void, String> {
        Context mContext;

        public ReverseGeocodingTask(Context context) {
            super();
            mContext = context;
        }

        // Finding address using reverse geocoding
        @Override
        protected String doInBackground(LatLng... params) {
            Geocoder geocoder = new Geocoder(mContext);
            double latitude = params[0].latitude;
            double longitude = params[0].longitude;
            List<Address> addresses = null;
            String addressText = "";

            try {

                addresses = geocoder.getFromLocation(latitude, longitude, 1);

                Thread.sleep(500);

                if (addresses != null && addresses.size() > 0) {

                    Address address = addresses.get(0);

                    addressText = String.format(
                            "%s",
                            address.getMaxAddressLineIndex() > 0 ? address
                                    .getAddressLine(1) : "", "", "");
                }
            } catch (IOException e) {
                e.printStackTrace();

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return addressText;
        }

        @Override
        protected void onPostExecute(String addressText) {
        }
}

如果LatLng是纬度和长片,请检查this以获取文档。

并使用记下new ReverseGeocodingTask(this).execute(latlng);来获取数据。

确保您在清单文件中添加权限。

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />