谷歌地图中标记的拖动问题

dragging problem in markers in google maps

本文关键字:拖动 问题 谷歌地图      更新时间:2023-09-26

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

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=新的GMarker(点,{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);
   });
 }

dragenddragstart函数总是获取最后一个标记的细节,而不是拖动标记的细节。。

函数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="E等待点…";

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="更新条目SET lat='$newlat',lng='$newlng'WHERE id='$p';";

  $r = updateBatch($q);

}?>但标记的位置不会改变

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

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