我被告知不要for...in
在JavaScript中使用数组.为什么不?
我喜欢使用谷歌地图创建一个可以处理大量标记(超过10,000)的地图.为了不减慢地图速度,我创建了一个XML文件,它只输出当前视口内的标记.
首先,我使用initialize()来设置地图选项:
function initialize() {
var myLatlng = new google.maps.LatLng(51.25503952021694,3.27392578125);
var myOptions = {
zoom: 8,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
google.maps.event.addListener(map, 'tilesloaded', function () {
loadMapFromCurrentBounds(map);
});
}
Run Code Online (Sandbox Code Playgroud)
当事件'tilesloaded'完成后,我使用loadMapFromCurrentBounds(),这个函数将获取当前边界并向XML文件发送请求以显示当前视口内的标记:
function loadMapFromCurrentBounds(map) {
// First, determine the map bounds
var bounds = map.getBounds();
// Then the points
var swPoint = bounds.getSouthWest();
var nePoint = bounds.getNorthEast();
// Now, each individual coordinate
var swLat = swPoint.lat();
var swLng = swPoint.lng();
var neLat = nePoint.lat();
var neLng …
Run Code Online (Sandbox Code Playgroud) javascript google-maps google-maps-api-3 google-maps-markers
我正在制作一个移动网络应用.
该应用程序的一部分删除了几个标记,可以单击它们打开信息窗口.令人恼火的是,如果你继续使用地图而不承认它们,这些不会消失,就像iOS地图应用程序一样.
有没有办法设置它,以便如果用户点击底层地图,所有打开的信息窗口都关闭?
在Google Maps API v2中,我使用map.clearOverlays()
删除标记并再次绘制它们.
如何使用Google Maps API v3执行此操作?
谢谢
我正在尝试删除像这样初始化的标记:
marker = new google.maps.Marker({
position: latLng,
map: map,
draggable: true,
animation: google.maps.Animation.DROP,
title: 'Marker 1',
icon: redPin
});
google.maps.event.addListener(marker, "click", function() {
showMarkerDialog(marker.position, "marker");
});
google.maps.event.addListener(marker, "dblclick", function() {
// Add a alert: Are you sure you want to remove this marker?
map.removeOverlay(marker);
});
Run Code Online (Sandbox Code Playgroud)
一切都很完美,除了当我双击它以删除我在错误控制台上得到的是这样的:
TypeError:Object#没有方法'removeOverlay'
我究竟做错了什么?
如何从地图中删除所有群集图标(群集标记)?尝试过如下建议:
......但它没有奏效.
你能帮我解决这个问题吗?
先感谢您!
更新时间(2010-11-23)
标记存储在数组中
var markersClust = Array();
Run Code Online (Sandbox Code Playgroud)
...并添加(与php结合):
markersClust.push(marker_<?php echo $team["Team"]["id"]; ?>);
var markerClusterer = new MarkerClusterer(MyMap.map, markersClust, clusterOptions);
Run Code Online (Sandbox Code Playgroud)
它工作正常.
但是,我无法将它们从地图中移除,它驱使我......
试图删除标记(和我做)
for ( var i=0; i < markersClust.length; i++) {
markersClust[i].setMap(null);
}
markersClust = [];
Run Code Online (Sandbox Code Playgroud)
但群集图标在地图上是静止的.
我也尝试过这样的事情:
markerClusterer.clearMarkers();
Run Code Online (Sandbox Code Playgroud)
并喜欢
MyMap.preventDefault();
MyMap.stopPropagation();
MyMap.clearMarkers();
Run Code Online (Sandbox Code Playgroud)
但是,在地图上,群集的图标仍然存在.
我还需要做些什么来从我的地图中删除这些群集图标?请帮忙...
我见过这里有人可以解释这个功能:
// REMOVE All MARKERS FUNCTION
// Removes all markers currently on map
// PARAMS: None
function removeAllMarkers(){// removes all markers from map
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
markersArray = [];
markersInfoArray = [];
};
};
};
Run Code Online (Sandbox Code Playgroud)
但我收到一个javascript错误...
中断错误markersArray [i] .setMap不是函数
该页面位于:http://www.focus-on-plants.com/locator.php
有任何想法吗???
<--------------- ---------------------更新>
我试过sugestions,也感动MarkersArray=[]
和markersInfoArray = []
到了的for循环,所以我有这样的一面:
for( var i = 0; i < markersArray.length; i++ ){
markersArray[i].setMap(null);
}
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的结果 error markersArray[i].setMap is not a function
所以我环顾四周尝试了这种方法:
function …
Run Code Online (Sandbox Code Playgroud) 我有这个代码从xml文件中读取数据并将标记放在地图上.
我想要做的是每5秒自动读取一次xml文件,然后更新标记的位置.
我尝试将setInterval添加到函数中,但问题是前一个标记未被删除.只需在地图上添加另一个标记,依此类推.
(我不希望整个地图更新,只是标记)
<script type="text/javascript">
var map = null;
function createMarker(latlng, html) {
var contentString = html;
var image = new google.maps.MarkerImage('http://www.google.com/mapfiles/markerA.png',
new google.maps.Size(20, 34),
new google.maps.Point(0,0),
new google.maps.Point(10, 34));
var shadow = new google.maps.MarkerImage('http://www.google.com/mapfiles/shadow50.png',
new google.maps.Size(37, 34),
new google.maps.Point(0,0),
new google.maps.Point(10, 34));
var marker = new google.maps.Marker({
position: latlng,
map: map,
shadow: shadow,
icon: image,
zIndex: Math.round(latlng.lat()*-100000)<<5
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(contentString);
infowindow.open(map,marker);
});
}
function initialize() {
var myOptions = {
zoom: 13,
center: new google.maps.LatLng(-18.432713,-70.317993), …
Run Code Online (Sandbox Code Playgroud) 我使用Google Maps API V3.
我迁移我的网站GMap API V2 - > V3.但是因为我使用了clearOverlays()方法在V2中一次删除了一个现有对象,并且删除了一个在V3中单独废除的对象.
V2
map.clearOverlays();
Run Code Online (Sandbox Code Playgroud)
V3
map.set_visible(false);
popup.close();
Run Code Online (Sandbox Code Playgroud)
好吗?或其他解决方案?
我从ajax页面加载标记和折线,每个请求数据显示在索引页面上,现在我想在从ajaxPage获取新数据之前清除数据(标记,折线,...)
索引页面:
var gmarkers = [];
var map = null;
function initialize() {
var myOptions = {
zoom: 15,
center: new google.maps.LatLng(35, 53),
// mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
google.maps.event.addListener(map, 'click', function() {
infowindow.close();
});
}
var infowindow = new google.maps.InfoWindow(
{
size: new google.maps.Size(150,50)
});
function myclick(i) {
google.maps.event.trigger(gmarkers[i], "click");
}
function createMarker(latlng, name, html) {
var contentString = html;
var marker = new google.maps.Marker({
position: latlng,
map: map,
zIndex: Math.round(latlng.lat()*-100000)<<5
}); …
Run Code Online (Sandbox Code Playgroud) javascript jquery google-maps google-maps-api-3 google-maps-markers