1

好的,我花了 2 天时间来寻求帮助 :) 现在代码一切正常,我只需要使标记可拖动并更新 Lat 和 Lng 值。目前,代码通过当前位置以及在网页上输入位置来捕获 lat 和 lng。然后将_Lat 和_lng 的值提交到数据库。我需要用户能够在提交数据库之前拖动标记以微调位置并更新 _lat 和 _lng。我已经使标记可拖动,但我不知道如何添加 dragend 代码,以便它在数据库提交之前动态更新 lat 和 _lng 的值。我不需要更新网页上的任何内容,只需更新发布到数据库的 _lat 和 _lng 值。这是现有的代码:

谢谢

var gmap;
var gmarker;
var geocoder;

function initialize() {
    // Get here center of map - by default - San Francisco center
    var center = new google.maps.LatLng(37.47, -122.25);
    var mapOptions = {
      center: center,
      zoom: 12,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    geocoder = new google.maps.Geocoder()
    gmap = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);
    // Set inner position of map to form parameters
    $('input[name="_lat"]').val(37.47);
    $('input[name="_lng"]').val(-122.25);

    gmarker = new google.maps.Marker({
            map: gmap,
            position: center,
            icon: '/static/internal/images/mapicon.png',
    draggable: true
        });





    google.maps.event.addListener(gmap, 'click', function(event) {
        gmarker.setPosition(event.latLng);
        $('input[name="_lat"]').val(event.latLng.lat());
        $('input[name="_lng"]').val(event.latLng.lng());
    });


    navigator.geolocation.getCurrentPosition(function(position){
            var _lng = position.coords.longitude;
            var _lat = position.coords.latitude;
            $('input[name="_lng"]').val(_lng);
            $('input[name="_lat"]').val(_lat);
            var new_position = new google.maps.LatLng(_lat, _lng);
            gmap.setCenter(new_position);
            gmarker.setPosition(new_position);
        })
}

function showAddress(address) {
  if (geocoder) {
    geocoder.geocode(
      {'address': address},
      function(results, status) {
        if (status != google.maps.GeocoderStatus.OK) {
          alert(address + " not found");
        } else {
          gmap.setCenter(results[0].geometry.location);
          gmarker.setPosition(results[0].geometry.location);
          $('input[name="_lat"]').val(results[0].geometry.location.lat());
          $('input[name="_lng"]').val(results[0].geometry.location.lng());
        }
      }
    );
  }
}
4

2 回答 2

1

监听标记的position_changed-event:

google.maps.event.addListener(gmarker, 'position_changed', function() {

    $('input[name="_lat"]').val(this.getPosition().lat());
    $('input[name="_lng"]').val(this.getPosition().lng());
});
于 2013-02-18T00:11:17.193 回答
0

您的点击事件在地图上,它应该在标记上

改变

google.maps.event.addListener(gmap, 'click', function(event) {

google.maps.event.addListener(gmarker, 'click', function(event) {
于 2013-02-17T22:44:47.663 回答