Нет никакого различия между bool? b = null
и Nullable<bool> b = null
. Эти ?
просто сахар синтаксиса компилятора C#.
Я думаю, что первым шагом было бы заставить ваши представления работать без карты. Введите широту / долготу вручную, чтобы знать, что ваши представления и контроллеры работают. Когда вы дойдете до этой точки, взгляните на документацию по API Карт Google . Добавьте карту к виду, выясните, как добавить маркер . Когда вы добавляете / удаляете маркер, вы можете обновлять свои входные данные широты и долготы с помощью JavaScript (я бы лично использовал jQuery). На этом этапе вы можете сделать вводы широты / долготы скрытыми или доступными только для чтения - если у ваших пользователей нет причины обновлять широту / долготу вручную.
К вашему сведению - Google мог предложить использовать V3 API Карт, но когда я попытался использовать его, оказалось, что слишком много недостающих частей. Я бы остановился на версии 2.
Я не знаю подробностей, но я хотел бы проверить API Карт Google для функции обратного вызова, которая вызывается, когда пользователь сбрасывает маркер. Я уверен, что он есть. Когда эта функция обратного вызова вызывается, ей передается широта и долгота. С его помощью вы можете обновить атрибуты формы, указав правильные значения.
Просто чтобы помочь вам двигаться в правильном направлении.
Вот краткий пример:
your_page.html
<script src="http://maps.google.com/maps?file=api&v=2&key=xxx;hl=en" type='text/javascript'></script>
<script type='text/javascript'>
var draggable_marker = null;
$(document).ready(function() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById('map_div'));
map.addControl(new GSmallMapControl());
draggable_marker = new GMarker(new GLatLng(42.6976489, 23.3221545), {draggable : true,title : "Place this marker to your location");
GEvent.addListener(draggable_marker, 'dragend', function() {
RubyGmap.setPosition(draggable_marker);
});
GEvent.addListener(map, 'click', function(overlay, latlng, overlaylatlng){
RubyGmap.setMarkerPosition(draggable_marker, latlng);
});
}
});
</script>
<div id="map_div" style="width:690px;height:340px;" ></div>
ruby_gmap.js
RubyGmap = {
setPosition: function(marker) {
$('#latitude_field').val(marker.getLatLng().lat());
$('#longitude_field').val(marker.getLatLng().lng());
},
setMarkerPosition: function(marker, latlng) {
SELECTED = true;
map.addOverlay(marker);
marker.setLatLng(latlng);
RubyGmap.setPosition(marker);
}
}
Если вы пытаетесь использовать Google Maps API в одном из ваших Rails проектов, то я бы настоятельно рекомендовал использовать плагин YM4R. Плагин обеспечивает хорошую инкапсуляцию Google Maps API в виде объектов, дружественных к рубину. В README в Rdoc есть отличный код примеров того, как начать отображать карту и выводить один или несколько маркеров.
Большим преимуществом использования плагина является то, что плагин абстрагирует весь GMaps API за рубиновыми объектами, так что вы можете создавать и добавлять на карту, используя только код Ruby. Вам не придется писать никакой Javascript... если только вы этого не захотите ;)
.