Php 谷歌地图api v3自动中心自动缩放
这是基于谷歌地图API v3的。页面每10秒刷新一次,并使用自动居中和自动缩放更新地图上的标记位置。以下是我面临的问题:Php 谷歌地图api v3自动中心自动缩放,php,google-maps,Php,Google Maps,这是基于谷歌地图API v3的。页面每10秒刷新一次,并使用自动居中和自动缩放更新地图上的标记位置。以下是我面临的问题: 每次页面加载(每10秒一次)时,地图将居中到(47.6145,-122.3418) 首先,然后根据标记位置居中并缩放。如果取消注释以下内容,则根本不会加载映射: 中心:新google.maps.LatLng(47.6145,-122.3418) 如何在每次地图刷新时停止地图加载初始lat和long坐标(47.6145,-122.3418) 二,。有没有办法控制缩放级别 下面是
function load() {
var map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(47.6145, -122.3418),
zoom: 14,
mapTypeId: 'roadmap'
});
var infoWindow = new google.maps.InfoWindow;
downloadUrl("phpsqlajax_genxml2.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markers.length; i++) {
var UID = markers[i].getAttribute("UID");
var type = markers[i].getAttribute("type");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("latitude")),
parseFloat(markers[i].getAttribute("longitude")));
var html = "<b>" + UID + "</b> <br/>";
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon,
shadow: icon.shadow
});
bounds.extend(point);
bindInfoWindow(marker, map, infoWindow, html);
}
map.fitBounds(bounds);
});
}
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}
setInterval(load, 10000);
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
函数加载(){
var map=new google.maps.map(document.getElementById(“map”){
中心:新google.maps.LatLng(47.6145,-122.3418),
缩放:14,
mapTypeId:“路线图”
});
var infoWindow=new google.maps.infoWindow;
下载URL(“phpsqlajax_genxml2.php”,函数(数据){
var xml=data.responseXML;
var markers=xml.documentElement.getElementsByTagName(“标记”);
var bounds=new google.maps.LatLngBounds();
对于(var i=0;i”;
var icon=customIcons[type]| |{};
var marker=new google.maps.marker({
地图:地图,
位置:点,,
icon:icon.icon,
阴影:icon.shadow
});
扩展(点);
bindInfoWindow(标记、地图、infoWindow、html);
}
映射边界(bounds);
});
}
函数bindInfoWindow(标记、地图、infoWindow、html){
google.maps.event.addListener(标记'click',函数(){
setContent(html);
信息窗口。打开(地图、标记);
});
}
设置间隔(负载,10000);
函数下载url(url,回调){
var请求=window.ActiveXObject?
新的ActiveXObject('Microsoft.XMLHTTP'):
新的XMLHttpRequest;
request.onreadystatechange=函数(){
if(request.readyState==4){
request.onreadystatechange=doNothing;
回调(请求、请求、状态);
}
};
打开('GET',url,true);
请求发送(空);
}
首先,要控制缩放级别,有一个名为setZoom()
的方法,您可以调用maps对象,在您的示例中是map
变量
map.setZoom(5);
但更多的是关于地图刷新的另一个问题。我假设整个网页都在刷新以更新地图的内容——我认为您应该研究ajax调用来刷新地图中的数据,而不刷新整个页面
通过使用downloadUrl()
方法,您已经有了基础-现在只需将其放在setInterval()
上,并让数据每30秒到1分钟刷新一次
我还建议您在添加新标记之前清除标记的映射,否则每次数据刷新时都会出现内存泄漏,从而创建重复的DOM元素。我通常将我的标记引用放在一个数组中,然后在数组中循环并运行marker.setMap(null)
,这将从映射中删除标记
使用代码段编辑
使用上面的代码片段,我们可以尝试将代码分为单独的函数(加载函数和刷新函数),并确保将map
和infoWindow
移动到全局范围
var map;
var infoWindow;
function load() {
map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(47.6145, -122.3418),
zoom: 14,
mapTypeId: 'roadmap'
});
infoWindow = new google.maps.InfoWindow;
refresh();
}
function refresh(){
downloadUrl("phpsqlajax_genxml2.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markers.length; i++) {
var UID = markers[i].getAttribute("UID");
var type = markers[i].getAttribute("type");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("latitude")),
parseFloat(markers[i].getAttribute("longitude")));
var html = "<b>" + UID + "</b> <br/>";
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon,
shadow: icon.shadow
});
bounds.extend(point);
bindInfoWindow(marker, map, infoWindow, html);
}
map.fitBounds(bounds);
});
}
setInterval("refresh()",60000);
var映射;
var信息窗口;
函数加载(){
map=new google.maps.map(document.getElementById(“map”){
中心:新google.maps.LatLng(47.6145,-122.3418),
缩放:14,
mapTypeId:“路线图”
});
infoWindow=新建google.maps.infoWindow;
刷新();
}
函数刷新(){
下载URL(“phpsqlajax_genxml2.php”,函数(数据){
var xml=data.responseXML;
var markers=xml.documentElement.getElementsByTagName(“标记”);
var bounds=new google.maps.LatLngBounds();
对于(var i=0;i”;
var icon=customIcons[type]| |{};
var marker=new google.maps.marker({
地图:地图,
位置:点,,
icon:icon.icon,
阴影:icon.shadow
});
扩展(点);
bindInfoWindow(标记、地图、infoWindow、html);
}
映射边界(bounds);
});
}
setInterval(“刷新()”,60000);
感谢您的及时回复。我的变焦问题解决了。我尝试刷新下载Url(),但地图和标记不会在地图上更新。仅当我刷新页面时,地图和标记才会更新。你能指导我如何解决这个问题吗。谢谢!