我有2个具有相同坐标的标记,所以我试图逼近它们的坐标,以便它们都显示出来。我有以下代码似乎不起作用。奇怪的是,在浏览器控制台中我甚至没有看到任何错误。没什么,但根本没有标记显示。
for (var i = 0; i < locations.length; i++) {
var item = locations[i];
var a = 0.01;
var newLat = item[1] + -.00004 * Math.cos((+a*i) / 180 * Math.PI); // x
var newLng = item[2] + -.00004 * Math.sin((+a*i) / 180 * Math.PI); // Y
var finalLatLng = new google.maps.LatLng(newLat,newLng);
var marker = new google.maps.Marker({
position: finalLatLng,
map: map,
title: item[0],
link: item[3],
address: item[5],
phone: item[6],
mobile: item[7],
website: item[8],
image: item[9],
readmore: item[10],
icon: item[11],
type: item[12],
infoWindowIndex: i
});
marker.category = locations[i][12];
gmarkers.push(marker);
google.maps.event.addListener(marker, 'click', function (event) {
var ua = navigator.userAgent;
var event = (ua.match(/iPad/i)) ? "touchstart" : "click";
// prevent ghost clicks on ipad
infoBox.setContent('<div class="marker-wrapper animated fadeInDown"><div class="marker-title"> <a href="'+ this.link +'">'+ this.title +'</a> </div><div class="marker-content"><div class="two_third popup-content"><ul>'+ this.address +''+ this.phone +''+ this.mobile +''+ this.website +'</ul></div>'+ this.image +''+ this.readmore +'<div class="clearboth"></div> <div class="close" onClick=\'javascript:infoBox.close();\'><span class="icon-cancel"></span></div></div><span class="icon-down-dir"></span></div>');
infoBox.open(map, this);
map.setCenter(this.position);
map.panTo(this.position);
}); // end click even
} //end for
其他一些信息:
我使用JSON抓取标记信息
我正在使用MarkerClusterer作为集群。
我也试过通过将新的var传递给position参数来编辑代码,然后得到错误**Uncaught InvalidValueError: setPosition: not a LatLng or LatLngLiteral: not an Object**
。
for (var i = 0; i < locations.length; i++) {
var item = locations[i];
var myLatLng = new google.maps.LatLng(item[1], item[2] );
var marker = new google.maps.Marker({
position: myLatLng + (Math.random() -.5) / 1500,
map: map,
title: item[0],
link: item[3],
address: item[5],
phone: item[6],
mobile: item[7],
website: item[8],
image: item[9],
readmore: item[10],
icon: item[11],
type: item[12],
infoWindowIndex: i
});
marker.category = locations[i][12];
gmarkers.push(marker);
google.maps.event.addListener(marker, 'click', function (event) {
var ua = navigator.userAgent;
var event = (ua.match(/iPad/i)) ? "touchstart" : "click";
// prevent ghost clicks on ipad
infoBox.setContent('<div class="marker-wrapper animated fadeInDown"><div class="marker-title"> <a href="'+ this.link +'">'+ this.title +'</a> </div><div class="marker-content"><div class="two_third popup-content"><ul>'+ this.address +''+ this.phone +''+ this.mobile +''+ this.website +'</ul></div>'+ this.image +''+ this.readmore +'<div class="clearboth"></div> <div class="close" onClick=\'javascript:infoBox.close();\'><span class="icon-cancel"></span></div></div><span class="icon-down-dir"></span></div>');
infoBox.open(map, this);
map.setCenter(this.position);
map.panTo(this.position);
}); // end click even
} //end for
有任何线索如何解决这个问题?
答案 0 :(得分:0)
将标记添加到地图是一个简单的过程。
首先你必须拥有地图实例,我在你的代码中看不到它,也许它在代码之前。它看起来像:
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
也许听起来很愚蠢,但你必须确保这些代码正在执行,要么是在初始化过程中执行的,要么是你在事件中解雇了。
另一件事是你可以检查纬度和经度计算的结果,只是为了确保这些数字在有效范围内。
Google LatLng对象的构造函数也是LatLng(double,double),因此请确保您没有传递对象甚至是字符串,它应该如下所示:
var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
答案 1 :(得分:0)
这不起作用:
position: myLatLng + (Math.random() -.5) / 1500,
myLatLng是google.maps.LatLng,您无法为其添加数字,这可能有效(未经测试):
position: new google.maps.LatLng(myLatLng.lat() + (Math.random() -.5) / 1500,
myLatLng.lng() + (Math.random() -.5) / 1500),