Javascript 从Google marker获取Lat/Lng

Javascript 从Google marker获取Lat/Lng,javascript,google-maps,google-maps-markers,Javascript,Google Maps,Google Maps Markers,我制作了一张谷歌地图,上面有一个可拖动的标记。当用户拖动标记时,我需要知道新的纬度和经度,但我不知道最好的方法是什么 如何检索新坐标?你可以打电话-你试过了吗 如果您使用的是不推荐使用的JavaScript API v2,您可以调用。您应该在标记上添加一个侦听器,侦听拖放事件,并在收到此事件时询问事件的位置 有关标记触发的事件的描述,请参见。有关允许添加事件侦听器的方法,请参阅。以下是示例。在谷歌地图API V3中,跟踪可拖动标记的lat和lng非常简单。让我们从以下HTML和CSS作为基础开始

我制作了一张谷歌地图,上面有一个可拖动的标记。当用户拖动标记时,我需要知道新的纬度和经度,但我不知道最好的方法是什么

如何检索新坐标?

你可以打电话-你试过了吗


如果您使用的是不推荐使用的JavaScript API v2,您可以调用。

您应该在标记上添加一个侦听器,侦听拖放事件,并在收到此事件时询问事件的位置

有关标记触发的事件的描述,请参见。有关允许添加事件侦听器的方法,请参阅。

以下是示例。在谷歌地图API V3中,跟踪可拖动标记的lat和lng非常简单。让我们从以下HTML和CSS作为基础开始

<div id='map_canvas'></div>
<div id="current">Nothing yet...</div>

#map_canvas{
    width: 400px;
    height: 300px;
}

#current{
     padding-top: 25px;
}
在这里,我们附加两个事件
dragstart
来跟踪拖动的开始,并在标记停止拖动时将
dragend
附加到drack,我们附加它的方式是使用
google.maps.event.addListener
。我们在这里做的是在拖动标记时设置div
当前的内容,然后在停止拖动时设置标记的lat和lng。谷歌鼠标事件有一个属性名“latlng”,在事件触发时返回“Google.maps.latlng”对象。因此,我们在这里所做的基本上是使用这个侦听器的标识符,该标识符由
google.maps.event.addListener
返回,并获取属性
latLng
来提取dragend的当前位置。当阻力停止时,一旦我们获得Lat Lng,我们将在您的
当前
div中显示:

google.maps.event.addListener(myMarker, 'dragend', function(evt){
    document.getElementById('current').innerHTML = '<p>Marker dropped: Current Lat: ' + evt.latLng.lat().toFixed(3) + ' Current Lng: ' + evt.latLng.lng().toFixed(3) + '</p>';
});

google.maps.event.addListener(myMarker, 'dragstart', function(evt){
    document.getElementById('current').innerHTML = '<p>Currently dragging marker...</p>';
});
如果您对我的答案有任何疑问,请告诉我。

试试这个

// show the marker position //

console.log( objMarker.position.lat() );
console.log( objMarker.position.lng() );

// create a new point based into marker position //

var deltaLat = 1.002;
var deltaLng = -1.003;

var objPoint = new google.maps.LatLng( 
  parseFloat( objMarker.position.lat() ) + deltaLat, 
  parseFloat( objMarker.position.lng() ) + deltaLng
);

// now center the map using the new point //

objMap.setCenter( objPoint );
var latlng = new google.maps.LatLng(51.4975941, -0.0803232);
var map = new google.maps.Map(document.getElementById('map'), {
    center: latlng,
    zoom: 11,
    mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
    position: latlng,
    map: map,
    title: 'Set lat/lon values for this property',
    draggable: true
});

google.maps.event.addListener(marker, 'dragend', function (event) {
    document.getElementById("latbox").value = this.getPosition().lat();
    document.getElementById("lngbox").value = this.getPosition().lng();
});

这个问题有很多答案,但对我来说从来都不起作用(包括建议getPosition(),它似乎不是一个可用于标记对象的方法)。在maps V3中对我有效的唯一方法是(简单地):

更多信息请访问

var map=new google.maps.map(document.getElementById('map_canvas'){
缩放:10,
中心:新google.maps.LatLng(13.103,80.274),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var myMarker=new google.maps.Marker({
位置:新google.maps.LatLng(18.103,80.274),
德拉格布尔:是的
});
google.maps.event.addListener(myMarker,'dragend',function(evt){
document.getElementById('current').innerHTML='删除的标记:当前Lat:'+evt.latLng.Lat().toFixed(3)+'current Lng:'+evt.latLng.Lng().toFixed(3)+'

'; }); google.maps.event.addListener(myMarker,'dragstart',函数(evt){ document.getElementById('current').innerHTML='当前正在拖动标记…

; }); 地图设置中心(myMarker.position); myMarker.setMap(map); 函数getLocation(){ if(导航器.地理位置){ navigator.geolocation.getCurrentPosition(showPosition); }否则{ x、 innerHTML=“此浏览器不支持地理位置。”; } } 功能显示位置(位置){ document.getElementById('current').innerHTML='删除的标记:当前纬度:'+position.coords.latitude+'current Lng:'+position.coords.longitude+'

'; var myMarker=new google.maps.Marker({ 位置:新的google.maps.LatLng(position.coords.lation,position.coords.longitude), 德拉格布尔:是的 }); google.maps.event.addListener(myMarker,'dragend',function(evt){ document.getElementById('current').innerHTML='删除的标记:当前Lat:'+evt.latLng.Lat().toFixed(3)+'current Lng:'+evt.latLng.Lng().toFixed(3)+'

'; }); google.maps.event.addListener(myMarker,'dragstart',函数(evt){ document.getElementById('current').innerHTML='当前正在拖动标记…

; }); 地图设置中心(myMarker.position); myMarker.setMap(map); } getLocation()
#地图#画布{
宽度:980px;
高度:500px;
}
#当前{
填充顶部:25px;
}

标记下降:当前纬度:18.103当前液化天然气:80.274


我想我的困惑在于何时调用getPosition()-是否必须向构造函数中添加一些内容,以便它知道在移动标记时询问坐标?@Genadinik我在编辑中链接的示例可能会有所帮助;它展示了如何为拖动事件附加一个侦听器,您可以在其中查询标记的位置,并以您喜欢的方式使用它。啊,很酷,如果我想在会话或数据库中存储坐标,我应该通过AJAX调用来实现吗?还是有一种更简单的方法?我想不出比用标记ID和它的当前坐标的快速Ajax邮件更简单的方法:但是你可以考虑批处理更新,或者至少等待几秒钟,直到拖动完成后,看到用户不再开始拖动,这样你就不会用请求淹没服务器了。当标记正在被拖动时——可以说,等待位置稳定。当然,这取决于与客户端看到的情况相比,您的服务器端状态落后了多少。
getPosition()
返回一个对象,因此要具体获取纬度/经度,您必须分别从中调用
lat()
lng()
。我想您的意思是
marker.position.lat()
marker.position.lng()
或者您需要使用
marker.getPosition().lat()
marker.getPosition().lng()
您不能使用“long”作为变量,而此代码可以回答问题,提供有关它如何以及为什么解决问题的信息可以提高其长期价值。在调用方法之前,如何实例化
marker
?例如,我正在查看,搜索完成后,出现一个标记,如何获取该标记的纵横比?
// show the marker position //

console.log( objMarker.position.lat() );
console.log( objMarker.position.lng() );

// create a new point based into marker position //

var deltaLat = 1.002;
var deltaLng = -1.003;

var objPoint = new google.maps.LatLng( 
  parseFloat( objMarker.position.lat() ) + deltaLat, 
  parseFloat( objMarker.position.lng() ) + deltaLng
);

// now center the map using the new point //

objMap.setCenter( objPoint );
var latlng = new google.maps.LatLng(51.4975941, -0.0803232);
var map = new google.maps.Map(document.getElementById('map'), {
    center: latlng,
    zoom: 11,
    mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
    position: latlng,
    map: map,
    title: 'Set lat/lon values for this property',
    draggable: true
});

google.maps.event.addListener(marker, 'dragend', function (event) {
    document.getElementById("latbox").value = this.getPosition().lat();
    document.getElementById("lngbox").value = this.getPosition().lng();
});
var lat = marker.lat();
var long = marker.lng();
var lat = marker.getPosition().lat();
var lng = marker.getPosition().lng();