Выяснить широту и долготу

Я пытаюсь разработать приложение для Android, которое может выполнять задачи в соответствии с широтой / долготой. Это что-то вроде того, если я нахожусь в определенном пригороде (допустим, я нахожусь в Белконнен, АСТ Австралия, я хотел бы получить подробную информацию об этом месте автоматически) - если я переезжаю границу Белконнен, то я должен показать некоторые другие детали,

Если вы перейдете по ссылке Google Maps: http://goo.gl/4mItcF вы увидите, что красная граница - это только пригород Бельконнен.

Мой вопрос заключается в том, как мне задать границы в моем приложении (то есть, как я могу сообщить своему приложению, что я сейчас нахожусь в Белконнене, ACT? широта / долгота, если это так, DB будет иметь огромные числа только для Belconnen, ACT верно?

Или есть более простой способ получить границы?

Дай мне знать!

Спасибо!

5 ответов

Есть способ, он называется обратным геокодированием. Вы можете использовать его двумя способами:

1. Использование Geocoder класс Android -

Geocoder gcd = new Geocoder(context, Locale.getDefault());
List<Address> addresses = gcd.getFromLocation(lat, lng, 1);
if (addresses.size() > 0) 
    System.out.println(addresses.get(0).getLocality());

Здесь вы используете lat = -35.2374551 а также lng = 149.0672515 для Белконнен, ACT Австралия. Проверьте функцию getFromLocation для получения дополнительной информации.

2. Использование Google REST Web Services:

https://maps.googleapis.com/maps/api/geocode/json?latlng=-35.2374551,149.0672515 (JSON)

https://maps.googleapis.com/maps/api/geocode/xml?latlng=-35.2374551,149.0672515 (XML)

пропустите через запятую широту и долготу, и в ответ вы получите наиболее точное местоположение для этого. Найти больше информации здесь Обратное геокодирование Google API

Как только вы покинете Белконнен, ACT Australia, в ответном адресе больше не будет этого слова, и вы можете использовать некоторую логику, чтобы получить желаемое поведение.

Насколько я понимаю, вы хотели бы создать приложение с определением местоположения.

Согласно документации Android, API определения местоположения сервисов Google Play предпочтительнее API определения местоположения платформы Android (android.location) в качестве способа добавления информации о местоположении в ваше приложение.

Шаг 1 - Знание текущего местоположения пользователя

Google рекомендует использовать API FusionProvider для этой цели. Это один из API-интерфейсов определения местоположения в сервисах Google Play, в котором вы можете указывать требования на высоком уровне, например, с высокой точностью или низким энергопотреблением. Это также оптимизирует использование устройства от батареи.

https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html

Шаг 2. На основе информации о широте и долготе, полученной в объекте местоположения, вы можете использовать приведенный ниже веб-сервис Google для получения почтового индекса местоположения.

http://maps.googleapis.com/maps/api/geocode/json?latlng=lattitude,longitude&sensor=true

Шаг 3 - Как часто мы можем получить информацию о местоположении

Постоянное включение слушателей сильно повлияет на батарею устройства. Поэтому, чтобы избежать этого, нам нужно минимизировать частоту получения информации о местоположении.

Я бы рекомендовал измерить расстояние, пройденное пользователем, и на основании этого установить следующий триггер обновления местоположения. Поскольку вас беспокоит только граница, мы можем установить высокое значение в зависимости от ускорения устройства. Обратитесь по ссылкам ниже для более подробной информации о том, как реализовать это эффективно. /questions/39475070/raschet-skorosti-dvizheniya-polzovatelya-v-android/39475083#39475083

Надеюсь это поможет.

        LocationManager lm;
        lm=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
        Criteria c=new Criteria();
        String provider=lm.getBestProvider(c, false);
        Location l=lm.getLastKnownLocation(provider);
        double latitude = l.getLatitude(); // latitude
        double longitude = l.getLongitude(); // longitude

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

Если вам нужна дополнительная гибкость, вы можете использовать геозону: http://developer.android.com/training/location/geofencing.html

Вы можете приблизить регион с помощью LatLngBounds (com.google.android.gms.maps.model.LatLngBounds). Используйте это так:

LatLngBounds.Builder builder = new Builder();
for (int i=0; i<points.length; i++) {
    builder.include(points[i]);
}
LatLngBounds bounds = builder.build();

А затем проверьте, попадает ли ваше местоположение внутри него:

if (bounds.contains(myLatLng)) {
    //your implementation
}

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

Другие вопросы по тегам