Android getFromLocationName возвращает результаты за пределами ограничительной рамки - PullRequest
5 голосов
/ 27 июня 2011

Я делаю поиск местоположения из моего приложения для Android.Пользователь вводит адрес, и я выполняю поиск по следующему коду:

 private void doSearch(String query){
    FNMApplication.logInfo("Searching:"+query);
    //create a geocoder
    Geocoder gc = new Geocoder(this,Locale.getDefault());
    try{
        //lookup locations which match the query input by the user
        List<Address> addresses = gc.getFromLocationName(query, 5, -44.00, 111.00, -12.0, 155.0);
        //if there are any results save them in an ivar for re-use
        locationSearchResults=addresses;
        promptSearch();          
    }
    catch (Exception e){
        ;
    }
}

Ограничительная рамка выше предназначена для Австралии, но если я ищу "Лос-Анджелес", он возвращает результаты в США.Я что-то пропустил?На мой взгляд, он должен возвращать адреса только в пределах ограничительной рамки согласно справочному документу

1 Ответ

5 голосов
/ 17 ноября 2011

В ответе на вопрос, который я пробовал, и полученные результаты показаны ниже.

18.55, 72.54 = Mumbai
22.18, 70.56 = Rajkot

1)

Когда я передаю нижнее значение широты как левое нижнее и ищу строку Iполучил это

Geocoder gc = new Geocoder(this, Locale.getDefault());
        try {

            List<Address> addresses = gc.getFromLocationName("akshardham", 5,
                    18.55, 72.54, 22.18, 70.56);

            Log.i("Address", "=========0----------------------"
                    + addresses.get(0).getAddressLine(0)
                    + addresses.get(0).getAddressLine(1));
            Log.i("Address", "=========0----------------------"
                    + addresses.get(1).getAddressLine(0)
                    + addresses.get(1).getAddressLine(1));
            Log.i("Address", "=========0----------------------"
                    + addresses.get(2).getAddressLine(0));
            Log.i("Address", "=========0----------------------"
                    + addresses.get(3).getAddressLine(0));
            Log.i("Address", "=========0----------------------"
                    + addresses.get(4).getAddressLine(0));
        } catch (Exception e) {
            ;
        }

Logcat этого

11-17 12:42:32.419: INFO/Address(802): =========0----------------------AkshardhamNH 8C, Sector 20
11-17 12:42:32.429: INFO/Address(802): =========0----------------------AkshardhamRajkot, Gujarat 360005
11-17 12:42:32.429: INFO/Address(802): =========0----------------------Akshardham

2)

Когда я передаю vaue более высокой широты как левое нижнее и ищу строку, я получил это

List<Address> addresses = gc.getFromLocationName("akshardham",5, 22.18, 70.56,18.55, 72.54 );

Logcat этого

11-17 12:43:53.170: INFO/Address(837): =========0----------------------HardhamPulborough, West Sussex RH20 1

3)

Документ здесь сам говорит "Адресасоответствие внутри ограничительной рамки имеет более высокий ранг. ", я думаю, они хотят сказать, что не обязательно, чтобы, если строка поиска является адресом, между этим полем будет только возврат, если они найдут адрес, который они вернут, даже если егоиз ограничительной коробки. Полагаю, ограничивающий прямоугольник предназначен только для установки приоритета результата, в то время как сначала будет получено среднее значение из поля, а затем и другое, как в get (0), get (1) списка.но результат будет дан, даже если они не находятся в ограничительной рамке.

4)

В Geocoder.java здесь они просто вызывают метод, чтобы получить адреса с передачей двойных значений в качестве аргумента simple .. никакая проверка результата не используется там, чтобы проверить самое низкое и самое высокое значение

=> Итак final answer для вас проблема, вы просто вызываете функцию, когда вы звоните, и вы можете проверить вторую строку адреса, которая соответствует вашей, означает, что штат или страна одинаковы.чтобы найти страну, название штата вашего значения ограничивающего прямоугольника, используйте getFromLocation (широта, долгота, maxResults), Я все еще не нашел идеального решения для этого, поэтому я тоже. Поиск

=> Подробнее об этом может объяснить эксперт (это не я) или разработчик из самого Google.

...