【问题标题】:dragging problem in markers in google maps在谷歌地图中的标记中拖动问题
【发布时间】:2011-09-20 22:05:17
【问题描述】:

我正在从数据库中获取标记详细信息。 代码是

app.entries[id].data = {'id': id, 'map': entry[1].innerHTML,'type_id':

entry[2].innerHTML,'name': entry[3].innerHTML,'descript':  entry[4].innerHTML, 'parish':

entry[5].innerHTML,'zip': entry[6].innerHTML, 'url': entry[7].innerHTML, 'lng':

entry[8].innerHTML,'lat':entry[9].innerHTML,'tags':entry[10].innerHTML,'img': 

entry[11].innerHTML,'imgs':entry[12].innerHTML};

app.entries[id].data.imgHTML = (app.entries[id].data.img == "") ? "" : 

fill_template(app.entries[id].data,app.infoWindowImageHTML);

var str = fill_template(app.entries[id].data,app.searchRowHTML);

html.push(str);

if (app.entries[id].data.lat != 0 || app.entries[id].data.lng != 0) {

   var point = new GLatLng(app.entries[id].data.lat,app.entries[id].data.lng);

   var m = new GMarker(point,{draggable: true});

   GEvent.addListener(m, "dragstart", function() {

          // map.closeInfoWindow();

      var latlngold = m.getLatLng();

  });

   GEvent.addListener(m, "dragend", function() {

var m = new GMarker(point,{draggable: true});

 m.entry_id = id;
 var p=m.entry_id;

    var latlngnew = m.getLatLng();

     alert(latlngnew);

     //m.setLatLng(new GLatLng(latlng));

     editentry1(latlngnew,p);

   });
 }

dragend 和 dragstart 函数总是获取最后一个标记的详细信息,而不是拖动标记的详细信息..

函数editentry1(latlngnew,p){

     var newlat=latlngnew.lat();

 var newlng=latlngnew.lng();

     var d = new Date();

var dv = d.valueOf();

var url = "<?php echo $g['appPath']; ?>admin/editPoint.php?d="+dv+"&

newlat="+newlat+"newlng="+newlng+"&p="+p;

 var s = $('mapStatus');

s.innerHTML = "编辑点...";

s.show();

new Ajax.Request(url, {

  method: 'get',

  onSuccess: editEntryReturn,

  onFailure: requestFailed

});

}

editPoint.php

require("createThumb.php");

$newlng = $_GET['newlng'];

$newlat = $_GET['newlat'];

$p=$_GET['p'];

$q = "UPDATE entry SET lat = '$newlat', lng = '$newlng' WHERE id='$p';";

  $r = updateBatch($q);

} ?> 但是标记的位置没有改变

【问题讨论】:

    标签: javascript google-maps


    【解决方案1】:

    将您的标记创建代码封装在一个函数中。这将创建一个closure,拖动回调可以在其中找到适当的标记对象:

    function createMarker (point)
    {
        var m = new GMarker(point,{draggable: true});
    
        GEvent.addListener(m, "dragstart", function() {
            var latlngold = m.getLatLng();
        });
    
        GEvent.addListener(m, "dragend", function() {
            var latlngnew = m.getLatLng();
            editentry1(latlngold,latlngnew);
        });
    
        return m;
    }
    

    得到要点后,在 if 语句中调用它:

    if (app.entries[id].data.lat != 0 || app.entries[id].data.lng != 0) 
    {
        var point = new GLatLng(app.entries[id].data.lat,app.entries[id].data.lng);
        map.addOverlay(createMarker (point));
    }
    

    【讨论】:

    • @Ashitha 你已经注释掉了 addOverlay 代码。我已经用该代码更新了我的答案:)
    • 现在地图出现并且可以拖动它..但是当页面刷新标记仍然在旧位置
    猜你喜欢
    • 2012-08-07
    • 2011-03-25
    • 2014-08-28
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    相关资源
    最近更新 更多