Как сохранить маркер с широтой и долготой в базе данных mysql, используя Ruby on Rails - PullRequest
1 голос
/ 20 октября 2011

Я использую google maps api v3 с Ruby на рельсах 3.1.У меня есть следующая модель:

class Business < ActiveRecord::Base
  attr_accessible :business_name, :address, :city_id,
                  :latitude, :longitude, :zipcode

Часть моего представления о бизнесе представлена ​​здесь:

%style{:type => "text/css"}
  html { height: 100% }
  body { height: 100%; margin: 0; padding: 0 }
  #map_canvas { height: 100% }

%script{:type => "text/javascript",
        :src => "http://maps.googleapis.com/maps/api/js?v=3.6&sensor=false"}

%script{:type => "text/javascript"}
  function initialize() {

  var latlng = new google.maps.LatLng(#{@business.latitude}, #{@business.longitude});

  var myOptions = {
  zoom: 12,
  center: latlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  var contentString = "#{@business.business_name}"

  var infowindow = new google.maps.InfoWindow({
  content: contentString
  });


  var marker = new google.maps.Marker({
  position: latlng,
  draggable:true,
  animation: google.maps.Animation.DROP,
  title:"#{@business.business_name}"
  });

  // To add the marker to the map, call setMap();
  marker.setMap(map);

  google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
  });

  google.maps.event.addListener(marker, 'dragend', function() { 
  var latitude = marker.getPosition().lat();
  var longitude = marker.getPosition().lng();
    // use Ajax to save latitude, longitude  in the database
}


  }
  google.maps.event.addDomListener(window, 'load', initialize);

%div#map_canvas{:style => "width:500px; height:350px"}

Я могу перетащить маркер, но все равно не могу сохранитьновая позиция в базе данных (mysql 2.8.1).Я нашел немного JavaScript (см. Строки вокруг var latitude = marker.getPosition (). Lat ();), но так как мои знания JavaScript очень скудны, я понятия не имею, как сохранить новую позицию маркера в базе данных.В идеале я хотел бы иметь ссылку «сохранить» в моем информационном окне, которая бы подтверждала сохранение новой широты и долготы в базе данных.

Кто-нибудь знает, как это сделать?Заранее большое спасибо за помощь!

1 Ответ

0 голосов
/ 20 апреля 2012

Вы должны перенести данные в форму ajax:

<%= form_for @marker, :remote => true, :html => { :multipart => true } do |f| %>
  <%= f.hidden_field :lat, :id => "lat" %>
  <%= f.hidden_field :lng, :id => "lng" %>
  <%= f.submit "save marker" %>
<% end %>

в своем js-коде добавьте:

var lat = $("#lat");
var lng = $("#lng");

var set_latlng_to_input = function(marker){
  lat.val(marker.getPosition().lat());
  lng.val(marker.getPosition().lng());
}

эту функцию вам теперь нужно вызвать в вашем google.maps.event.addListener:

 google.maps.event.addListener(marker, 'click', function() {
   infowindow.open(map,marker);
   set_latlng_to_input(marker);
 });

 google.maps.event.addListener(marker, 'dragend', function() { 
   set_latlng_to_input(marker);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...