Карты Google Добавьте маркер на карту, затем сохраните широту и долготу в Ruby on Rails - PullRequest
5 голосов
/ 17 ноября 2009

Я посмотрел на предыдущие вопросы, но мне не совсем подходит, так что вот оно:

По сути, у меня есть проект Ruby on Rails, и я хотел бы, чтобы у меня была страница, на которой пользователь указывает свое местоположение на карте Google, добавив маркер (должен быть разрешен только 1), а затем сохранил долготу и широту в пределах проект Ruby on Rails, над которым я работаю.

Я хотел бы знать, каков наилучший подход к этому (добавить карту с помощью Javascript?), Но тогда как мне получить широту и долготу, когда пользователь нажимает кнопку в рубине на рельсах?

Буду очень признателен за любые советы / ссылки на соответствующие сайты и т. Д., Так как работа в среде ruby ​​on rails является для меня довольно новой, и я не уверен, что делать с этим.

Большое спасибо в продвинутом

Ответы [ 5 ]

4 голосов
/ 17 ноября 2009

Вот краткий пример:

your_page.html

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;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);
}
}
3 голосов
/ 17 ноября 2009

Я думаю, что первым шагом было бы заставить ваши виды работать без карты. Введите широту / длину вручную, чтобы вы знали, что ваши представления и контроллеры работают. Как только вы достигнете этой точки, взгляните на документацию API Карт Google . Добавьте карту к вашему виду, выясните, как добавить маркер . Когда вы добавляете / удаляете маркер, вы можете обновить свои лат / лонг вводы с помощью JavaScript (я бы лично использовал jQuery). На этом этапе вы можете сделать ввод значений lat / long скрытым или доступным только для чтения - если только у пользователей нет причин обновлять значения lat / long вручную.

К вашему сведению - Google может предложить использовать V3 API Карт, но когда я попытался его использовать, было слишком много недостающих фрагментов. Я бы придерживался V2.

0 голосов
/ 08 января 2011

Плагин Cartographer поддерживает Rails 3+,

Он был переписан для работы с огромным количеством маркеров и кластеров

поддерживает безболезненную интеграцию карт Google v3 в рельсы, http://grati.la/cartorbflw

0 голосов
/ 10 февраля 2010

Если вы пытаетесь использовать API Карт Google в одном из ваших проектов Rails, тогда я настоятельно рекомендую использовать плагин YM4R . Плагин обеспечивает приятную рубиновую инкапсуляцию объектов API Карт Google. README в Rdoc имеет отличный пример кода для начала отображения карты и отображения одного или нескольких маркеров.

Большим преимуществом использования плагина является то, что он абстрагирует весь API-интерфейс GMaps за объектами ruby, так что вы можете создавать и добавлять на карту, используя только код Ruby. Вам не придется писать какой-либо Javascript ... если вы не хотите;)

0 голосов
/ 17 ноября 2009

Я не знаю подробностей, но я бы обратился к API Карт Google для функции обратного вызова, которая вызывается, когда пользователь удаляет маркер. Я уверен, что есть один. Когда вызывается эта функция обратного вызова, она будет передана с широтой и долготой. С этим вы можете обновить атрибуты формы с правильными значениями.

Просто чтобы помочь вам в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...