Google地图添加了2个GEvent听众。每个标记1个

时间:2010-02-26 00:59:34

标签: google-maps

我有以下代码,用户可以在Google地图上绘制两个点。然后,我希望能够捕获被拖动到新位置的每个点(标记)的事件。我在Javascript上很糟糕并且花了好几个小时试图这样做,所以我觉得是时候我会得到一些帮助..

我要做的是让用户在地图上绘制两个可拖动的点(标记)。然后我希望能够让我的脚本将位置(lat,long)写入文档。然后,我将计算这些作为我正在制作的运送应用程序的一部分之间的距离。

我希望在将标记(点)拖动到新位置时更新文档内容(lat,long)。

另外,我修正了一个小学生错误,其中点变量在switch语句中被decalred。通过在switch语句中移动Add事件侦听器语句来解决我的问题。谢谢Cannonade:)

接下来的事情是尝试计算两点之间的距离(乌鸦苍蝇)

再次感谢您的帮助......一如既往地赞赏!!

更新的有效代码:

        var map = null;
    var geocoder = null;
    var zoom = 15;
    var first_point = false;
    var boundary =  new Array();
    var cCount = 0;


    var point1;
    var point2;

    function initialize() {
        if (GBrowserIsCompatible()) {
            first_point = false;
            map = new GMap2(document.getElementById("map_canvas"));
            var center = new GLatLng(37.4419, -122.1419);
            map.setCenter(center, zoom);

            GEvent.addListener(map, "click", function(overlay,point)
            {
                if (overlay != null)
                {}
                else
                {
                    var n = boundary.length;

                    switch (cCount)
                    {
                        case 0:
                            point1 = new GMarker(point,{draggable: true});
                            map.addOverlay(point1);
                            cCount++;
                            GEvent.addListener(point1, "dragend", function()
                                {
                                    alert('P1 Dragged');
                                });
                            break;
                        case 1:
                            point2 = new GMarker(point,{draggable: true});
                            map.addOverlay(point2);
                            cCount++;
                            GEvent.addListener(point2, "dragend", function()
                                {
                                    alert('P2 Dragged');
                                });
                            break;
                        case 2:
                            map.clearOverlays();
                            cCount=0;
                            break;
                    }
                }
            });
            map.addControl(new GSmallMapControl());
            geocoder = new GClientGeocoder();
        }
    }

1 个答案:

答案 0 :(得分:0)

我已经使用了您的代码并进行了以下修复:

  • 修正了我在评论中提到的不平衡括号。
  • 将两个 addListener 调用移动到switch语句中,以便在附加事件时point1和point2变量仍在范围内。

您可以check out the example heresource)。

修改

以下是一些Javascript代码,用于获取两点之间的线性距离(以米为单位):

/* Convert degress to radians */
function deg2rad(deg) {
  return deg / (180 / Math.PI);
}

/* Calculate distance between two points */
function point_distance(a, b) {
  var r = 6378700;
  var lat1 = a.y;
  var lat2 = b.y;
  var lon1 = a.x;
  var lon2 = b.x;
  var dist = r * Math.acos(Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) +
               Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
               Math.cos(deg2rad(lon1 - lon2)));
  return dist;
}

这是基于地球的近似半径为6378700m。