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