gps 정보가있는 사진에서 gps 정보를 추출하는 애플리케이션이 있습니다. 편집 작업으로 위치를 업데이트하려면 마커를 드래그하여 바꾸고 새 위치를 저장하고 싶습니다. 클릭하여지도에 표시하면 이전 마커가 그대로 남아 있으므로 두 개의 마커가 있습니다. 첫 번째는 오래된 것이며 두 번째는 드래그 할 수있는 새로운 것입니다. 자바 스크립트에서 양식 ID를 업데이트하지만 새 위치가 저장되지 않습니다. 자바 스크립트에서 배열의 길이를 확인할 때 아무 것도 없습니다. 그러나 페이지의 출처를 보면 정렬 된 마커가 거의 없습니다. 내가 빠진 것이 있습니까?gmaps4rails - 새로운 위치에 마커 놓기
감사합니다
properites_controller.rb
def edit
@property = Property.find(params[:id])
@json = Property.find(params[:id]).to_gmaps4rails
end
def update
@property = Property.find(params[:id])
if @property.update_attributes(params[:property])
redirect_to @property, notice: 'Property was successfully updated.'
else
render action: "edit"
end
end
edit.html.erb
<%= render 'form' %>
<div id="map_canvas">
<%= gmaps("map_options" => { "zoom" => 15, "auto_adjust" => true, "auto_zoom" => false},
"markers" => {"data" => @json}) %>
</div>
<% content_for :scripts do %>
<script type="text/javascript" charset="utf-8">
var markersArray = [];
// On click, clear markers, place a new one, update coordinates in the form
Gmaps.map.callback = function() {
google.maps.event.addListener(Gmaps.map.serviceObject, 'click', function(event) {
clearOverlays();
placeMarker(event.latLng);
updateFormLocation(event.latLng);
});
};
// Update form attributes with given coordinates
function updateFormLocation(latLng) {
$('#property_latitude').val(latLng.lat());
$('#property_longitude').val(latLng.lng());
$('#property_gmaps_zoom').val(Gmaps.map.serviceObject.getZoom());
}
// Add a marker with an open infowindow
function placeMarker(latLng) {
var marker = new google.maps.Marker({
position: latLng,
map: Gmaps.map.serviceObject,
draggable: true
});
markersArray.push(marker);
// Set and open infowindow
var infowindow = new google.maps.InfoWindow({
content: '<div class="popup"><h2>Awesome!</h2><p>Drag me and adjust the zoom level.</p>'
});
infowindow.open(Gmaps.map.serviceObject,marker);
// Listen to drag & drop
google.maps.event.addListener(marker, 'dragend', function() {
updateFormLocation(this.getPosition());
});
}
// Removes the overlays from the map
function clearOverlays() {
if (markersArray) {
for (var i = 0; i < markersArray.length; i++) {
markersArray[i].serviceObject.setMap(null);
//markersArray[i].setMap(null);
}
}
markersArray.length = 0;
}
</script><% end %>
_form.html.erb
<%= simple_form_for @property, :html => {:multipart => true} do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :name, :label => "Název", :input_html => { :class => "input-xlarge"} %>
<%= f.input :description, :label => "Popis", :input_html => { :class => "input-xlarge", :rows => "6"} %><br />
<%= f.hidden_field :latitude %>
<%= f.hidden_field :longitude %>
<%= f.input :date, :label => "Datum", :as => :date %>
<%= f.file_field :photo %>
</div>
<div class="form-actions">
<%= link_to 'Zpět', properties_path, :class => 'btn' %>
<%= f.button :submit, :class => 'btn-primary' %>
</div>
<% end %>
아마도 문제 일 수 있습니다. 그리고 제가 가지고있는 두 번째 문제는 새로운 것을 놓을 때 원본 마커를 지우지 않는 것입니다. 보석 페이지에서 js를 사용하고 있습니다. – tomasg