Google maps api 3 可拖动标记以更新横向和纵向字段

Google maps api 3 可拖动标记以更新横向和纵向字段,google-maps-api-3,draggable,google-maps-markers,Google Maps Api 3,Draggable,Google Maps Markers,不知是否有人能帮助我 我将一些代码放在一起(请参见下文),用户进入HTML表单,键入地址并单击“搜索”按钮。完成此操作后,位置将绘制在谷歌地图上,并且Lat和Long co ORIDNATE将自动输入到我表单上的相关文本框中 如果可能的话,我想做的是让标记可以拖动,这样用户就可以微调位置,当他们拖动标记时,我想让Lat和Long字段改变它们的位置 相关坐标 此外,如果可能的话,我还希望在表单上有一个名为“NeareSAddress”的字段,以显示标记拖到的最近地址 我已经设法使标记可以拖动,但它

不知是否有人能帮助我

我将一些代码放在一起(请参见下文),用户进入HTML表单,键入地址并单击“搜索”按钮。完成此操作后,位置将绘制在谷歌地图上,并且Lat和Long co ORIDNATE将自动输入到我表单上的相关文本框中

如果可能的话,我想做的是让标记可以拖动,这样用户就可以微调位置,当他们拖动标记时,我想让Lat和Long字段改变它们的位置 相关坐标

此外,如果可能的话,我还希望在表单上有一个名为“NeareSAddress”的字段,以显示标记拖到的最近地址

我已经设法使标记可以拖动,但它们不会更新纬度和经度文本框。我也不确定如何添加功能来显示标记被拖动到的更新地址

(function() {
// Defining some global variables
var map, geocoder, myMarker, infowindow;
window.onload = function() {
// Creating a new map
var options = {
zoom: 3,
center: new google.maps.LatLng(55.378051,-3.435973),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map'), options);
// Getting a reference to the HTML form
var form = document.getElementById('LocationSearchForm');
// Catching the forms submit event
form.onsubmit = function() {
// Getting the address from the text input
var address = document.getElementById('Address').value;
// Making the Geocoder call
getCoordinates(address);
// Preventing the form from doing a page submit
return false;
}
}
// Create a function the will return the coordinates for the address
function getCoordinates(address) {
// Check to see if we already have a geocoded object. If not we create one
if(!geocoder) {
geocoder = new google.maps.Geocoder();
}
// Creating a GeocoderRequest object
var geocoderRequest = {
address: address
}
// Making the Geocode request
geocoder.geocode(geocoderRequest, function(results, status) {
// Check if status is OK before proceeding
if (status == google.maps.GeocoderStatus.OK) {
// Center the map on the returned location
map.setCenter(results[0].geometry.location);
    // Creating a new marker and adding it to the map
        var myMarker = new google.maps.Marker({
            map: map, 
            position: results[0].geometry.location,
            draggable:true
        });

        document.getElementById('Latitude').value=  results[0].geometry.location.lat();
        document.getElementById('Longitude').value=  results[0].geometry.location.lng();

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

        map.setCenter(myMarker.position);
        myMarker.setMap(map);

      } 

    });

  }

})();
(函数(){
//定义一些全局变量
var地图、地理编码器、myMarker、信息窗口;
window.onload=函数(){
//创建新地图
变量选项={
缩放:3,
中心:新google.maps.LatLng(55.378051,-3.435973),
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById('map'),选项);
//获取对HTML表单的引用
var form=document.getElementById('LocationSearchForm');
//捕获表单提交事件
form.onsubmit=函数(){
//从文本输入获取地址
var address=document.getElementById('address')。值;
//打电话给地理编码器
获取坐标(地址);
//阻止表单进行页面提交
返回false;
}
}
//创建一个函数,该函数将返回地址的坐标
函数getCoordinates(地址){
//检查我们是否已经有一个地理编码的对象。如果没有,我们创建一个
if(!地理编码器){
geocoder=新的google.maps.geocoder();
}
//创建GeocoderRequest对象
var geocoderRequest={
地址:地址
}
//发出地理编码请求
geocoder.geocode(geocoderRequest,函数(结果,状态){
//继续之前,请检查状态是否正常
if(status==google.maps.GeocoderStatus.OK){
//将地图放在返回位置的中心
map.setCenter(结果[0].geometry.location);
//创建新标记并将其添加到地图
var myMarker=new google.maps.Marker({
地图:地图,
位置:结果[0]。geometry.location,
德拉格布尔:是的
});
document.getElementById('Latitude')。value=results[0]。geometry.location.lat();
document.getElementById('Longitude')。value=results[0]。geometry.location.lng();
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); } }); } })();
我是谷歌地图开发的新手,我甚至不确定是否有可能实现我想要的。我已经为此工作了几个星期,这让我有点疯狂,所以如果有人能给我指出正确的方向,我将非常感激

非常感谢和亲切的问候


Chris

而不是
evt.latLng.lat().toFixed(3)
您应该只使用myMarker对象并获取它的位置

获取最近的地址并不容易,但需要反向地理编码,老实说,我不认为这样做有什么意义。你必须为那些找不到最近地址之类的事情做一些特殊的处理


如果你真的想做这件事,尽管有一个网络服务,你可以打电话来做。

嗨,非常感谢你的回复。我已经对我认为需要更改的行进行了修改,即document.getElementById('current')。innerHTML='删除的标记:current Lat:'+myMarker+'current Lng:'+myMarker+'

';但这似乎不起作用。正如我所说,我对这一点相当陌生,因此我缺乏经验很可能没有帮助。有什么想法吗?非常感谢和亲切的问候。是的,对不起,我应该澄清一下。您仍然需要获取myMarker.position.lat()。你做错的是使用evt,这只是运动事件。不是标记物。嗨,很抱歉再次打扰你,但我仍然不确定我需要做什么。你能告诉我我需要改变什么吗。恐怕它必须是防白痴的!非常感谢和亲切的问候。嗨,我一直在做这个,我终于让它工作了。非常感谢您的时间和麻烦。问候(非公开)