SlideShare a Scribd company logo
1 of 20
Download to read offline
Работа с геоданными
Олег Годовых
Возможности Android
Работа с кучей сенсоров (если есть на устройстве).
Картографический движок (если установлены дополнения
Google Play — нет только на Kindle и чрезмерно китайских
устройствах).
Всё богатство вебсервисов.
2 Работа с геоданными
Получение местоположения
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
— разрешает получать информацию из сети (на базе
вышек сотовой связи, wi-fi, и т.д.), соответствует
LocationManager.NETWORK_PROVIDER.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
— использование GPS, соответствует
LocationManager.GPS_PROVIDER.
Когда мы используем ACCESS_FINE_LOCATION, использование
ACCESS_COARSE_LOCATION включается неявно.
3 Работа с геоданными
Получение местоположения
Добавляем в Activity необходимые Listener-ы:
public class MainActivity extends FragmentActivity implements
LocationListener,
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener
{ ...
Реализуем их методы:
public interface LocationListener {
void onLocationChanged(Location location);
}
static interface OnConnectionFailedListener {
void onConnectionFailed(ConnectionResult connectionResult);
}
static interface ConnectionCallbacks {
void onConnected(Bundle bundle);
void onDisconnected();
}
Создаём подключение:
public LocationClient( Context context,
GooglePlayServicesClient.ConnectionCallbacks connectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener failedListener) {
LocationClient client = new LocationClient(this, this, this);
}
4 Работа с геоданными
Получение местоположения
Создаём запрос:
LocationRequest request = LocationRequest.create();
request.setInterval(5 * 1000); // в мс
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
request.setFastestInterval(1 * 1000);
Управляем в пределах времени жизни:
client.connect(); // в onStart
client.disconnect(); // в onStop
client.requestLocationUpdates(request, this);
// стартуем запрос обновлений, получаем через callback
client.removeLocationUpdates(this);
// останавливаем запрос обновлений, нужно делать в onStop
Location currentLocation = client.getLastLocation(); // получаем самое свежее
5 Работа с геоданными
Особенности геолокации
Геолокация очень затратна по работе с аккумулятором.
Рекомендуется устанавливать разумные таймауты и
отключать геолокационные сервисы на время бездействия
приложения.
Геолокация не всегда отдаёт точное положение, особенно
для статичного объекта (погрешность GPS — порядка 50
метров, GSM — до километров).
Google специально из соображений безопасности отдаёт
положение в случае определения по GSM с большой
погрешностью.
Холодный старт довольно долгий.
В Китае сложно пользоваться.
6 Работа с геоданными
Что есть ещё
Через Geocoding можно узнать не только координаты, но и
текущий адрес.
Geofencing — вам будут присылаться обновления, когда
пользователь находится в определённом месте.
Activity Recognition — определяется вид активности
(ходьба, бег, велосипед, транспорт)
7 Работа с геоданными
Как отобразить
Google API for Android, компонент MapView.
Google Play Services, компонент MapFragment.
Yandex maps.
WebView ← Google maps, Bing maps, Yandex maps,
whatever you want.
3rd-party libraries (OsmDroid, Mapsforge) —
OpenStreetMaps, другие движки, можно написать
коннектор к любому сервису.
Внешнее приложение.
8 Работа с геоданными
Внешнее приложение
String uri = String.format("geo:%.6f,%.6f?z=%d", latitude, longitude, zoom);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);
9 Работа с геоданными
WebView
Перед нами всё богатство всяческих вебсервисов.
Загружаем нужную страницу, если необходимо —
передаём через параметры позицию.
Минусы — вся работа через JavaScript. WebView позволяет
прицепить обработчики на Java к коду на JavaScript, но это
ухудшает быстродействие.
Сложнее писать свои дополнительные слои.
10 Работа с геоданными
Google Maps
Подключаем Google Play Services.
Получаем ключ для Google Maps API.
Добавляем описание использования карт в манифест.
Подробнее — https://developers.google.com/
maps/documentation/android/start
11 Работа с геоданными
Google Maps
Начиная с API v2, карты отображаются в фрагментах.
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
private GoogleMap map =
((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
12 Работа с геоданными
Google Maps
Можем включить отображение спутниковой карты,
траффика или Street View (всё это, если эти прелести есть
для данной локации).
Не надо беспокоиться насчёт памяти — MapFragment
аллоцирует память под картинки нативно, использует
Bitmap pool. Так что если оно и решит сломаться, вы
сможете только соболезновать.
Можно делать оверлеи!
13 Работа с геоданными
Маркеры
Отображаем какую-либо точку на экране, по нажатию — баббл
с информацией.
static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
Marker melbourne = map.addMarker(new MarkerOptions()
.position(MELBOURNE)
.title("Melbourne")
.snippet("Population: 4,137,400"));
14 Работа с геоданными
Маркеры
Можно переопределить:
GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) —
вместо показа баббла своё действие
GoogleMap.setOnMarkerDragListener(OnMarkerDragListener) —
на перетаскивание (по умолчанию не работает)
GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener)
— нажатие на баббл
15 Работа с геоданными
Google Maps
Можно очень классно управлять наклоном, поворотом,
местоположением и анимацией.
private static final LatLng SYDNEY = new LatLng(-33.88,151.21);
private static final LatLng MOUNTAIN_VIEW = new LatLng(37.4, - 122.1);
private GoogleMap map;
map.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15));
map.animateCamera(CameraUpdateFactory.zoomIn());
map.animateCamera(CameraUpdateFactory.zoomTo(10), null, 2000);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(MOUNTAIN_VIEW)
.zoom(17)
.bearing(90)
.tilt(30)
.build();
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
16 Работа с геоданными
Google Maps не всесильны
Ограничения на бесплатное использование
Закрытый исходный код
Привязано к гуглокартам
Не всё можно модифицировать.
17 Работа с геоданными
Google Maps не всесильны
Сторонние библиотеки Mapsforge, OsmDroid, другие.
Идут в комплекте с коннекторами для других источников
карт (OpenStreetMaps).
Стараются повторять контракт гуглокарт (легче миграция).
Можно подключить свой источник.
18 Работа с геоданными
Тайловые карты
Карта разбивается на квадратики
В зависимости от уровня зума общее число квадратиков
больше-меньше (пропорционально степеням двойки)
В общих словах, мы должны просто реализовать метод,
позволяющий для уровня зума N предоставить картинку
для квадрата с координатами (X, Y).
Движок сам управляет подгрузкой, пока более детальные
изображения не загрузились, ресэмплит картинки другого
масштаба.
19 Работа с геоданными
Полезные ссылки
http://developer.android.com/training/
location/index.html
http://developer.android.com/google/
play-services/location.html
http://developer.android.com/google/
play-services/maps.html
https://github.com/osmdroid/osmdroid
https://code.google.com/p/mapsforge
20 Работа с геоданными

More Related Content

Viewers also liked

Государственный реестр регистраторов расчетных операций (РРО) от 02.08.2013
Государственный реестр регистраторов расчетных операций (РРО)  от 02.08.2013Государственный реестр регистраторов расчетных операций (РРО)  от 02.08.2013
Государственный реестр регистраторов расчетных операций (РРО) от 02.08.2013uaseller.org
 
Дмитрий Рыжков. Intel Android x86.
Дмитрий Рыжков. Intel Android x86.Дмитрий Рыжков. Intel Android x86.
Дмитрий Рыжков. Intel Android x86.Leonid Bogolubov
 
Android for-indoor-services
Android for-indoor-servicesAndroid for-indoor-services
Android for-indoor-servicesOSLL
 
Use-Case is Everything
Use-Case is EverythingUse-Case is Everything
Use-Case is EverythingChinmay V S
 
Живые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеЖивые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеSergey Mikhaylov
 
CPAлим темы
CPAлим темыCPAлим темы
CPAлим темыAppTractor
 
Презентация - SAMSUNG GT N5100 GALAXY NOTE 8.0 (uaseller.org)
Презентация - SAMSUNG GT N5100 GALAXY NOTE 8.0 (uaseller.org)Презентация - SAMSUNG GT N5100 GALAXY NOTE 8.0 (uaseller.org)
Презентация - SAMSUNG GT N5100 GALAXY NOTE 8.0 (uaseller.org)uaseller.org
 
Android Sensor and Framework - AWARE
Android Sensor and  Framework - AWAREAndroid Sensor and  Framework - AWARE
Android Sensor and Framework - AWAREDarrenJin
 
Win Phone 2 - Statistika
Win Phone 2 - StatistikaWin Phone 2 - Statistika
Win Phone 2 - StatistikaRashad Aliyev
 
How to Pick a Technology Vendor: Top 6 Questions to Ask
How to Pick a Technology Vendor: Top 6 Questions to AskHow to Pick a Technology Vendor: Top 6 Questions to Ask
How to Pick a Technology Vendor: Top 6 Questions to AskTriCorps Technologies
 
Win Phone 2 - Qaliblər
Win Phone 2 - Qaliblər Win Phone 2 - Qaliblər
Win Phone 2 - Qaliblər Rashad Aliyev
 

Viewers also liked (15)

Государственный реестр регистраторов расчетных операций (РРО) от 02.08.2013
Государственный реестр регистраторов расчетных операций (РРО)  от 02.08.2013Государственный реестр регистраторов расчетных операций (РРО)  от 02.08.2013
Государственный реестр регистраторов расчетных операций (РРО) от 02.08.2013
 
Дмитрий Рыжков. Intel Android x86.
Дмитрий Рыжков. Intel Android x86.Дмитрий Рыжков. Intel Android x86.
Дмитрий Рыжков. Intel Android x86.
 
Android for-indoor-services
Android for-indoor-servicesAndroid for-indoor-services
Android for-indoor-services
 
Use-Case is Everything
Use-Case is EverythingUse-Case is Everything
Use-Case is Everything
 
Живые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. ПродвижениеЖивые обои для Android. Как создать. Тонкости. Продвижение
Живые обои для Android. Как создать. Тонкости. Продвижение
 
Play Store
Play StorePlay Store
Play Store
 
Android Location Api
Android Location ApiAndroid Location Api
Android Location Api
 
CPAлим темы
CPAлим темыCPAлим темы
CPAлим темы
 
Презентация - SAMSUNG GT N5100 GALAXY NOTE 8.0 (uaseller.org)
Презентация - SAMSUNG GT N5100 GALAXY NOTE 8.0 (uaseller.org)Презентация - SAMSUNG GT N5100 GALAXY NOTE 8.0 (uaseller.org)
Презентация - SAMSUNG GT N5100 GALAXY NOTE 8.0 (uaseller.org)
 
Sensor android
Sensor androidSensor android
Sensor android
 
Android Sensor and Framework - AWARE
Android Sensor and  Framework - AWAREAndroid Sensor and  Framework - AWARE
Android Sensor and Framework - AWARE
 
Android Preferences
Android PreferencesAndroid Preferences
Android Preferences
 
Win Phone 2 - Statistika
Win Phone 2 - StatistikaWin Phone 2 - Statistika
Win Phone 2 - Statistika
 
How to Pick a Technology Vendor: Top 6 Questions to Ask
How to Pick a Technology Vendor: Top 6 Questions to AskHow to Pick a Technology Vendor: Top 6 Questions to Ask
How to Pick a Technology Vendor: Top 6 Questions to Ask
 
Win Phone 2 - Qaliblər
Win Phone 2 - Qaliblər Win Phone 2 - Qaliblər
Win Phone 2 - Qaliblər
 

Similar to Android - 14 - Geodata

Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv Startup Club
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Yandex
 
Как модуль geoQuery упрощает работу с API Яндекс.Карт.
Как модуль geoQuery упрощает работу с API Яндекс.Карт.Как модуль geoQuery упрощает работу с API Яндекс.Карт.
Как модуль geoQuery упрощает работу с API Яндекс.Карт.Optima-PROMO
 
Сергей Константинов — Простая обработка групп геообъектов на карте
Сергей Константинов — Простая обработка групп геообъектов на картеСергей Константинов — Простая обработка групп геообъектов на карте
Сергей Константинов — Простая обработка групп геообъектов на картеYandex
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексElena Voynova
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Yandex
 
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...it-people
 
Разбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutРазбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutRambler Android
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15MoscowJS
 
Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"Yandex
 
Александр Зинчук "API 2.0: Новые интерфейсы Яндекс.Карт – теперь и на украинс...
Александр Зинчук "API 2.0: Новые интерфейсы Яндекс.Карт – теперь и на украинс...Александр Зинчук "API 2.0: Новые интерфейсы Яндекс.Карт – теперь и на украинс...
Александр Зинчук "API 2.0: Новые интерфейсы Яндекс.Карт – теперь и на украинс...Yandex
 
Plugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemPlugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemAnton Rutkevich
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Yandex
 
MapReduce взгляд вглубь
MapReduce взгляд вглубьMapReduce взгляд вглубь
MapReduce взгляд вглубьPavel Mezentsev
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusGlobus
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusGlobus
 
Модуль GetLocations. Google Maps API ver.3 и Drupal. DrupalForum ZP 2012.
Модуль GetLocations. Google Maps API ver.3 и Drupal. DrupalForum ZP 2012.Модуль GetLocations. Google Maps API ver.3 и Drupal. DrupalForum ZP 2012.
Модуль GetLocations. Google Maps API ver.3 и Drupal. DrupalForum ZP 2012.Dmytro Olaresko
 

Similar to Android - 14 - Geodata (20)

Google maps for android
Google maps for androidGoogle maps for android
Google maps for android
 
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
 
Как модуль geoQuery упрощает работу с API Яндекс.Карт.
Как модуль geoQuery упрощает работу с API Яндекс.Карт.Как модуль geoQuery упрощает работу с API Яндекс.Карт.
Как модуль geoQuery упрощает работу с API Яндекс.Карт.
 
Сергей Константинов — Простая обработка групп геообъектов на карте
Сергей Константинов — Простая обработка групп геообъектов на картеСергей Константинов — Простая обработка групп геообъектов на карте
Сергей Константинов — Простая обработка групп геообъектов на карте
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, Яндекс
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"
 
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
 
Разбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayoutРазбираемся с CoordinatorLayout
Разбираемся с CoordinatorLayout
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
 
Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"
 
Александр Зинчук "API 2.0: Новые интерфейсы Яндекс.Карт – теперь и на украинс...
Александр Зинчук "API 2.0: Новые интерфейсы Яндекс.Карт – теперь и на украинс...Александр Зинчук "API 2.0: Новые интерфейсы Яндекс.Карт – теперь и на украинс...
Александр Зинчук "API 2.0: Новые интерфейсы Яндекс.Карт – теперь и на украинс...
 
Plugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemPlugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build system
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Famous
FamousFamous
Famous
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"
 
MapReduce взгляд вглубь
MapReduce взгляд вглубьMapReduce взгляд вглубь
MapReduce взгляд вглубь
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", Globus
 
Дмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", GlobusДмитрий Устимов "Многооконный режим", Globus
Дмитрий Устимов "Многооконный режим", Globus
 
Модуль GetLocations. Google Maps API ver.3 и Drupal. DrupalForum ZP 2012.
Модуль GetLocations. Google Maps API ver.3 и Drupal. DrupalForum ZP 2012.Модуль GetLocations. Google Maps API ver.3 и Drupal. DrupalForum ZP 2012.
Модуль GetLocations. Google Maps API ver.3 и Drupal. DrupalForum ZP 2012.
 

More from Noveo

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииNoveo
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Noveo
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Noveo
 
Yii2
Yii2Yii2
Yii2Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизацияNoveo
 
Rest
RestRest
RestNoveo
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP AdvancedNoveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQLNoveo
 
MySQL
MySQLMySQL
MySQLNoveo
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Noveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)Noveo
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Noveo
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Noveo
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Noveo
 

More from Noveo (20)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 

Android - 14 - Geodata

  • 2. Возможности Android Работа с кучей сенсоров (если есть на устройстве). Картографический движок (если установлены дополнения Google Play — нет только на Kindle и чрезмерно китайских устройствах). Всё богатство вебсервисов. 2 Работа с геоданными
  • 3. Получение местоположения <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> — разрешает получать информацию из сети (на базе вышек сотовой связи, wi-fi, и т.д.), соответствует LocationManager.NETWORK_PROVIDER. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> — использование GPS, соответствует LocationManager.GPS_PROVIDER. Когда мы используем ACCESS_FINE_LOCATION, использование ACCESS_COARSE_LOCATION включается неявно. 3 Работа с геоданными
  • 4. Получение местоположения Добавляем в Activity необходимые Listener-ы: public class MainActivity extends FragmentActivity implements LocationListener, GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { ... Реализуем их методы: public interface LocationListener { void onLocationChanged(Location location); } static interface OnConnectionFailedListener { void onConnectionFailed(ConnectionResult connectionResult); } static interface ConnectionCallbacks { void onConnected(Bundle bundle); void onDisconnected(); } Создаём подключение: public LocationClient( Context context, GooglePlayServicesClient.ConnectionCallbacks connectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener failedListener) { LocationClient client = new LocationClient(this, this, this); } 4 Работа с геоданными
  • 5. Получение местоположения Создаём запрос: LocationRequest request = LocationRequest.create(); request.setInterval(5 * 1000); // в мс request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); request.setFastestInterval(1 * 1000); Управляем в пределах времени жизни: client.connect(); // в onStart client.disconnect(); // в onStop client.requestLocationUpdates(request, this); // стартуем запрос обновлений, получаем через callback client.removeLocationUpdates(this); // останавливаем запрос обновлений, нужно делать в onStop Location currentLocation = client.getLastLocation(); // получаем самое свежее 5 Работа с геоданными
  • 6. Особенности геолокации Геолокация очень затратна по работе с аккумулятором. Рекомендуется устанавливать разумные таймауты и отключать геолокационные сервисы на время бездействия приложения. Геолокация не всегда отдаёт точное положение, особенно для статичного объекта (погрешность GPS — порядка 50 метров, GSM — до километров). Google специально из соображений безопасности отдаёт положение в случае определения по GSM с большой погрешностью. Холодный старт довольно долгий. В Китае сложно пользоваться. 6 Работа с геоданными
  • 7. Что есть ещё Через Geocoding можно узнать не только координаты, но и текущий адрес. Geofencing — вам будут присылаться обновления, когда пользователь находится в определённом месте. Activity Recognition — определяется вид активности (ходьба, бег, велосипед, транспорт) 7 Работа с геоданными
  • 8. Как отобразить Google API for Android, компонент MapView. Google Play Services, компонент MapFragment. Yandex maps. WebView ← Google maps, Bing maps, Yandex maps, whatever you want. 3rd-party libraries (OsmDroid, Mapsforge) — OpenStreetMaps, другие движки, можно написать коннектор к любому сервису. Внешнее приложение. 8 Работа с геоданными
  • 9. Внешнее приложение String uri = String.format("geo:%.6f,%.6f?z=%d", latitude, longitude, zoom); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(intent); 9 Работа с геоданными
  • 10. WebView Перед нами всё богатство всяческих вебсервисов. Загружаем нужную страницу, если необходимо — передаём через параметры позицию. Минусы — вся работа через JavaScript. WebView позволяет прицепить обработчики на Java к коду на JavaScript, но это ухудшает быстродействие. Сложнее писать свои дополнительные слои. 10 Работа с геоданными
  • 11. Google Maps Подключаем Google Play Services. Получаем ключ для Google Maps API. Добавляем описание использования карт в манифест. Подробнее — https://developers.google.com/ maps/documentation/android/start 11 Работа с геоданными
  • 12. Google Maps Начиная с API v2, карты отображаются в фрагментах. <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.google.android.gms.maps.MapFragment"/> private GoogleMap map = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); map.setMapType(GoogleMap.MAP_TYPE_HYBRID); 12 Работа с геоданными
  • 13. Google Maps Можем включить отображение спутниковой карты, траффика или Street View (всё это, если эти прелести есть для данной локации). Не надо беспокоиться насчёт памяти — MapFragment аллоцирует память под картинки нативно, использует Bitmap pool. Так что если оно и решит сломаться, вы сможете только соболезновать. Можно делать оверлеи! 13 Работа с геоданными
  • 14. Маркеры Отображаем какую-либо точку на экране, по нажатию — баббл с информацией. static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298); Marker melbourne = map.addMarker(new MarkerOptions() .position(MELBOURNE) .title("Melbourne") .snippet("Population: 4,137,400")); 14 Работа с геоданными
  • 15. Маркеры Можно переопределить: GoogleMap.setOnMarkerClickListener(OnMarkerClickListener) — вместо показа баббла своё действие GoogleMap.setOnMarkerDragListener(OnMarkerDragListener) — на перетаскивание (по умолчанию не работает) GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener) — нажатие на баббл 15 Работа с геоданными
  • 16. Google Maps Можно очень классно управлять наклоном, поворотом, местоположением и анимацией. private static final LatLng SYDNEY = new LatLng(-33.88,151.21); private static final LatLng MOUNTAIN_VIEW = new LatLng(37.4, - 122.1); private GoogleMap map; map.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15)); map.animateCamera(CameraUpdateFactory.zoomIn()); map.animateCamera(CameraUpdateFactory.zoomTo(10), null, 2000); CameraPosition cameraPosition = new CameraPosition.Builder() .target(MOUNTAIN_VIEW) .zoom(17) .bearing(90) .tilt(30) .build(); map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 16 Работа с геоданными
  • 17. Google Maps не всесильны Ограничения на бесплатное использование Закрытый исходный код Привязано к гуглокартам Не всё можно модифицировать. 17 Работа с геоданными
  • 18. Google Maps не всесильны Сторонние библиотеки Mapsforge, OsmDroid, другие. Идут в комплекте с коннекторами для других источников карт (OpenStreetMaps). Стараются повторять контракт гуглокарт (легче миграция). Можно подключить свой источник. 18 Работа с геоданными
  • 19. Тайловые карты Карта разбивается на квадратики В зависимости от уровня зума общее число квадратиков больше-меньше (пропорционально степеням двойки) В общих словах, мы должны просто реализовать метод, позволяющий для уровня зума N предоставить картинку для квадрата с координатами (X, Y). Движок сам управляет подгрузкой, пока более детальные изображения не загрузились, ресэмплит картинки другого масштаба. 19 Работа с геоданными