document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/98\">Simple server-side geocoding<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"c1\"># Very simple server-side lat/lng lookup via Google&#39;s geocoder service<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\"># Example:<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\">#   point = Geocoder.get &quot;Wrigley Field&quot;<\/span>\n<span class=\"c1\">#   point.lat   # =&gt; 41.9482<\/span>\n<span class=\"c1\">#   point.lng   # =&gt; -87.6557<\/span>\n\n<span class=\"sx\">%w(rubygems rack restclient json)<\/span><span class=\"o\">.<\/span><span class=\"n\">each<\/span> <span class=\"p\">{<\/span><span class=\"o\">|<\/span><span class=\"n\">lib<\/span><span class=\"o\">|<\/span> <span class=\"nb\">require<\/span> <span class=\"n\">lib<\/span><span class=\"p\">}<\/span>\n\n<span class=\"k\">module<\/span> <span class=\"nn\">Geocoder<\/span>\n  <span class=\"k\">class<\/span> <span class=\"nc\">Location<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">Struct<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"ss\">:name<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:lat<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:lng<\/span><span class=\"p\">);<\/span> <span class=\"k\">end<\/span>\n\n  <span class=\"k\">def<\/span> <span class=\"nc\">self<\/span><span class=\"o\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">resp<\/span> <span class=\"o\">=<\/span> <span class=\"no\">JSON<\/span><span class=\"o\">.<\/span><span class=\"n\">parse<\/span><span class=\"p\">(<\/span><span class=\"n\">get_raw<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">))<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">placemark<\/span> <span class=\"o\">=<\/span> <span class=\"n\">resp<\/span><span class=\"o\">[<\/span><span class=\"s2\">&quot;Placemark&quot;<\/span><span class=\"o\">]<\/span>\n      <span class=\"n\">new_location<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">,<\/span> <span class=\"n\">placemark<\/span><span class=\"o\">[<\/span><span class=\"mi\">0<\/span><span class=\"o\">]<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">end<\/span>\n  <span class=\"k\">end<\/span>\n\n  <span class=\"k\">def<\/span> <span class=\"nc\">self<\/span><span class=\"o\">.<\/span><span class=\"nf\">get_raw<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">uri<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&quot;http://maps.google.com/maps/geo?sensor=false&amp;output=json&amp;q=<\/span><span class=\"si\">#{<\/span><span class=\"no\">Rack<\/span><span class=\"o\">::<\/span><span class=\"no\">Utils<\/span><span class=\"o\">.<\/span><span class=\"n\">escape<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"s2\">&quot;<\/span>\n    <span class=\"no\">RestClient<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">uri<\/span><span class=\"p\">)<\/span>\n  <span class=\"k\">end<\/span>\n\n  <span class=\"kp\">private<\/span>\n    <span class=\"k\">def<\/span> <span class=\"nc\">self<\/span><span class=\"o\">.<\/span><span class=\"nf\">new_location<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">,<\/span> <span class=\"n\">placemark<\/span><span class=\"p\">)<\/span>\n      <span class=\"no\">Location<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">location<\/span><span class=\"p\">,<\/span> <span class=\"n\">placemark<\/span><span class=\"o\">[<\/span><span class=\"s2\">&quot;Point&quot;<\/span><span class=\"o\">][<\/span><span class=\"s2\">&quot;coordinates&quot;<\/span><span class=\"o\">][<\/span><span class=\"mi\">1<\/span><span class=\"o\">]<\/span><span class=\"p\">,<\/span> <span class=\"n\">placemark<\/span><span class=\"o\">[<\/span><span class=\"s2\">&quot;Point&quot;<\/span><span class=\"o\">][<\/span><span class=\"s2\">&quot;coordinates&quot;<\/span><span class=\"o\">][<\/span><span class=\"mi\">0<\/span><span class=\"o\">]<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/gbuesing\">gbuesing<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/98.txt\">view raw<\/a></div>');
document.write('</div></div>');