【问题标题】:Google Maps add 2 GEvent Listeners. 1 for each marker谷歌地图添加了 2 个 GEvent 监听器。每个标记 1 个
【发布时间】:2010-08-01 20:49:39
【问题描述】:

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

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

我希望在将标记(点)拖到新位置时更新文档的内容(纬度、经度)。

另外,我修复了一个男生错误,其中点变量在 switch 语句中被贴花。我的问题是通过在 switch 语句中移动 Add 事件侦听器语句来解决的。谢谢炮弹:)

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

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

更新的有效代码:

        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();
        }
    }

【问题讨论】:

  • cCount 在哪里定义?开头的 if 语句关闭了 addListener,所以剩下的代码就挂了。你能澄清一下你想要做什么吗?
  • 所以,我更新了这篇文章,使其更有意义。很抱歉第一次运行,我有点压力。

标签: google-maps


【解决方案1】:

我已获取您的代码并进行了以下修复:

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

您可以check out the example here (source)。

编辑:

这里是一些 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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多