Screencast: Geocoder

Geocoder ist ein Ruby-Gem mit welchem man geografischen Daten nutzen, Koordination finden, Abstände zwischen Orten und mehr in Ruby und Rails einsetzen kann. Ryan zeigt diese Woche wie es installiert und in einer Rails-App verwendet wird.

 

Downloads in verschiedenen Formaten:

source code
mp4
m4v
webm
ogv

 

Resourcen:

bash

[bash]
rails g nifty:scaffold location address:string latitude:float longitude:float
rake db:migrate
bundle
[/bash]

Gemfile

[ruby]
gem ‚geocoder‘
[/ruby]

models/location.rb

[ruby]
geocoded_by :address
after_validation :geocode, :if => :address_changed?
[/ruby]

locations_controller.rb

[ruby]
def index
if params[:search].present?
@locations = Location.near(params[:search], 50, :order => :distance)
else
@locations = Location.all
end
end
[/ruby]

locations/show.html.erb

[html]
<%= image_tag "http://maps.google.com/maps/api/staticmap?size=450×300&sensor=false&zoom=16&markers=#{@location.latitude}%2C#{@location.longitude}" %>

<h3>Nearby locations</h3>
<ul>
<% for location in @location.nearbys(10) %>
<li><%= link_to location.address, location %> (<%= location.distance.round(2) %> miles)</li>
<% end %>
</ul>
[/html]

locations/index.html.erb

[html]
<%= form_tag locations_path, :method => :get do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search Near", :name => nil %>
</p>
<% end %>
[/html]

Script-Tip: Stadt, Land und Wetter aus der IP beziehen (IP2Location)

Anhand einer IP-Adresse lassen sich die verschiedensten Informationen beziehen. Neben dem Land, der Stadt und der Region, kann mittels der IP-Adresse auch die Postleitzahl, Zeitzone, ISP, Domain-Namen, Koordinaten und sogar das Wetter ermittelt werden.

 

Diese Daten können über die Bibliotheken von IP2Location ermittelt werden. Entwickler können die zur Verfügung gestellten APIs benutzen um die im binären Format vorliegenden Datenbanken abzufragen.

 
Folgendes wird dazu benötigt:
  • IP2Location C API Bibliothek (Download: http://www.ip2location.com/c.htm)
  • Ruby
  • GNU make oder ein vergleichbares make (Windows können ggf. auf Cygwin aufbauen)
 
Installation:

[bash]
ruby extconf.rb –with-libIP2Location-lib=<path to C API lib> –with-includeIP2Location-include=<path to C API lib>
# Beispiel: ruby extconf.rb –with-libIP2Location-lib=..C-IP2Location-3.0.0libIP2Location –with-includeIP2Location-include=..C-IP2Location-3.0.0libIP2Location

make
[/bash]

 
Sourcecode Beispiel

[ruby]
require ‚IP2Location‘

IP2LocObj = IP2Location.new()
IP2LocObj.open("data/IP-COUNTRY-SAMPLE.BIN")
rec = IP2LocObj.get_all("12.34.56.78")
puts rec.country_short
puts rec.country_long
puts rec.city
puts rec.region
puts rec.isp
puts rec.latitude
puts rec.longitude
puts rec.domain
puts rec.zipcode
puts rec.timezone
puts rec.netspeed
puts rec.iddcode
puts rec.areacode
puts rec.weatherstationcode
puts rec.weatherstationname
[/ruby]

Comparing rails geo-plugins

Es gibt einige Plugins und Bibliotheken für Rails-Applikationen. Leider erschließt sich einem nicht auf Anhieb der Funktionsumfang der jeweiligen Projekte.

Auf jystewart.net findet ihr eine Sammlung von Geo-Plugins in einer Tabelle zusammengefasst.

Dort kann man sich vor Entwicklungsbeginn zumindest einen Überblick verschaffen.