Ios яндекс карты: Яндекс.Карты для iOS, Android и Windows Phone — маршруты, пробки и схемы более 1800 городов

Содержание

Запуск iOS‑приложения Яндекс.Карты — Технологии Яндекса

Информация, приведенная в этом разделе, актуальна для мобильного приложения Яндекс.Карты версии 7.1.1 и выше.

Мобильные Яндекс.Карты для платформы iOS можно запустить из приложения на Objective‑C или со страницы, отображаемой в браузере. Для запуска используется URL-схема yandexmaps. При запуске приложение Яндекс.Карты может выполнить следующие действия.

  1. Открыть карту
  2. Поставить метку
  3. Найти объекты
  4. Открыть карточку организации
  5. Показать «Что здесь?»
  6. Построить маршрут
  7. Показать панораму в заданной точке

Показать карту можно с помощью URL вида:

yandexmaps://maps.yandex.ru/?{параметры}
Параметр Тип данных Описание

ll

float,float

Координаты центра карты (долгота, широта).

z int

Масштаб карты. Задается целым числом от 1 до 18, где 1 — наименее подробный масштаб (весь мир), а 18 — наиболее подробный из возможных.

spn float,float

Область показа. Через запятую указывается размер области по долготе и широте (в градусах). Например, чтобы задать область показа шириной 10,5 градусов, нужно указать: spn=10.5,10.5.

Центр области показа задается с помощью параметра ll (центр карты).

Если уже задан параметр z (масштаб), то spn игнорируется.

l string

Тип карты и информация о пробках.

Тип карты: map (схема), sat (спутник), skl (гибрид), pmap (народная карта).

Показать загруженность магистралей: trf (слой «пробки»). Можно указать только слой пробок или комбинировать этот слой и тип карты. В этом случае значения параметра указываются через запятую. Например: l=map,trf.

Примечание. Если параметры карты в URL не переданы, будут использоваться параметры предыдущей пользовательской сессии.

Пример URL:

yandexmaps://maps.yandex.ru/?=30.310182,59.951059&=12&=map

Пример HTML‑ссылки:

<a href="yandexmaps://maps.yandex.ru/?=30.310182,59.951059&=12&=map">Карта Санкт-Петербурга</a>

Пример Objective‑C вызова:

[[UIApplication sharedApplication] openURL:
 [NSURL URLWithString:@"yandexmaps://maps.yandex.ru/?=30.310182,59.951059&=12&=map"]];

Показать карту с меткой можно с помощью URL вида:

yandexmaps://maps.yandex.ru/?{параметры}
Параметр Тип данных Описание
pt float,float

Координаты метки (долгота, широта).

Если параметр (центр карты) не задан, карта центрируется в точке, указанной в pt.

Пример URL:

yandexmaps://maps.yandex.ru/?=30.335429,59.944869&=18&=map

Пример HTML‑ссылки:

<a href="yandexmaps://maps.yandex.ru/?=30.335429,59.944869&=18&=map">Летний сад</a>

Пример Objective‑C вызова:

[[UIApplication sharedApplication] openURL:
 [NSURL URLWithString:@"yandexmaps://maps.yandex.ru/?=30.335429,59.944869&=18&=map"]];

Показать объекты, расположенные в заданной области карты, можно с помощью URL вида:

yandexmaps://maps.yandex.ru/?{параметры}
Параметр Тип данных Описание
text string

Текст поискового запроса.

Чтобы задать область поиска, укажите центр карты и уровень масштабирования или область показа. Если область поиска не задана, будут использоваться параметры предыдущей пользовательской сессии.

Пример URL:

yandexmaps://maps.yandex.ru/?=30.310182,59.951059&=16&=кафе%20с%20wi-fi

Пример HTML‑ссылки:

<a href="yandexmaps://maps.yandex.ru/?=30.310182,59.951059&=16&=кафе%20с%20wi-fi">Показать кафе с wi-fi</a>

Пример (задан центр карты и область показа 0,05x0,05 градуса):

NSURL *url = [NSURL URLWithString:[@"yandexmaps://maps.yandex.ru/?=30.310182,59.951059&=0.05,0.05&=кафе с wi-fi" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];

Показать карточку организации можно с помощью URL вида:

yandexmaps://maps.yandex.ru/?{параметры}
Параметр Тип данных Описание
oid int

Уникальный идентификатор организации в приложении Яндекс.Карты.

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

Пример URL:

yandexmaps://maps.yandex.ru/?=1184371713

Пример HTML‑ссылки:

<a href="yandexmaps://maps.yandex.ru/?=1184371713">Музей советских игровых автоматов</a>

Пример Objective‑C вызова:

[[UIApplication sharedApplication] openURL:
 [NSURL URLWithString:@"yandexmaps://maps.yandex.ru/?=1184371713"]];

Чтобы открыть карточку объекта, находящегося в заданной точке, используйте URL вида:

yandexmaps://?{параметры}
Параметр Тип данных Описание
whatshere[point] float,float

Координаты объекта.

Объектом может быть, например, улица, остановка общественного транспорта, организация.

whatshere[zoom] float,float

Масштаб карты. Задается целым числом от 1 до 18, где 1 — наименее подробный масштаб (весь мир), а 18 — наиболее подробный из возможных.

Пример URL:

yandexmaps://?=37.444075,55.776788&=17

Пример HTML‑ссылки:

<a href="yandexmaps://?=37.444075,55.776788&

Новые Карты для iOS — Блог Яндекса

24 ноября 2015, 12:00

Сегодня мы обновили Яндекс.Карты для iOS. Это самое крупное обновление приложения за последнее время. Мы улучшили поиск организаций, добавили фотографии мест и отзывы пользователей. Теперь Яндекс.Карты можно использовать как путеводитель по заведениям любого рода — от заправок до ресторанов.

Прежде всего, в приложении появились фильтры, упрощающие поиск организаций. С их помощью вы легко отыщете подходящее место — например, круглосуточные аптеки или кафе с американской кухней и wi-fi. Найденные объекты будут по умолчанию показаны и на карте, и списком. Вы можете отсортировать их так, чтобы увидеть ближайшие места или самые лучшие (с наиболее высоким рейтингом).

Окончательный выбор помогут сделать фотографии мест и отзывы пользователей, которые появились в карточках организаций. Здесь есть мнения не только пользователей Яндекса, но и посетителей других сайтов. Вы можете добавить к ним свой отзыв и оценить заведение. В карточке теперь указано также, сколько времени должно уйти на дорогу до места. Это тоже помогает решить, куда лучше отправиться. Понравившиеся заведения можно сохранять, а также составлять из них списки: они будут доступны и на maps.yandex.ru, и в приложении для iPhone и iPad.

Допустим, место выбрано. Осталось понять, как до него добраться. Для этого достаточно нажать на кнопку построения маршрута. В новых Яндекс.Картах варианты проезда представлены более наглядно, чем раньше. Автомобилистам приложение теперь показывает на карте сразу несколько вариантов проезда (конечно, если есть альтернатива). А для тех, кто перемещается на общественном транспорте, мы сделали подсказки более заметными.

Конечно, поиск и выбор мест невозможен без хорошей базы организаций. В последнее время мы её заметно расширили. Сейчас в ней 3,3 миллиона заведений из четырёх стран: России, Украины, Казахстана и Беларуси. Чтобы поддерживать базу в актуальном состоянии, мы обновляем её каждый день. Данные получаем из разных источников: извлекаем из интернета, узнаём напрямую от владельцев бизнесов и наших пользователей.

Новые Яндекс.Карты для iPhone и iPad доступны в App Store. Кстати, они поддерживают новые возможности iOS 9, watchOS 2 и последних моделей iPhone и iPad. В iOS 9 вы можете найти организации, которые недавно открывали в Картах, с помощью встроенного поиска устройства. На iPhone 6S и iPhone 6S Plus можно в одно касание перейти к маршрутам до дома и работы, сохранённым местам и поиску организаций поблизости — достаточно сильно нажать на иконку приложения.

Добавлено 9 февраля 2016 года. Сегодня мы обновили приложение Яндекс.Карт для Android. В нём появились фильтры для выбора организаций, фотографии мест и синхронизация избранного с maps.yandex.ru и мобильными приложениями для устройств на iOS и Android. Кроме того, мы полностью переделали интерфейс приложения, особенно это заметно при работе с маршрутами. Посмотрите сами — скачать новые Карты для Android можно в Google Play.

Новые легкие Яндекс.Карты с поиском в офлайне для iOS и Android — Блог Карт

29 марта 2016, 14:12

Сегодня мы обновили Яндекс.Карты для iOS и Android. Теперь поиск в приложении работает даже без доступа в сеть. Это пригодится, если на мобильном счету вдруг кончились деньги или вы оказались в роуминге или в месте, где нет сигнала сотовой сети.

В офлайн-режиме можно искать адреса, топонимы и организации: кафе, магазины, банкоматы, аптеки, АЗС и так далее. Карты не только покажут, где находится организация, но и сообщат подробности: часы работы и телефон. Если вы ищете гостиницу, приложение укажет примерную стоимость номеров, а если ресторан — то средний чек. И всё это — без интернета: необходимо лишь заранее сохранить на устройство карту нужного города или региона.

Просмотр информации об организациях в офлайн-режиме

Несмотря на то, что у офлайн-карты теперь больше возможностей, весить она стала гораздо меньше. Скажем, карта Москвы занимает всего 144 МБ вместо 1,9 ГБ, а карта Питера и Ленобласти — 231 МБ вместо 3,2 ГБ. Сделать карту легче удалось за счёт перехода на новый формат: вместо растровых карт в приложении используются векторные. Особенность векторной графики — возможность масштабировать картинку без потери качества; благодаря этому не нужно сохранять несколько вариантов одной и той же карты в разных масштабах.

Сохранение карты

Наконец, мы добавили в приложение несколько функций, которые упрощают работу с картой. Во-первых, угол наклона карты можно менять — для этого достаточно провести двумя пальцами по экрану. Это поможет, например, сориентироваться на улице, по которой вы собираетесь пройти или проехать. А во-вторых, названия улиц теперь видны всегда — даже если в Картах включены пробки или проложен маршрут.

Загрузить новые Яндекс.Карты можно в App Store и Google Play. При обновлении приложения карты, сохранённые в память ранее, будут удалены. Вам потребуется скачать их ещё раз — зато в результате свободного места на устройстве будет гораздо больше.

Новые Яндекс.Карты для iOS – c маршрутами общественного транспорта — Блог Яндекса

 

Сегодня в App Store обновились Мобильные Яндекс.Карты для iOS. 

Первое изменение бросается в глаза сразу – это дизайн. Мы стараемся делать дизайн не просто для красоты, а решать с помощью него важные задачи. Так, при отображении результатов поиска мы расширили область карты – так удобнее просматривать результаты. И еще пример – теперь возможен одновременный просмотр результатов поиска и пробок. Это пригодится вам, например, если вы ищете аптеку, находясь в автомобиле.

 

Самое крупное обновление – это построение маршрутов на общественном транспорте. Сегодня посмотреть, как лучше доехать от одной точки в городе до другой, могут жители 31 города России и 7 городов Украины (список смотрите в «Помощи»). 

 

У жителей Казани и Нижнего Новгорода есть возможность не только планировать маршрут, но  и увидеть движение транспорта в режиме реального времени прямо на экране телефона. Другими словами – вы прямо в телефоне видите, как скоро к вам придет автобус.

Кроме того, мы улучшили дизайн справочника с категориями организаций, он стал более понятным, в нем появилась вкладка «История поисков» – там вы увидите ваши предыдущие запросы.

Обладателей аппаратов с дисплеем Retina ждёт еще один приятный сюрприз: карты Москвы теперь отображаются в высоком разрешении. Мы планируем добавлять в HD-качестве и другие карты городов.

Скачать новую версию Мобильных карт можно в App Store по ссылке или отсканировав QR-код.

Команда Яндекс.Карт

 

 

Яндекс.Навигатор для смартфонов и планшетов на Android и iOS

Яндекс.Навигатор

Маршруты с учётом пробок и помощь в поиске парковки
Приложение прокладывает маршруты на автомобиле по GPS и подсказывает голосом нужные манёвры. При подключении к интернету Навигатор учитывает пробки и дорожные события. Также понимает голосовые команды и знает, где припарковаться в городе. Работает в России, Абхазии, Азербайджане, Армении, Беларуси, Грузии, Казахстане, Киргизстане, Молдове, Таджикистане, Турции, Узбекистане и Украине.

‎App Store: Яндекс.Навигатор – GPS, Пробки

Навигатор Яндекса помогает водителям быстрее добраться до цели. Приложение прокладывает маршрут с учётом ситуации на дорогах — знает о скоростном режиме на разных участках, а также о пробках, авариях, ремонтных работах и камерах. На выбор предлагается до трёх вариантов проезда, начиная с самого быстрого. Если маршрут проходит по платному участку, приложение предупредит и об этом.
Во время поездки Навигатор подсказывает манёвры голосом и показывает их на экране. Кроме того, всегда видно, сколько осталось ехать — в минутах и километрах.
Строить маршруты можно не только онлайн, но и офлайн. Навигация без интернета будет доступна, если вы заранее скачаете карту города или региона в настройках приложения. Искать организации также можно будет офлайн.

За голосовое управление в Навигаторе отвечает Алиса — к ней вы можете обратиться по любому поводу. Скажите «Слушай, Алиса» или нажмите кнопку с микрофоном в левой части экрана — и она выйдет на связь. Например: «Слушай, Алиса» — «Поехали домой» или «Построй маршрут до аэропорта Домодедово». Таким же способом вы можете сообщать Навигатору о дорожных событиях («Здесь авария») — чтобы он отметил их на карте.
Алисе можно задавать самые разные вопросы. Произнесите «Какой штраф за превышение скорости?» или «67 — это какой регион?» — и вы сразу узнаете ответ.
Алиса охотно играет с детьми и со взрослыми в города и слова, загадывает актёров и даже гадает. Скажите ей «Давай поиграем» и выберите, что хотите делать.

Для ещё большего удобства Навигатор помнит историю пунктов назначения. Можно, например, ввести адрес и прикинуть маршрут вечером, а наутро просто выбрать цель поездки из списка. История и избранное сохраняются в облаке и доступны на всех ваших устройствах, чтобы не теряться.

Приложение работает в России, Абхазии, Азербайджане, Армении, Беларуси, Грузии, Казахстане, Кыргызстане, Молдове, Таджикистане, Турции, Узбекистане и Украине.

Рассказать о впечатлениях от приложения, сообщить о недочётах и предложить новые функции можно письмом на адрес [email protected]

* Продолжительное использование GPS в фоне может значительно cократить срок службы батареи.

Сказ о том как я Yandex MapKit на iOS обновлял или карты, деньги, 2 мапкита / Хабр

Предисловие

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

Встроили мы как-то раз в приложение Яндексмапкит (октябрь 2017 года примерно) вместо эпловых карт (ничего личного — только бизнес). Через месяца 3 в один прекрасный зимний день Андройд версия карт вышла из строя на дня 2 из-за ключей, карта просто превратилась в тыкву) На что в чатике от руководства проскочило: “на андройде карты сломали, починить не знают как” В то время, как iOS-клиента это не коснулось. Бедолаги на андройде… на этот раз ребята были не причем ведь. В те дни упали многие прилаги: почта России, Утконос, может помните, ребята?

Это я к тому, что когда ваше приложение завязано на сторонние сервисы, то неплохо бы иметь план “Б” на этот случай, например переключить на предыдущий вариант реализации карт от Apple, а не заменять один на другой…

Еще через месяца 3, где-то в марте от Яндекса прилетело письмо, что наконец-то обновили они sdk, (прошло совсем немного времени, года 4-5 с предшествующего обновления):

«-Обновляйтесь, через год старый отключим», вкратце. До этого просто была старая версия 1.0


Ну, мы, конечно, после такого предупреждения, тянуть не стали и сразу начали переход…через 3 месяца)) в августе.

Этап “комментирования” !(отключения функционала)

Вы скажите, ха…че там обновляться, pod обновил, пару мест поправил да и всё. Так вот нет, ребята, новое API карт абсолютно не совместимо со старым, и более того, как выяснилось позже, там даже отсутствует много жизненно необходимого, что есть из коробки в старой версии и других карточных библиотеках!

Итак, mapkit 3.0 (пока писал статью вышла версия 3.1), ссылка на документацию.

А зачем помимо предупреждения от яндекса? А тем временем на бета-версии Xcode 10 проект со старым китом тупо не собирается, так как используется либа С++ где-то внутри, которая деприкейтед в новой версии. Нужно в подспеке переименовывать ее, чет там обновлять и т.д., короче я не стал этим заниматься, так как в итоге все равно нужно обновляться

1) Обновляем sdk, вместо версии 1.0 сразу 3.0, естественно API поменялось, но чтоб настолько….

Итак старый YMKAnnotation Protocol просто отсутствует

В свифте это выглядит как форсанврапнутый стриг(: что не гуд, да и обращаться потом таская “!” знак такое себе… Пример реализации протокола:

Что ж, напишем заново) свой, только вместо метода coordinate() сделаем свойства, тут все просто, метод избыточен; title!() заменяем на нефорсанврапнутый title(), с другой стороны можно сделать свойство, ну да много, где в проекте менять придется, поэтому просто восклицательный знак пока убрал.

В нашем проекте заменить нужно было в 3х контроллерах пару раз, еще в одном импортировать CoreLocation, так как теперь он не импортируется ни в одном из хедеров мапкита от Яндекса.

Чтоб не ренеймить по всему проекту привычный YMKMapCoordinate (старый кит) сделал typealias для YMKPoint (новый кит)

2) Также давайте объявим несколько свойств, которые нам понадобятся в дальнейшем для работы с картой, в основном это геттеры:

3) Первое, что нужно создать — это YMKMapView (с ним все ок, такой объект по-прежнему доступен). Ранее я его инициализировал сходу, теперь так делать нельзя, будет краш, так как сначала нужно ключ поставить! Текущий ключ не подойдет и нужно просить новый. Добавляем в AppDelegate, согласно документации. Только после установки ключа, можем создать YMKMapView и сконфигурировать необходимым нам образом в методе setupMap()

Что здесь происходит, детально разберем позднее по ходу необходимости в соответствующих настройках

4) Что дальше?, а дальше у нас была начальная локация CLLocation, но теперь для использования нужно добавить фреймворк CoreLocation вручную, или… или заменить на YMKPoint из мапкита от Яндекса

5) Дальше у нас центрировалась карта по этой координате очень простым методом, но теперь простого нету

Зато есть чуть сложнее и чуть поглубже, у объекта map ) … mapView.mapWindow.map!.move. Тут мы узнает о существовании такого объекта как YMKCameraPosition.

6) Далее комментим конфиг карты, так как такого api/свойств уже нету. Сейчас мы это просто опускаем, чтобы хоть минимально запуститься.

Комментим добавление аннотаций, (обращу внимание, что это стандартный функционал), также комментим показ ближайших пунктов (это уже какой-то наш функционал).

И весь YMKMapViewDelegate тоже комментим, который я в новом фрэймворке не нашел и схожий аналог тоже.

Реализацию опустил, только сами методы:

— нужно ли отображать локацию пользователя,

— какие вьюхи использовать для пинов,

— реакция на нажатие на аннотацию,

— какие каллауты для аннотации,

— реакция на нажатие на каллаут, т е все чем обычно пользуемся. В конце был какой-то наш метод, который также использовал определенное АПИ карт.

ВСЁ, c MapVC разобрались — это основной класс, где использовался мапкит

7) Немного закомментим кастомный каллаут, больше он YMKCalloutView не наследует, нет такого больше в новом ките.

Ура, теперь проект собрался, я смог все запустить и… увидеть тетрадь в клеточку, потому что после того, как он заведется, нужно дать время на “прогрев”)), но об этом я не знал и подумал, что что-то не так, хотя предположил, что нужно время для активации ключа. Оказывается, предположение было верным. Подождать нужно примерно часик (может что-то и поменялось теперь).

С очередной попыткой модификации старого апи на новый лад карта отобразилась.

Этап второй — “поиск” (как реализовать старый функционал по-новому)

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

Теперь это делается через слой, смотри метод setupMap() пункт 3.

Пример подсмотрим в демо (качаем с гитхаба яндекса), благо, что он там есть. Кстати, обратить нужно внимание на setAnchorWith. Позже скажу почему, связано с зумом. Окей локация работает.

2) Что дальше, ну конечно, аннотации. По-старому добавить нельзя, смотрим в демо опять. Там есть класс — MapObjectsViewController. В новой версии, чтобы добавить пины на карту, делегат не нужен, для этого необходимо обращаться к свойству mapObjects, вызывать на объекте метод addPlacemark, ну и передать туда координату (есть еще другие перегрузки) Пример:

Итерируемся по коллекции аннотаций (например, после получения с сервера) и добавляем по одной на карту. Метод, кстати, возвращает “placeMark” (метку места), которую и с помощью которой можно сделать доп настройку, например, изменить порядок отображения через zIndex свойство.

Тут, правда, я упустил момент, что перед этим я полез искать делегат и благополучно его не нашел и ни одного делегата вообще (на самом деле они просто по-другому стали называться, теперь это слушатели). Я же знаю из предыдущего опыта с эпловским китом, да и старым китом яндекса, что аннотации переиспользуются, все как с ячейками, но в демо есть только addPlacemark. На вопрос к лиду Яндекс-карт (тут помогло небольшое личное знакомство) “- Как оптимизировать использование памяти, переиспользовать объекты?” Ответ: “А зачем, итак нормально работает”… ну вроде да, работает.

Примечание: 1) Важно отметить, что Яндекс.Карты используют мапкит, а не разрабатывают его. Это делает команда мапкита (ник Николая на хабре — [email protected]).

2) Объяснение почему объекты не переиспользуются:

В старом ките annotationView были вьюхами, их создавал пользователь, и конечно вьюхи нужно переиспользовать, потому что их создание недешево. В новом ките плейсмарки создаются мапкитом прямо в open GL. И возможно они там и реиспользуются, но это неточно. В любом случае это намного эффективнее, чем создание вьюх.

3) Из новенького, кстати, есть возможность модификации иконки аннотации для пользователя. Реализовано так: нужно добавить слушателя ( аналог делегата), реализовать соответствующий протокол — 1 из 3-х методов, 2-ва просто оставить пустыми.

Заодно перезагрузим placeмark-и с нашими иконками.

Также, обращу ваше внимание на свойство анкор. Нажав на карте кнопку локации юзера, камера перемещает фокус в центр локации. Но вот беда, повторное нажатие действия не производит. Чё? Комментим метод анкер и все работает.

4) Теперь нужно показать каллаут, соответственно отработать нажатие. Есть несколько методов в интерфейсах, правильный — это YMKMapObjectTapListener. Tам есть 1 важный интересный метод, с которым пришлось еще намучиться позже, он возвращаем true, чтоб дальше не интерироваться, если найден подписчик. Обращаю внимание, нужно подписаться сначала, подписываться будет mapObjects (линия 149).

Итак нажатия отрабатывает. Ура. Еще, правда, были попытки отображения пинов только в видимой зоне, это лишнее, показывайте все сразу, поэтому оставим (как раз потому что не тормозит)

5) Потом захотелось для удобства сделать кнопки zoom in/out. Немного копипаста и правок по аналогии с кнопкой локации, и готово.

Дальше, так как знаем о камере, используя метод move и соответственно текущий зум +- 1 или 0.5, сколько вам нужно. Тут все нормально.

6) Переходим к основному функционалу — коллаут (это такой прямоугольник с доп инфой, с треугольничком внизу). Тут выясняется, что API нет («опьяняет летом» — распознал мою речь Яндекс, когда я читал пометки с листочка, чтоб не набирать вручную эту статью).

Как, ребята? 100 500 приложений юзают коллаут.

Хорошо пишем в “тех поддержку” (Коле) как это сделать в ручную, узнаю. Какие у вас варианты?

Конвертить вьюху в картинку, так как напрямую вьюху добавить нельзя (добавали ф-л в 3.1), менять иконку…

Вот такие вот костыли получается на ровном, казалось месте.

На самом деле не костыли, конечно, а просто отсутствие считаю базового функционала

7) Ладно, давайте для начала добавим тестовый каллаут, в качестве такового используем красный квадрат. Итак, по нажатию на наш пин вызывается метод делегата/ слушателя, куда и передается точка нажатия и объект. Не ожидая подвоха, берем “point” в качестве точки куда нужно добавить коллаут. (Внимание, все ли правильно сделано: “Нажали, взяли точку, привязали”? Ок 80% ответили правильно, 20% — нет)

И вызовем в теле метода вспомогательный метод showCallout:

строка 544

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

Далее объявляем “нажимаемую” область tappableArea, есть такое свойство у стиля иконки для пина. О неплохо, можно ограничить зону нажатие, так и сделаем. Зона варьируется от 0.0 до 1.1. нам нужна нижняя часть, где якобы кнопка, которую трансформировали в картинку до этого (помним). Окей, значит зона (0,0.5 — 1.1) так как кнопка внизу находиться.

Ограничение зоны работает, но есть нюанс, да такой, что все сводит на нет. Если под ненажимаемой областью другой пин, то нажатие сработает на нем. Смысл этой области? Сделали б флаг что ли, чтобы нажатие не проходило. Ладно…

550 строка

создадим стиль для иконки, можно сразу в первом параметре указать позицию анкора, я для примера сделал ниже на 557 строке. Позиция у равна 1.05, чтобы поднять треугольник над пином опять же по вертикали

559 строка

создаем наш кастомный коллаут определенного размера,

конфигурируем необходимые нам поля с помощью информации из выбранной аннотации selectedAnnotation, в частности тайтл и сабтайтл, надпись на кнопке у этого коллаута. Тут вы сами что хотите, то и можете делать. Выбранную аннотацию определяем ранее в делегате. Но на карту пока добавляем созданный ранее красный квадрат

Далее в коллекцию mapObjects добавляем пин, метод вернет нам добавленный плэйсмарк, сохраним его в переменную,

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

Нюансы: Переменная плэйсмарк является указателем на каллаут.

Сначала у нас его нет, после нажатия на пин, он появляется, после нажатия на следующий пин, нам нужно удалить наш первый коллаут и добавить новый. Поэтому, если переменная placemark != nil, нужно из коллекции mapObjects удалить старый коллаут)

Также в случае тапа на карту нужно скрыть коллаут, поэтому в методе делегата присваиваем placemark, срабатывает обзервер, коллаут удаляется, плюс очищаем выбранную аннотацию

Для этого мы и подписывались ранее на YMKMapInputListener

В свою очередь метод конвертации вьюхи выглядит следующим образом.(В версии 3.1 добавили возможность добавлять вьюхи на карту)

Как делать вьюху не описываю), но если будет много проблем(с треугольником возможно) с этим, то пишите, добавлю и этот этап

Магическая 20-ка, добавленная к высоте, нужна для места под треугольник внизу, который тож придется рисовать

Еще мы хотим, чтобы popup всплывал (был привязан) к пину в определенном месте (слева, справа, в середине), для этого есть свойство анкор. Определял так:

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

Вспомогательная функция для проверки, попадает ли точка в регион:

Старт. Работает. Но здесь есть нюанс, казалось бы, пробуем зумить, раз, два, три и коллаут улетает от пина. Чё? Как?

7) Начинаем debug, координаты совпадают

Потом были попытки понять что происходит и как это работает, очередное возвращение в демо, еще более внимательный поиск отличий…

Замечаю, что координата передаются напрямую, а не та, что по тапу! Но ведь я же дебажил, видно что координаты те же, то есть круг и квадрат имеют одну и ту же координату.

Вот поэтому в методе сразу не обратился к объекту, а передавал point, что неверно.

А нужно, кастить объект, брать свойство (везде все по-разному называется, то coordinate, то point, тут вот теперь geometry) это такой креатив или как)? 493 строчка

Так как нам надо обработать два варианта нажатия: первый на пин, второй на коллаут, и не обрабатывать нажатия, если повторно нажали на один и тот же пин, то первое, что делаем — это находим пин на который мы нажали в коллекции пинов, сравнивая координаты 495 строка, иначе возвращаем true, тем самым говоря, что нажатие мы обработали и дальше по иерархии не надо идти

Второе: это определяем нажали мы на пин или на коллаут, сравним также координаты меток 499 строка. Проверка на равенство:

Далее если это коллаут и мы хотим реагировать на нажатие на кнопку(или имитировать, так как теперь это картинка), а не на всю область, то нужно ручками произвести некоторые расчеты:)

  1. Конвертируем мировую координату в экранную 501 строка

    Считаем сами: конвертим координаты карты в экранные, анкор ведь знаем где расположен, потом добавлением ширины и высоты вьюхи, получаем угловые точки, но почему то они не совпадают и я вручную умножал на три, в моем случае для 10го айфона)). Как потом выяснилось, я забыл и не учел количество пикселей на точку. Которых может быть у нас 1х, (одна точка 1 пиксель), 2х, 3х одна точка это три пикселя.
  2. Вычислим высоту кнопки — высота коллаута + высота треугольника, умноженная на масштаб, информация о scale (строка 498). Далее делим все это на два, так как высота кнопки составляет половину от высоты коллаута
  3. Потом вычисляем координаты углов, исходя из того, что анкор (х: 0.5, у: 1), учитывая масштаб и зону треугольника))
  4. Затем эти экранные координаты конвертим в мировые
  5. Создаем видимую область на их основе, представляет собой зону кнопки
  6. И проверяем, попали мы при нажатии в зону кнопки или нет. Если попали, то проверяем тип аннотации, в зависимости от типа вызываем какой-то наш метод: переходим на детальный экран или выбираем этот магазин для доставки в случаи со StorePoint

В противном случае — это нажатие на пин и нам нужно добавить коллаут, что собственно и делали выше уже.

Вот и все, на этом первичное знакомство с новым китом закончилось.

О чем еще хочется сказать, в текущей реализации мапкит карт содержит в себе очень много функционала, который не используется, это в том числе влияет на размер полученного бинарника. Готовы ли вы на такие жертвы, в будущем ребята должны разнести на модули все-таки. Также от коллег по цеху с андройда слышал, что есть проблемы в совместимости с котлином.

П.С. Пока решил и стал писать статью, вышло обновление 3.1, где из вышеупомянутых проблем решены и реализованы:

Добавлено

Для Android появились arm64 и x86 сборки.
На карту можно добавить любой объект View.
Появилась веломаршрутизация.

Добавлены аннотации nullable для Android.

Изменено

MapKit разбит на части:
MapKit — только карта;

MapKit Directions — автомобильная маршрутизация;

MapKit Transport — пешеходная маршрутизация, маршрутизация с использованием общественного транспорта и велосипедная маршрутизация;

MapKit Search — поиск и геокодирование;

MapKit Places — панорамы.

Для iOS аннотации nullable стали более строгими.

Исправлено

Исправлен ряд ошибок.

Улучшена производительность.

tech.yandex.ru/maps/doc/mapkit/3.x/concepts/versions-docpage

Пишите свои комментарии, вопросы.

Яндекс.Карт в App Store

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

Найдите и выберите местоположения:
• Самая большая база данных организации и фильтры для уточнения поиска.
• Подробная информация: контакты, режим работы, предоставляемые услуги, фотографии, отзывы.
• Поэтажные планы для знакомства с крупными торговыми центрами Москвы.
• Поиск мест и адресов без подключения к Интернету (автономные карты).
• Просматривайте места, сохраненные на вашем смартфоне, планшете и ПК.

Пользовательские настройки карты:
• Местоположение автобусов, трамваев, троллейбусов и маршруток в реальном времени.
• Дорожные карты, отображающие текущую дорожную обстановку в городе.
• Парковочный слой с указанием места и стоимости служебной парковки.
• Панорамы улиц для обзора любого адреса со стороны дороги.
• Выберите один из трех типов карт: Roadmap, Satellite и Hybrid.

Общественный транспорт, автомобильные, велосипедные и пешеходные маршруты:
• Пешеходная навигация: дорожки между зданиями, через парки, площади и другие пешеходные зоны.
• Велосипедная навигация: типы дорог, предпочтения подземных и эстакад, а также предупреждения о шоссе.
• Маршруты общественного транспорта с расписанием и примерным временем прибытия.
• Оптимальные маршруты движения, основанные на реальных условиях движения и вариантах вождения.
• Пошаговые инструкции с голосовой навигацией.
• Уведомления о камерах контроля скорости, ограничении скорости и превышении скорости.
• Обновления в режиме реального времени о движении, дорожно-транспортных происшествиях, радаре скорости и многом другом.

Офлайн-карты:
• Автомобильные маршруты и голосовая навигация.
• Загружаемые облегченные карты (минимальный объем памяти, например, карта Москвы составляет всего 187 МБ).
• База данных организаций с графиком работы, предоставляемыми услугами и др.
• Более 2000 городов в России, Армении, Беларуси, Грузии, Казахстане, Латвии, Турции, Украине и Эстонии.

Информация от пользователей:
• Отметьте дорожные события на карте и комментируйте сообщения пользователей.
• Регулярные обновления общедоступной карты информируют вас о вашем городе.
• Пишите обзоры, загружайте фотографии и обновляйте информацию об организациях.

На Яндекс.Картах есть приложение Apple Watch. Используйте его, чтобы:
• Перемещаться по карте.
• Просмотр ближайшей станции метро и остановок общественного транспорта.
• Узнайте, когда общественный транспорт прибудет на ближайшую остановку.
• Отслеживайте структуру трафика на несколько часов раньше времени.
• Просмотр прогнозов погоды.

,

Запустить Яндекс.Карты — Запустить приложение Яндекс.Карты для iOS — Технологии Яндекса

Этот раздел относится к мобильному приложению Яндекс.Карты версии 7.1.1 и выше.

Мобильные Яндекс.Карты для iOS можно запустить из приложения Objective-C или со страницы браузера. Используйте схему URL-адресов yandexmaps для запуска приложения. При запуске Яндекс.Карты могут выполнять следующие действия:

  1. Открыть карту
  2. Добавить метку
  3. Найти объекты
  4. Открыть карточку организации
  5. Показать «Что здесь?»
  6. Построить маршрут
  7. Показать панораму из указанной точки

Открыть карту

Вы можете отобразить карту, используя следующий формат URL:

  yandexmaps: // maps.yandex.com/?{parameters}  
Параметр Тип данных Описание

ll

float, float

Карта координаты центра (долгота, широта).

z int

Масштаб карты. Целое число от 1 до 18, где 1 — это наименее детализированный масштаб карты (весь мир), а 18 — максимально возможное масштабирование.

spn float, float

Окно просмотра. Продольный и широтный размер области просмотра в градусах, разделенных запятыми. Например, чтобы установить область просмотра 10,5 градусов, укажите: spn = 10,5, 10,5 .

Центр окна просмотра устанавливается с помощью параметра ll (центр карты).

Если z (масштабирование) уже установлено, то spn игнорируется.

л строка

Тип карты и информация о движении.

Тип карты: map (карта), sat (спутниковая), skl (гибридная), pmap (общедоступная карта).

Показать дорожное движение: трф (слой «трафик»). Вы можете включить только слой трафика или объединить его с каким-либо типом карты. В этом случае значения параметров разделяются запятыми. Например: l = карта, trf .

Параметр Тип данных Описание

ll

float, float

, координаты центра карты широта).

z int

Масштаб карты. Целое число от 1 до 18, где 1 — это наименее детализированный масштаб карты (весь мир), а 18 — максимально возможное масштабирование.

spn float, float

Окно просмотра. Продольный и широтный размер области просмотра в градусах, разделенных запятыми. Например, чтобы установить область просмотра 10,5 градусов, укажите: spn = 10,5, 10,5 .

Центр окна просмотра устанавливается с помощью параметра ll (центр карты).

Если z (масштабирование) уже установлено, то spn игнорируется.

л строка

Тип карты и информация о движении.

Тип карты: map (карта), sat (спутниковая), skl (гибридная), pmap (общедоступная карта).

Показать дорожное движение: трф (слой «трафик»). Вы можете включить только слой трафика или объединить его с каким-либо типом карты.В этом случае значения параметров разделяются запятыми. Например: l = карта, trf .

Примечание. Если параметры карты не передаются в URL-адресе, используются параметры предыдущего сеанса пользователя.

Пример URL:

  yandexmaps: //maps.yandex.ru/? Ll = 30.310182,59.951059 & z = 12 & l = map  

Пример HTML-ссылки:

   Карта Санкт-Петербурга   

Пример вызова Objective-C:

  [[UIApplication sharedApplication] openURL:
 [NSURL URLWithString: @ "yandexmaps: // maps.yandex.ru/?ll=30.310182,59.951059&z=12&l=map "]];  

Добавить метку

Вы можете отобразить карту с меткой в ​​следующем формате URL:

  yandexmaps: // maps .yandex.com /? {параметры}  
Параметр Тип данных Описание
pt float, float

Координаты метки (долгота , широта).

Если параметр ll (центр карты) не указан, карта центрируется в точке, указанной в pt .

Параметр Тип данных Описание
pt float, float

Координаты метки (долгота, широта).

Если параметр ll (центр карты) не указан, карта центрируется в точке, указанной в pt .

Пример URL:

  yandexmaps: //maps.yandex.ru/? Pt = 30.335429,59.944869 & z = 18 & l = map  

Пример HTML-ссылки:

   Летний сад   

Пример вызова Objective-C:

  [[UIApplication sharedApplication] openURL:
 [NSURL URLWithString: @ "yandexmaps: //maps.yandex.ru/? Pt = 30.335429,59.944869 & z = 18 & l = map "]];  

Поиск объектов

Чтобы показать объекты в указанной области карты, используйте следующий формат URL:

  yandexmaps: //maps.yandex.com/? { параметры}  
Параметр Тип данных Описание
текст строка

Текст поискового запроса.

Чтобы задать область поиска, укажите центр карты ll и уровень масштабирования или область просмотра. Если область поиска не указана, используются параметры предыдущей пользовательской сессии.

Параметр Тип данных Описание
текст строка

Текст поискового запроса.

Чтобы задать область поиска, укажите центр карты ll и уровень масштабирования или область просмотра.Если область поиска не указана, используются параметры предыдущей пользовательской сессии.

Пример URL:

  yandexmaps: //maps.yandex.ru/? Ll = 30.310182,59.951059 & z = 16 & text = кафе% 20с% 20wi-fi  

Пример HTML-ссылки:

  < a href = "yandexmaps: //maps.yandex.com/? ll = 30.310182,59.951059 & z = 16 & text = cafe% 20with% 20wifi"> Показать кафе с Wi-Fi   

Пример (центр карты и область просмотра из 0.05 × 0,05 указано градусов):

  NSURL * url = [NSURL URLWithString: [@ "yandexmaps: //maps.yandex.ru/? Ll = 30.310182,59.951059 & spn = 0.05,0.05 & text = кафе с wi- fi "stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL: url];  

Открытая карточка организации

Вы можете отобразить карточку организации, используя следующий формат URL:

  yandexmaps: //maps.yandex.com/? {Параметры}  
Параметр Тип данных Описание
oid int

Уникальный идентификатор организации в Яндекс.Приложение «Карты».

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

Параметр Тип данных Описание
oid int

Уникальный идентификатор организации в приложении Яндекс.Карты.

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

Пример URL:

  yandexmaps: //maps.yandex.ru/? Oid = 1184371713  

Пример HTML-ссылки:

   Музей советских игровых автоматов   

Пример вызова Objective-C:

  [[UIApplication sharedApplication] openURL:
 [NSURL URLWithString: @ "yandexmaps: // maps.yandex.ru/?oid=1184371713 "]];  

Показать« Что здесь? »

Чтобы открыть карточку объекта, расположенного в указанной точке, используйте следующий формат URL:

  yandexmaps: //? {Параметры}  
Параметр Тип данных Описание
где [точка] float, float

Координаты объекта.

Объектом может быть, например, улица, остановка общественного транспорта или организация.

где [увеличить] float, float

Масштаб карты. Целое число от 1 до 18, где 1 — это наименее детализированный масштаб карты (весь мир), а 18 — максимально возможное масштабирование.

Параметр Тип данных Описание
где [точка] float, float

Координаты объекта.

Объектом может быть, например, улица, остановка общественного транспорта или организация.

где [увеличить] float, float

Масштаб карты. Целое число от 1 до 18, где 1 — это наименее детализированный масштаб карты (весь мир), а 18 — максимально возможное масштабирование.

Пример URL:

Пример HTML-ссылки:

Пример вызова Objective-C:

Построить маршрут

Чтобы показать маршрут на карте, введите начальную и конечную точки маршрута в URL.Маршрут всегда строится с учетом загруженности дорог.

  yandexmaps: //maps.yandex.com/? {Parameters}  
Параметр Тип данных Описание
rtext float, float ~ float, float

Координаты начальной и конечной точек маршрута (широта, долгота).

rtt string

Тип маршрута: авто (автомобильный маршрут), mt (маршрут общественного транспорта), pd (пешеходный маршрут.)

Например, если rtt = mt , то строится маршрут общественного транспорта.

Параметр Тип данных Описание
rtext float, float ~ float, float

Координаты начала и конца точки маршрута (широта, долгота).

rtt string

Тип маршрута: авто (автомобильный маршрут), mt (маршрут общественного транспорта), pd (пешеходный маршрут.)

Например, если rtt = mt , то строится маршрут общественного транспорта.

Примечание.

Если тип маршрута не задан, строится автомобильный маршрут.

Тип карты не может быть передан в URL-адресе: параметры карты сохраняются, как и в предыдущем пользовательском сеансе.

Пример URL:

  yandexmaps: //maps.yandex.ru/? Rtext = 59.967870,30.242658 ~ 59.898495,30.299559 & rtt = mt  

Пример HTML-ссылки:

   Получить направление   

Пример вызова Objective-C:

  [[UIApplication sharedApplication] openURL:
 [NSURL URLWithString: @ "yandexmaps: //maps.yandex.ru/? Rtext = 59.967870,30.242658 ~ 59.898495,30.299559 & rtt = mt"]];  

Показать панораму с указанной точки

Чтобы показать панорамный вид с указанной точки, используйте следующий URL:

  yandexmaps: //? {Параметры}  
Параметр Тип данных Описание
панорама [точка] float, float

Координаты точки панорамного обзора (долгота, широта).

панорама [направление] поплавок, поплавок

Направление взгляда.

Устанавливается в градусах в формате: [азимут направления, угол места над горизонтом] .

Допустимые значения: от 0 до 360 градусов.

панорама [span] float, float

Размер области просмотра.

Устанавливается в градусах в формате: [размер по горизонтали, размер по вертикали] .

Параметр Тип данных Описание
панорама [точка] поплавок, поплавок

Координаты точки точки вид (долгота, широта).

панорама [направление] поплавок, поплавок

Направление взгляда.

Устанавливается в градусах в формате: [азимут направления, угол места над горизонтом] .

Допустимые значения: от 0 до 360 градусов.

панорама [span] float, float

Размер области просмотра.

Устанавливается в градусах в формате: [размер по горизонтали, размер по вертикали] .

Пример URL:

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *