Общая информация

Введение

Online Maps - это универсальное картографические решение, которое подходит для любых приложений и игр, использующих географическую карту. 

Поддерживаются Unity 2017.1 - Unity 2018.x. 

Поддерживаемые платформы: Standalone, WebGL, iOS, Android, WSA. 

Остальные платформы не тестировались и их работоспособность не гарантируется.

 

Online Maps содержит:

  • Online Maps Component – это ядро. Этот компонент полностью управляет созданием и работой карты, и должен использоваться всегда. Чтобы добавить этот компонент, выберите «Component / Infinity Code / Online maps / Online Maps».
  • Controls – эти компоненты служат для отображения карты на различных источниках, и взаимодействия с пользователем. Обязательно должен использоваться только один controls. Подробнее вы можете прочитать в разделе «Controls».
  • Plugins – дополнительные модули, служащие для расширения функционала карты. Например: GPS (Location Service), здания, кеш. 

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

Важно: вы можете иметь только один экземпляр карты в сцене.

 

Обновление с Online Maps v1.x и 2.x

Online Maps v3 имеет очень много изменений в API, необходимых для дальнейшей разработки и поддержки asset.

Перед импортом Online Maps v3 обязательно удалите Online Maps v1.x или v2.x.

Импортируйте последнюю версию Online Maps.

После импорта вы с большой вероятностью получите несколько «Obsolete warnings». 

Не пугайтесь. Мы очень бережно подходим к изменениям в API, и ваш проект будет работать корректно.

Следуя сообщениям в предупреждениях исправьте ваши скрипты, которые используют Online Maps API.

 

Controls

Controls – служат для отображения карты на различных источниках, и взаимодействия с пользователем.

Типы controls:

  • 2D: SpriteRenderer, UIImage, UIRawImage, NGUI.
  • 3D: Texture, Tileset.

Все controls, кроме Tileset, работают в режиме «рисование в текстуру». Tileset Control, работает в режиме Tileset. Узнать больше о режимах работы, вы можете в разделе «Режим работы карты».

Важно: вы можете использовать только один control.

Для использования NGUI Control необходимо наличие в проекте NGUI. Этот asset не включен в пакет и вы можете приобрести его в Unity Asset Store.

Если вы хотите отобразить карту, на источнике, для которого нет подходящего control, пожалуйста, напишите нам. Мы постараемся добавить нужный вам control в кратчайшее время.

 

Режим работы карты

«Online Maps» поддерживает два режима работы карты:

  1. Рисование в текстуру. В этом режиме карта и все дополнительные элементы рисуются в текстуру. Это универсальный режим. Вы можете отобразить карту в любом месте, используя необходимый control.
  2. Tileset. Это процедурно-генерируемый mesh. Этот режим работает быстрее и требует меньше памяти, чем рисование в текстуру. Поддерживает 3D маркеры, высотные данные и здания. Рекомендуется для использования на мобильных устройствах и WebGL.

 

Быстрое создание карты с помощью Wizard

Выберите «Hierarchy / Create / Infinity Code / Online Maps / Map Wizard».

Выберите тип карты, место где вы хотите использовать карту, дополнительные настройки и нажмите «Create».

 

Ручное создание карты

Выберите в меню пункт «Component / Infinity Code / Online Maps / Online Maps», чтобы добавить компонент на выделенный GameObject. 

Для режима «рисование в текстуру»: В разделе «Create texture» выберите необходимые размеры и нажмите «Create». Будет создана новая текстура в корне проекта с именем «OnlineMap», и добавлена на источник отображения. Если файл с таким именем уже существует, то он будет заменен.

Выберите поставщика и тип текстур, которые вы хотите использовать.

Чтобы карта стала интерактивной, выберите в меню пункт «Component / Infinity Code / Online Maps / Controls». 

Запустите сцену.

Переместите область карты в нужное место.

Добавьте маркеры (подробнее в разделе «Маркеры»).

Чтобы сохранить текущее состояние нажмите «Save state».

Остановите сцену.

 

Ограничения WebGL

Для WebGL запросы к Bing Maps работают через прокси на infinity-code.com

Это сделано потому что для WebGL сервер должен возвращать ответ с заголовком:

header ("Access-Control-Allow-Origin: *");

Использование этого заголовка не реализовано в сервисах Bing Maps.

Для всех остальных платформ и сервисов запросы идут напрямую к сервисам.

 

В настоящее время наш прокси сервер не имеет ограничений на количество запросов. Но при сильном увеличении нагрузки на наш сервер, мы можем добавить такие ограничения. 

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

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

 

Взаимодействие с картой

Управление картой аналогично их использованию в онлайн сервисах или приложениях.

Нажмите кнопку мыши и переместите мышь, для изменения положения карты.

Используйте колесо мыши для приближения или отдаления карты.

Двойной клик, приближает карту в месте под курсором.

Нажмите «M», чтобы создать новый маркер.

Нажмите «N», чтобы создать новый 3D маркер.

Зажмите «Left Control», чтобы включить режим перемещения маркеров.

 

Если вы используете 3D control, с включенным «Allow Camera Control», то вы зажмите  правую кнопку мыши, чтобы включить режим вращения камеры вокруг карты.

 

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

Вы можете сохранить текущее состояние карты в режиме выполнения.

Для этого нажмите «Save state», выберите объекты, которые вы хотите сохранить и нажмите опять «Save state». 

После того как вы остановите сцену, карта сохранит указанное состояние.

 

Работа на мобильных устройствах

Online Maps работает на iOS, Android и Windows Phone.

Жесты:

  • Drag - перемещение карты.
  • Pinch – изменение zoom.
  • Double tap – приближение карты, в указанной точке.
  • Spread – вращение камеры вокруг карты. Требуется компонент Online Maps Camera Orbit.

 

Важно: Online Maps не использует жест вращения.  Для вращения камеры вокруг карты используется жест - Spread. Если вы хотите использовать жест вращения, используйте какой-нибудь Gesture framework (например EasyTouch или TouchScript).

 

Для оптимальной производительности на мобильных устройствах мы рекомендуем использовать режим «Tileset». 

Если вы хотите рисовать карту в текстуру, то мы рекомендуем использовать размер текстуры не более 512x512.

 

Если на iOS вы видите большие красные вопросительные знаки, вместо текстур, то включите программный JPEG декодер (Online Maps Inspector / Troubleshooting / Software JPEG Decoder).

 

Работа с uGUI Image и SpriteRenderer

Чтобы работать с картой через uGUI Image и SpriteRenderer, вам нужно выбрать текстуру карты в проекте. В настройках импорта текстуры вам необходимо указать «Sprite mode - Single». После этого добавить эту текстуру в «Image / Source Image» или «Sprite Renderer / Sprite».

Если «Sprite Mode - Single», автоматически возвращается к «Sprite Mode - None», выполните следующие действия:

  • Texture Type – Sprite;
  • Apply;
  • Texture Type – Advanced;
  • Read / Write Enabled – On;
  • Apply.

 

Для SpriteRenderer: Для того чтобы карта стала интерактивной добавьте BoxCollider на GameObject.

 

Лицензии и API Keys

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

 

Предустановки для всех провайдеров и типов карт представлены для ознакомительного использования.

 

Легальный путь использовать тайлы Google Maps в ваших приложениях:

https://developers.google.com/maps/documentation/tile/

 

Для использования некоторых возможностей Online Maps вам потребуются API Keys некоторых провайдеров.

 

Google API Key требуется для использования веб сервисов Google. 

Получить ваш Google API key, вы можете в Google Console: 

https://console.developers.google.com/

В Google Console включите API которые вы хотите использовать.

Важно: Для Google Places API нужно включить Google Places API Web Service.

 

Bing Maps API Key требуется для использования Elevations API и Location API. 

Получить ваш Bing Maps API Key, вы можете здесь:

http://msdn.microsoft.com/en-us/library/ff428642.aspx

 

Описание полей

Этот раздел содержит описание полей основных компонентов Online Maps.

 

Online Maps

1. Показывает, что доступны обновления в выбранном канале. Нажмите для перехода к встроенной системе обновления.

2. Help - помощь и быстрый доступ к встроенной системе обновления.

3. Source – источник тайлов (Online, Resources, Resources and Online).

4. (Только для WebGLUse Proxy – нужно ли использовать прокси.

5. (Только для WebGLProxy – URL прокси сервера.

6Provider – поставщик тайлов текстур. 

7Type – тип карты.

8Label – показывать названия объектов на карте.

9Language – язык названий на карте.

10Latitude / Longitude – координаты центральной точки карты.

11Zoom – текущий уровень приближения.

12. (Только для Target - TextureTexture – текстура, на которой будет рисоваться карта. 

13. (Только для Target - Tileset) Width / Height (pixels) – размер tileset. Это поле работает как размер текстуры. Больше значение – качественнее карта, но медленнее скорость работы. Должно быть кратно 256. 

14. (Только в playmode) Redraw - вызывает принудительную перерисовку карты.

15. (Только в playmode) Cache tiles to Resources – кэширует текущие тайлы в папку «Resources». 

16. (Только в playmodeSave state – сохраняет текущий вид. После нажатия вы сможете выбрать, что вы хотите сохранить.

17. (Только для Target - TextureCreate Texture – этот раздел позволяет создать новую текстуру, на которой будет рисоваться карта. 

18Filename – имя файла. Если файл существует, то будет перезаписан.

19Width / Height – размер создаваемой текстуры.

20. Create - Создать текстуру.

21Advanced – раздел, в котором собраны дополнительные настройки.

22. (Только для Target - TextureRedraw on play – указывает, будет ли текстура перерисована сразу при запуске сцены, или только после изменения положения или масштаба. 

23. Use Current Zoom Tiles – по умолчанию (отключено) Online Maps использует родительские тайлы, чтобы улучшить отображение карты при изменении zoom. Вы можете предотвратить это включив этот параметр.

24Traffic – указывает, будет ли отображаться слой с информацией о загруженности дорог.

25Empty Color – цвет, используемый для рисования тайла пока текстура тайла не загружена. Если указан «Default tile», то этот цвет не используется.

26Default Tile Texture – текстура, используемая для тайла, пока не загружена правильная текстура тайла. 

27Tooltip Background – фоновая текстура всплывающей подсказки.

28Show Marker Tooltip – когда должны появляться подсказки (при наведении, при нажатии, всегда или никогда).

29Troubleshooting – в этом разделе собраны настройки, которые помогут решить проблемы. Используйте этот раздел, только если вы имеете проблемы.

30Software JPEG Decoder – для загрузки JPEG будет использован программный декодер. Программный декодер работает намного медленнее чем, аппаратный.

31Render In Thread – расчет карты будет производиться в отдельном потоке.

32Non Interact Under GUI – предотвращает события карты под GUI элементами.

33Stop Playing When Scripts Compile – когда Unity Editor компилирует скрипты, Online Maps останавливает playmode, для предотвращения крахов Unity Editor.

 

 

2D Controls

1. Allow User Control – указывает, может ли пользователь изменять положение карты.

2. Allow Zoom – указывает, может ли пользователь изменять zoom карты.

3. Zoom Mode - точка привязки, на основе которой будет изменяться масштаб.

4Zoom In On Double Click – указывает, будет ли карта приближена по двойному щелчку, или двойному тапу, на мобильных устройствах.

5. Invert Touch Zoom – меняет направление touch zoom.

6. Smooth Zoom - использовать плавный touch zoom на мобильных устройствах.

 

3D Controls

1-6Смотрите описание полей 2D Control.

7Camera – камера, с которой будет взаимодействовать Control. Если камера не указана, то будет использована Main Camera.

8Marker 2D Mode - режим отображения маркеров (flat или Billboard). 

 

Tileset Control

1. Size In Scene - размер который карта будет занимать в сцене.

2-7. Смотрите в разделе 2D Control.

8-9. Смотрите в разделе 3D Control.

10. Check Marker 2D Visibility - как будет проверяться видимость 2D маркера на карте.

11. Collider Type - тип коллайдера карты.

12Materials & Shaders – в этом разделе вы можете настроить материалы и шейдеры для Tileset.

13Tile Material – материал, который будет использоваться для тайлов.

14Marker Material – материал, который будет использоваться для маркеров.

15Tileset Shader – шейдер, который будет использоваться для тайлов, если Tile material не указан.

16Marker Shader – шейдер, который будет использоваться для 2D маркеров.

17Drawing Shader – шейдер, который будет использоваться для Drawing Elements.

18. Mipmap For Tiles - будет ли использован mipmap для текстур тайлов.

19Move camera to center of Tileset – направляет камеру на центральную точку карты, и располагает камеру перпендикулярно карте.

 

Buildings

1. Zoom - zoom карты, при котором будет показаны здания.

2. Floors – количество этажей зданий.

3. Floor Height – высота этажа.

4. Min Building Height - минимальная высота здания.

5. Height Scale – масштаб здания.

6. Max Number of Buildings – максимальное количество зданий, которое будет использоваться.

7. Max Number of Active Buildings – максимальное количество зданий, которые могут показываться на карте одновременно.

8. Generate Colliders - нужно ли генерировать коллайдеры для зданий.

9. Use Color Tag - нужно ли использовать тег цвета из OSM.

10Materials – материалы зданий. При генерации зданий материал выбирается произвольно.

11. Номер материала и кнопка, позволяющая удалить материал.

12Wall Material – материал стены.

13. Roof Material – материал крыши.

14Scale – Масштаб UV текстур.

15. Добавить новый материал здания.

 

Cache

1. Use File Cache - нужно ли использовать файловый кеш. Не поддерживается для WebGL.

2. Size - размер файлового кеша.

3. Unload (%) - процент объема кеша, который будет выгружен.

4. Cache Location - где хранить кеш.

5. Tile Path - шаблон хранений тайлов в кеше.

6. Available Tokens - доступные токены для шаблона.

7. Current Size - текущий размер файлового кеша.

8. Clear - очистить файловый кеш.

9. Use Memory Cache - нужно ли использовать кеш в памяти.

10. Size - размер кеша в памяти.

11. Unload (%) - процент объема кеша, который будет выгружен.

12. Current Size - текущий размер кеша в памяти.

13. Clear - очистить кеш в памяти.

 

Camera Orbit

1. Adjust To - место, куда будет смотреть камера.

2. Adjust to GameObject - GameObject, на который будет смотреть камера.

3. Distance - расстояние от точки, куда смотрит камера, до камеры.

4. Max Rotation максимальный наклон камеры.

5. Rotation - угол поворота камеры. 
X - наклон (tilt). 0 - перпендикулярно карте, 90 - параллельно карте.
Y - поворот (pan) камеры по часовой стрелке.

6. Speed - скорость изменения значения.

7. Lock Tilt - запретить изменение наклона (X).

8. Lock Pan - запретить изменение поворота (Y).

 

Elevation Manager

1. Bottom Mode - правило определения нижней точки карты. 

2. Scale - масштаб значений высот.

3. Zoom Range - диапазон zoom карты, для которого будет отображаться elevations.

4. Lock Y Scale - использовать фиксированное yScale.

5. Y Scale Value - значение yScale.

6. Bing API Bing Maps API ключ.

 

Limits

1. Zoom Range - ограничивать ли zoom карты, и диапазон допустимых значений.

2. Position Range - ограничивать ли позицию карты.

3. Диапазон допустимых значений широты.

4. Диапазон допустимых значений долготы.

5. Position Range Type - правило проверки значений позиции (по центральной точке или по границам).

 

 

Location Service

1. Disired Accuracy (meters) - желаемая точность в метрах. При использование большого значения (например, 500), как правило, не требует использования GPS и, экономит заряд аккумулятора.  Небольшие значения 5-10 могут быть использованы для получения максимальной точности.

2. Update Distance - минимальное расстояние (в метрах), при котором будет обновлена позиция. Более высокие значения (например, 500) означает меньше накладных расходов.

3Compass Threshold – чувствительность компаса (градусов), для предотвращения дрожания.

4. Find Location By IP – ищет местоположение пользователя по IP адресу. Имеет очень низкую точность.

5Update Map Position - обновлять позицию карты на основе данных GPS.

6. Auto Stop On Input – не обновлять позицию карты, после того как пользователь изменяет позицию карты или zoom.

7. Restore After (sec) – восстановить авто обновление позиции карты, после указанного количества секунд бездействия.

8. Create Marker – создать маркер, в текущем положении GPS.

9. Type – тип маркера (2D или 3D).

10(Type - 2D) Texture – текстура 2D маркера.

11. (Type - 2D) Align – выравнивание 2D маркера.

12(Type - 3D) Prefab – GameObject, который будет использован для 3D маркера.

13Tooltip – подсказка маркера.

14. Scale - масштаб маркера.

15Use Compass – поворачивать маркер, на значение компаса.

16. Lerp Compass Value - сглаживает изменения значений компаса, чтобы избежать дрожания на мобильных устройсктвах.

17Use GPS Emulator – эмулирует значения GPS и компаса. Работает только в Unity Editor.

18. Disable Emulator In Publish - отключает эмулятор при публикации проекта.

19. Copy position from Online Maps - копирует текущую позицию из Online Maps.

20Latitude / Longitude – эмулируемые координаты GPS.

21Compass – эмулируемое значение компаса.

 

Marker Manager

1. Default Texture - текстура, которая будет использоваться если не указана текстура маркера.

2. Default Align - выравнивание, которое будет использоваться для новых маркеров.

3. Add Marker By M - создавать новый маркер под курсором в playmode при нажатии M.

4. Индекс маркера и кнопка удаления маркера.

5. Latitude / Longitude - широта и долгота маркера.

6. Zooms - zoom карты, при котором будет отображаться маркер.

7. Rotation - поворот маркера относительно точки выравнивания по часовой стрелке. 

8. Scale - масштаб маркера.

9. Label - текст, который будет показан при наведении на маркер.

10. Align - выравнивание маркера.

11. Texture - текстура маркера.

12. Add Marker - создает новый маркер в центре карты.

 

 

Marker 3D Manager

1. Default Prefab - prefab, который будет использоваться если не указан prefab маркера.

2. Default Scale - масштаб, который будет использоваться для новых маркеров.

3. Add Marker3D By N - создавать новый 3D маркер под курсором в playmode при нажатии N.

4. Индекс маркера и кнопка удаления маркера.

5. Latitude / Longitude - широта и долгота маркера.

6. Zooms - zoom карты, при котором будет отображаться маркер.

7. Scale - масштаб маркера.

8. Rotation Y - поворот маркера относительно вертикальной оси по часовой стрелке. 

9. Label - текст, который будет показан при наведении на маркер.

10. Prefab - prefab маркера.

11. Add Marker - создает новый маркер в центре карты.

 

Тайлы

Online Maps, как и большинство картографических приложения, использует для создания карт тайловую систему.

Online Maps поддерживает только растровые тайлы размером 256x256 пикселей.

Что такое тайловая система, и как это работает, вы можете прочитать здесь:

https://msdn.microsoft.com/en-us/library/bb259689.aspx

http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

 

Источник тайлов карты

Online Maps может получать тайлы:

  • Online – с сайта провайдера тайлов.
  • Resources – из папки «Resources».
  • Resources and Online – по возможности будут загружаться тайлы из папки «Resources». Если тайл отсутствует, то он будет загружен с сайта провайдера.

Если вы хотите загружать тайлы из папки «Resources», то разместите тайлы в формате «Resources / OnlineMapsTiles / {ZOOM} / {TileX} / {TileY}.png».

 

Провайдеры тайлов

Online Maps может работать с любым провайдером тайлов, имеющим проекцию WGS 84 Spherical Mercator (Web Mercator, EPSG:3857) или WGS 84 Ellipsoid Mercator (EPSG:4326), и возвращающий растровые изображения PNG или JPG.

В настоящее время это большинство существующих карт.

Важно: Векторные тайлы не поддерживаются. Мы работаем над этим и постараемся добавить поддержку векторных тайлов в будущих версиях.

 

Список известных провайдеров:

Поддерживаются: AMap, ArcGIS (ESRI), CartoDB, Google Maps, Hydda, Mapbox, MapQuest, Mapy.CZ, Nokia Maps (here.com), Open Map Surfer, Open Street Map, Open Topo Map, Open Weather Map, Stemen, Sputnik, Thunderforest, TianDiTu, Virtual Earth (Bing Maps), Yandex Maps.

Не поддерживаются (имеют другую проекцию): Baidu Maps.

 

Это не полный список, и будет дополняться в будущем. 

Если вы хотите использовать провайдера, которого нет в списке, пожалуйста, обратитесь в нашу поддержку. Мы проверим работу нужного провайдера.

Использование «Provider - Custom»

Чтобы использовать «Provider - Custom», вам нужно в поле «URL» указать шаблон URL для загрузки тайлов из вашего источника.

Шаблон URL поддерживает tokens:

{zoom} – Zoom level.

{x} – Tile X.

{y} – Tile Y.

{quad} – Tile Quad Key. Используется в Virtual Earth (Bing Maps).

 

Общая инструкция:

  1. Откройте в браузере карту на сайте провайдера, тайлы из которой вы хотите использовать.
  2. Откройте в браузере инструменты разработчика. Горячая клавиша в большинстве браузеров – F12.
  3. Найти адрес запроса на загрузку тайла.
  4. В адресе заменить числа, которые отвечают за tile zoom, x, y, на tokens. 
  5. Вставить этот шаблон в поле «URL».

Пошаговую инструкцию по использованию «Provider - Custom», вы можете прочитать в разделе «Styled Google Maps».

 

Custom URL Wizard

Для Google Maps и Mapbox вы можете использовать «Custom URL Wizard». Чтобы открыть «Custom URL Wizard» нажмите кнопку справа от «Custom Provider URL». Введите URL тайла, который вы получили в шаге 3, и нажмите кнопку «Apply».

 

Стилизированные Google Maps

Чтобы стилизировать Google Maps, вам необходимо:

  1. Настроить желаемый стиль карты, с использованием любого онлайн сервиса, который позволяет настраивать стиль карты. Например:
    https://snazzymaps.com/
  2. Открыть в браузере инструменты разработчика. Горячая клавиша в большинстве браузеров – F12.
  3. Найти адрес запроса на загрузку любого тайла. Она будет иметь вид:
    https://maps.googleapis.com/maps/vt?pb=!1m5!1m4...
  4. Открыть этот URL и убедиться, что изображение имеет размер 256x256.
  5. Скопировать этот адрес.
  6. В Online Maps Inspector выбрать «Provider - Custom», и вставить этот адрес в поле «URL».
  7. В поле «URL» заменить «!1iX!2iX!3iX», на «!1i{zoom}!2i{x}!3i{y}».
    Должно получиться что-то похожее на:
    https://maps.googleapis.com/maps/vt?pb=!1m5!1m4!1i{zoom}!2i{x}!3i{y}!2m3!...
  8. Убедитесь, что URL заканчивается на «!4e0» (включительно). Если вы имеете знаки после, то удалите их.

Это все. Вы используете Styled Google Maps.

 

Работа офлайн

Подготовка тайлов для офлайн использования с помощью GMapCatcher

Для подготовки тайлов удобно использовать GMapCatcher. 

https://github.com/heldersepu/gmapcatcher

С помощью GMapCatcher, скачайте нужный участок карты. 

В Online Maps нажмите «Import From GMapCatcher».

Все скачанные тайлы, будут помещены в папку «Resources / OnlineMapsTiles», в формате, необходимом для использования.

 

Подготовка тайлов для офлайн использования вручную

Разместите ваши тайлы в формате «Resources / OnlineMapsTiles / {ZOOM} / {TileX} / {TileY}.png».

 

Кэширование текущего состояния карты

Нажмите «Cache tiles to Resources», чтобы кэшировать текущее состояние карты в папку Resources.

Выберите «Source – Resources and Online». 

Кэшированные тайлы будут загружаться из папки Resources, что ускорит загрузку тайлов при запуске приложения.

 

Другие методы офлайн использования

Используя Online Maps API, вы можете перехватить запрос на загрузку тайла, и загрузить его из ЛЮБОГО источника, например: AssetBundle или файловой системы. 

Пример использования: CustomDownloadTileExample.cs

 

Маркеры

2D маркеры

Для работы с маркерами используйте компонент Online Maps Marker Manager.

Нажмите «Add Marker», чтобы создать новый маркер в центре карты.

 

Вы можете создавать маркеры в режиме воспроизведения:

Наведите курсор на место, где вы хотите добавить маркер и нажмите клавишу «M». В указанном месте будет создана новый маркер, с параметрами по умолчанию. 

Вы можете перетаскивать маркеры на карте, зажав кнопку «Left Control».

После внесения изменений в режиме воспроизведения нажмите кнопку «Save state».

Важно: Текстура маркера должна иметь формат ARGB32, и включенное поле «Read/Write Enabled». Эти параметры вы можете найти в настройках импорта текстур.

Если в маркере указано значение «Label», то при наведении на иконку маркера в режиме воспроизведения, появится всплывающее сообщение.

 

3D маркеры

Важно: 3D маркеры поддерживаются только в 3D Controls (Texture Control или Tileset Control). 

Для работы с маркерами используйте компонент Online Maps Marker 3D Manager.

Работа с 3D маркерами аналогична работе с 2D маркерами. Вы можете создать 3D маркер в указанном месте карты, нажав клавишу «N». 

 

Анимированные маркеры

К сожалению, Online Maps не имеет встроенной возможности работы с анимированными маркерами. 

Но у вас есть несколько путей для создания анимированных маркеров:

  1. Использовать 3D маркеры. Например, сделать плоский 3D маркер, в котором скриптом подменять текстуру маркера.
  2. Создать собственную систему маркеров, например, для uGUI. Это просто. Примеры создания собственной системы маркеров для NGUI и uGUI в «Examples (API Usage)». Если вам понадобится помощь в создании собственной системы маркеров, пожалуйста, напишите нам.

 

Кеширование тайлов

Online Maps имеет встроенную систему кеширования тайлов, которая позволяет сильно уменьшить количество запросов к серверам тайлов и ускорить работу приложения.

Чтобы использовать кеширование добавьте компонент «Online Maps Cache».

Кеширование работает в двух режимах: кеш в памяти и файловый кеш. Вы можете использовать оба режима вместе, или только один из режимов.

Важно: Для WebGL файловый кеш не поддерживается, потому что на этой платформе нет доступа к файловой системе.

 

Использование Location Service (GPS)

Для мобильных устройств доступно определение местоположения по GPS. Чтобы включить определение местоположения, выберите «Component / Infinity Code / Online Maps / Plugins / Location Service».

Online Maps может определять местоположение по IP (по умолчанию включено). Определение местоположения по IP имеет очень низкую точность (в большинстве случает с точностью до города), но может быть очень полезным, когда GPS недоступен.

Чтобы создать маркер в текущей позиции включите «Create Marker», выберите тип маркера и укажите его параметры. Он будет автоматически обновлять позицию, при изменении местоположения. Если вы хотите, чтобы маркер указывал направление, то включите «Use Compass».

Чтобы включить GPS Emulator включите «Use GPS Emulator». Укажите местоположение и значение компаса. 

 

Высотные данные

Online Maps поддерживает высотные данные из Bing Maps, Mapbox и ArgGIS (ESRI).

Чтобы создать карту с высотными данными вы должны использовать Tileset Control.

Добавьте соответствующий компонент Online Maps {SOURCE OF DATA} Elevation Manager, и укажите ваш API key (если требуется).

Важно (для Bing Maps): Public Windows App или Public Windows Phone App позволяют сделать 50.000 запросов в течении 24 часов. При других выборах вы сможете сделать только 125.000 запросов в течении года. При превышении лимита ваш ключ не будет работать.

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

 

Генерация зданий

Генерация зданий доступна только при использовании Tileset Control.

Добавьте компонент Online Maps Buildings и укажите материалы для стен и крыш.

Здания создаются динамически, на основе данных Open Street Map. 

Запустите сцену и приблизьте карту до указанного диапазона zoom.

Важно: Не используйте слишком большой диапазон. Карта может иметь сотни и тысячи зданий, что негативно скажется на производительности приложения.

 

Сторонние assets

Bolt

https://assetstore.unity.com/packages/tools/visual-scripting/bolt-87491

Bolt уже может использовать переменные и методы Online Maps без интеграции.

Но проблема в том, что Bolt пока не поддерживает System.Action. Это значит что вы не можете использовать события карты, маркеров и т.д.

Чтобы обойти это импортируйте Online Maps Bolt Integration Kit.

Перед импортом Online Maps Bolt Integration Kit убедитесь, что Bolt присутствует в вашем проекте. 

Выберите «GameObject / Infinity Code / Online Maps / Packages / Bolt Integration Kit».

Видео как использовать события Online Maps в Bolt:
http://forum.infinity-code.com/viewtopic.php?id=820

 

Curved UI

https://assetstore.unity.com/packages/tools/gui/curved-ui-vr-ready-solution-to-bend-warp-your-canvas-53258

Online Maps UIImage Control и Online Maps UIRawImage Control поддерживают работу с Curved UI.

Импортируйте Curved UI в проект и в инспекторе control нажмите «Enable Curved UI».

 

EasyTouch

https://assetstore.unity.com/packages/tools/input-management/easy-touch-5-touchscreen-virtual-controls-3322

EasyTouch позволяет добавить в Online Maps поддержку стандартных жестов, например жеста вращения.

Добавьте OnlineMapsEasyTouchConnector и нажмите «Enable EasyTouch».

 

Fingers - Touch Gestures for Unity

https://assetstore.unity.com/packages/tools/input-management/fingers-touch-gestures-for-unity-41076

Этот asset позволяет добавить в Online Maps поддержку стандартных жестов, например жеста вращения.

Добавьте OnlineMapsFingersTouchGesturesConnector и нажмите «Enable Fingers - Touch Gestures».

 

NGUI: Next-Gen UI

https://assetstore.unity.com/packages/tools/gui/ngui-next-gen-ui-2413

Добавьте необходимый control на GameObject с картой. Включите поддержку кнопкой «Enable NGUI».

Для того чтобы карта стала интерактивной добавьте Collider на GameObject (NGUI\Attach\Collider).

Если вы используете карту в режиме Tileset, то она должна располагаться в Hierarchy снаружи объекта UIRoot.

 

Playmaker

https://assetstore.unity.com/packages/tools/visual-scripting/playmaker-368

Перед импортом «Online Maps Playmaker Integration Kit» убедитесь, что Playmaker присутствует в вашем проекте. Поддерживаются Playmaker v1.7.7 и выше.

Выберите «GameObject / Infinity Code / Online Maps / Packages / Playmaker Integration Kit», чтобы импортировать actions, для работы с Online Maps.

Новые actions сгруппированы в разделы, название которых начинается с «Online Maps».

К сожалению, для реализации некоторых специфических задач невозможно создать action, поэтому вам придется использовать Online Maps API. 

Узнать, как использовать Playmaker вы можете в его официальной документации:

https://hutonggames.fogbugz.com/default.asp?W1

 

Важно: При каждом обновлении Online Maps импортируйте «Playmaker Integration Kit» заново. 

 

Real World Terrain

https://assetstore.unity.com/packages/tools/terrain/real-world-terrain-8752

Вы можете отображать на карте позицию, на основе результата работы Real World Terrain. 

Добавьте «Component / Infinity Code / Online Maps / Plugins / Real World Terrain Connector», на объект, сгенерированный Real World Terrain (рядом с Real World Terrain Container), и выберите режим работы коннектора. 

 

TouchScript

https://assetstore.unity.com/packages/tools/input-management/touchscript-7394

TouchScript позволяет добавить в Online Maps поддержку стандартных жестов, например жеста вращения.

Добавьте OnlineMapsTouchScriptConnector и нажмите «Enable TouchScript».

 

uPano

https://assetstore.unity.com/packages/tools/integration/upano-126396

Позволяет добавить на карту поддержку Google Street View.

Добавьте OnlineMapsPanoConnector и нажмите «Enable uPano».

 

Сторонние сервисы

Google API

Online Maps умеет работать с некоторыми Google API сервисами:

Google Direction - рассчитывает маршруты между пунктами на карте. Поддерживается поиск маршрутов для различных способов перемещения, в том числе на общественном транспорте, автомобиле, велосипеде или пешком. При поиске маршрутов пункты отправления, назначения могут указываться либо в виде текстовых запросов (например, "Чикаго, Иллинойс" или "Дарвин, Новый Южный Уэльс, Австралия"), либо в виде значений координат — широты и долготы. API маршрутов может возвращать составные маршруты в виде последовательности путевых точек.

Google Elevation – позволяет получить данные о высотах всех точек на земной поверхности, включая глубины.

Google Geocode - преобразует адреса (такие как 1600 Amphitheatre Parkway, Mountain View, CA) в географические координаты (такие как широта 37.423021 и долгота -122.083739), которые можно использовать для размещения маркеров или позиционирования карты. Эта служба позволяет выполнять также обратное действие (перевод координат в адреса). Этот процесс называется «обратным геокодированием».

Google Places - позволяет запрашивать информацию об организациях, достопримечательностях, географических объектах и многих других местах на карте в заданном радиусе либо по прямому текстовому запросу. При этом возвращается список мест и общая информация о каждом из них.

Google Place Details – позволяет получить подробную информацию об объекте по place id, или reference.

Google Place Photo - это доступный только для чтения источник высококачественных снимков для вашего приложения. Она открывает доступ к миллионам фотографий, которые хранятся в базах данных Google Адресов и Google+ Адресов.

Google Places Autocomplete - возвращает список адресов и организаций, которые вероятно ищет пользователь, в ответ на запрос, содержащий текстовую строку (обязательно) и радиус поиска (необязательно). По мере ввода текстового запроса пользователю предлагаются подходящие компании, адреса, достопримечательности и другие места.

Google Roads API - позволяет сопоставлять GPS-координаты с геометрией дороги и определять ограничения скорости на этих участках дороги.

 

Если вам необходима поддержка еще каких-нибудь сервисов Google, пожалуйста, напишите нам. Мы постараемся добавить их поддержку в Online Maps.

Важно: Для работы с Google API веб сервисами требуется Google API Key. Вы можете получить его в Google API Console: 

https://console.developers.google.com/

 

Open Street Map Overpass API

С помощью Open Street Map Overpass API, вы можете получать информацию из Open Street Maps, например: здания, дороги, реки. 

Полный список объектов:

http://wiki.openstreetmap.org/wiki/Map_Features

Документация по Overpass API:

http://wiki.openstreetmap.org/wiki/Overpass_API/Language_Guide

 

Используйте «OnlineMapsOSMAPIQuery.Find(Overpass QL request)», для запроса к Overpass API.

Вы можете тестировать ваши запросы с помощью:

http://overpass-turbo.eu/

 

Другие сторонние веб сервисы

AMap Search - китайский сервис для поиска POI.

Bing Maps Elevation - сервис для получения высотных данных для местоположений, полилинии или области на Земле.

Bing Maps Location - преобразует адреса (такие как 1600 Amphitheatre Parkway, Mountain View, CA) в географические координаты (такие как широта 37.423021 и долгота -122.083739), которые можно использовать для размещения маркеров или позиционирования карты. Эта служба позволяет выполнять также обратное действие (перевод координат в адреса). Этот процесс называется "обратным геокодированием". Требуется Bing Maps API Key.

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

Open Street Map Nominatim - преобразует адреса (такие как 1600 Amphitheatre Parkway, Mountain View, CA) в географические координаты (такие как широта 37.423021 и долгота -122.083739), которые можно использовать для размещения маркеров или позиционирования карты. Эта служба позволяет выполнять также обратное действие (перевод координат в адреса). Этот процесс называется "обратным геокодированием".

Open Route Service Directions - рассчитывает маршруты между пунктами на карте. Поддерживается поиск маршрутов для различных способов перемещения. При поиске маршрутов пункты отправления, назначения могут указываться либо в виде текстовых запросов (например, "Чикаго, Иллинойс" или "Дарвин, Новый Южный Уэльс, Австралия"), либо в виде значений координат — широты и долготы. API маршрутов может возвращать составные маршруты в виде последовательности путевых точек.

Open Route Service Geocoding - преобразует описание местоположения, такое как имя места, адрес улицы или почтовый код, в нормализованное описание местоположения с геометрией точки. Дополнительно ORS Geocoding предлагает обратную геокодирование, которая работает точно так же. Он преобразует координату точки в описание следующего охватывающего объекта, который окружает данную координату. Чтобы получить более релевантные результаты, вы также можете установить допуск радиуса вокруг запрошенных координат. В рамках ORS API вы можете различать геокодирование и обратное геокодирование в зависимости от вашего варианта использования.

QQ Search - китайский сервис для поиска POI.

What 3 Words - это глобальная система адресации. Карта мира разбита на квадраты площадью 3х3 метра, каждому из которых был присвоен уникальный адрес из 3 слов. what3words предлагает точный и невероятно простой способ передачи координат.

 

Online Maps API

Подробную информацию обо всех доступных классах, методах и переменных вы можете найти в API Reference.

Порядок значений в координатах: 

Vector2, Vector3: X - долгота, Y - широта;

Параметры методов: сначала - долгота, потом - широта.

 

Примеры использования Online Maps API вы можете найти в папке «Examples (API usage)».

Важно: не изменяйте скрипты в папке «Examples (API Usage)». Вы потеряете ваши изменения при обновлении Online Maps. Создайте копию скрипта, с новым именем файла и класса.

 

Атлас примеров находится в папке «Documentation».

Важно: распаковывайте API Reference и Atlas of Examples снаружи вашего проекта.

 

Если у вас есть пример, который вы хотите, чтобы мы опубликовали в «Examples (API usage)», пожалуйста, пришлите его нам. Мы опубликуем его с указанием авторства и сохранением копирайтов. 

 

Внесение изменений в код Online Maps

Мы не рекомендуем вам самостоятельно вносить изменения в код Online Maps, потому что они будут потеряны при обновлении. 

Мы постарались сделать API максимально открытым для использования и расширения. Большинство задач можно решить, используя API или расширив класс соответствующего Control. 

Если для решения вашей задачи необходимо внесения изменений в код Online Maps, то пришлите, пожалуйста, нам измененный код. Мы постараемся внести ваш код в основную ветку проекта, или предложим вам лучшее решение.

 

 

Обновление версий

В Unity Asset Store мы отправляем только стабильные версии. Период обновления несколько месяцев.

Online Maps имеет встроенную систему обновления, с использованием которой вы можете обновить Online Maps до последней версии и получить ранний доступ ко всем версиям и обновлениям.

Важно: Всегда делайте резервные копии перед обновлением assets.

Выберите в меню «GameObject / Infinity Code / Online Maps / Check Updates» или «Online Maps / Help / Check Updates», чтобы открыть окно проверки обновлений. Укажите ваш Invoice Number или Order Number, выберите канал обновления и нажмите «Check New Versions». 

Вы можете узнать ваш Invoice Number в письме подтверждения заказа Unity Asset Store, или на странице пользователя в Unity Asset Store: 

https://assetstore.unity.com/orders

 

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

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

Если у вас возникли проблемы с установкой обновления, то:

  1. Откройте пустую сцену.
  2. Удалите папку «Infinity Code / Online Maps».
  3. Импортируйте новую версию Online Maps в проект.

Если вы хотите вернуться на предыдущую версию Online Maps, то выберите канал «Stable Previous». Через этот канал вы сможете получить 10 предыдущих стабильных версий.

 

Online Maps автоматически проверяет обновления один раз в 24 часа. Если новая версия доступна, то вы увидите красную надпись в Online Maps Inspector. При нажатии на которую будет открыто окно проверки обновления. 

Автоматическая проверка обновления не требует Invoice Number, и работает по выбранному каналу обновления. Если вы не выбирали канал обновления, то будут проверяться только стабильные версии.

 

Важно: Не бойтесь Online Maps Beta. Online Maps разрабатывается линейно, и все изменения (исправления ошибок, новые возможности и т.д.) сначала публикуются в beta разделе. Через 1-2 недели после выхода новой версии Unity, мы фиксируем все изменения в Online Maps Stable. 

 

Решение проблем

Известные проблемы

Drawing API – полигон не имеет заливки в режиме «Tileset». Эта проблема связана с очень сложной триангуляцией полигона. Скорее всего, эта проблема никогда не будет решена. 

Как обойти проблему:

  1. OnlineMapsDrawingElement.checkMapBoundaries = false.
    Этот режим работает корректно только если линии не пересекаются.
  2. Используйте режим «рисование в текстуру».
  3. (Не рекомендуется) Используйте Drawing as Overlay.

 

Маркеры и другие объекты некорректно позиционируются на карте:

Скорее всего вы используете размер карты на равный N * 256.

Это очень сложная и глубокая проблема. Мы работаем над решением.

В настоящее время решение - использовать размер карты равный N * 256.

 

Я создал маркер или другой объект на карте, но я не вижу его:

Пожалуйста, убедитесь что вы правильно указали широту и долготу.

Если вы используете Vector2: X - Долгота, Y - широта.

Если вы используете метод, который принимает double: сначала - долгота, потом - широта.

 

Не работают карты Google Relief и Google Terrain на iOS – Иногда Unity + XCode используют поврежденный JPEG декодер. Прямого решения для этой проблемы нет. 

Есть два обходных пути решить эту проблему:

  1. Использовать стилизованные карты Google. Как сделать такую карту смотрите в разделе «Styled Google Maps». Трюк в том, что стилизованные карты возвращают PNG, даже если стиль пустой.
  2. Включите «Troubleshooting / Software JPEG Decoder». Используйте этот вариант только если у вас не получилось использовать стилизованные карты, потому что программный декодер работает медленно.

 

Если «Sprite Mode - Single», автоматически возвращается к «Sprite Mode - None», выполните следующие действия:

  • Texture Type – Sprite;
  • Apply;
  • Texture Type – Advanced;
  • Read / Write Enabled – On;
  • Apply.

 

Tileset некорректно работает со Skybox, или имеет проблемы с отображением:

Online Maps Tileset Control Inspector / Materials & Shaders / Tileset Shader – Tileset Cutout Shader.

 

Как сделать тени на карте:

Online Maps Tileset Control Inspector / Materials & Shaders / Tileset Shader – Tileset Cutout Shader.

 

Ошибка «CS0576: Namespace `global::' contains a definition with same name as alias `XXXX'»:

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

Если вы создали этот класс, то переименуйте его.

Если это часть другого asset, то свяжитесь с разработчиком, и попросите исправить проблему. 

 

Playmaker не сохраняет FSMObject (маркеры). Debug показывает «None»:

На самом деле FSMObjects сохраняются, и вы можете использовать их. Просто Playmaker не показывает это.

Это ошибка в Playmaker, и мы надеемся, что она когда-нибудь будет исправлена.

 

Вы включили поддержку asset, которого не имеете в проекте или удалили asset не отключив его в Online Maps:

Импортируйте требуемый asset, или удалите соответствующий ключ в «Edit / Project Setting / Player / Other Settings / Scripting Define Symbols».

 

О KML

Online Maps не поддерживает KML, и скорее всего никогда не будет поддерживать это.

KML очень обширный формат, который имеет много возможностей, которые напрямую не относятся к картам. 

Добавлять частичную поддержку KML мы считаем неверным. 

Если вам нужны какие-то данные из KML, вы можете прочитать их самостоятельно и использовать это в карте.

 

Вашей проблемы нет в списке

Попробуйте обновиться на последнюю бета версию, с помощью встроенной системы обновления. Возможно, мы уже исправили эту проблему.

Если проблема осталась, пожалуйста, напишите о вашей проблеме нам в поддержку (support@infinity-code.com) или на форум (http://forum.infinity-code.com). Мы постараемся исправить все ошибки и выпустить обновление в кратчайшие сроки.

 

Поддержка

Мы осуществляем поддержку по email (support@infinity-code.com) или в форуме (http://forum.infinity-code.com) на английском и русском языках. 

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

При обращении укажите вашу версию Unity, OS и текущую версию Online Maps.

Мы стараемся отвечать на все обращения в службу поддержки в течении 24 часов. 

 

Заключение

Мы искренне надеемся что вам понравится использовать Online Maps.

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

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

 

Пожалуйста, не забудьте оставить ваш отзыв в Unity Asset Store.

Для нас очень важно иметь обратную связь с пользователями, чтобы сделать наш asset еще лучше.

Для других пользователей это тоже очень важно, чтобы сделать правильное представление об asset.

Русский