如何将 GPS 坐标转换为位置

Posted

技术标签:

【中文标题】如何将 GPS 坐标转换为位置【英文标题】:How to convert GPS coordinates to locality 【发布时间】:2012-08-19 14:45:15 【问题描述】:

我正在编写一个 android 应用程序,以将动态可用的纬度和对数坐标转换为人类可读的位置。

例如,12.2、4.5 位于英国伦敦市中心。关于粒度,我希望能够至少定位城市->城镇。或者如果没有,至少是城市,

有人可以就此问题提供哪些解决方案提供建议。

【问题讨论】:

你有两个正确答案。将对您有所帮助的答案标记为正确。 【参考方案1】:

试试这个:

//listenner location changed
private class MyLocListener implements LocationListener 
   public void onLocationChanged(Location location) 
      if (location != null) 
         Log.d("LOCATION CHANGED", location.getLatitude() + "");
         Log.d("LOCATION CHANGED", location.getLongitude() + "");
      
   


 //Get address base on location
try
 Geocoder geo = new Geocoder(youractivityclassname.this.getApplicationContext(), Locale.getDefault());
 List<Address> addresses = geo.getFromLocation(latitude, longitude, 1);
  if (addresses.isEmpty()) 
        yourtextfieldname.setText("Waiting for Location");
  
  else 
     if (addresses.size() > 0)        
        Log.d(TAG,addresses.get(0).getFeatureName() + ", 
         " + addresses.get(0).getLocality() +", 
         " + addresses.get(0).getAdminArea() + ",
         " + addresses.get(0).getCountryName());

     
  

catch (Exception e) 
    e.printStackTrace(); 

【讨论】:

【参考方案2】:

将点位置(纬度、经度)转换为可读地址或地名的过程称为Reverse GeoCoding。 [来自***]

你必须使用GeoCoder类和使用方法getFromLocation。此方法返回List&lt;Address&gt;,您可以通过迭代列表中的每个Address 对象来访问它。

例子:

    http://www.edumobile.org/android/android-development/gecoding-example/ Android: Reverse geocoding - getFromLocation

【讨论】:

【参考方案3】:

我认为这会产生更好的结果:

 private String convertLocationToAddress(Location location) 
    String addressText;
    String errorMessage = "";

    Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());

    List<Address> addresses = null;

    try 
        addresses = geocoder.getFromLocation(
                location.getLatitude(),
                location.getLongitude(),
                1
        );
     catch (IOException ioException) 
        // Network or other I/O issues
        errorMessage = getString(R.string.network_service_error);
        Log.e(TAG, errorMessage, ioException);
     catch (IllegalArgumentException illegalArgumentException) 
        // Invalid long / lat
        errorMessage = getString(R.string.invalid_long_lat);
        Log.e(TAG, errorMessage + ". " +
                "Latitude = " + location.getLatitude() +
                ", Longitude = " +
                location.getLongitude(), illegalArgumentException);
    

    // No address was found
    if (addresses == null || addresses.size() == 0) 
        if (errorMessage.isEmpty()) 
            errorMessage = getString(R.string.no_address_found);
            Log.e(TAG, errorMessage);
        
        addressText = errorMessage;

     else 
        Address address = addresses.get(0);
        ArrayList<String> addressFragments = new ArrayList<>();

        // Fetch the address lines, join them, and return to thread
        for (int i = 0; i <= address.getMaxAddressLineIndex(); i++) 
            addressFragments.add(address.getAddressLine(i));
        
        Log.i(TAG, getString(R.string.address_found));
        addressText =
                TextUtils.join(System.getProperty("line.separator"),
                        addressFragments);
    

    return addressText;


【讨论】:

以上是关于如何将 GPS 坐标转换为位置的主要内容,如果未能解决你的问题,请参考以下文章

如何将像素位置转换为 GPS 点?

如何把地理位置的经纬度坐标转换为unity3d的系统坐标

怎样把GPS得到的经纬度转换为具体位置

怎样把GPS得到的经纬度转换为具体位置

GPS坐标系及转换

从 GPS 坐标转换为 windows phone 中的地址