Геокодирование и обратное геокодирование

Я пробую простое приложение, в котором мне нужно отобразить карту. И когда я нажимаю на любое место, оно должно возвращать адрес этого места. Можете ли вы помочь мне, как это сделать.


person Aditi Sharma    schedule 23.05.2012    source источник


Ответы (3)


Я обнаружил, что Google API очень удобен для обратного геокодирования. Для этого я создал этот класс. Вы можете напрямую использовать этот класс в своем приложении:

public class getReverseGeoCoding
{
    private String Address1 = "", Address2 = "", City = "", State = "", Country = "", County = "", PIN = "";

    public void getAddress()
    {
        Address1 = "";  Address2 = ""; City = ""; State = ""; Country = ""; County = ""; PIN = "";

        try {

            JSONObject jsonObj = parser_Json.getJSONfromURL("http://maps.googleapis.com/maps/api/geocode/json?latlng="+ Global.curLatitude + "," + Global.curLongitude +"&sensor=true"); 
            String Status = jsonObj.getString("status");
            if(Status.equalsIgnoreCase("OK"))
            {
                JSONArray Results = jsonObj.getJSONArray("results"); 
                JSONObject zero = Results.getJSONObject(0);
                JSONArray address_components = zero.getJSONArray("address_components");

                for(int i = 0; i<address_components.length(); i++)
                {
                    JSONObject zero2 = address_components.getJSONObject(i);
                    String long_name = zero2.getString("long_name");
                    JSONArray mtypes = zero2.getJSONArray("types");
                    String Type = mtypes.getString(0);

                    if(TextUtils.isEmpty(long_name) == false || !long_name.equals(null) || long_name.length() > 0 || long_name != "" )
                    {
                        if(Type.equalsIgnoreCase("street_number"))
                        {
                            Address1 = long_name + " ";
                        }
                        else if(Type.equalsIgnoreCase("route"))
                        {
                            Address1 = Address1 + long_name;
                        }
                        else if(Type.equalsIgnoreCase("sublocality"))
                        {
                            Address2 = long_name;
                        }
                        else if(Type.equalsIgnoreCase("locality"))
                        {
//                          Address2 = Address2 + long_name + ", ";
                            City = long_name;
                        }
                        else if(Type.equalsIgnoreCase("administrative_area_level_2"))
                        {
                            County = long_name;
                        }
                        else if(Type.equalsIgnoreCase("administrative_area_level_1"))
                        {
                            State = long_name;
                        }
                        else if(Type.equalsIgnoreCase("country"))
                        {
                            Country = long_name;
                        }
                        else if(Type.equalsIgnoreCase("postal_code"))
                        {
                            PIN = long_name;
                        }
                    }

//                  JSONArray mtypes = zero2.getJSONArray("types");
//                  String Type = mtypes.getString(0);
//                  Log.e(Type,long_name);
                }
            }

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


    }

    public String getAddress1()
    {
        return Address1;

    }

    public String getAddress2()
    {
        return Address2;

    }

    public String getCity()
    {
        return City;

    }

    public String getState()
    {
        return State;

    }

    public String getCountry()
    {
        return Country;

    }

    public String getCounty()
    {
        return County;

    }

    public String getPIN()
    {
        return PIN;

    }
person Vipul Purohit    schedule 23.05.2012

Вы знаете, как отобразить карту в приложении для Android? Если нет, вы можете взглянуть на этот хороший учебник.

Тогда отображение адреса можно сделать так:

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
    List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
person orchidrudra    schedule 23.05.2012

чтобы получить координату клика, проверьте эту тему:

Получение координат при щелчке в любом месте MapView

и вы можете превратить координату в адрес следующим образом:

 Address a = ((Address)geocoder.getFromLocation(latiAsDouble, longiAsDouble, 1).get(0));
 String Position = a.getAddressLine(1) + " - " + a.getAddressLine(0);

это делает http-вызов на сервер Google, поэтому вы можете поместить это в какой-то поток.

person CAA    schedule 23.05.2012