SlideShare a Scribd company logo
Работа с геоданными
Android
Возможности Android
Работа с кучей сенсоров
(если есть на устройстве)
Картографическйи движок
(если установлены дополнения Google Play.
нет только на Kindle и китайских устройствах)
Все богатство веб-сервисов
System permissions
1 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Разрешает получать информацию из сети
(на базе вышек сотовой связи, wi- , и т.д.),
соответствует LocationManager.NETWORK_PROVIDER.
1 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Использование GPS,
соответствует LocationManager.GPS_PROVIDER.
*Когда мы используем ACCESS_FUNE_LOCATION, использование ACCESS_COARSE_LOCATION включется
неявно.
Получение геоданных
Хорошее приложение
Отдает точные координаты
Отдает актуальные координаты
Экономит батарейку
Как это сделать
Кэширование
Работа с разными провайдерами
1 class LocationActivity extends Activity {
2 private LocationManager locationManager =
3 (LocationManager) getSystemService(Context.LOCATION_SERVICE);
4
5 private LocationListener locationListener = new LocationListener() {
6 void onLocationChanged(Location location) {//крординаты}
7 void onStatusChanged(String provider, int status, Bundle extras) {}
8 void onProviderEnabled(String provider) {}
9 void onProviderDisabled(String provider) {}
10 };
11
12 void request() {
13 locationManager.requestLocationUpdates(
14 LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
15 //provider, minTime, minDistance, listener
16 }
17 }
GoogleApiClient - 1 шаг
1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 package="com.noveogroup.your.application">
3 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
4 <application...>
5 <meta-data android:name="com.google.android.gms.version"
6 android:value="@integer/google_play_services_version"/>
7 </application>
8 </manifest>
Дальше работаем с LocationServices.FusedLocationApi
GoogleApiClient - 2 шаг
com.google.android.gms:play-services-location:9.2.1.
1 class LocationGoogleActivity extends Activity {
2
3 private GoogleApiClient googleApiClient;
4
5 public void onCreate() {
6 googleApiClient = new GoogleApiClient.Builder(this)
7 .addApi(LocationServices.API)
8 .addConnectionCallbacks(
9 new ConnectionCallbacks() {
10 void onConnected(Bundle bundle) {}
11 void onConnectionSuspended(int i) {}
12 })
13 .addOnConnectionFailedListener(
14 new OnConnectionFailedListener() {
15 void onConnectionFailed(ConnectionResult result) {}
16 })
17 .build();
18 }
19
20 public void onStart() { googleApiClient.connect(); }
21 public void onStop() { googleApiClient.disconnect(); }
22 }
Получение местоположения
LocationServices.FusedLocationApi:
1 //доступен ли сервис?
2 LocationAvailability getLocationAvailability(GoogleApiClient client)
3
4 //последние закэшированные координаты
5 Location getLastLocation(GoogleApiClient client)
6
7 //работа с заглушками
8 PendingResult<Status> setMockLocation(
9 GoogleApiClient client, Location mockLocation)
10 PendingResult<Status> setMockMode(
11 GoogleApiClient client, boolean isMockMode)
12
13 //подписки
14 //Стартуем запрос обновлений и получаем через callback
15 PendingResult<Status> requestLocationUpdates(GoogleApiClient client, ...)
16 //Останавливаем запрос обновлений, нужно делать в onStop
17 PendingResult<Status> removeLocationUpdates(GoogleApiClient client, ...)
Особенности геолокации
Геолокация очень затранта по работе с аккумулятором
Рекомендуется устанавливать разумные таймауты и отключать геолокационные сервисы
на время бездействия приложения
Геолокация не всегда отдает точное положение, особенно для статичного объекта
(погрешнрость GPS - порядка 50 метров, GSM - до километров)
Google специально из соображений безопасности отдает положение в случае определния
по GSM с большой погрешностью
Холодные старт довольно долгий
В Китае сложно пользоваться:)
Что еще есть
Google Places API:
Это web-сервис
Выбор и поиск мест
Автодополнение адресов
Поиск адреса по координатам и в радиусе
Geofencing:
GeofenceTransitionsIntentService
Вам будут присылать, когда пользователь в нужно месте
Activity Recognition:
Распознавание активности: бег, ходьба, велосипед
Как отобразить
Google API for Android, компонент MapView
Google Play Services, компонент MapFragment
Yandex maps
WebView + GoogleMaps/Bing Maps/Yandex Maps...
3rd-party libraries (OsmDroid, Mapsforge) - OpenStreetMaps, другие движки, можно написать
коннектор к любому сервису
Внешнее приложение (Waze, Google Maps, ...)
Внешнее приложение
1 static String LOCATION_FORMAT = "geo:%.6f,%.6f";
2 static String ZOOM_FORMAT = "geo:%.6f,%.6f?z=zoom";
3 static String LABEL_FORMAT = "geo:0,0?q=%.6f,%.6f(%s)";
4 static String QUERY_FORMAT = "geo:0,0?q=%s";
5
6 String uri = String.format(ZOOM_FORMAT, latitude, longitude, zoom);
7 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
8 startActivity(intent);
* все строки должны быть закодированы (encoded)
например "Noveo Group" будет "Noveo%20Group"
WebView
Особенности
Перед нам все богатство всяческих веб-сервисов
Загружаем нужную страницу, если необходимо - передаем через параметры позицию
Минусы - вся работа через JavaScript WebView позволяет прицепить обработчики на Java к
коду на JavaScript, но это ухудшает быстродействие.
Сложнее писать свои дополнительные слои
Как вызвать
Кидаем Intent.ACTION_VIEW с Uri формата веб-сервиса.
Обычно это похоже на uri для вызова внешнего приложения.
Google Maps
Подключаем Google Play Services.
Регистрируем приложение:
1. Добавляем к приложению свой *.keystore
(если нет - генерим новый с помощью keytool)
2. Регистрируем приложение в Google Developers Console
3. Создаем новый проект
4. В настройках (APIs & auth -> APIs) включаем Google Maps Android API v2
5. В настройках (APIs & auth -> Credentials) добавляем ключ для Public API access.
Пригодятся сертификат из keystore и пакет приложения
Добавляем API_KEY в AndroidManifest
1 <meta-data android:name="com.google.android.geo.API_KEY "
2 android:value="%API_KEY%"/>
Google Maps
Начиная с API v2, карты отображаются в фрагментах.
1 <fragment android:id="@+id/map"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4 class="com.google.android.gms.maps.SupportMapFragment"/>
1 MapFragment mapFragment =
2 (MapFragment) getFragmentManager().findFragmentById(R.id.map);
3 GoogleMap mapView = mapFragment.getMap();
4 mapView.setMapType(GoogleMap.MAP_TYPE_HYBRID)
5 //and so on...
Google Maps
Можем включить отображение
Спутник GoogleMap.MAP_TYPE_SATELLITE
Гибрид GoogleMap.MAP_TYPE_HYBRID
Улицы GoogleMap.MAP_TYPE_NORMAL Если эти прелести есть для данной локации
Не надо беспокоиться насчет памяти - MapFragment выделяет память под картинки
нативно, использует Bitmap pool. Если оно и решит сломаться, вы сможете только
соболезновать.
Можно делать оверлеи!
Маркеры
Отображаем какую-либо точку на экране, по нажатию - баббл с информацией.
1 Marker marker = googleMapView.addMarker(new MarkerOptions()
2 .position(new LatLng(55.049035f, 92.912304f))
3 .title("Noveo city office")
4 .snippet("Lecture about Geodata"));
Маркеры
Можно переопределить у GoogleMap:
.setOnMarkerClickListener(OnMarkerClickListener) —
вместо показа баббла своё действие
.setOnMarkerDragListener(OnMarkerDragListener) —
на перетаскивание (по умолчанию не работает)
.setOnInfoWindowClickListener(OnInfoWindowClickListener) —
нажатие на баббл.
Google Maps
Можно очень классно управлять наклоном, поворотом, местоположением и анимацией.
1 private static final LatLng SYDNEY = new LatLng(-33.88,151.21);
2 private static final LatLng MOUNTAIN_VIEW = new LatLng(37.4, - 122.1);
3
4 private GoogleMap map;
5
6 map.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15));
7 map.animateCamera(CameraUpdateFactory.zoomIn());
8 map.animateCamera(CameraUpdateFactory.zoomTo(10), null, 2000);
9
10 CameraPosition cameraPosition = new CameraPosition.Builder()
11 .target(MOUNTAIN_VIEW)
12 .zoom(17)
13 .bearing(90)
14 .tilt(30)
15 .build();
16 map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
Google Maps не всесильны
Ограничения на бесплатное использование Лицензия >>
Закрытый исходный код
Привязано к гуглокартам
Не все можно модифицировать
Помогут сторонние библиотеки Mapsforge, OsmDroid, другие
Идут в комплекте с коннекторами для
других источников карт (OpenStreetMaps)
Стараются повторять контракт гуглокарт
(легче миграция)
Можно подключить свой источник
Тайловые карты
Карта разбивается на квадратики
В зависимосит от уровня зума обеще число квадратиков больше-меньше
(пропорционально степеням двойки)
В общих словах, мы должны просто реализовать метод, позволяющий для уровня зума N
предоставить картинку для квадрата с координатами (X, Y).
Движок сам управляет подгрузкой, пока более деталеьные изображения не загрузились,
ресмэплит картинки другого масштаба.
Полезные ссылки
Android Location
Android Adding Maps
Google Maps
OSMDroid
Mapsforge

More Related Content

Viewers also liked (20)

PDF
Работа с графической подсистемой (Lecture 10 – Graphics)
Noveo
 
PDF
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Denis Vasilyev
 
PDF
Lec 10
Alexander Rusin
 
PPTX
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
Антон Звонов
 
PDF
Системы автоматизированной сборки (Lecture 05 – gradle)
Noveo
 
PDF
Android - 05 - Android basics
Noveo
 
PPTX
Семантика текста (HTML5 тема 04 - семантика текста)
Noveo
 
PDF
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Denis Vasilyev
 
PPTX
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Noveo
 
PDF
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Denis Vasilyev
 
PDF
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Noveo
 
PDF
Animations (Lecture 17 – animations)
Noveo
 
PDF
Lec 13
Alexander Rusin
 
PDF
Lec 9
Alexander Rusin
 
PDF
Работа с соцсетями (Lecture 19 – social)
Noveo
 
PDF
Android - 10 - Graphics
Noveo
 
PDF
Lec 12
Alexander Rusin
 
PDF
Seminar: Эффективное использование среды разработки и компилятора C++
Denis Vasilyev
 
PDF
Thread
Alexander Rusin
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Noveo
 
Webinar: Возможности RAD Studio 10 Seattle для разработки Windows 10 приложений
Denis Vasilyev
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
Антон Звонов
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Noveo
 
Android - 05 - Android basics
Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Noveo
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Denis Vasilyev
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Noveo
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Denis Vasilyev
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Noveo
 
Animations (Lecture 17 – animations)
Noveo
 
Работа с соцсетями (Lecture 19 – social)
Noveo
 
Android - 10 - Graphics
Noveo
 
Seminar: Эффективное использование среды разработки и компилятора C++
Denis Vasilyev
 

Similar to Работа с геоданными (Lecture 18 – geolocation) (20)

PPS
Google maps for android
Stfalcon Meetups
 
PPT
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv Startup Club
 
PDF
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Yandex
 
PDF
Intro to apps with maps for series 40 russian
Microsoft Mobile Developer
 
PPT
KlyuchYuriy_for_code4russia
Olya Suvorova
 
PDF
Фёдор Голубев "API Яндекс.Карт"
Yandex
 
PPTX
Что нового в Android 5.0
Kirill Danilov
 
PPT
Yandex Map Kit для Android OS - Максим Хромцов
Meetup.by
 
PDF
Что API Карт забыл на сервере — Антон Корзунов
Yandex
 
PPT
Mobile Applications With Geo Google API
sshpack
 
PDF
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Yandex
 
PPTX
API Яндекс.Карт
Yandex.Maps
 
PDF
Фёдор Голубев, Леонид Шныр "Яндекс.Карты: между пользователем и разработчиком"
Yandex
 
PDF
Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"
Yandex
 
PDF
Александр Тармолов "API Яндекс.Карт"
Yandex
 
PDF
карты, навигация
Noveo
 
PDF
Федор Голубев "Компас, секстант и другие инструменты современного картографа....
Yandex
 
PDF
geo
prmegaindex
 
KEY
API Яндекс.Карт
Yandex.Maps
 
PPTX
Google maps
nd0ut
 
Google maps for android
Stfalcon Meetups
 
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv Startup Club
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Yandex
 
Intro to apps with maps for series 40 russian
Microsoft Mobile Developer
 
KlyuchYuriy_for_code4russia
Olya Suvorova
 
Фёдор Голубев "API Яндекс.Карт"
Yandex
 
Что нового в Android 5.0
Kirill Danilov
 
Yandex Map Kit для Android OS - Максим Хромцов
Meetup.by
 
Что API Карт забыл на сервере — Антон Корзунов
Yandex
 
Mobile Applications With Geo Google API
sshpack
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Yandex
 
API Яндекс.Карт
Yandex.Maps
 
Фёдор Голубев, Леонид Шныр "Яндекс.Карты: между пользователем и разработчиком"
Yandex
 
Алексей Емелин "Как разместить на карте тысячи интерактивных объектов"
Yandex
 
Александр Тармолов "API Яндекс.Карт"
Yandex
 
карты, навигация
Noveo
 
Федор Голубев "Компас, секстант и другие инструменты современного картографа....
Yandex
 
API Яндекс.Карт
Yandex.Maps
 
Google maps
nd0ut
 
Ad

More from Noveo (20)

PPTX
Гуманитарные специальности в IT-индустрии
Noveo
 
PPTX
Box model, display and position (HTML5 тема 07 - box model, display position)
Noveo
 
PPTX
Стилизация текста (HTML5 тема 05 - стилизация текста)
Noveo
 
PPTX
Основы CSS (HTML5 тема 02 - основы CSS)
Noveo
 
PPTX
Структура HTML документа (HTML5 тема 01 - структура html документа)
Noveo
 
PPTX
Yii2
Noveo
 
PPTX
Сессии и авторизация
Noveo
 
PPTX
Rest
Noveo
 
PPTX
PHP basic
Noveo
 
PPTX
PHP Advanced
Noveo
 
PPTX
PHP and MySQL
Noveo
 
PPTX
MySQL
Noveo
 
PDF
RxJava+RxAndroid (Lecture 20 – rx java)
Noveo
 
PDF
Material Design (Lecture 15 – material design)
Noveo
 
PDF
Database (Lecture 14 – database)
Noveo
 
PDF
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Noveo
 
PDF
XML, JSON (Lecture 11 – XML, JSON)
Noveo
 
PDF
Fragments (Lecture 09 – Fragments)
Noveo
 
PDF
Android - 16 - QR
Noveo
 
PDF
03 коллекции
Noveo
 
Гуманитарные специальности в IT-индустрии
Noveo
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Noveo
 
Yii2
Noveo
 
Сессии и авторизация
Noveo
 
Rest
Noveo
 
PHP basic
Noveo
 
PHP Advanced
Noveo
 
PHP and MySQL
Noveo
 
MySQL
Noveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
Noveo
 
Material Design (Lecture 15 – material design)
Noveo
 
Database (Lecture 14 – database)
Noveo
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Noveo
 
XML, JSON (Lecture 11 – XML, JSON)
Noveo
 
Fragments (Lecture 09 – Fragments)
Noveo
 
Android - 16 - QR
Noveo
 
03 коллекции
Noveo
 
Ad

Работа с геоданными (Lecture 18 – geolocation)

  • 2. Возможности Android Работа с кучей сенсоров (если есть на устройстве) Картографическйи движок (если установлены дополнения Google Play. нет только на Kindle и китайских устройствах) Все богатство веб-сервисов
  • 3. System permissions 1 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> Разрешает получать информацию из сети (на базе вышек сотовой связи, wi- , и т.д.), соответствует LocationManager.NETWORK_PROVIDER. 1 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> Использование GPS, соответствует LocationManager.GPS_PROVIDER. *Когда мы используем ACCESS_FUNE_LOCATION, использование ACCESS_COARSE_LOCATION включется неявно.
  • 4. Получение геоданных Хорошее приложение Отдает точные координаты Отдает актуальные координаты Экономит батарейку Как это сделать Кэширование Работа с разными провайдерами 1 class LocationActivity extends Activity { 2 private LocationManager locationManager = 3 (LocationManager) getSystemService(Context.LOCATION_SERVICE); 4 5 private LocationListener locationListener = new LocationListener() { 6 void onLocationChanged(Location location) {//крординаты} 7 void onStatusChanged(String provider, int status, Bundle extras) {} 8 void onProviderEnabled(String provider) {} 9 void onProviderDisabled(String provider) {} 10 }; 11 12 void request() { 13 locationManager.requestLocationUpdates( 14 LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 15 //provider, minTime, minDistance, listener 16 } 17 }
  • 5. GoogleApiClient - 1 шаг 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 package="com.noveogroup.your.application"> 3 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 4 <application...> 5 <meta-data android:name="com.google.android.gms.version" 6 android:value="@integer/google_play_services_version"/> 7 </application> 8 </manifest> Дальше работаем с LocationServices.FusedLocationApi
  • 6. GoogleApiClient - 2 шаг com.google.android.gms:play-services-location:9.2.1. 1 class LocationGoogleActivity extends Activity { 2 3 private GoogleApiClient googleApiClient; 4 5 public void onCreate() { 6 googleApiClient = new GoogleApiClient.Builder(this) 7 .addApi(LocationServices.API) 8 .addConnectionCallbacks( 9 new ConnectionCallbacks() { 10 void onConnected(Bundle bundle) {} 11 void onConnectionSuspended(int i) {} 12 }) 13 .addOnConnectionFailedListener( 14 new OnConnectionFailedListener() { 15 void onConnectionFailed(ConnectionResult result) {} 16 }) 17 .build(); 18 } 19 20 public void onStart() { googleApiClient.connect(); } 21 public void onStop() { googleApiClient.disconnect(); } 22 }
  • 7. Получение местоположения LocationServices.FusedLocationApi: 1 //доступен ли сервис? 2 LocationAvailability getLocationAvailability(GoogleApiClient client) 3 4 //последние закэшированные координаты 5 Location getLastLocation(GoogleApiClient client) 6 7 //работа с заглушками 8 PendingResult<Status> setMockLocation( 9 GoogleApiClient client, Location mockLocation) 10 PendingResult<Status> setMockMode( 11 GoogleApiClient client, boolean isMockMode) 12 13 //подписки 14 //Стартуем запрос обновлений и получаем через callback 15 PendingResult<Status> requestLocationUpdates(GoogleApiClient client, ...) 16 //Останавливаем запрос обновлений, нужно делать в onStop 17 PendingResult<Status> removeLocationUpdates(GoogleApiClient client, ...)
  • 8. Особенности геолокации Геолокация очень затранта по работе с аккумулятором Рекомендуется устанавливать разумные таймауты и отключать геолокационные сервисы на время бездействия приложения Геолокация не всегда отдает точное положение, особенно для статичного объекта (погрешнрость GPS - порядка 50 метров, GSM - до километров) Google специально из соображений безопасности отдает положение в случае определния по GSM с большой погрешностью Холодные старт довольно долгий В Китае сложно пользоваться:)
  • 9. Что еще есть Google Places API: Это web-сервис Выбор и поиск мест Автодополнение адресов Поиск адреса по координатам и в радиусе Geofencing: GeofenceTransitionsIntentService Вам будут присылать, когда пользователь в нужно месте Activity Recognition: Распознавание активности: бег, ходьба, велосипед
  • 10. Как отобразить Google API for Android, компонент MapView Google Play Services, компонент MapFragment Yandex maps WebView + GoogleMaps/Bing Maps/Yandex Maps... 3rd-party libraries (OsmDroid, Mapsforge) - OpenStreetMaps, другие движки, можно написать коннектор к любому сервису Внешнее приложение (Waze, Google Maps, ...)
  • 11. Внешнее приложение 1 static String LOCATION_FORMAT = "geo:%.6f,%.6f"; 2 static String ZOOM_FORMAT = "geo:%.6f,%.6f?z=zoom"; 3 static String LABEL_FORMAT = "geo:0,0?q=%.6f,%.6f(%s)"; 4 static String QUERY_FORMAT = "geo:0,0?q=%s"; 5 6 String uri = String.format(ZOOM_FORMAT, latitude, longitude, zoom); 7 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); 8 startActivity(intent); * все строки должны быть закодированы (encoded) например "Noveo Group" будет "Noveo%20Group"
  • 12. WebView Особенности Перед нам все богатство всяческих веб-сервисов Загружаем нужную страницу, если необходимо - передаем через параметры позицию Минусы - вся работа через JavaScript WebView позволяет прицепить обработчики на Java к коду на JavaScript, но это ухудшает быстродействие. Сложнее писать свои дополнительные слои Как вызвать Кидаем Intent.ACTION_VIEW с Uri формата веб-сервиса. Обычно это похоже на uri для вызова внешнего приложения.
  • 13. Google Maps Подключаем Google Play Services. Регистрируем приложение: 1. Добавляем к приложению свой *.keystore (если нет - генерим новый с помощью keytool) 2. Регистрируем приложение в Google Developers Console 3. Создаем новый проект 4. В настройках (APIs & auth -> APIs) включаем Google Maps Android API v2 5. В настройках (APIs & auth -> Credentials) добавляем ключ для Public API access. Пригодятся сертификат из keystore и пакет приложения Добавляем API_KEY в AndroidManifest 1 <meta-data android:name="com.google.android.geo.API_KEY " 2 android:value="%API_KEY%"/>
  • 14. Google Maps Начиная с API v2, карты отображаются в фрагментах. 1 <fragment android:id="@+id/map" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" 4 class="com.google.android.gms.maps.SupportMapFragment"/> 1 MapFragment mapFragment = 2 (MapFragment) getFragmentManager().findFragmentById(R.id.map); 3 GoogleMap mapView = mapFragment.getMap(); 4 mapView.setMapType(GoogleMap.MAP_TYPE_HYBRID) 5 //and so on...
  • 15. Google Maps Можем включить отображение Спутник GoogleMap.MAP_TYPE_SATELLITE Гибрид GoogleMap.MAP_TYPE_HYBRID Улицы GoogleMap.MAP_TYPE_NORMAL Если эти прелести есть для данной локации Не надо беспокоиться насчет памяти - MapFragment выделяет память под картинки нативно, использует Bitmap pool. Если оно и решит сломаться, вы сможете только соболезновать. Можно делать оверлеи!
  • 16. Маркеры Отображаем какую-либо точку на экране, по нажатию - баббл с информацией. 1 Marker marker = googleMapView.addMarker(new MarkerOptions() 2 .position(new LatLng(55.049035f, 92.912304f)) 3 .title("Noveo city office") 4 .snippet("Lecture about Geodata"));
  • 17. Маркеры Можно переопределить у GoogleMap: .setOnMarkerClickListener(OnMarkerClickListener) — вместо показа баббла своё действие .setOnMarkerDragListener(OnMarkerDragListener) — на перетаскивание (по умолчанию не работает) .setOnInfoWindowClickListener(OnInfoWindowClickListener) — нажатие на баббл.
  • 18. Google Maps Можно очень классно управлять наклоном, поворотом, местоположением и анимацией. 1 private static final LatLng SYDNEY = new LatLng(-33.88,151.21); 2 private static final LatLng MOUNTAIN_VIEW = new LatLng(37.4, - 122.1); 3 4 private GoogleMap map; 5 6 map.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 15)); 7 map.animateCamera(CameraUpdateFactory.zoomIn()); 8 map.animateCamera(CameraUpdateFactory.zoomTo(10), null, 2000); 9 10 CameraPosition cameraPosition = new CameraPosition.Builder() 11 .target(MOUNTAIN_VIEW) 12 .zoom(17) 13 .bearing(90) 14 .tilt(30) 15 .build(); 16 map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
  • 19. Google Maps не всесильны Ограничения на бесплатное использование Лицензия >> Закрытый исходный код Привязано к гуглокартам Не все можно модифицировать Помогут сторонние библиотеки Mapsforge, OsmDroid, другие Идут в комплекте с коннекторами для других источников карт (OpenStreetMaps) Стараются повторять контракт гуглокарт (легче миграция) Можно подключить свой источник
  • 20. Тайловые карты Карта разбивается на квадратики В зависимосит от уровня зума обеще число квадратиков больше-меньше (пропорционально степеням двойки) В общих словах, мы должны просто реализовать метод, позволяющий для уровня зума N предоставить картинку для квадрата с координатами (X, Y). Движок сам управляет подгрузкой, пока более деталеьные изображения не загрузились, ресмэплит картинки другого масштаба.
  • 21. Полезные ссылки Android Location Android Adding Maps Google Maps OSMDroid Mapsforge