var objectManager;
var myMap;
var accessScroll = true;
var showRightObject = [];
var polygons = [];
var modalMap = null;
var inProgress = false;
var buttonEditMode = null;
var buttonClearMode = null;
var mapGroup = null;
function openMap(el) {
$('.map-modal').css('padding-top', '0');
if (modalMap == null) {
modalMap = new ymaps.Map("map-modal__content", {
center: [59.9174455, 30.3250575],
zoom: 19,
controls: ['fullscreenControl', 'zoomControl']
},{
fullscreenZIndex : 999999999,
autoFitToViewport : 'always'
});
} else {
modalMap.geoObjects.removeAll();
}
var address = $(el).parents('.object__content').find('.address').text();
var latitude = $(this).attr('data-latitude');
var longitude = $(this).attr('data-longitude');
if (latitude && longitude) {
var firstGeoObject = new ymaps.Placemark([
Number.parseFloat(latitude).toPrecision(9),
Number.parseFloat(longitude).toPrecision(9)
], {}, { draggable:false});
firstGeoObject.options.set('preset', 'islands#darkBlueDotIconWithCaption');
// Получаем строку с адресом и выводим в иконке геообъекта.
firstGeoObject.properties.set('iconCaption', address);
myMap.geoObjects.add(firstGeoObject);
myMap.setCenter(firstGeoObject.geometry.getCoordinates(), 14);
} else {
ymaps.geocode(address, {results: 1})
.then(function (res) {
var firstGeoObject = res.geoObjects.get(0),
// Координаты геообъекта.
coords = firstGeoObject.geometry.getCoordinates(),
// Область видимости геообъекта.
bounds = firstGeoObject.properties.get('boundedBy');
var placemark = new ymaps.Placemark([
Number.parseFloat(coords[0]).toPrecision(9),
Number.parseFloat(coords[1]).toPrecision(9)
], {
iconCaption: firstGeoObject.getAddressLine(),
hintContent: firstGeoObject.getAddressLine()
}, {preset: 'islands#darkBlueDotIconWithCaption', draggable: false});
modalMap.geoObjects.add(placemark);
// Масштабируем карту на область видимости геообъекта.
modalMap.setBounds(bounds, {
// Проверяем наличие тайлов на данном масштабе.
checkZoomRange: true
});
});
}
}
function loadRadiusOrMapData(page = 1) {
var button = $('.tab__controls-toggler-container .tab__controls-toggler.is-active');
if (button.attr('data-view-type') === 'map') {
loadRadiusDataMap();
} else {
loadRadiusData(page);
}
}
function loadRadiusData(page = 1) {
var button = $('.js-modal-tab.is-active');
if (button.attr('data-id') === 'tab_3') {
$('.modal__content .analytics-obj-list .object').html('');
$('#analyticsRadiusBlock').hide();
if (polygons && polygons.length) {
var objId = $("#selectedObjId").val();
var openedForCabinet = $("#openedForCabinet").val();
if (objId) {
$('.modal__content .analytics-obj-list .object').html('

');
var areaFrom = $("#areaFrom").val();
var areaTo = $("#areaTo").val();
var kitchenAreaFrom = $("#kitchenAreaFrom").val();
var kitchenAreaTo = $("#kitchenAreaTo").val();
var yearFrom = $("#yearFrom").val();
var yearTo = $("#yearTo").val();
var kvType = $("#analytics-filter-kv-type").val();
var commType = $("#analytics-filter-comm-type").val();
var order = $('#filter-sort-order').val();
var geoArr1, geoArr2, geoArr3, geoArr4 = [];
if (polygons[0]) {
geoArr1 = polygons[0].geometry.getCoordinates();
}
if (polygons[1]) {
geoArr2 = polygons[1].geometry.getCoordinates();
}
if (polygons[2]) {
geoArr3 = polygons[2].geometry.getCoordinates();
}
if (polygons[3]) {
geoArr4 = polygons[3].geometry.getCoordinates();
}
var coordsToScript1 = "";
var coordsToScript2 = "";
var coordsToScript3 = "";
var coordsToScript4 = "";
if (geoArr1 && geoArr1.length) {
if (geoArr1[0] && geoArr1[0].length) {
for (var j = 0; j <= geoArr1[0].length; j++) {
if (geoArr1[0][j] && geoArr1[0][j].length) {
if (coordsToScript1) {
coordsToScript1 += ","
}
coordsToScript1 += geoArr1[0][j][0] + "," + geoArr1[0][j][1];
}
}
}
}
if (geoArr2 && geoArr2.length) {
if (geoArr2[0] && geoArr2[0].length) {
for (var j = 0; j <= geoArr2[0].length; j++) {
if (geoArr2[0][j] && geoArr2[0][j].length) {
if (coordsToScript2) {
coordsToScript2 += ","
}
coordsToScript2 += geoArr2[0][j][0] + "," + geoArr2[0][j][1];
}
}
}
}
if (geoArr3 && geoArr3.length) {
if (geoArr3[0] && geoArr3[0].length) {
for (var j = 0; j <= geoArr3[0].length; j++) {
if (geoArr3[0][j] && geoArr3[0][j].length) {
if (coordsToScript3) {
coordsToScript3 += ","
}
coordsToScript3 += geoArr3[0][j][0] + "," + geoArr3[0][j][1];
}
}
}
}
if (geoArr4 && geoArr4.length) {
if (geoArr4[0] && geoArr4[0].length) {
for (var j = 0; j <= geoArr4[0].length; j++) {
if (geoArr4[0][j] && geoArr4[0][j].length) {
if (coordsToScript4) {
coordsToScript4 += ","
}
coordsToScript4 += geoArr4[0][j][0] + "," + geoArr4[0][j][1];
}
}
}
}
if (coordsToScript1 || coordsToScript2 || coordsToScript3 || coordsToScript4) {
$.ajax({
url: '/ajax/analytics/loadAnalyticsPolygons.php',
method: "post",
data: {
"objId": objId,
"areaFrom": areaFrom,
"areaTo": areaTo,
"kitchenAreaFrom": kitchenAreaFrom,
"kitchenAreaTo": kitchenAreaTo,
"yearFrom": yearFrom,
"yearTo": yearTo,
"kvType": kvType,
"commType": commType,
"page": page,
"poly1": coordsToScript1,
"poly2": coordsToScript2,
"poly3": coordsToScript3,
"poly4": coordsToScript4,
"cabinet": openedForCabinet,
"order": order,
},
success: function (data) {
$(".modal__content .analytics-obj-list .object").html(data);
let modalContainer = document.querySelector('.analytics-modal').querySelector('.modal__container');
modalContainer.scrollTo({
top: 0
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
} else {
alert("Необходимо нарисовать хотя бы одну область на карте, максимальное кол-во областей 4. Для отрисовки нажмите кнопку редактировать в области карты")
}
}
} else {
$('.modal__content .analytics-obj-list .object').html('Необходимо указать хотя бы одну область на карте');
}
} else {
if (!$('.analytics-obj-list').hasClass('is-active')) {
$('.analytics-obj-list').addClass("is-active");
$('.analytics-obj-map').removeClass("is-active");
}
clearPolygons();
$('#analyticsRadiusBlock').show();
var objId = $("#selectedObjId").val();
var openedForCabinet = $("#openedForCabinet").val();
if (objId) {
$('.modal__content .analytics-obj-list .object').html('
');
var rangeFrom = $("#rangeFrom").val();
var rangeTo = $("#rangeTo").val();
var areaFrom = $("#areaFrom").val();
var areaTo = $("#areaTo").val();
var kitchenAreaFrom = $("#kitchenAreaFrom").val();
var kitchenAreaTo = $("#kitchenAreaTo").val();
var yearFrom = $("#yearFrom").val();
var yearTo = $("#yearTo").val();
var selectedObjLat = $("#selectedObjLat").val();
var selectedObjLon = $("#selectedObjLon").val();
var kvType = $("#analytics-filter-kv-type").val();
var commType = $("#analytics-filter-comm-type").val();
var order = $('#filter-sort-order').val();
$.ajax({
url: '/ajax/analytics/loadAnalyticsRadius.php',
method: "post",
data: {
"objId": objId,
"rangeFrom": rangeFrom,
"rangeTo": rangeTo,
"areaFrom": areaFrom,
"areaTo": areaTo,
"kitchenAreaFrom": kitchenAreaFrom,
"kitchenAreaTo": kitchenAreaTo,
"yearFrom": yearFrom,
"yearTo": yearTo,
"kvType": kvType,
"commType": commType,
"page": page,
"selectedObjLat": selectedObjLat,
"selectedObjLon": selectedObjLon,
"cabinet": openedForCabinet,
"order": order
},
success: function (data) {
$(".modal__content .analytics-obj-list .object").html(data);
let modalContainer = document.querySelector('.analytics-modal').querySelector('.modal__container');
modalContainer.scrollTo({
top: 0
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
}
}
}
function clearPolygons() {
if (myMap && myMap.geoObjects) {
for (var i = 0; i <= polygons.length; i++) {
if (polygons[i]) {
myMap.geoObjects.remove(polygons[i]);
}
}
polygons = [];
if (objectManager) {
objectManager.removeAll();
}
}
}
function loadCurrentHouseData(page = 1) {
if (!$('.analytics-obj-list').hasClass('is-active')) {
$('.analytics-obj-list').addClass("is-active");
$('.analytics-obj-map').removeClass("is-active");
}
var objId = $("#selectedObjId").val();
var openedForCabinet = $("#openedForCabinet").val();
if (objId) {
$('.modal__content .analytics-obj-list .object').html('
');
$.ajax({
url: '/ajax/analytics/loadAnalyticsCurrentHouse.php?objectId=' + objId + "&page=" + page + (openedForCabinet ? "&cabinet=1" : ""),
success:function(data){
$(".modal__content .analytics-obj-list .object").html(data);
let modalContainer = document.querySelector('.analytics-modal').querySelector('.modal__container');
modalContainer.scrollTo({
top: 0
});
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
}
}
function loadRadiusDataMap() {
var button = $('.js-modal-tab.is-active');
if (button.attr('data-id') === 'tab_3') {
ymaps.ready(function () {
if (!initMap(true)) {
loadMapObjectsInPolygons();
}
});
} else {
ymaps.ready(function () {
if (!initMap(false)) {
sendObjectsMapRequest();
}
if (buttonEditMode) {
myMap.controls.remove(buttonEditMode);
buttonEditMode = null;
}
if (buttonClearMode) {
myMap.controls.remove(buttonClearMode);
buttonClearMode = null;
}
});
}
$('.map-view-container .object').scroll(function () {
if (accessScroll) {
if ($('.map-view-container .object').scrollTop() + $('.map-view-container .object').height() >= $('.map-view-container .object__list').height() - 200 && !inProgress) {
var count = $('.map-view-container .object-card').length;
var countLimit = count + 10;
for (var i = count; i < countLimit; i++) {
if (showRightObject[i]) {
accessScroll = false;
$('').insertAfter($('.map-view-container .object ul li:last'));
}
}
getAnalyticsBaloonContent();
}
}
});
}
function sendObjectsMapRequest() {
var objId = $("#selectedObjId").val();
if (objId) {
$('.map-view-container .object__list').html("");
var rangeFrom = $("#rangeFrom").val();
var rangeTo = $("#rangeTo").val();
var areaFrom = $("#areaFrom").val();
var areaTo = $("#areaTo").val();
var kitchenAreaFrom = $("#kitchenAreaFrom").val();
var kitchenAreaTo = $("#kitchenAreaTo").val();
var yearFrom = $("#yearFrom").val();
var yearTo = $("#yearTo").val();
var kvType = $("#analytics-filter-kv-type").val();
var commType = $("#analytics-filter-comm-type").val();
var selectedObjLat = $("#selectedObjLat").val();
var selectedObjLon = $("#selectedObjLon").val();
var order = $('#filter-sort-order').val();
clearPolygons();
$.ajax({
url: '/ajax/analytics/loadAnalyticsRadiusMap.php',
method: "post",
data: {
"objId": objId,
"rangeFrom": rangeFrom,
"rangeTo": rangeTo,
"areaFrom": areaFrom,
"areaTo": areaTo,
"kitchenAreaFrom": kitchenAreaFrom,
"kitchenAreaTo": kitchenAreaTo,
"yearFrom": yearFrom,
"yearTo": yearTo,
"selectedObjLat": selectedObjLat,
"selectedObjLon": selectedObjLon,
"kvType": kvType,
"commType": commType,
"order": order
},
success:function(data){
var resParsed = JSON.parse(data);
objectManager.add(resParsed.data);
eval(resParsed.script);
checkVisibleOrCenterAnalytics();
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
}
}
function checkVisibleOrCenterAnalytics() {
var mapList = $('.map-view-container .object__list');
if (objectManager && objectManager.objects && objectManager.objects.getLength() > 0) {
var htm = '';
var limit = 0;
var i = 0;
showRightObject = [];
objectManager.objects.each(function (object) {
var objectState = objectManager.getObjectState(object.id);
if (objectState.isShown) {
if (limit < 10) {
limit++;
htm = htm + ' ';
}
showRightObject[i] = object.properties.balloonContent;
i++;
}
});
mapList.html(htm + '');
if (!showRightObject[0]) {
mapList.html('По вашему запросу ничего не найдено
');
}
getAnalyticsBaloonContent();
}
}
function getAnalyticsBaloonContent(){
var openedForCabinet = $("#openedForCabinet").val();
$('.map-view-container .object__list li').each(function(index, element){
var classLi = $(this).attr('class');
if (classLi) {
var id = classLi.replace(/[^\d;]/g, '');
var objId = $("#selectedObjId").val();
if (id > 0 && objId > 0) {
$.ajax({
url: "/ajax/analytics/getAnalyticsBaloon.php?id=" + id + "&selObjId=" + objId + (openedForCabinet ? "&cabinet=1" : ""),
success: function (data) {
$('.item_map' + id).replaceWith(data.responseText);
if ((index + 1) === $('.map-view-container .object .object__list li').length) {
accessScroll = true;
}
},
error: function (data) {
$('.item_map' + id).replaceWith(data.responseText);
if ((index + 1) === $('.map-view-container .object .object__list li').length) {
accessScroll = true;
}
}
});
}
}
});
}
function initPaging() {
objectManager = null;
accessScroll = true;
inProgress = false;
showRightObject = [];
modalMap = null;
inProgress = false;
buttonEditMode = null;
buttonClearMode = null;
mapGroup = null;
}
$("body").on('click', '.obj-analysis-paging2', function (e) {
e.stopPropagation();
var pageNum = $(this).attr('data-page-num');
loadCurrentHouseData(pageNum);
return false;
});
$("body").on('click', '.obj-analysis-paging3', function (e) {
e.stopPropagation();
var pageNum = $(this).attr('data-page-num');
loadRadiusData(pageNum);
return false;
});
$("body").on('click', '.obj-analysis-paging15', function (e) {
e.stopPropagation();
var pageNum = $(this).attr('data-page-num');
loadRadiusData(pageNum);
return false;
});
function getReSearchObjectsCountsAnalytics() {
if ($('.object-card__action .fltr-req-list').length > 0) {
$('.object-card__action .fltr-req-list').each(function(index) {
let object_id = $(this).data("id");
if (typeof object_id !== "undefined") {
axios.post('/ajax/ajax_vue_autosearch.php', {
request: 'get_reverse_counter',
object_id: object_id
}).then((response)=> {
let time = response.data.time;
let total = response.data.total;
if (time && total) {
$(this).attr("data-time", time);
$(this).attr("data-total", total);
$(this).append(''+total+'');
}
}).catch(function (error) {
console.log(error);
});
}
});
}
}
function openObjectList(part, objectId) {
if (objectId) {
objId = objectId;
} else {
var objId = $("#selectedObjId").val();
}
if (objId) {
$('#objectsAnalysisContainer').html('');
$("#modalObjectsAnalysis_bg").fadeIn(500);
$("#modalObjectsAnalysis").toggle(10);
$("body").addClass("lock");
$.ajax({
url: '/ajax/analytics/getAnalyticsObjectList.php?page=1&objectId=' + objId + '&analysisPart=' + part,
success: function (data) {
$("#objectsAnalysisContainer").html(data);
setTimeout(function () {
$('#objectsAnalysisContainer .fotorama').fotorama();
}, 100);
$("#modalObjectsAnalysis").get(0).scrollIntoView();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown);
}
});
}
}
function showTerritoryMap() {
$('.modal__content .analytics-obj-list .object').html('Необходимо указать хотя бы одну область на карте');
$('#analyticsRadiusBlock').hide();
$("#analyticsDempAllPrice").html("-");
$("#analyticsNowPrice").html("-");
$("#analyticsAvarageAllPrice").html("-");
$("#analyticsThreeMonthPrice").html("-");
$("#analyticsHighAllPrice").html("-");
$("#analyticsTwelveMonthPrice").html("-");
$("#analyticsDempMeters").html("-");
$("#analyticsAvarageMeters").html("-");
$("#analyticsHighMeters").html("-");
$("#analyticsMetersTitleWarning").show();
$("#analyticsDempAllPriceLink").hide();
$("#analyticsAvarageAllPriceLink").hide();
$("#analyticsHighAllPriceLink").hide();
$("#averageCountNumber").html("");
//перевключаем сразу на карту
setTimeout(function () {
var evt = document.createEvent('HTMLEvents');
evt.initEvent('click', true, true);
var el = document.getElementById("loadRadiusDataMapControl");
el.dispatchEvent(evt);
}, 10)
if (!$('.analytics-obj-map').hasClass('is-active')) {
$('.analytics-obj-map').addClass("is-active");
$('.analytics-obj-list').removeClass("is-active");
}
$('.map-view-container .object__list').html('');
ymapsDefine();
ymaps.ready(['ext.paintOnMap']).then(function () {
initMap(true);
if (myMap && myMap.geoObjects) {
for (var i = 0; i <= polygons.length; i++) {
if (polygons[i]) {
myMap.geoObjects.remove(polygons[i]);
}
}
polygons = [];
if (objectManager) {
objectManager.removeAll();
}
}
if (buttonClearMode == null) {
// Создадим кнопку для очистки.
buttonClearMode = new ymaps.control.Button({data: {content: 'Очистить'}, options: {maxWidth: 100, selectOnClick: false}});
buttonClearMode.events.add('click', function () {
clearPolygons();
$('.map-view-container .object__list').html('');
});
myMap.controls.add(buttonClearMode);
}
if (buttonEditMode == null) {
// Создадим кнопку для выбора режима рисования
buttonEditMode = new ymaps.control.Button({data: {content: 'Выделение области'}, options: {maxWidth: 150}});
buttonEditMode.events.add('click', function () {
if (buttonEditMode.isSelected()) {
loadMapObjectsInPolygons();
buttonEditMode.data.set('content', 'Выделение области');
} else {
buttonEditMode.data.set('content', 'Подтвердить');
}
});
myMap.controls.add(buttonEditMode);
}
var paintProcess;
// Опции многоугольника или линии.
var styles = [
{strokeColor: '#ff0000', strokeOpacity: 0.6, strokeWidth: 2, fillColor: '#ff0000', fillOpacity: 0.3}
];
var currentIndex = 0;
if (mapGroup == null) {
mapGroup = myMap.events.group();
}
mapGroup.removeAll();
// Подпишемся на событие нажатия кнопки мыши.
mapGroup.add('mousedown', function (e) {
var button = $('.js-modal-tab.is-active');
// Если кнопка мыши была нажата с зажатой клавишей "alt", то начинаем рисование контура.
if (button.attr('data-id') === 'tab_3' && buttonEditMode.isSelected()) {
if(polygons && polygons.length < 4) {
if (currentIndex == styles.length - 1) {
currentIndex = 0;
} else {
currentIndex += 1;
}
paintProcess = ymaps.ext.paintOnMap(myMap, e, {style: styles[currentIndex]});
} else {
alert("Максимальное количество областей = 4");
}
}
});
// Подпишемся на событие отпускания кнопки мыши.
mapGroup.add('mouseup', function (e) {
if (paintProcess) {
// Получаем координаты отрисованного контура.
var coordinates = paintProcess.finishPaintingAt(e);
paintProcess = null;
if (coordinates && coordinates.length > 2) {
// В зависимости от состояния кнопки добавляем на карту многоугольник или линию с полученными координатами.
var geoObject = new ymaps.Polygon([coordinates], {}, styles[currentIndex]);
polygons[polygons.length] = geoObject;
myMap.geoObjects.add(geoObject);
} else {
alert("Количество вершин для области меньше 3, пожалуйста перерисуйте многоугольник более точно");
}
}
});
}).catch(console.error);
}
function loadMapObjectsInPolygons() {
var objId = $("#selectedObjId").val();
if (objId) {
$('.map-view-container .object__list').html("");
var areaFrom = $("#areaFrom").val();
var areaTo = $("#areaTo").val();
var kitchenAreaFrom = $("#kitchenAreaFrom").val();
var kitchenAreaTo = $("#kitchenAreaTo").val();
var yearFrom = $("#yearFrom").val();
var yearTo = $("#yearTo").val();
var kvType = $("#analytics-filter-kv-type").val();
var commType = $("#analytics-filter-comm-type").val();
var order = $('#filter-sort-order').val();
if (myMap && myMap.geoObjects) {
if (objectManager) {
objectManager.removeAll();
}
}
if (polygons && polygons.length) {
var geoArr1, geoArr2, geoArr3, geoArr4 = [];
if (polygons[0]) {
geoArr1 = polygons[0].geometry.getCoordinates();
}
if (polygons[1]) {
geoArr2 = polygons[1].geometry.getCoordinates();
}
if (polygons[2]) {
geoArr3 = polygons[2].geometry.getCoordinates();
}
if (polygons[3]) {
geoArr4 = polygons[3].geometry.getCoordinates();
}
var coordsToScript1 = "";
var coordsToScript2 = "";
var coordsToScript3 = "";
var coordsToScript4 = "";
if (geoArr1 && geoArr1.length) {
if (geoArr1[0] && geoArr1[0].length) {
for (var j = 0; j <= geoArr1[0].length; j++) {
if (geoArr1[0][j] && geoArr1[0][j].length) {
if (coordsToScript1) {
coordsToScript1 += ","
}
coordsToScript1 += geoArr1[0][j][0] + "," + geoArr1[0][j][1];
}
}
}
}
if (geoArr2 && geoArr2.length) {
if (geoArr2[0] && geoArr2[0].length) {
for (var j = 0; j <= geoArr2[0].length; j++) {
if (geoArr2[0][j] && geoArr2[0][j].length) {
if (coordsToScript2) {
coordsToScript2 += ","
}
coordsToScript2 += geoArr2[0][j][0] + "," + geoArr2[0][j][1];
}
}
}
}
if (geoArr3 && geoArr3.length) {
if (geoArr3[0] && geoArr3[0].length) {
for (var j = 0; j <= geoArr3[0].length; j++) {
if (geoArr3[0][j] && geoArr3[0][j].length) {
if (coordsToScript3) {
coordsToScript3 += ","
}
coordsToScript3 += geoArr3[0][j][0] + "," + geoArr3[0][j][1];
}
}
}
}
if (geoArr4 && geoArr4.length) {
if (geoArr4[0] && geoArr4[0].length) {
for (var j = 0; j <= geoArr4[0].length; j++) {
if (geoArr4[0][j] && geoArr4[0][j].length) {
if (coordsToScript4) {
coordsToScript4 += ","
}
coordsToScript4 += geoArr4[0][j][0] + "," + geoArr4[0][j][1];
}
}
}
}
if (coordsToScript1 || coordsToScript2 || coordsToScript3 || coordsToScript4) {
$.ajax({
url: '/ajax/analytics/loadAnalyticsPolygonsMap.php',
method: "post",
data: {
"objId": objId,
"areaFrom": areaFrom,
"areaTo": areaTo,
"kitchenAreaFrom": kitchenAreaFrom,
"kitchenAreaTo": kitchenAreaTo,
"yearFrom": yearFrom,
"yearTo": yearTo,
"kvType": kvType,
"commType": commType,
"poly1": coordsToScript1,
"poly2": coordsToScript2,
"poly3": coordsToScript3,
"poly4": coordsToScript4,
"order": order
},
success: function (data) {
var resParsed = JSON.parse(data);
objectManager.add(resParsed.data);
eval(resParsed.script);
checkVisibleOrCenterAnalytics();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
} else {
alert("Необходимо нарисовать хотя бы одну область на карте, максимальное кол-во областей 4. Для отрисовки нажмите кнопку редактировать в области карты")
}
}
}
}
function initMap(territory) {
let latitude = $('#selectedObjLat').val();
let longitude = $('#selectedObjLon').val();
var mapList = $('.map-view-container .object__list');
if (!objectManager) {
objectManager = new ymaps.ObjectManager({
clusterize: false,
clusterDisableClickZoom: true,
clusterOpenBalloonOnClick: false,
geoObjectOpenBalloonOnClick: false,
clusterIconColor: "#43a047",
iconColor: "#43a047"
});
myMap = new ymaps.Map('analyticsMainMap', {
center: [latitude, longitude],
zoom: 12,
controls: ['zoomControl']
},{
fullscreenZIndex : 999999999,
autoFitToViewport : 'always'
});
objectManager.objects.options.set('iconColor', '#43a047');
myMap.geoObjects.add(objectManager);
if (!territory) {
sendObjectsMapRequest();
} else {
loadMapObjectsInPolygons();
}
//зум
myMap.events.add('boundschange', function (e) {
accessScroll = true;
checkVisibleOrCenterAnalytics();
});
//клик по кластеру
objectManager.clusters.events.add('click', function (e) {
accessScroll = false;
var id = e.get('objectId'),
// Получим геообъекты внутри кластера.
cluster = objectManager.clusters.getById(id),
geoObjects = cluster.properties.geoObjects;
var htm = '';
var limit = 0;
var i = 0;
showRightObject = [];
geoObjects.forEach(function (geoObject) {
var objectState = objectManager.getObjectState(geoObject.id);
if (objectState.isShown) {
if (limit < 10) {
limit++;
htm = htm + ' ';
}
showRightObject[i] = geoObject.properties.balloonContent;
i++;
}
});
mapList.html(htm);
getAnalyticsBaloonContent();
});
//клик по объекту
objectManager.objects.events.add('click', function (e) {
accessScroll = false;
showRightObject = [];
// Получим объект, на котором открылся балун.
var id = e.get('objectId');
showRightObject[0] = objectManager.objects.getById(id).properties.balloonContent;
geoObject = objectManager.objects;
mapList.html('');
getAnalyticsBaloonContent();
});
return true;
} else {
return false;
}
}
function ymapsDefine() {
ymaps.modules.define('ext.paintOnMap', ['meta', 'util.extend', 'pane.EventsPane', 'Event'], function (provide, meta, extend, EventsPane, Event) {
'use strict';
// zIndex пейна событий карты по умолчанию равен 500.
// Подробней в документации: https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/map.pane.Manager-docpage/
var EVENTS_PANE_ZINDEX = 500;
var DEFAULT_UNWANTED_BEHAVIORS = ['drag', 'scrollZoom'];
var DEFAULT_STYLE = {strokeColor: '#0000ff', strokeWidth: 1, strokeOpacity: 1};
var DEFAULT_TOLERANCE = 16;
var badFinishPaintingCall = function () {
throw new Error('(ymaps.ext.paintOnMap) некорректный вызов PaintingProcess#finishPaintingAt. Рисование уже завершено.');
};
/**
* @interface ymaps.ext.paintOnMap.PaintingProcess
*/
/**
* Отключает режим рисования.
* @function
* @name ymaps.ext.paintOnMap.PaintingProcess#finishPaintingAt
* @param {Number[]|ymaps.Event} [positionOrEvent] Координаты точки, в которой рисование должно закончиться.
* Координаты задаются в пикселях относительно верхнего левого угла карты.
* @return {Number[]} Координаты.
*/
/**
* Включает режим рисования.
* @name ymaps.ext.paintOnMap
* @param {ymaps.Map} map
* @param {Number[]|ymaps.Event} [positionOrEvent] Координаты точки, в которой рисование должно закончиться.
* Координаты задаются в пикселях относительно верхнего левого угла карты.
* @param {Object} [config]
* @param {String[]|null} [config.unwantedBehaviors] Список поведений карты, которые должны быть выключены во время
* рисования. Перетаскивание карты и её масштабирование колесом мыши выключены по умолчанию.
* @param {Object} [config.style] Стили такие же, как в ymaps.Polygon или ymaps.Polyline.
* @param {String} [config.style.strokeColor='#0000ff'] Цвет линии или обводки.
* @param {Number} [config.style.strokeWidth=1] Толщина линии или обводки.
* @param {Number} [config.style.strokeOpacity=1] Прозрачность линии или обводки.
* @param {Number} [config.tolerance=16] Уровень упрощения координат в пикселях.
* @returns {ymaps.ext.paintOnMap.PaintingProcess} Процесс рисования.
*/
function paintOnMap(map, positionOrEvent, config) {
config = config || {};
var style = extend(DEFAULT_STYLE, config.style || {});
var unwantedBehaviors = config.unwantedBehaviors === undefined ?
DEFAULT_UNWANTED_BEHAVIORS : config.unwantedBehaviors;
var pane = new EventsPane(map, {
css: {position: 'absolute', width: '100%', height: '100%'},
zIndex: EVENTS_PANE_ZINDEX + 50,
transparent: true
});
map.panes.append('ext-paint-on-map', pane);
if (unwantedBehaviors) {
map.behaviors.disable(unwantedBehaviors);
}
// Создаём canvas-элемент.
var canvas = document.createElement('canvas');
var ctx2d = canvas.getContext('2d');
var rect = map.container.getParentElement().getBoundingClientRect();
canvas.width = rect.width;
canvas.height = rect.height;
ctx2d.globalAlpha = style.strokeOpacity;
ctx2d.strokeStyle = style.strokeColor;
ctx2d.lineWidth = style.strokeWidth;
canvas.style.width = '100%';
canvas.style.height = '100%';
pane.getElement().appendChild(canvas);
var firstPosition = positionOrEvent ? toPosition(positionOrEvent) : null;
var coordinates = firstPosition ? [firstPosition] : [];
var bounds = map.getBounds();
var latDiff = bounds[1][0] - bounds[0][0];
var lonDiff = bounds[1][1] - bounds[0][1];
canvas.onmousemove = function (e) {
coordinates.push([e.offsetX, e.offsetY]);
ctx2d.clearRect(0, 0, canvas.width, canvas.height);
ctx2d.beginPath();
ctx2d.moveTo(coordinates[0][0], coordinates[0][1]);
for (var i = 1; i < coordinates.length; i++) {
ctx2d.lineTo(coordinates[i][0], coordinates[i][1]);
}
ctx2d.stroke();
}.bind(this);
// Создаём косвенное обращение, чтобы не сдерживать сборщик мусора.
var paintingProcess = {
finishPaintingAt: function (positionOrEvent) {
paintingProcess.finishPaintingAt = badFinishPaintingCall;
// Получаем координаты, прежде чем удалить пейн.
if (positionOrEvent) {
coordinates.push(toPosition(positionOrEvent));
}
map.panes.remove(pane);
if (unwantedBehaviors) {
map.behaviors.enable(unwantedBehaviors);
}
var tolerance = config.tolerance === undefined ? DEFAULT_TOLERANCE : Number(config.tolerance);
if (tolerance) {
coordinates = simplify(coordinates, tolerance);
}
// Преобразовываем координаты canvas-элемента в геодезические координаты.
return coordinates.map(function (x) {
var lon = bounds[0][1] + (x[0] / canvas.width) * lonDiff;
var lat = bounds[0][0] + (1 - x[1] / canvas.height) * latDiff;
return meta.coordinatesOrder === 'latlong' ? [lat, lon] : [lon, lat];
});
}
};
return paintingProcess;
}
function toPosition(positionOrEvent) {
return positionOrEvent instanceof Event ?
[positionOrEvent.get('offsetX'), positionOrEvent.get('offsetY')] :
positionOrEvent;
}
function simplify(coordinates, tolerance) {
var toleranceSquared = tolerance * tolerance;
var simplified = [coordinates[0]];
var prev = coordinates[0];
for (var i = 1; i < coordinates.length; i++) {
var curr = coordinates[i];
if (Math.pow(prev[0] - curr[0], 2) + Math.pow(prev[1] - curr[1], 2) > toleranceSquared) {
simplified.push(curr);
prev = curr;
}
}
return simplified;
}
provide(paintOnMap);
});
}
function deleteFromAnalyticsView(id) {
var objId = $("#selectedObjId").val();
if (objId) {
$.ajax({
url: '/ajax/analytics/addToExclude.php',
method: "post",
data: {
"object_id": objId,
"exclude_object_id": id
},
success: function (data) {
var button = $('.js-modal-tab.is-active');
if (button.attr('data-id') === 'tab_1') {
var link = $('ul.pagination li.active a.obj-analysis-paging2');
if (link && link.length > 0) {
var pageNum = link.attr('data-page-num');
loadCurrentHouseData(pageNum);
} else {
loadCurrentHouseData(1);
}
}
if (button.attr('data-id') === 'tab_2') {
var link = $('ul.pagination li.active a.obj-analysis-paging3');
if (link && link.length > 0) {
var pageNum = link.attr('data-page-num');
loadRadiusOrMapData(pageNum);
} else {
loadRadiusOrMapData(1);
}
}
if (button.attr('data-id') === 'tab_3') {
var link = $('ul.pagination li.active a.obj-analysis-paging15');
if (link && link.length > 0) {
var pageNum = link.attr('data-page-num');
loadRadiusOrMapData(pageNum);
} else {
loadRadiusOrMapData(1);
}
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
}
}
function deleteFromAnalysisPart(id) {
var objId = $("#selectedObjId").val();
if (objId) {
$.ajax({
url: '/ajax/analytics/addToExclude.php',
method: "post",
data: {
"object_id": objId,
"exclude_object_id": id
},
success: function (data) {
var part = $('#analysisPartInAnalytics').val();
var pageNum = 1;
var link = $('ul.pagination li.active a.obj-analysis-paging10');
if (link && link.length > 0) {
pageNum = link.attr('data-page-num');
part = link.attr('data-part');
}
$('#objectsAnalysisContainer').html('');
$.ajax({
url: '/ajax/analytics/getAnalyticsObjectList.php?page=' + pageNum + '&objectId=' + objId + '&analysisPart=' + part,
success: function(data) {
$('#objectsAnalysisContainer').html(data);
$("#modalObjectsAnalysis").get(0).scrollIntoView();
setTimeout(function() {
$('#objectsAnalysisContainer .fotorama').fotorama();
}, 100);
}
});
}
,
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
}
}
function saveObjectCabinetCompetitors(){
var objId = $("#selectedObjId").val();
var cabinetId = $("#cabinet_id").val();
if (objId) {
$.ajax({
url: '/ajax/saveCabinetCompetitors.php',
method: "post",
data: {
"object_id": objId
},
success: function (data) {
$.ajax({
url: "/ajax/getCabinetCompetitorObjects.php?cabinetId=" + cabinetId,
success: function (data) {
$(".info__objects-list").html(data);
},
error: function (data) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
$('.analytics-modal').removeClass('is-opened');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("eRROR: " + errorThrown + "; status:" + textStatus);
}
});
}
}