Make It Better .su

yiimaps

Модуль yiimaps - это менеджер для Yii Framework 2.0 для работы с координатами и картами. В работе модуля используется API Яндекс.карт.

Установка:

Скачайте пакет с помощью Composer:

composer require makeitbetter/yiimaps

или клонируйте репозиторий с BitBucket:

git clone https://bitbucket.org/makeitbetter/yiimaps.git

Включите модуль в файле конфигурации (см. руководство):

'modules' => [
  ...
  'yiimaps' => [
    'class' => 'makeitbetter\yiimaps\Module',
	'options' => [
		'roles' => ['@']
	],
  ],
  ...
],
...

Использвание:
Поле ввода координат

use makeibetter\yiimaps\widgets\CoordsInput;
...
echo $form->field($model, 'property_name')->widget(CoordsInput::className(), $options);
...
// Или без объекта ActiveForm:
echo CoordsInput::widget(['model' => $model, 'attribute' => 'property_name']);

Допустимые опции:
lat - имя атрибута модели для хранения широты (по умолчанию lat)
lon - имя атрибута модели для хранения долготы (по умолчанию lon)

Демо:



Показ моделей на карте

Простое использование

use makeibetter\yiimaps\widgets\YandexMap;
...
$models = Addresses::find()->all();

echo YandexMap::widget([
  'models' => $models,
]);

Здесь в моделях для координат исползуются стандартные свойства типа float - lat и lon. Если в ваших моделях свойства названы по-другому, используйте соответствующие параметры:

  'lat' => 'latitude',
  'lon' => 'longitude',

Показываемый при клике текст задаётся в свойстве balloonContent (здесь через геттер getBalloonContent()). Имя свойства, так же, может быть изменено через параметр:

  'balloonContent' => 'displayed_html',

Группировка моделей

$models = Persons::find()
  ->with('address')
  ->all();

echo YandexMap::widget([
  'models' => $models,
  'groupBy' => 'address.id',
]);

Здесь используются список моделей, координаты которых определены только в связанных сущностях. Модели, связанные с одной сущностью будут показаны на карте одной точкой.

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

Вид метки

echo YandexMap::widget([
  'models' => $models,
  'placemarkIcon' => [
    'Санкт-Петербург' => 'islands#yellowDotIcon',
    'İstanbul' => 'islands#darkGreenDotIcon',
    'default' => 'islands#violetCircleDotIcon',
  ],
  'placemark' => 'line2',
]);

Что бы поменять используемую по умолчанию метку (islands#redDotIcon), укажите новое значение в параметре placemarkIcon. Если в параметр передать массив, его ключи будут сравниваться со значением свойства, переданным в параметре placemark. Значение метки с ключом "default" будет применено к моделям, для которых совпадений не найдено.

Клястеризация

echo YandexMap::widget([
  'models' => $models,
  'useClusterer' => true,
  'clustererIcon' => 'islands#invertedRedClusterIcons',
  'mapHeight' => '300px',
  'mapWidth' => '100%',
]);

Для включения клястеризации переключите параметр useClusterer в true. Вид и цвет значка клястера так же можно изменить, указав новое значение в параметре clastererIcon (по умолчанию используется islands#invertedBlackClusterIcons).

Размеры карты можно указать в параметрах mapHeight (по умолчанию - 300px) и mapWidth (по умолчанию - 100%)