# ----------------------------------------------------------------------
# 1. Установка и загрузка пакетов
# ----------------------------------------------------------------------
# install.packages(c("dplyr", "stringr", "tmaptools", "htmltools"))
library(dplyr)
library(stringr)
library(tmaptools) # для геокодирования (если нужно)
library(htmltools) # для сохранения HTML
# ----------------------------------------------------------------------
# 2. Создание таблицы с объектами
# ----------------------------------------------------------------------
# ВНИМАНИЕ: для корректной работы укажите реальные координаты!
# Если координаты неизвестны, оставьте NA – потом заполните вручную
# или используйте геокодер (см. раздел 3).
df <- data.frame(
name = c(
"СК «Академический»", "СК «Аквамарин»", "СК «Акварис»",
"Аквастудия на Береговой", "СК «Акватория ЗИЛ»", "Атлетический клуб «Аксон»",
"СК «Альбатрос Внуково»", "Арбат Бассейн", "СК «Братеево»",
"СК «Вешняки»", "СК «Волна»", "СК «Вороново»",
"СК «Восход Солнцево»", "СК «Вымпел»", "СК «Горизонт»",
"СК «Заряд»", "СК «Изумрудный»", "СК «Качаловский»",
"ДС «Квант»", "СК «Кировский»", "СК «Коломенский»",
"Стадион «Косино»", "СК «Красный Маяк»", "СК «Красный Октябрь»",
"СК «Лазурный»", "Стадион «Локомотив»", "СК «Максимум»",
"СК «Малино»", "СК «Марьина Роща»", "Бассейн «Марьино»",
"СК «Медведково-Арена»", "Бассейн «Медынский»", "Бассейн «Московский»",
"СК «Московский»", "СК «На Инженерной»", "СК «На Таганке»",
"СК «Надежда»", "ДС «Некрасовка»", "СК «Ника»",
"ЦБ «Новая звезда»", "СК «Новая Москва»",
"Олимпийский центр синхронного плавания", "СК «Олимпия»",
"СК «Парус»", "СК «Пегас»", "СДЦ «Первомайское»",
"СК «Раменки»", "СК «Речной»", "ЦСП «Северный»",
"СК «Серебряный»", "СК «Содружество»", "СК «Солнечный»",
"СК «Союз»", "СК «Спутник Арена»", "СК «Стальной»",
"БГС «Сходня»", "МФК «Сходня»", "СК «Умка»",
"СК «Формула воды»", "СК «Эдельвейс»", "СК «Южнопортовый»",
"ДС «Янтарь»", "СК «Яуза»"
),
type = c(
"Бассейн", "Бассейн", "Бассейн",
"Бассейн", "Бассейн / Зал", "Тренажёрный зал",
"Бассейн", "Бассейн", "Бассейн / Зал",
"Бассейн / Зал", "Бассейн", "Тренажёрный зал",
"Бассейн", "Тренажёрный зал", "Бассейн / Зал",
"Бассейн / Зал", "Бассейн", "Бассейн / Зал",
"Тренажёрный зал", "Тренажёрный зал", "Бассейн / Зал",
"Тренажёрный зал", "Тренажёрный зал", "Бассейн / Зал",
"Бассейн", "Тренажёрный зал", "Бассейн",
"Бассейн / Зал", "Тренажёрный зал", "Бассейн",
"Тренажёрный зал", "Бассейн", "Бассейн",
"Тренажёрный зал", "Тренажёрный зал", "Тренажёрный зал",
"Бассейн", "Бассейн / Зал", "Бассейн / Зал",
"Тренажёрный зал", "Тренажёрный зал",
"Бассейн", "Бассейн",
"Бассейн", "Бассейн / Зал", "Тренажёрный зал",
"Бассейн / Зал", "Тренажёрный зал", "Бассейн / Зал",
"Бассейн / Зал", "Тренажёрный зал", "Тренажёрный зал",
"Бассейн", "Бассейн / Зал", "Бассейн / Зал",
"Тренажёрный зал", "Бассейн / Зал", "Бассейн / Зал",
"Бассейн", "Тренажёрный зал", "Бассейн",
"Бассейн / Зал", "Бассейн"
),
# Заполните координаты вручную (широта, долгота)
# Примеры для некоторых объектов:
lat = c(
55.855, NA, NA, # СК Академический (приблизительно)
55.831423, NA, NA, # СК Аквамарин
NA, NA, NA,
55.613489, NA, NA, # СК Альбатрос Внуково
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA
),
lng = c(
37.545, NA, NA,
37.366574, NA, NA,
NA, NA, NA,
37.310375, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA,
NA, NA, NA
),
stringsAsFactors = FALSE
)
# ----------------------------------------------------------------------
# 3. (Опционально) Автоматическое геокодирование недостающих координат
# Раскомментируйте блок ниже, если хотите заполнить координаты через OSM.
# ВНИМАНИЕ: может занять время и не все объекты будут найдены.
# ----------------------------------------------------------------------
# for (i in 1:nrow(df)) {
# if (is.na(df$lat[i])) {
# query <- paste0(df$name[i], " Москва")
# coords <- tryCatch(
# geocode_OSM(query, as.data.frame = TRUE),
# error = function(e) NULL
# )
# if (!is.null(coords) && nrow(coords) > 0) {
# df$lat[i] <- coords$y[1]
# df$lng[i] <- coords$x[1]
# }
# }
# }
# ----------------------------------------------------------------------
# 4. Формирование HTML-кода для вставки в Tilda
# ----------------------------------------------------------------------
# Генерируем уникальные ID для попапов
df$popup_id <- paste0("popup:sk_", 1:nrow(df))
# Выбираем иконку для меток (можно задать общую или индивидуальную)
# В примере используется SVG-иконка, можно заменить на свою
icon_url <- "https://static.tildacdn.com/tild3531-3165-4337-b439-316461663532/___6.svg"
# Начало HTML-документа
html_header <- '
Карта спортивных объектов
'
# Блок для отображения активной метки (можно разместить в ZeroBlock Tilda)
place_block <- '
'
# Скрытые ссылки-триггеры для каждого попапа (будут добавлены внизу)
triggers <- sapply(seq_len(nrow(df)), function(i) {
sprintf('
',
df$popup_id[i], i)
})
# Скрипт для создания карты и меток
js_script_start <- '
'
# Собираем полный HTML
html_body <- paste(
html_header,
'
',
place_block,
paste(triggers, collapse = "\n"),
'',
js_script_start,
js_placemarks,
js_script_end,
'',
sep = "\n"
)
# ----------------------------------------------------------------------
# 5. Сохранение HTML-файла для вставки в Tilda
# ----------------------------------------------------------------------
writeLines(html_body, "map_yandex_for_tilda.html")
cat("Готово! Файл 'map_yandex_for_tilda.html' создан.\n",
"Откройте его в браузере для проверки, затем скопируйте содержимое\n",
"в блок HTML-кода на Tilda.\n")
# Если нужно сразу открыть в браузере:
# browseURL("map_yandex_for_tilda.html")