如何使用android中的openstreetmap按纬度和经度获取地址

时间:2021-01-12 16:02:22

In my app I am using osm map. I have latitude and longitude. using this method

在我的应用程序中,我使用的是osm map。我有经纬度。使用这种方法

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();

So from here how I will query to get the city name from osm database. Please help me. How can I convert this into human understandable form. Here is my code which I am using.link

所以从这里我将如何查询从osm数据库获取城市名称。请帮帮我。如何将其转换为人类可理解的形式。这是我正在使用的代码.link

2 个解决方案

#1


7  

Try this code for getting address.

尝试使用此代码获取地址。

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);

for openstreammap

用于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) {
}

#2


1  

here is my solution. i think it works for you also.

这是我的解决方案。我认为它也适合你。

 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;
 } 

#1


7  

Try this code for getting address.

尝试使用此代码获取地址。

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);

for openstreammap

用于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) {
}

#2


1  

here is my solution. i think it works for you also.

这是我的解决方案。我认为它也适合你。

 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;
 }