1

わかりました、この時間の作業に 2 日間費やしました :) マーカーをドラッグ可能にして、緯度と経度の値を更新するだけで、コードはすべて正常に動作します。現時点では、コードは現在の位置と Web ページ上の場所を入力して、緯度と経度を取得します。次に、_Lat と _lng の値がデータベースに送信されます。ユーザーがマーカーをドラッグして場所を微調整し、データベースを送信する前に _lat と _lng を更新できるようにする必要があります。マーカーをドラッグ可能にしましたが、データベースの送信前に lat と _lng の値を動的に更新するように dragend コードを追加する方法がわかりません。データベースにポストされる _lat 値と _lng 値を更新する必要があるだけで、Web ページで何も更新する必要はありません。既存のコードは次のとおりです。

ありがとう

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マーカーのイベントをリッスンします。

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 に答える