Выяснить широту и долготу
Я пытаюсь разработать приложение для 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, в котором вы можете указывать требования на высоком уровне, например, с высокой точностью или низким энергопотреблением. Это также оптимизирует использование устройства от батареи.
Шаг 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
}
Я знаю, что этот подход не может дать идеальных результатов, но он кажется более эффективным, чем использование геозон.