Урок 139. Google maps. Создание и настройка проекта. Карта, камера, события

Обсуждение уроков
Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Sebler » 21 апр 2014, 21:10

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

Я неправильно импортировал google-play-services_lib: General > Existing Project into Workspace (это неверно!)
Надо: Android > Existing Android Code into Workspace.

Кроме того, я обратил внимание, что перед импортом рекомендуется делать копию папки Google Play services library project в какую-нибудь другую директорию (описание в п.4: http://developer.android.com/google/pla ... setup.html)
Спасибо, своё решение я только что описал. Мне, к счастью, не пришлось шаманить с копированием папок и т.п. Вообще, я так понял, что если отображаются кнопки, но не карта, то проблема именно с ключом.

saman
Сообщения: 8
Зарегистрирован: 07 апр 2014, 17:13

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение saman » 21 апр 2014, 21:43

Хм. Спасибо за интересный опыт, пригодиться, по крайней мере всегда буду проверять. Коллективно получается проще разбираться)
А я тут задумался, если, например, не использовать Google maps, а сделать карту-подложку, то есть привязать её (фрагмент нужной области карты в виде отдельного файла) к координатам, тогда не нужен ключ и не нужен будет трафик из интернета, чтобы загружать карту. Она будет храниться в телефоне. Но при этом всё равно потребуются Goggle play services. Так?
По крайней мере использование предварительно загруженной карты при отсутствии необходимости подключения к Интернет здорово бы улучшили моё приложение, так что буду благодарен на комментарии.

Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Sebler » 23 апр 2014, 02:00

saman писал(а):Но при этом всё равно потребуются Goggle play services. Так?
Честно говоря я затрудняюсь однозначно ответить на этот вопрос. Я сам только учусь. Под андроид уже что-то писал, но с гуглкартами и т.п. сталкиваюсь впервые.

У меня тут возник следующий вопрос. Обращаюсь, конечно, не только к вам. Суть в следующем.
Я тут сделал активити с картой, набросал на неё маркеры, над картой поместил два текстовых поля "From" и "To" и кнопку "Navigate". При нажатии на ифоокне маркера сохраняются его координаты и отображаются названия маркеров в соответствующих тестовых полях.
Далее использую такой вод код при нажатии на кнопку "Navigate"

Код: Выделить всё

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://maps.google.com/maps?" + "saddr="+ latitudeFrom + "," + longitudeFrom + "&daddr=" + latitudeTo + "," + longitudeTo));

    intent.setClassName("com.google.android.apps.maps","com.google.android.maps.MapsActivity");
    startActivity(intent);
и у меня открывается сервис гугла, где он мне показывает как и на чём и за сколько минут я могу добраться от пункта к пункту указанных в моей активити. Т.е. по сути открывается другая программа со своим функционалом. Мне бы хотелось, чтобы как минимум, маршрут прокладывался бы моей программой самостоятельно, а не сторонними приложениями. Как это можно реализовать?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Donart » 23 апр 2014, 13:04

Sebler писал(а):Мне бы хотелось, чтобы как минимум, маршрут прокладывался бы моей программой самостоятельно, а не сторонними приложениями. Как это можно реализовать?
Вам сюда https://developers.google.com/maps/docu ... ons/?hl=ru
Реализация http://localhoster.blogspot.ru/2012/12/ ... -v2-4.html
В путь :)

nikicor
Сообщения: 2
Зарегистрирован: 26 янв 2014, 16:39

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение nikicor » 24 апр 2014, 14:41

Приветствую! Ребята, помогите! На эмуляторе приложение из этого урока запускается, карты отображаются, а когда устанавливаю apk на телефон, карты не отображаются, что делать, уже все перепробовал, ничего не получается!
Изображение

saman
Сообщения: 8
Зарегистрирован: 07 апр 2014, 17:13

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение saman » 24 апр 2014, 15:29

nikicor писал(а):Приветствую! Ребята, помогите! На эмуляторе приложение из этого урока запускается, карты отображаются, а когда устанавливаю apk на телефон, карты не отображаются, что делать, уже все перепробовал, ничего не получается!
Изображение
Выше обсуждалась эта проблема, посмотрите, может, какой-то из вариантов поможет.

nikicor
Сообщения: 2
Зарегистрирован: 26 янв 2014, 16:39

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение nikicor » 24 апр 2014, 15:55

saman писал(а):
nikicor писал(а):Приветствую! Ребята, помогите! На эмуляторе приложение из этого урока запускается, карты отображаются, а когда устанавливаю apk на телефон, карты не отображаются, что делать, уже все перепробовал, ничего не получается!
Изображение
Выше обсуждалась эта проблема, посмотрите, может, какой-то из вариантов поможет.
Нет, ничего не помогло=(

Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Sebler » 25 апр 2014, 03:23

Donart писал(а):
Sebler писал(а):Мне бы хотелось, чтобы как минимум, маршрут прокладывался бы моей программой самостоятельно, а не сторонними приложениями. Как это можно реализовать?
Вам сюда https://developers.google.com/maps/docu ... ons/?hl=ru
Реализация http://localhoster.blogspot.ru/2012/12/ ... -v2-4.html
В путь :)
С первой ссылкой я уже работал, а вот вторую не встречал. Спасибо. Есть ещё вопрос. Я сделал небольшой запрос маршрута и в параметрах указал travel_mode=walking, но он мне всё равно только для машины путь показывает. Т.е. как "travel_mode" : "DRIVING". Почему?
Далее пытаюсь нарисовать шаги (steps) на своей карте, и они рисуются, но прямыми линиями, а не так, как пролегает сама дорога, со всеми изгибами и т.п. Как это пофиксить, кто нибудь в курсе?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Donart » 25 апр 2014, 15:09

Sebler писал(а): Я сделал небольшой запрос маршрута и в параметрах указал travel_mode=walking, но он мне всё равно только для машины путь показывает. Т.е. как "travel_mode" : "DRIVING". Почему?
Так не скажешь, может запрос составлен неправильно, может страна. Так все работает.
Sebler писал(а): Далее пытаюсь нарисовать шаги (steps) на своей карте, и они рисуются, но прямыми линиями, а не так, как пролегает сама дорога, со всеми изгибами и т.п. Как это пофиксить, кто нибудь в курсе?
Не совсем понятно, у Вас просто прямые отрезки между точками? Вы декодируете полилинию из "points", и делаете ли это правильно?

Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Sebler » 26 апр 2014, 02:23

Donart писал(а):
Sebler писал(а): Я сделал небольшой запрос маршрута и в параметрах указал travel_mode=walking, но он мне всё равно только для машины путь показывает. Т.е. как "travel_mode" : "DRIVING". Почему?
Так не скажешь, может запрос составлен неправильно, может страна. Так все работает.
Sebler писал(а): Далее пытаюсь нарисовать шаги (steps) на своей карте, и они рисуются, но прямыми линиями, а не так, как пролегает сама дорога, со всеми изгибами и т.п. Как это пофиксить, кто нибудь в курсе?
Не совсем понятно, у Вас просто прямые отрезки между точками? Вы декодируете полилинию из "points", и делаете ли это правильно?
С типом маршрута разобрался. В запросе нужно писать просто mode, а не travel_mode.
А вот на счёт "points" не понятно. Да, у меня просто прямые линии между точками. Т.е. не между начальной и конечной, а все участки пути состоят из прмых отрезков, т.е. имеем ломаную на карте.
В той статье, которую вы выше приводили я не очень разобрался, а на "points" вообще не обратил внимания, потому что не понял, что там, как и зачем декодируется. Не могли бы пояснить? Может знаете пример по-проще?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Donart » 26 апр 2014, 11:00

Sebler писал(а): Не могли бы пояснить?
Вам нужно добратся в массиве "steps" в поле "polyline" до "points". Эти "points" и есть ваш точный(с изгибами) маршрут по шагам.
[syntax=java]
List<LatLng> polyline = new ArrayList<LatLng>();
JSONArray steps = response.getJSONArray("routes").getJSONObject(0).getJSONArray("legs").getJSONObject(0).getJSONArray("steps");

// проходим по массиву steps
for (int i = 0; i < steps.length(); i++) {

JSONObject polylineObject = steps.getJSONObject(i).getJSONObject("polyline");
// на каждом шаге декодируем последовательность символов из "points" вызывая наш метод decodePoly
List<LatLng> points = decodePoly(polylineObject.getString("points"));

polyline.addAll(points); // и уже значение этого List'а polyline можете отправлять на отрисовку линии
}[/syntax]
Где-то в коде наш метод decodePoly(если в нём что-то не понятно можете закрыть глаза и не смтреть :) ). Полилиния шифруется таким обраом
[syntax=java]
private List<LatLng> decodePoly(String encoded) {
List<LatLng> poly = new ArrayList<LatLng>();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;

while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;

shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;

LatLng p = new LatLng(lat / 1E5, lng / 1E5);
poly.add(p);
}
return poly;
}[/syntax]

Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Sebler » 27 апр 2014, 00:44

Donart писал(а): Вам нужно добратся в массиве "steps" в поле "polyline" до "points". Эти "points" и есть ваш точный(с изгибами) маршрут по шагам.
Большое спасибо. Метод decodePoly() действительно страшный. Не представляю сколько времени мне бы понадобилось, если бы пришлось разбираться самому. Потом всё равно, конечно, разучу его.

Пытаюсь построить на карте маршрут с использованием общественного транспорта. Получаю путь и из джейсона беру данные объекта bounds. Далее пишу такой код:

Код: Выделить всё

map.animateCamera(CameraUpdateFactory.newLatLngBounds(mapBorder, 500, 500, 0));
В итоге получаю нужную мне часть карты, но немного обрезанную по краям. Т.е. нужно хотя бы один раз нажать на кнопку минусзум, чтобы весь путь помещался на карте. Вижу, что это связано со значениями аргументов int width, int height из метода newLatLngBounds(). Они у меня наобум выставлены в 500 и 500. Метод newLatLngBounds() с двумя аргументами, который приведён в уроке, вообще не работает. Эклипс пишет, что нужно установить размеры карты. Но что-то никак не разберусь, какие именно размеры подставить и как их корректировать относительно длины пути. И нужно ли выбирать размеры под каждое устройство. Т.е. приложение может быть запущено на смартфонах с разным размером экрана, а может вообще на планшете. Может надо как-то относительно реального разрешения устройства размер карты выставлять?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Donart » 27 апр 2014, 10:50

[syntax=java]map.animateCamera(CameraUpdateFactory.newLatLngBounds(mapBorder, 500, 500, 0));[/syntax]
Вы вызываете только метод newLatLngBounds, а в него еще надо передать объект LatLngBounds с Вашими координатами
Используйте пример из урока, передайте координаты из southwest и northeast.
[syntax=java]CameraUpdateFactory.newLatLngBounds(new LatLngBounds(new LatLng(latSouthwest, lngSouthwest), new LatLng(latNortheast, lngNortheast)), 500, 500, 100);[/syntax]
Но лучше использовать другую его реализацию без указания размера прямоугольника.
[syntax=java]CameraUpdateFactory.newLatLngBounds(new LatLngBounds(new LatLng(latSouthwest, lngSouthwest),new LatLng(latNortheast, lngNortheast)), 100);[/syntax]

Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Sebler » 27 апр 2014, 14:34

Donart писал(а):
Вы вызываете только метод newLatLngBounds, а в него еще надо передать объект LatLngBounds с Вашими координатами
Используйте пример из урока, передайте координаты из southwest и northeast.
Но лучше использовать другую его реализацию без указания размера прямоугольника.
CameraUpdateFactory.newLatLngBounds(new LatLngBounds(new LatLng(latSouthwest, lngSouthwest),new LatLng(latNortheast, lngNortheast)), 100);[/syntax]
Так я всё так и делал. mapBorder это и есть LatLngBounds. Вот код:

Код: Выделить всё

		@Override
		protected void onPostExecute(Void result) {
			super.onPostExecute(result);
			RoutePolyline rp = new RoutePolyline(httpResponse);
			
			try {
				polylinePoints = rp.getPolylinePoints();
				mapBounds = rp.getMapBounds();
			} catch (JSONException e) {
				e.printStackTrace();
			}
			map.addPolyline((new PolylineOptions().color(Color.BLUE).width(5)).addAll(polylinePoints));

			LatLngBounds mapBorder = new LatLngBounds(new LatLng(mapBounds.get("minLat"), mapBounds.get("minLon")), new LatLng(mapBounds.get("maxLat"), mapBounds.get("maxLon")));

			map.animateCamera(CameraUpdateFactory.newLatLngBounds(mapBorder, 25));

			
			Toast.makeText(MainActivity.this, "End", Toast.LENGTH_SHORT).show();
		}
Странность заключается в том, что теперь всё работает, а вчера не работало.
Когда я использовал пример из урока, т.е. без указания размеров карты, то получал ошибку с сообщением "map size should not be 0". В сети нарыл, что нужно использовать newLatLngBounds() с четырьмя аргументами, чтобы избежать этой ошибки, именно поэтому и применял его.
В любом случае, спасибо. Предстоит ещё с выбором кратчайшего пути поработать.

Sebler
Сообщения: 30
Зарегистрирован: 17 апр 2014, 17:50

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Sebler » 01 май 2014, 03:57

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

И ещё вопрос по парсингу джейсона. Как правильно обработать случай, когда я запрашиваю из джейсона поле или объект, а его там нет. Джейсон просто выдаёт JSONException, но если в части try я делал вызов разных объектов, то обработка будет прервана на первом же эксепшене, хотя остальные объекты может и присутствовали.
Вот пример кода:

Код: Выделить всё

			
try  {
	JSONObject bounds = route.getJSONObject("bounds");
        JSONObject bounds_southwest = bounds.getJSONObject("southwest"); 
        JSONObject bounds_northeast = bounds.getJSONObject("northeast");

	}
catch(JSONException e) {
        e.printStackTrace();
}
System.out.println(" " + bounds + " " +  bounds_southwest + " " + bounds_northeast);
Допустим объект bounds_southwest отсутствует в джейсоне. Тогда на экарне мы получим только значение объекта bounds не смотря на то, что объект bounds_northeast был в джейсоне. Как этого избежать?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Donart » 01 май 2014, 10:42

Sebler писал(а):А хотелось бы, чтобы пеший путь маршрута рисовался бы другим цветом.
PolylineOptions().color(Color.RED)
Допустим объект bounds_southwest отсутствует в джейсоне. Тогда на экарне мы получим только значение объекта bounds не смотря на то, что объект bounds_northeast был в джейсоне. Как этого избежать?
Интересно что это за значение у bounds. Если bounds_southwest там отсутсвует, значит и bounds_northeast там нет, значит bounds = null. Если Вы использете direction API в ответе JSONa есть start_location и end_location, но нельзя посылать к direction API одну точку, изпользуйте для этого другие запросы.

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Kordan » 07 май 2014, 13:00

Изображение
Собственно возникают такие проблемы :( .

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение klblk » 07 май 2014, 13:29

все же написано красными буквами. Ошибка в main.xml

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Kordan » 07 май 2014, 13:43

Вот только где именно я понять не могу. В самом main ничего не выделяется, но в MainActivity ругается на R.
П.С: Проект удалил, попробую заново переделать, может упустил что.
П.П.С: При создании проекта сразу имеется куча методов и реализуется вывод надписи "Hello World". Часть из этих методов я удалял, возможно ошибки связаны именно с этим.

Аватара пользователя
Kordan
Сообщения: 36
Зарегистрирован: 07 май 2014, 12:51

Re: Урок 139. Google maps. Создание и настройка проекта. Кар

Сообщение Kordan » 07 май 2014, 16:50

Пересоздал проект, внимательно прошёлся по всем пунктам. Косяков при компиляции и экспорте в апк нет, но при запуске на телефоне выдаёт что процесс внезапно остановлен.

Ответить