我试图在街景中只显示距离我不远的标记(不是移动而不是地理编码,只有地图中的poistion)不到50米。
<!DOCTYPE html>
<html>
<head>
<script src="http://maps.google.com/maps/api/js?sensor=false&v=3&libraries=geometry"> </script>
<script>
var markers = [
['chelini1', 43.84275, 10.5040667],
['chelini2', 43.8428333, 10.5040833],
['chelini3', 43.8429333, 10.5040833]
];
var inizio = new google.maps.LatLng(43.8427752, 10.504052);
function initialize() {
var panoramaOptions = {
position: inizio,
pov: {
heading: 165,
pitch: 0
},
zoom: 1
};
var myPano = new google.maps.StreetViewPanorama(document.getElementById('map- canvas'),panoramaOptions);
myPano.setVisible(true);
google.maps.event.addListener(myPano, 'position_changed', function() {
var miaposizione = myPano.getPosition();
alert(miaposizione);
});
var metri = 50;
for (var i = 0; i < markers.length; i++) {
var myMarker = markers[i];
coords2 = new google.maps.LatLng(myMarker[1], myMarker[2]);
var distance = google.maps.geometry.spherical.computeDistanceBetween(miaposizione,coords2);
if(distance <= metri) {
alert(distance);
posizione = new google.maps.LatLng(myMarker[1], myMarker[2])
var Marker = new google.maps.Marker({
position: posizione,
map: myPano ,
icon: 'Azure.png',
title: myMarker[0]
});
//alert(posizione)
}else{
alert("lontano");
}
}
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="panel"></div>
<div id="map-canvas"></div>
</body>
</html>
我知道问题出在距离公式中,但是我无法理解为什么,例如,如果我试图在这个公式中加入另一个像这样的(var inizio)它可以工作,但我真的需要测试之间的距离我和每个标记......
答案 0 :(得分:0)
将miaposizione的变量声明放在侦听器函数之外,然后在其中分配给它。当你把它传递给conputeDistanceBetween时,我猜它是未定义的。
var miaposizione;
google.maps.event.addListener(myPano, 'position_changed', function() {
miaposizione = myPano.getPosition();
alert(miaposizione);
});
编辑我说正确的是在初始化时执行了距离计算吗?只有当计算距离后的全景位置发生变化时,才会设置变量miaposizione。
您需要将距离计算移动到初始化之外的函数中,然后传入新位置,例如:
google.maps.event.addListener(myPano, 'position_changed', function() {
var miaposizione = myPano.getPosition();
calculateMarkers(miaposizione);
alert(miaposizione);
});
然后在init:
之外function calculateMarkers(miasposizione)
{
for (var i = 0; i < markers.length; i++) {
var myMarker = markers[i];
coords2 = new google.maps.LatLng(myMarker[1], myMarker[2]);
var distance = google.maps.geometry.spherical.computeDistanceBetween(miaposizione,coords2);
if(distance <= metri) {
alert(distance);
posizione = new google.maps.LatLng(myMarker[1], myMarker[2])
var Marker = new google.maps.Marker({
position: posizione,
map: myPano ,
icon: 'Azure.png',
title: myMarker[0]
});
//alert(posizione)
}else{
alert("lontano");
}
}
}
每次运行该功能时,您还需要清除标记(或者您最终会重复这些标记)。