Зміст

MapCore

Зручний шар абстракції над Leaflet для побудови інтерактивних карт. MapCore збирає карту на боці серверу: контейнер, центр/зум, маркери та фігури, іконки, додатковий JS - а потім віддає готовий HTML + Leaflet-скрипт через render().

Базовий життєвий цикл

  1. Створити інстанс з унікальним id контейнера
  2. Налаштувати центр, зум, тип шару
  3. Додати об'єкти (addMarker, addCircle, …)
  4. Вивести renderContainer() + render()
$map = new MapCore('mymap');
$map->setCenter('48.595098,24.380122');
$map->setZoom(15);
$map->setType('roadmap'); // roadmap|satellite|hybrid|terrain
 
$map->addMarker('48.595098,24.380122', 'Опис точки', array(
    'icon' => 'marker.red',
    'tooltip' => 'Підказка',
    'popupTitle' => 'Заголовок',
    'popupFooter' => '<a href="?module=userprofile&username=test">Profile</a>',
    'id' => 'point-1' // опційно: ключ у JS-реєстрі ubMapMarkers
));
 
show_window(__('Map'), $map->renderContainer('100%', '500px') . $map->render());

Координати завжди у форматі “lat,lng”.

Більшість setter/add-методів повертають $this.

Конфігурація карти

Метод Що робить
setCenter($coords) Центр карти. Порожньо = геолокація браузера
setZoom($zoom) / setMaxZoom($z) Початковий і максимальний зум
setType($type) Базовий шар: roadmap / satellite / hybrid / terrain
setSearchPrefill($text) Prefill у геокодері
setRememberZoom() / setRememberPosition() / setRememberLayer() Збереження стану в localStorage
setClustering($bool, $opts) Кластеризація маркерів
setForceCanvasMarkers($bool) Canvas-рендер маркерів (для великих карт)
setMarkerToggleShellEnabled() Усі маркери в L.layerGroup (ubMarkerToggleShell)
setFpsMeter() FPS-оверлей
addRawJs($js) / addScriptSrc($url) Додатковий JS / зовнішні скрипти
addLocationEditor($field, $title, $formHtml) Клік по карті → координати у форму

Частина опцій автоматично підхоплюється з ymaps.ini (tile layer, canvas render, metrics, remember layer).

Об'єкти на карті

Метод Опис
addMarker($coords, $popup, $opts) Звичайний маркер
addDynamicMarker($coords, $title, $url, $opts) Маркер з AJAX-popup (fetch URL)
addCircleMarker($coords, $radiusPx, $popup, $opts) Круглий маркер з діаметром у пікселях
addCircle($coords, $radiusM, $popup, $opts) Коло в метрах
addLine($a, $b, $opts) Відрізок між двома точками
addPolyline($points, $popup, $opts) Ламана (масив “lat,lng”)
addPolygon($points, $popup, $opts) Полігон
addRectangle($sw, $ne, $popup, $opts) Прямокутник (SW + NE)
addGeoJSON($geoJson, $opts) GeoJSON-шар (RFC 7946)

Поширені опції фігур: color, fillColor, opacity, fillOpacity, weight, hint, popupTitle, dashArray.

Іконки

Вбудовані ключі: marker.blue/red/yellow/green/pink/brown/darkblue/orange/grey/black, marker.building/house/camping/wifi/camera/waterfall, vehicle.red/green/yellow.

$map->registerIcon('my.icon', 'skins/mymark.png');
$map->addMarker('48.595098,24.380122', 'Hi', array('icon' => 'my.icon'));

Статика: MapCore::getIconKeys(), resolveIconPath(), registerIconDefinition().

Композиція шарів

Можна зібрати об'єкти в одному інстансі і влити в інший (міні-карти, комбіновані оверлеї):

$layer = new MapCore('tmp');
$layer->addMarker('48.595098,24.380122', 'Build');
 
$map = new MapCore('main');
$map->setCenter('48.595098,24.380122')->setZoom(16);
$map->injectMapObjects($layer);          // або $layer->getMapObjects()
// $map->injectMapObjects($payload, true); // replace замість append

Також: getPlacemarks() / injectPlacemarks(), getObjectCounts().

Рендер

Важливо: контейнер має бути в DOM до виклику render().

Додатково