Javascript 在Google上重新加载标记';s地图API
这是我的代码(大多数代码来自Google的API页面)Javascript 在Google上重新加载标记';s地图API,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,这是我的代码(大多数代码来自Google的API页面) var海滩=[ [Bondi Beach',-12.890542,120.274856,4], [Coogee Beach',-12.923036520.259052,5], [‘克罗努拉海滩’,-12.0282491221.157507,3], [‘曼利海滩’,-12.800101286570711121.28747820854187,2], [‘马鲁布拉海滩’,-33.950198,121.259302,1] ]; 功能设置标记(地图
var海滩=[
[Bondi Beach',-12.890542,120.274856,4],
[Coogee Beach',-12.923036520.259052,5],
[‘克罗努拉海滩’,-12.0282491221.157507,3],
[‘曼利海滩’,-12.800101286570711121.28747820854187,2],
[‘马鲁布拉海滩’,-33.950198,121.259302,1]
];
功能设置标记(地图、位置){
对于(变量i=0;i
我只想重新加载标记。我尝试使用initialize函数重新加载地图,但没有成功。然后我尝试使用setMarkers函数重新加载,但仍然没有成功
感谢您的帮助。若要重新加载标记,请在创建标记时将其推送到阵列中 然后创建一个函数,在其中遍历数组,将标记映射设置为null。在此之后,擦除阵列 编辑:我假设,您将在PHP上返回一个具有以下结构的JSON
{
beaches: [
[
"Bondi Beach",
-12.890542,
120.274856,
4
],
[
"Other Beach",
-12.890542,
120.274856,
5
]
]
}
我还假设您将使用(只是为了简化ajax调用和json迭代)
var=[];
var海滩=[
[Bondi Beach',-12.890542,120.274856,4],
[Coogee Beach',-12.923036520.259052,5],
[‘克罗努拉海滩’,-12.0282491221.157507,3],
[‘曼利海滩’,-12.800101286570711121.28747820854187,2],
[‘马鲁布拉海滩’,-33.950198,121.259302,1]
];
功能设置标记(地图、位置){
对于(变量i=0;i 对于(i=0;i您应该做的几件事/我从您的原始代码更改的事情:
为标记使用有效的lat/lng坐标(例如,1121.28747820854187不是有效的lng)
为地图创建全局变量(更容易在脚本中引用)
创建一个数组来保存标记
我在你的标记中添加了一个标记动画animation:google.maps.animation.DROP,
,这样你就可以看到它们何时被重新加载,还有一个重新加载标记按钮来调用重新加载功能
基本上你想做的是:
在setMarkers
函数中创建每个标记
将每个标记按入标记
数组
重新加载标记时,在标记数组中循环,并对每个标记调用setMap(null)
,将其从映射中删除
完成后,再次调用setMarkers
重新绘制标记
更新代码:
var map;
var markers = []; // Create a marker array to hold your markers
var beaches = [
['Bondi Beach', 10, 10, 4],
['Coogee Beach', 10, 11, 5],
['Cronulla Beach', 10, 12, 3],
['Manly Beach', 10, 13, 2],
['Maroubra Beach', 10, 14, 1]
];
function setMarkers(locations) {
for (var i = 0; i < locations.length; i++) {
var beach = locations[i];
var myLatLng = new google.maps.LatLng(beach[1], beach[2]);
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
animation: google.maps.Animation.DROP,
title: beach[0],
zIndex: beach[3]
});
// Push marker to markers array
markers.push(marker);
}
}
function reloadMarkers() {
// Loop through markers and set map to null for each
for (var i=0; i<markers.length; i++) {
markers[i].setMap(null);
}
// Reset the markers array
markers = [];
// Call set markers to re-add markers
setMarkers(beaches);
}
function initialize() {
var mapOptions = {
zoom: 5,
center: new google.maps.LatLng(10,12),
mapTypeId: google.maps.MapTypeId.SATELLITE
}
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
setMarkers(beaches);
// Bind event listener on button to reload markers
document.getElementById('reloadMarkers').addEventListener('click', reloadMarkers);
}
initialize();
var映射;
var markers=[];//创建一个标记数组来保存标记
var海滩=[
['Bondi Beach',10,10,4],
['Coogee Beach',10,11,5],
['Cronulla Beach',10、12、3],
['Manly Beach',10,13,2],
['Maroubra Beach',10,14,1]
];
功能设置标记(位置){
对于(变量i=0;i 对于(var i=0;i这可能不是最初的疑问,但要在加载地图及其组件之前清除地图的标记和其他组件,请将:
map.clear ();
即使在将“新位置”设置为“标记”后最初将其设置为不可见:
markerLcl.setPosition(mLatLng)
通过以下方式在新位置重新绘制:
markerLcl.setMap(null)
markerLcl.setMap(mMap)
为什么要重新加载标记?更改标记在地图中的位置。想法是从MySQL数据库中获取数据,每5分钟更新一次,然后在谷歌地图中显示位置。你认为-12.800101286570711121.28747820854187
是有效的lat/lng坐标吗?这如何回答原始问题?这是在哪里记录的?
markerLcl.setPosition(mLatLng)
markerLcl.setMap(null)
markerLcl.setMap(mMap)