- gmaps: Standard Rails4, ActiveRecord, standard UI
- gmaps_mongo: Rails4, MongoDB, standard UI
- gmaps_zurb: Rails4, MongoDB, Zurb Foundation
This application requires:
- Ruby 2.0
- Rails 4.0
- ActiveRecord
- Plain Vanilla
- gmaps4rails
From the gmaps4rails github site, which references a quick tutorial on Youtube.
I created these steps so that I could be sure on the proper steps to get gmaps working.
Bootstrap the rails app inside an RVM setup (RVM is optional)
$ mkdir gmaps
$ cd gmaps/
$ rvm use ruby-2.0.0@gmaps --ruby-version --create
Using /Users/jon/.rvm/gems/ruby-2.0.0-p247 with gemset gmaps
ruby-2.0.0-p247@gmaps ~/Nitrous.IO/jons-box-1/gmaps
$ gem install rails
The user will have lat/lon data
rails g scaffold User latitude:float longitude:float address:string description:string title:string
rake db:migrate
In Gemfile, add:
gem 'geocoder'
In routes.rb
add root 'users#index'
Gmaps::Application.routes.draw do
resources :users
root 'users#index'
end
In user.rb
add the Geocoder bits
class User < ActiveRecord::Base
geocoded_by :address
after_validation :geocode
end
Start Rails
bundle install
rails s
In the App, create a new user, add an address (for example, "New York, NY" -- do not enter a lat or lon), save new user.
Assert: You should see lat/lon geocoded...
In Gemfile
gem 'gmaps4rails'
bundle install
rails s
Inside users/index.html.erb
Add at the bottom of page:
<div style='width: 800px;'>
<div id="map" style='width: 800px; height: 400px;'></div>
</div>
Put the following at the top of the users/index.html.erb
page
<script src="//maps.google.com/maps/api/js?v=3.13&sensor=false&libraries=geometry" type="text/javascript"></script>
<script src="//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js" type="text/javascript"></script>
Visit http://underscorejs.org/underscore-min.js. Select Production Version, copy all text or do right-click, Save As...
Add this file under vendor
as follows:
vendor/assets/javascripts/underscore.js
Add underscore and gmaps to app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require underscore
//= require gmaps/google
//= require_tree .
(leaving require_tree .
as last line)
Add the map script to the bottom of the view, below the div.
Note: this has dummy marker data at a lat/lon of 0,0 :-)
<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers([
{
"lat": 0,
"lng": 0,
"picture": {
"url": "https://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png",
"width": 36,
"height": 36
},
"infowindow": "hello!"
}
]);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
</script>
Refresh the view... Now you should see a map!
If you don't see a map, something is wrong.
Add to the controller the generation of the mapping datapoints from the user records:
def index
@users = User.all
@hash = Gmaps4rails.build_markers(@users) do |user, marker|
marker.lat user.latitude
marker.lng user.longitude
marker.title user.title
end
end
Replace the dummy marker data in the view script with data from the model:
markers = handler.addMarkers(<%=raw @hash.to_json %>);
Be sure to add a couple of User records with addresses (and verify the geocoding worked).
Refresh the users page.
Now you should see a map with your user datapoints...
If you do not see the individual user datapoints, then something is wrong.