【问题标题】:Getting location name from latitude, longitude从纬度,经度获取位置名称
【发布时间】:2012-12-21 18:48:48
【问题描述】:

我最近开始使用 Android 编程。在我的应用中,我想用文字告诉用户他们的位置,例如:“华盛顿”或“纽约”。我已经看到我可以得到纬度和经度,但我想用文字(可能是字符串)告诉位置。

我可以吗?如果可以,怎么做?

它的准确度是多少?它可以给我城市的名称还是只给我州的名称?

感谢您的帮助!

【问题讨论】:

    标签: android location geocoding


    【解决方案1】:

    这是一个完整的示例代码,它使用 Thread 和 Handler 在不阻塞 UI 的情况下获取 Geocoder 答案。

    Geocoder调用过程,可以位于Helper类中

    public static String getAddressFromLocation(final Location location, final Context context, final Handler handler) 
         {
        Thread thread = new Thread() {
            @Override public void run() 
             {
                Geocoder geocoder = new Geocoder(context, Locale.getDefault());   
                String result = null;
                try {
                    List<Address> list = geocoder.getFromLocation(
                            location.getLatitude(), location.getLongitude(), 1);
                    if (list != null && list.size() > 0) 
                        {
                        Address address = list.get(0);
                        // sending back first address line and locality
                        result = address.getAddressLine(0) + ", " + address.getLocality()+","+address.getCountryName();
                            }
                    } 
                 catch (IOException e)
                    {
                    Log.e(TAG, "Impossible to connect to Geocoder", e);
                    } 
             }
        };
        thread.start();
        return result;
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用反向geocoder 来实现它。一个示例代码:

      Geocoder geocoder = new Geocoder(this, Locale.getDefault());
              try {
                  List<Address> addresses = geocoder.getFromLocation(latValue,
                          longValue, 1);
      
                  if (addresses != null) {
                      Address returnedAddress = addresses.get(0);
                      StringBuilder strReturnedAddress = new StringBuilder(
                              "Address:\n");
                      for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {
                          strReturnedAddress
                                  .append(returnedAddress.getAddressLine(i)).append(
                                          "\n");
                      }
                      myAddress.setText(strReturnedAddress.toString());
                  } else {
                      myAddress.setText("No Address returned!");
                  }
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
                  myAddress.setText("Canont get Address!");
              }
      

      只需在获得纬度和经度值后放置此代码即可。

      【讨论】:

        【解决方案3】:

        只要看看这个,你就会得到你想要的一切,

        http://developer.android.com/training/basics/location/geocoding.html

        【讨论】:

        • 仅链接答案问题的示例。此链接似乎已失效。
        猜你喜欢
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        • 2018-11-26
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多