• Nie Znaleziono Wyników

ym4r – Google Maps w Ruby on Rails

N/A
N/A
Protected

Academic year: 2021

Share "ym4r – Google Maps w Ruby on Rails"

Copied!
14
0
0

Pełen tekst

(1)

ym4r – Google Maps w Ruby on Rails

Aleksander Pohl

Krakow Ruby Users Group

(2)

Google Maps

Kilka słów o Google Maps API

Google Maps API – interfejs programistyczny pozwalaj ˛acy na wy´swietlenie na stronie WWW mapy wybranego rejonu Ziemi:

I Aktualna wersja: 2.0

I Google Maps vs. Google Maps for Enterprise I Klucz licencyjny

I Ograniczenia: 500k wy´swietle ´n, 50k geocodów I ∼30 klas

(3)
(4)

GM a RoR

Integracja Google Maps z Ruby on Rails

I Zaimplementowanie własnego zestawu helperów –

wykorzystanie JavaScriptowego API:

I http://www.google.com/apis/maps/documen-tation/reference.html

I czasochłonne

I po co wymy´sla´c od nowa koło? I Cartographer:

I http://cartographer.rubyforge.org/ I kiepska i nieaktualna dokumentacja I niewielkie mo˙zliwo´sci

I kiepskie przykłady I projekt umarł? I ym4r !

(5)

GM a RoR

ym4r – ogólna charakterystyka

ym4r: yellow maps for rails:

I http://thepochisuperstarmegashow.com/projects/#ym4r I dobra dokumentacja

I rozbudowane przykłady I du˙ze mo˙zliwo´sci

I nie tylko GoogleMaps: I Mapstraction

I Yahoo! Maps Building Block API I Clusterer, GeoRSS, WMS layer

(6)

Zało˙zenia

Przykładowa aplikacja

Piszemy aplikacj ˛e, dla sieci restauracji. Klient chce, aby u˙zytkownicy w łatwy sposób mogli zlokalizowa´c poszczególne restauracje. Dane adresowe to za mało. Dobrze byłoby doł ˛aczy´c do danych adresowych interaktywn ˛a map ˛e, na której zaznaczone jest dokładne poło˙zenie wybranej restauracji. Wymagania:

I restauracja – wska´znik z danymi adresowymi

I mo˙zliwo´s´c okre´slenia poło˙zenia wska´znika za pomoc ˛a myszki

(7)

Realizacja

Okre´slenie schematu bazy danych

db/migrate/001_create_restaurant.rb:

create_table "restaurants" do |t| t.column "name", :string

t.column "street", :string t.column "number", :string t.column "city", :string t.column "latitude", :float t.column "longitude", :float t.column "zoom", :float end

(8)

Realizacja

Instalacja ym4r i scaffolding

$ ruby script/plugin

install←- svn://rubyforge.org/var/svn/ym4r/Plug-←-ins/GM/trunk/ym4r_gm

←-oznacza kontynuacj ˛e linii

(9)

Realizacja

Modyfikacje I: model

app/model/restaurant.rb:

def address

city+"<br/>"+"ul. "+street+" "+number end def location if(latitude.nil?) [52,18] else [latitude, longitude] end end def has_map?

(10)

Realizacja

Modyfikacje II: widoki

app/views/layout/restaurants.rhtml: <head> <% if ! @map.nil? %> <%= GMap.header %> <%= @map.to_html %> <%= javascript_include_tag ’gmap_edit’ %> <% end %> </head> app/views/restaurants/show.rhtml: <% if @restaurant.has_map? %> <%= @map.div(:width => 400, :height => 400) %> <% end %>

(11)

Realizacja

Modyfikacje III: widoki (c.d.)

app/views/restaurants/_form.rhtml:

<%= text_field ’restaurant’, ’latitude’, :id => "latitude" %></p>

<%= text_field ’restaurant’, ’longitude’, :id => "longitude" %></p>

<%= text_field ’restaurant’, ’zoom’, :id => "zoom" %></p>

(12)

Realizacja

Modyfikacje IV: kontroler

app/controller/restaurants.rb (show): @restaurant = Restaurant.find(params[:id]) if @restaurant.has_map? loc = @restaurant.location @map = GMap.new("map_div") @map.control_init(:large_map => true, :map_type => true) @map.center_zoom_init(loc,@restaurant.zoom) @map.overlay_init(GMarker.new(loc, :title => @restaurant.name, :info_window => @restaurant.address)) end

(13)

Realizacja

Modyfikacje V: kontroler (c.d.)

Kontrolerapp/controller/restaurants.rb (edit):

@restaurant = Restaurant.find(params[:id]) @map = GMap.new("map_div") loc = @restaurant.location @map.control_init(:large_map => true, :map_type => true) @map.center_zoom_init(loc, @restaurant.zoom) marker = GMarker.new(loc,:draggable => true) @map.overlay_global_init(marker,"marker") @map.record_init

marker.on_dragend("gmap_update_position") @map.record_init

(14)

Podsumowanie

Podsumowanie

Czynno´sci wst ˛epne:

I okre´slenie schematu bazy danych (latitude, longitude, zoom)

I zainstalowanie pluginu

I dodanie skryptów inicjuj ˛acych w nagłówku Wy´swietlenie mapy:

I dodanie mapy w ciele dokumentu I inicjacja obiektu mapy w kontrolerze Edycja mapy:

I dodanie skryptów modyfikuj ˛acych

I modyfikacja formularza (identyfikatory pól) I inicjacja mapy i markera w kontrolerze

Cytaty

Powiązane dokumenty

Czy macie jakieś wolne miejsce żeby usiąść3. Co możesz

Proszę zaopatrzyć się w podręcznik „KwalifikacjaE14 Tworzenie

Implications of customer perception management of “Ratatouille” restaurant Implementing customer perception management was suggested by means of pro- posals of solutions to

Uczniowie odpowiadają ustnie. Nauczyciel pyta, jak wygląda rozmowa w restauracji, a uczniowie podają przykłady zdań. Uczniowie słuchają i uzupełniają nagrania z ćwiczeń 1-4

READING FOR THE GIST - Uczniowie czytają tekst „Description of a restaurant&#34; a następnie uzupełniają go podanymi w ćwiczeniu zwrotami - pracują samodzielnie..

Kompozycja lodów bakaliowych, waniliowych i śmietankowych (trzy gałki) z bakaliami, bitą śmietaną i sosem

To the tables of the 6 and above 12% service charge will be added to

Łosoś pieczony z pistacjami, gnocchi buraczane, mix sałat, sos limonkowy Roasted salmon with pistachios, beetroot gnocchi, mixed salad, and lime sauce Mule na białym winie,