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