ymaps.ready(MapInit);
function MapInit()
{
console.log("MapInit");
YandexMapInit();
CollectionsInit();
GetDate();
SliderInit();
GetAllPoints(CurrentMinYear, CurrentMaxYear);
}
var Collections;
var CollectionVisible;
var Map;
var CurrentZoom;
var MinYear;
var MaxYear;
var CurrentMinYear;
var CurrentMaxYear;
//var clusterer;
var ConstPopulation = Object.freeze({
10000: "Zoom_8",
5000: "Zoom_9",
1000: "Zoom_10",
800: "Zoom_11",
600: "Zoom_12",
400: "Zoom_13",
200: "Zoom_14",
100: "Zoom_15",
60: "Zoom_16",
20: "Zoom_17",
10: "Zoom_18",
0: "Zoom_19"
});
// Функция загрузки Яндекс карты
function YandexMapInit()
{
Map = new ymaps.Map
('map', {
center: [51.533103, 46.034158],
zoom: 8,
type: 'yandex#satellite'/*'yandex#hybrid'*/,
controls: ['zoomControl', 'rulerControl']
},
{
// Ограничим область карты.
restrictMapArea: [[48.795, 41.484], [53.823, 51.856]]
//restrictMapArea: [[49.795, 42.484], [52.823, 50.856]]
}
);
CurrentZoom = Map.action.getCurrentState().zoom;
Map.controls.get('zoomControl').options.set({ size: 'auto' });
Map.controls.add(new ymaps.control.TypeSelector(['yandex#map', 'yandex#satellite'/*, 'yandex#hybrid'*/]));
// Будем отслеживать зум карты при смене видимых границ (движение карты и смена zoom)
Map.events.add('boundschange', function (event)
{
CurrentZoom = event.get('newZoom');
if (CurrentZoom != event.get('oldZoom'))
{
console.log(event.get('oldZoom') + " " + CurrentZoom);
SelectDataFromArrays(true, true);
}
});
// Загрузим регионы.
ymaps.borders.load
('RU', { lang: 'ru', quality: 3 }).then
(function (result) {
// Создадим многоугольник, который будет скрывать весь мир, кроме заданной области.
var background = new ymaps.Polygon
(
[[
[85, -179.99],
[85, 179.99],
[-85, 179.99],
[-85, -179.99],
[85, -179.99]
]],
{},
{
fillColor: '#ffffff',
strokeWidth: 0,
// Для того чтобы полигон отобразился на весь мир, нам нужно поменять
// алгоритм пересчета координат геометрии в пиксельные координаты.
coordRendering: 'straightPath'
}
);
// Найдём область по её iso коду.
var region = result.features.filter(function (feature) { return feature.properties.iso3166 == 'RU-SAR'; })[0];
// Добавим координаты этой области в полигон, который накрывает весь мир.
// В полигоне образуется полость, через которую будет видно заданную область.
var masks = region.geometry.coordinates;
masks.forEach(function (mask) { background.geometry.insert(1, mask); });
// Добавим многоугольник на карту.
Map.geoObjects.add(background);
});
//Создание кластера
//clusterer = new ymaps.Clusterer({
// /**
// * Через кластеризатор можно указать только стили кластеров,
// * стили для меток нужно назначать каждой метке отдельно.
// * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/option.presetStorage.xml
// */
// preset: 'islands#invertedVioletClusterIcons',
// /**
// * Ставим true, если хотим кластеризовать только точки с одинаковыми координатами.
// */
// groupByCoordinates: false,
// /**
// * Опции кластеров указываем в кластеризаторе с префиксом "cluster".
// * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/ClusterPlacemark.xml
// */
// clusterDisableClickZoom: true,
// clusterHideIconOnBalloonOpen: false,
// geoObjectHideIconOnBalloonOpen: false
//});
//clusterer.options.set({
// gridSize: 500,
// clusterDisableClickZoom: true
//});
}
// Функция создания слайдера дат и обработчик поля ввода дат
function SliderInit() {
// $j optional alias to jQuery noConflict()
var $j = jQuery.noConflict();
var $slider;
$j(document).ready(function () {
$slider = $("#slider").ionRangeSlider({
skin: "modern",
hide_min_max: true,
type: "double",
grid: true,
drag_interval: true,
min: MinYear,
max: MaxYear,
from: CurrentMinYear,
to: new Date().getFullYear(),
onFinish: function (data) {
console.log("finish");
// Вызывается, когда пользователь перетсал двигать ползунок слайдера
SliderOnFinishMoving(data);
},
onUpdate: function (data) {
console.log("update");
// Вызывается, когда значение слайдера изменилось с помощью некоторой функции (см. обработчик inputField)
SliderOnFinishMoving(data);
}
});
});
// Поле ввода даты. Обработчик изменения дат слайдера
var inputFieldYear = document.getElementById('inputYear');
inputFieldYear.oninput = function () {
if (inputFieldYear.value <= MaxYear && inputFieldYear.value >= MinYear) {
var slider_instance = $slider.data("ionRangeSlider");
slider_instance.update({
from: inputFieldYear.value,
to: inputFieldYear.value
});
}
};
// Обработчик кнопки поиска по имени
$('#buttonSearch').bind('click', function () {
//alert($(this).text());
var resultName = document.getElementById('inputName').value;
if (resultName.length != 0)
OnFindNameUsing(resultName);
});
}
function AutoCompleteInit(data) {
$('input#inputName').autocomplete({
source: function (request, response) {
var results = $.ui.autocomplete.filter(data, request.term);
var value = document.getElementById('NameCount').value;
if (isNaN(value) || value <= 0)
value = 10;
response(results.slice(0, value));
},
minLength: 2,
delay: 300,
select: function(event, ui) {
//$('#sku').val(skus[ui.item.value]);
OnFindNameUsing(ui.item.value)
}
});}
// Функция создания коллекций Яндекс-объектов
function CollectionsInit() {
// Набор массивов, которые формируются для более гибкого отображения данных на странице.
// Являются параметрами глобальной переменной-объекта.
Collections = new Object();
Collections.All = new Array();
Collections.Religion_1 = new Array();
Collections.Religion_2 = new Array();
Collections.Religion_3 = new Array();
Collections.Religion_4 = new Array();
Collections.Zoom_8 = new Array();
Collections.Zoom_9 = new Array();
Collections.Zoom_10 = new Array();
Collections.Zoom_11 = new Array();
Collections.Zoom_12 = new Array();
Collections.Zoom_13 = new Array();
Collections.Zoom_14 = new Array();
Collections.Zoom_15 = new Array();
Collections.Zoom_16 = new Array();
Collections.Zoom_17 = new Array();
Collections.Zoom_18 = new Array();
Collections.Zoom_19 = new Array();
Collections.FindName = new Array();
Collections.Names = new Array();
Collections.Export = new Array();
// Коллекция для отражения данных на карте.
CollectionVisible = new ymaps.GeoObjectCollection({},
{
// Параметр коллекции всех элементов, отображающий название в красной рамке
preset: 'islands#redStretchyIcon'
});
}