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); } }); } }