Яндекс Карта - Загрузка тысяч точек кусками - PullRequest
0 голосов
/ 06 августа 2020

Я использую Яндекс Карта Javascript API, чтобы отображать тысячи точек (около 20К) на карте по всему миру. В этих точках также есть воздушные шары. По этой причине я использую LoadingObjectManager.

                ymaps.ready(init);
        function init() {
            var geolocation = ymaps.geolocation,
                myMap = new ymaps.Map('map', {
                   
                }, {
                    searchControlProvider: 'yandex#search',
                });
            myMap.options.set('scrollZoomSpeed', 0.5);

                /**
                 * Comparing the position calculated from the user's IP address
                 * and the position detected using the browser.
                 */
                geolocation.get({
                    provider: 'yandex',
                    mapStateAutoApply: true
                }).then(function (result) {
                    myMap.geoObjects.add(result.geoObjects);
                });

                geolocation.get({
                    provider: 'browser',
                    mapStateAutoApply: true
                }).then(function (result) {
                    /**
                     * We'll mark the position obtained through the browser in blue.
                     * If the browser does not support this functionality, the placemark will not be added to the map.
                     */
                    myMap.geoObjects.add(result.geoObjects);
                });
            
           
            let loadingObjectManager = new ymaps.LoadingObjectManager('{{url()->current()}}/coordinates?&coordinates=%b&x=%x&y=%y&z=%z&number=%d',
                {
                    // Enabling clusterization.
                    clusterize: true,
                    // Cluster options are set with the 'cluster' prefix.
                    clusterHasBalloon: false,
                    // Object options are set with the geoObject prefix.
                    geoObjectOpenBalloonOnClick: true,
                  
                });
            myMap.geoObjects.add(loadingObjectManager);


        }

Сначала я подумал, что LoadingObjectManager автоматически запоминает области, для которых ранее загружались данные, но после записи координат я обнаружил, что каждый раз, когда уровни масштабирования становятся меньше, увеличивается диапазон окна просмотра запрашивается LoadingObjectManager с сервера, что приводит к запросу огромного количества данных из базы данных, и в результате ответ -> json () в Laravel выдает исключение ограничения памяти (разрешенная память исчерпана). Теперь я ищу способ уменьшить географический диапазон каждый раз, когда Яндекс API запрашивает и заставить его запоминать регионы, для которых он ранее запрашивал баллы.

...