Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何加载视图端口中显示的标记(Google Map&x27;s API)?_Javascript_Jquery_Ajax_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 如何加载视图端口中显示的标记(Google Map&x27;s API)?

Javascript 如何加载视图端口中显示的标记(Google Map&x27;s API)?,javascript,jquery,ajax,google-maps,google-maps-api-3,Javascript,Jquery,Ajax,Google Maps,Google Maps Api 3,对于我的GoogleMapsAPI项目,有太多的标记,无法一次加载所有标记,所以我首先在每个州放置一个区域标记,并将现有标记的计数作为其标签 我试图创建一个过程,如果用户处于某个缩放级别,并且状态的标记位于视图端口中,则加载状态中的所有标记 但是,目前,我无法让该过程多次运行。以下是流程: 我已尝试将下面的函数附加到Google Maps事件,例如idle事件或tilesloaded事件,但我已决定尝试让该过程使用以下内容: var processingRequest = false;

对于我的GoogleMapsAPI项目,有太多的标记,无法一次加载所有标记,所以我首先在每个州放置一个区域标记,并将现有标记的计数作为其标签

我试图创建一个过程,如果用户处于某个缩放级别,并且状态的标记位于视图端口中,则加载状态中的所有标记

但是,目前,我无法让该过程多次运行。以下是流程:

我已尝试将下面的函数附加到Google Maps事件,例如idle事件或tilesloaded事件,但我已决定尝试让该过程使用以下内容:

var processingRequest = false;

    window.setInterval(function () {
        if (processingRequest == false) {
            markerZoomTrigger();
        }
    }, 2000);
请注意变量processingRequest,它的使用是为了使markerZoomTrigger函数仅在上一个请求完成后运行。我这样做是为了解决我遇到的bug

以下是markerZoomTrigger函数:

       function markerZoomTrigger() {

        console.log("Marker zoom triggered!");

        if (geoLocMap.getMap().getZoom() < 8) {
            console.log("Zoom is less than 8");
            return;
        }


        var count = 0;
        //Gives us markers in window
        //TODO
        /*
         If zoom level is x, then getDetailedInfo for each marker in region. mailingID == 0 means its a region marker
         */
        var markers = geoLocMap.getRegionMarkers();

        for (var i = 0; i < markers.length; i++) {
            if (geoLocMap.getMap().getBounds().contains(markers[i].getPosition())) {

                var zoomLevel = geoLocMap.getMap().getZoom();

                console.log("[" + count + "] Marker " + markers[i].getPosition() + " is in the selection");
                console.log("[" + count + "] is region marker: " + markers[i].isRegionMarker);
                console.log("[" + count + "] Zoom level: " + zoomLevel);

                if (typeof markers[i] == 'undefined' || typeof markers[i].state == 'undefined') {
                    console.log("Marker found with undefined state property");
                    continue;
                }

                //Make sure the marker is a region marker, and it hasn't been generated
                if (markers[i].isRegionMarker == true && markers[i].generated == false) {
                    console.log("Marking processingRequest as true...");
                    processingRequest = true;

                    if (typeof markers[i].state == 'undefined') {
                        console.log("Marker passed to httpPostCoordCount is undefined");
                        continue;
                    }

                    httpPostCoordCount(markers[i].state);
                    document.getElementById("load").style.visibility = "hidden";
                    geoLocMap.setGeneratedMarker(markers[i], true);
                }
                count++;
            }
        }
    }

当前,在成功加载一次状态的标记后,控制台消息“Marker zoom triggered!”会连续打印,而不会显示其他消息。

我们需要一个控制台才能知道发生了什么。但是你确定这是实现你想要的最好方法吗?如果达到缩放级别,您处于某个状态,但状态标记不在视口中,会发生什么情况?什么也看不出来?我建议你看看。您还可以监听
bounds\u changed
事件(对缩放和平移更改作出反应),并对数据库进行异步调用,仅返回边界内的标记。我这样做是为了一个项目,在这个项目中,我有大量的标记要显示,再加上最小缩放级别,效果非常好。
function httpPostCoordCount(state) {

        $.post(postRequestCoordCountURL,
            {
                state: state,
                debug: debug
            },
            function (data, status) {
                console.log("Status of Coord Count Post: " + status);

                //Adds markers from request JSON
                addMarkersToMap(JSON.parse(data), state);

                console.log("Marking processingRequest as false...");
                processingRequest = false;
            });
    }