与我的距离和阵列中的标记

时间:2013-12-18 02:10:07

标签: javascript google-maps google-maps-markers distance google-street-view

我试图在街景中只显示距离我不远的标记(不是移动而不是地理编码,只有地图中的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)它可以工作,但我真的需要测试之间的距离我和每个标记......

1 个答案:

答案 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");
                }
            }
 }

每次运行该功能时,您还需要清除标记(或者您最终会重复这些标记)。