通过舍入来近似标记坐标

时间:2014-08-29 14:03:59

标签: javascript google-maps

我有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

有任何线索如何解决这个问题?

2 个答案:

答案 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),