Руководства

Как добавить карты в приложение: встраивания, интерактивные карты и поиск точек

Чтобы добавить карту в приложение, сначала решите, нужно ли вам статичное встраивание (одна точка с меткой, как «найдите наш магазин») или интерактивная карта (много меток из ваших данных, фильтры, кластеризация, «рядом со мной»). Для одного места встроенная карта — самый быстрый вариант, а с Maps Embed API от Google она бесплатна. Для интерактивных карт используйте библиотеку JavaScript для карт — Google Maps JavaScript API, Mapbox GL JS или открытую Leaflet с провайдером тайлов — храните широту и долготу каждого места в базе данных и ограничивайте API-ключ вашим доменом. Подробности о провайдерах ниже — по их собственной документации на сентябрь 2026 года.

Какая карта вам нужна?

ЗадачаПримерСамый простой подход
Одно местоКонтактная страница кафеВстроенная карта
Несколько фиксированных местТри филиалаВстраивание для каждого филиала или небольшая интерактивная карта
Много мест из ваших данныхКаталог, объявления о недвижимости, событияИнтерактивная карта с метками из вашей базы
Поиск по расстоянию«Клиники в радиусе 10 км»Сохранённые координаты плюс запрос по расстоянию
Маршруты или проездЗоны доставки, «проложить маршрут»Ссылка на маршрут или API маршрутизации

Большинству сайтов малого бизнеса нужна только первая строка. Каталогам, маркетплейсам и сайтам-справочникам нужны третья и четвёртая.

Ваши варианты

ВариантЧто этоСтоимость (на сентябрь 2026 года)Для чего подходит
Google Maps Embed APIiframe, показывающий место или поискПо документации Google, все запросы бесплатны без лимита; нужен API-ключОдно место на странице
Google Maps JavaScript APIПолностью интерактивная карта GoogleDynamic Maps: 10 000 бесплатных событий в месяц, затем платно за каждую тысячуПривычный вид, данные мест Google
Mapbox GL JSИнтерактивные векторные карты с собственным стилемMapbox указывает 50 000 бесплатных загрузок карты в месяц для веба, затем $5,00 за тысячуКарты с собственным оформлением
Leaflet + тайлыБиблиотека карт с открытым кодом; источник тайлов выбираете выСам Leaflet бесплатен; тайлы зависят от провайдераЛёгкие карты, без привязки к вендору

Google Maps Platform

Руководство Google по началу работы говорит, что нужно создать проект Cloud с включённой оплатой и включить нужные API. Тарифы pay-as-you-go дают SKU Essentials, включая Dynamic Maps с бесплатным лимитом 10 000 событий в месяц, и указывают цену Dynamic Maps $7,00 за 1 000 событий сверх этого (на первом уровне объёма). SKU Maps Embed указан как неограниченный и бесплатный. Google также продаёт месячные подписки. Актуальные цифры — на странице цен Google Maps Platform.

Mapbox

На странице цен Mapbox указаны 50 000 бесплатных месячных загрузок карт для Mapbox GL JS в вебе, затем $5,00 за 1 000 загрузок. См. цены Mapbox.

Leaflet и OpenStreetMap

Leaflet описывает себя как библиотеку JavaScript с открытым кодом для интерактивных карт, удобных на мобильных устройствах, размером около 42 КБ. Ей нужны тайлы карты (изображения самой карты) откуда-то ещё. Публичные тайловые серверы OpenStreetMap соблазнительны, но политика использования тайлов требует видимого указания авторства, запрещает массовую загрузку, не даёт никаких гарантий работы и предупреждает коммерческие сервисы, что доступ может быть отозван. Для настоящего продукта используйте коммерческий или собственный источник тайлов, который работает с Leaflet.

API-ключи: публичные, но ограниченные

Ключи карт, используемые в браузере, видны любому, кто открывает вашу страницу. Это ожидаемо, но значит, что кто-то может скопировать ключ и накрутить использование за ваш счёт. Безопасность Google рекомендует добавить ограничения по HTTP-реферу со списком ваших доменов и ограничения по API, чтобы ключ работал только с нужными вам API.

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

Геокодирование: один раз превратите адреса в координаты

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

  1. Когда объявление сохраняется, геокодируйте его адрес на сервере.
  2. Сохраните широту и долготу в базе данных.
  3. Карта читает сохранённые координаты; она никогда не геокодирует при просмотре страницы.

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

Примеры промптов

Одна встроенная карта:

На странице «Контакты» добавь встроенную карту Google с нашим адресом (12 High Street, Leeds), используя Maps Embed API, с ключом в GOOGLE_MAPS_EMBED_KEY. Под ней добавь ссылку «Проложить маршрут». На телефонах карта должна занимать всю ширину, и её нужно загружать лениво.

Интерактивная карта объявлений:

Добавь в таблицу listings широту и долготу. Когда объявление создаётся или меняется его адрес, геокодируй его на сервере с ключом в GEOCODING_API_KEY и сохраняй координаты. На странице «Каталог» покажи карту с меткой для каждого объявления, используя Leaflet, с кластеризацией, когда метки перекрываются. По клику на метку показывай название, цену и ссылку. Карта и список должны использовать одни и те же фильтры.

«Рядом со мной»:

Добавь кнопку «Рядом со мной», которая запрашивает местоположение посетителя и показывает объявления в радиусе 10 км, отсортированные по расстоянию. Если посетитель отказал в доступе к геолокации, пусть вводит город вручную.

Пошагово

  1. Выберите тип карты из таблицы в начале.
  2. Создайте аккаунт у провайдера и проект, и включите только нужные API.
  3. Создайте ключи: браузерный ключ, ограниченный вашими доменами (включая домен предпросмотра на время разработки), и, если нужно, серверный ключ для геокодирования.
  4. Храните ключи в секретах и попросите ваш конструктор использовать их; браузерный ключ всё равно ограничен, даже если попадает на страницу.
  5. Сохраняйте координаты каждого места в базе данных.
  6. Постройте карту: метки, всплывающие окна, кластеризацию и разумный масштаб по умолчанию.
  7. Дополните списком. Одна карта плохо работает на телефоне и для программ чтения с экрана. Показывайте те же результаты в виде списка.
  8. Задайте оповещение о бюджете в консоли провайдера.
  9. Опубликуйте и проверьте на живом домене, поскольку ограничения по рефереру часто блокируют карту, пока не добавлен живой домен.

Частые ошибки

  • Неограниченные ключи. Любой может использовать их на своём сайте.
  • Геокодирование при каждом просмотре страницы. Медленно и дорого; геокодируйте один раз при сохранении.
  • Забыть живой домен в ограничениях ключа. В предпросмотре работает, а в продакшене — пустой серый прямоугольник.
  • Макеты только с картой. Метки без списка неудобны на маленьких экранах и недоступны для незрячих пользователей.
  • Сотни меток без кластеризации. Нечитаемо и медленно.
  • Отсутствие указания авторства. Большинство провайдеров карт и тайлов требуют его, а скрытие нарушает их условия.
  • Запрос геолокации при загрузке страницы. Запрашивайте только по нажатию «Рядом со мной».

Чек-лист

  • Выбран подходящий тип карты для задачи
  • Браузерный ключ ограничен вашими доменами и нужными API
  • Серверные ключи хранятся в секретах
  • Координаты хранятся в базе, геокодирование выполняется один раз
  • Результаты также показаны списком
  • Есть кластеризация для многих меток
  • Указание авторства видно
  • У провайдера задано оповещение о бюджете
  • Проверено на опубликованном домене и на телефоне

Карты в Mythex

В Mythex нет встроенной интеграции с картами; вы используете собственный ключ провайдера, добавляете его как секрет проекта (или вставляете, когда агент покажет карточку секретов) и просите карту в чате, как описано в Интеграции любого API. Координаты хранятся в базе данных проекта. Не забудьте добавить и домен предпросмотра, и опубликованный домен в ограничения ключа по сайтам, и публикуйте приложение заново после изменения секретов.

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

Вопросы

Как проще всего добавить карту на сайт?

Встройте одну карту с меткой, например через Maps Embed API от Google в iframe. По документации Google, запросы Maps Embed бесплатны и без лимита использования, но ключ API всё равно нужен.

Бесплатен ли Google Maps для использования в приложении?

Частично. По состоянию на сентябрь 2026 года тариф pay-as-you-go от Google даёт каждому SKU Essentials, включая Dynamic Maps, 10 000 бесплатных событий в месяц, а Maps Embed не ограничен и бесплатен. Чтобы начать, всё равно нужен проект Google Cloud с включённой оплатой.

Безопасно ли класть ключ Google Maps API в браузер?

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

Можно ли бесплатно использовать OpenStreetMap?

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

Mythex · Pricing · Создавайте что угодно с ИИ · Шаблоны сайтов и приложений · Сравнения Mythex · Глоссарий по созданию приложений с ИИ · Бесплатные инструменты для создания приложений с ИИ · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)