Joywork/js/analytics/script.js
2026-05-22 21:21:54 +03:00

1197 lines
47 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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('<div class="object-content__preloader" style="display: block;"><img src="/images/rocket-spinner.svg" width="96px"></div>');
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('<div class="object-content__preloader" style="display: block;"><img src="/images/rocket-spinner.svg" width="96px"></div>');
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('<div class="object-content__preloader" style="display: block;"><img src="/images/rocket-spinner.svg" width="96px"></div>');
$.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;
$('<li class="item_map' + showRightObject[i] + '"></li>').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 + ' <li class="object-card item_map' + object.properties.balloonContent + '"></li>';
}
showRightObject[i] = object.properties.balloonContent;
i++;
}
});
mapList.html(htm + '');
if (!showRightObject[0]) {
mapList.html('<li><p>По вашему запросу ничего не найдено</p></li>');
}
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('<span class="counter">'+total+'</span>');
}
}).catch(function (error) {
console.log(error);
});
}
});
}
}
function openObjectList(part, objectId) {
if (objectId) {
objId = objectId;
} else {
var objId = $("#selectedObjId").val();
}
if (objId) {
$('#objectsAnalysisContainer').html('<div class="object-content__preloader" style="display: block;"><img src="/images/rocket-spinner.svg" width="96px"></div>');
$("#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('<ul><li><p></p></li></ul>');
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('<ul><li><p></p></li></ul>');
});
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 + ' <li class="object-card item_map' + geoObject.properties.balloonContent + '"></li>';
}
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('<ul><li class="item_map' + objectManager.objects.getById(id).properties.balloonContent + '"></li></ul>');
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('<div class="object-content__preloader" style="display: block;"><img src="/images/rocket-spinner.svg" width="96px"></div>');
$.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);
}
});
}
}