2013-10-21 57 views
1

在我的應用程序中,我使用的是osm地圖。我有經度和緯度。 使用這種方法如何在android中使用openstreetmap獲取緯度和經度地址

proj = mapView.getProjection(); 
     loc = (GeoPoint) proj.fromPixels((int) e.getX(), (int) e.getY()); 
     String longitude = Double 
       .toString(((double) loc.getLongitudeE6())/1000000); 
     String latitude = Double 
       .toString(((double) loc.getLatitudeE6())/1000000); 
     Toast toast = Toast.makeText(getApplicationContext(), "Longitude: " 
       + longitude + " Latitude: " + latitude, Toast.LENGTH_SHORT); 
     toast.show(); 

所以從這裏我將如何查詢來獲取來自OSM數據庫中的城市名稱。請幫幫我。 如何將其轉換爲人類可理解的形式。這是我正在使用的代碼。 link

回答

7

試試這個代碼獲取地址。

Geocoder geocoder; 
List<Address> addresses; 
geocoder = new Geocoder(this, Locale.getDefault()); 
addresses = geocoder.getFromLocation(latitude, longitude, 1); 

String address = addresses.get(0).getAddressLine(0); 
String city = addresses.get(0).getAddressLine(1); 
String country = addresses.get(0).getAddressLine(2); 

爲openstreammap

final String requestString = "http://nominatim.openstreetmap.org/reverse?format=json&lat=" + 
      Double.toString(lat) + "&lon=" + Double.toString(lon) + "&zoom=18&addressdetails=1";   

RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(requestString)); 
try { 
    @SuppressWarnings("unused") 
    Request request = builder.sendRequest(null, new RequestCallback() { 
     @Override 
     public void onResponseReceived(Request request, Response response) { 
      if (response.getStatusCode() == 200) { 
       String city = ""; 
       try { 
        JSONValue json = JSONParser.parseStrict(response); 
        JSONObject address = json.isObject().get("address").isObject(); 
        final String quotes = "^\"|\"$"; 

        if (address.get("city") != null) { 
         city = address.get("city").toString().replaceAll(quotes, ""); 
        } else if (address.get("village") != null) { 
         city = address.get("village").toString().replaceAll(quotes, ""); 
        } 
       } catch (Exception e) { 
       }    
      } 
     } 
    }); 
} catch (Exception e) { 
} 
+0

其中我粘貼此代碼? –

+1

看到這個鏈接http://stackoverflow.com/questions/10158373/how-to-get-latitude-and-longitude-from-address-on-android – Indra

+1

我使用的是openstreetmap而不是谷歌地圖 –

1

這裏是我的解決方案。我認爲它也適用於你。

public String ConvertPointToLocation(GeoPoint point) { 
    String address = ""; 
    Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault()); 
    try { 
     List<Address> addresses = geoCoder.getFromLocation(
      point.getLatitudeE6()/1E6, 
      point.getLongitudeE6()/1E6, 1); 

     if (addresses.size() > 0) { 
      for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++) 
       address += addresses.get(0).getAddressLine(index) + " "; 
     } 


     Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show(); 

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

    return address; 
}