<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: location code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 12 Oct 2008 18:39:41 GMT</pubDate>
    <description>DZone Snippets: location code</description>
    <item>
      <title>Location queries for a model</title>
      <link>http://snippets.dzone.com/posts/show/1906</link>
      <description>// These are class functions which are useful for finding locations in a database &lt;br /&gt;// when PostGIS is not available (when using MySQL for example)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def self.deg2rad(deg)&lt;br /&gt;	(deg * Math::PI / 180)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.rad2deg(rad)&lt;br /&gt;	(rad * 180 / Math::PI)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.acos(rad)&lt;br /&gt;	Math.atan2(Math.sqrt(1 - rad**2), rad)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.distance_in_miles(loc1, loc2)&lt;br /&gt;	lat1 = loc1.latitude&lt;br /&gt;	lon1 = loc1.longitude&lt;br /&gt;	lat2 = loc2.latitude&lt;br /&gt;	lon2 = loc2.longitude&lt;br /&gt;	theta = lon1 - lon2&lt;br /&gt;	&lt;br /&gt;	dist = Math.sin(self.deg2rad(lat1)) * Math.sin(deg2rad(lat2)) &lt;br /&gt;		+ Math.cos(self.deg2rad(lat1)) * Math.cos(self.deg2rad(lat2)) * Math.cos(deg2rad(theta))&lt;br /&gt;	&lt;br /&gt;	dist = self.rad2deg(self.acos(dist))&lt;br /&gt;	&lt;br /&gt;	(dist * 60 * 1.1515).round #distance in miles&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def miles_to(location)&lt;br /&gt;	Location.distance_in_miles(self, location)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.locationArea(location, miles)&lt;br /&gt;	radius = miles.to_f&lt;br /&gt;	latR = radius / ((6076 / 5280) * 60)&lt;br /&gt;	lonR = radius / (((Math.cos(location.latitude * Math::PI / 180) * 6076) / 5280) * 60)&lt;br /&gt;	&lt;br /&gt;	{&lt;br /&gt;		:min_latitude =&gt; location.latitude - latR,&lt;br /&gt;		:min_longitude =&gt; location.longitude - lonR,&lt;br /&gt;		:max_latitude =&gt; location.latitude + latR,&lt;br /&gt;		:max_longitude =&gt; location.longitude + lonR&lt;br /&gt;	}&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.location_ids_in_range(location, miles)&lt;br /&gt;	la = Location.locationArea(location, miles)&lt;br /&gt;	Location.find(:all,&lt;br /&gt;		:select =&gt; "locations.id",&lt;br /&gt;		:conditions =&gt; ["locations.latitude &lt;= ? and locations.latitude &gt;= ? " + \&lt;br /&gt;			" AND locations.longitude &gt;= ? and locations.longitude &lt;= ?",&lt;br /&gt;			la[:max_latitude], la[:min_latitude], la[:min_longitude], la[:max_longitude]&lt;br /&gt;		]&lt;br /&gt;	).collect { |l| l.id }&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def self.locations_in_range(location, miles)&lt;br /&gt;	la = Location.locationArea(location, miles)&lt;br /&gt;	Location.find(:all,&lt;br /&gt;		:conditions =&gt; ["locations.latitude &lt;= ? and locations.latitude &gt;= ? " + \&lt;br /&gt;			" AND locations.longitude &gt;= ? and locations.longitude &lt;= ?",&lt;br /&gt;			la[:max_latitude], la[:min_latitude], la[:min_longitude], la[:max_longitude]&lt;br /&gt;		]&lt;br /&gt;	)&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 12 Apr 2006 05:46:45 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1906</guid>
      <author>ajturner (Andrew Turner)</author>
    </item>
    <item>
      <title>Export a GoogleEarth KML file to CSV output</title>
      <link>http://snippets.dzone.com/posts/show/1765</link>
      <description># Parses a GoogleEarth KML file and writes the pertinent data to a CSV file&lt;br /&gt;&lt;br /&gt;#&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;# &lt;kml xmlns="http://earth.google.com/kml/2.0"&gt;&lt;br /&gt;# &lt;Folder&gt;&lt;br /&gt;#   &lt;name&gt;Folder Name&lt;/name&gt;&lt;br /&gt;#   &lt;open&gt;1&lt;/open&gt;&lt;br /&gt;#   &lt;ScreenOverlay&gt;&lt;br /&gt;# 		... Screen Overlays&lt;br /&gt;#   &lt;/ScreenOverlay&gt;&lt;br /&gt;#   &lt;Document&gt;&lt;br /&gt;#     &lt;name&gt;Document Name&lt;/name&gt;&lt;br /&gt;#     &lt;open&gt;1&lt;/open&gt;&lt;br /&gt;#     &lt;Schema parent="Placemark" name="S_Parcel_centroids_SSSS"&gt;&lt;br /&gt;# 		... Schema Def ...&lt;br /&gt;#     &lt;/Schema&gt;&lt;br /&gt;#     &lt;Style id="khStyle722"&gt;&lt;br /&gt;# 		... Style Info ...&lt;br /&gt;#     &lt;/Style&gt;&lt;br /&gt;#     &lt;Folder id="layer 0"&gt;&lt;br /&gt;#       &lt;name&gt;FolderName&lt;/name&gt;&lt;br /&gt;#       &lt;Location&gt;&lt;br /&gt;# 	      &lt;name&gt;Location name 1&lt;/name&gt;&lt;br /&gt;# 	      &lt;description&gt;&lt;![CDATA[...Description text...]]&gt;&lt;/description&gt;&lt;br /&gt;# 	      &lt;styleUrl&gt;#khStyle16037&lt;/styleUrl&gt;&lt;br /&gt;# 	      &lt;Point&gt;&lt;br /&gt;# 	        &lt;altitudeMode&gt;relativeToGround&lt;/altitudeMode&gt;&lt;br /&gt;# 	        &lt;coordinates&gt;-81.85829063169155,29.12257052899974,100&lt;/coordinates&gt;&lt;br /&gt;# 	      &lt;/Point&gt;&lt;br /&gt;# 	      &lt;Column1&gt;Column 1 data&lt;/Column1&gt;&lt;br /&gt;# 	      &lt;Column2&gt;Column 2 data&lt;/Column2&gt;&lt;br /&gt;#       &lt;/Location&gt;&lt;br /&gt;#       &lt;Location&gt;&lt;br /&gt;#         &lt;name&gt;Location name 2&lt;/name&gt;&lt;br /&gt;#         &lt;description&gt;&lt;![CDATA[...Description text...]]&gt;&lt;/description&gt;&lt;br /&gt;#         &lt;styleUrl&gt;#khStyle16037&lt;/styleUrl&gt;&lt;br /&gt;#         &lt;Point&gt;&lt;br /&gt;#           &lt;altitudeMode&gt;relativeToGround&lt;/altitudeMode&gt;&lt;br /&gt;#           &lt;coordinates&gt;-81.85829063169155,29.12257052899974,100&lt;/coordinates&gt;&lt;br /&gt;#         &lt;/Point&gt;&lt;br /&gt;#         &lt;Column1&gt;Column 1 data&lt;/Column1&gt;&lt;br /&gt;#         &lt;Column2&gt;Column 2 data&lt;/Column2&gt;&lt;br /&gt;#       &lt;/Location&gt;&lt;br /&gt;# 	&lt;br /&gt;# 		... More Locations ...&lt;br /&gt;#    &lt;/Folder&gt;&lt;br /&gt;#   &lt;/Document&gt;&lt;br /&gt;# &lt;/Folder&gt;&lt;br /&gt;# &lt;/kml&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require "rexml/document"&lt;br /&gt;include REXML&lt;br /&gt;kmlroot = (Document.new File.new "data.kml").root&lt;br /&gt;nodes = kmlroot.elements.to_a("//Location")&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;	f = File.open("data.csv", "w")&lt;br /&gt;	f &lt;&lt; "id,column1,column2,latitude,longitude"\n"&lt;br /&gt;	id = 1&lt;br /&gt;	nodes.each { |node|&lt;br /&gt;		column1 = node.elements["column1"].text&lt;br /&gt;		column2 = node.elements["column2"].text&lt;br /&gt;		coords = node.elements["Point"].elements["coordinates"].text.split(",")&lt;br /&gt;		f &lt;&lt; [id, column1, column2, coords[1], coords[0] ].join(",") &lt;&lt; "\n"&lt;br /&gt;		id += 1&lt;br /&gt;	}&lt;br /&gt;ensure&lt;br /&gt;	f.close&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 25 Mar 2006 18:56:47 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1765</guid>
      <author>ajturner (Andrew Turner)</author>
    </item>
    <item>
      <title>US State Abbreviations to Full name</title>
      <link>http://snippets.dzone.com/posts/show/1764</link>
      <description># US State abbreviations to full name&lt;br /&gt;# state_name = state_abbr.[]("MI")&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;state_abbr = {&lt;br /&gt;  'AL' =&gt; 'Alabama',&lt;br /&gt;  'AK' =&gt; 'Alaska',&lt;br /&gt;  'AS' =&gt; 'America Samoa',&lt;br /&gt;  'AZ' =&gt; 'Arizona',&lt;br /&gt;  'AR' =&gt; 'Arkansas',&lt;br /&gt;  'CA' =&gt; 'California',&lt;br /&gt;  'CO' =&gt; 'Colorado',&lt;br /&gt;  'CT' =&gt; 'Connecticut',&lt;br /&gt;  'DE' =&gt; 'Delaware',&lt;br /&gt;  'DC' =&gt; 'District of Columbia',&lt;br /&gt;  'FM' =&gt; 'Micronesia1',&lt;br /&gt;  'FL' =&gt; 'Florida',&lt;br /&gt;  'GA' =&gt; 'Georgia',&lt;br /&gt;  'GU' =&gt; 'Guam',&lt;br /&gt;  'HI' =&gt; 'Hawaii',&lt;br /&gt;  'ID' =&gt; 'Idaho',&lt;br /&gt;  'IL' =&gt; 'Illinois',&lt;br /&gt;  'IN' =&gt; 'Indiana',&lt;br /&gt;  'IA' =&gt; 'Iowa',&lt;br /&gt;  'KS' =&gt; 'Kansas',&lt;br /&gt;  'KY' =&gt; 'Kentucky',&lt;br /&gt;  'LA' =&gt; 'Louisiana',&lt;br /&gt;  'ME' =&gt; 'Maine',&lt;br /&gt;  'MH' =&gt; 'Islands1',&lt;br /&gt;  'MD' =&gt; 'Maryland',&lt;br /&gt;  'MA' =&gt; 'Massachusetts',&lt;br /&gt;  'MI' =&gt; 'Michigan',&lt;br /&gt;  'MN' =&gt; 'Minnesota',&lt;br /&gt;  'MS' =&gt; 'Mississippi',&lt;br /&gt;  'MO' =&gt; 'Missouri',&lt;br /&gt;  'MT' =&gt; 'Montana',&lt;br /&gt;  'NE' =&gt; 'Nebraska',&lt;br /&gt;  'NV' =&gt; 'Nevada',&lt;br /&gt;  'NH' =&gt; 'New Hampshire',&lt;br /&gt;  'NJ' =&gt; 'New Jersey',&lt;br /&gt;  'NM' =&gt; 'New Mexico',&lt;br /&gt;  'NY' =&gt; 'New York',&lt;br /&gt;  'NC' =&gt; 'North Carolina',&lt;br /&gt;  'ND' =&gt; 'North Dakota',&lt;br /&gt;  'OH' =&gt; 'Ohio',&lt;br /&gt;  'OK' =&gt; 'Oklahoma',&lt;br /&gt;  'OR' =&gt; 'Oregon',&lt;br /&gt;  'PW' =&gt; 'Palau',&lt;br /&gt;  'PA' =&gt; 'Pennsylvania',&lt;br /&gt;  'PR' =&gt; 'Puerto Rico',&lt;br /&gt;  'RI' =&gt; 'Rhode Island',&lt;br /&gt;  'SC' =&gt; 'South Carolina',&lt;br /&gt;  'SD' =&gt; 'South Dakota',&lt;br /&gt;  'TN' =&gt; 'Tennessee',&lt;br /&gt;  'TX' =&gt; 'Texas',&lt;br /&gt;  'UT' =&gt; 'Utah',&lt;br /&gt;  'VT' =&gt; 'Vermont',&lt;br /&gt;  'VI' =&gt; 'Virgin Island',&lt;br /&gt;  'VA' =&gt; 'Virginia',&lt;br /&gt;  'WA' =&gt; 'Washington',&lt;br /&gt;  'WV' =&gt; 'West Virginia',&lt;br /&gt;  'WI' =&gt; 'Wisconsin',&lt;br /&gt;  'WY' =&gt; 'Wyoming'&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 25 Mar 2006 18:47:19 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1764</guid>
      <author>ajturner (Andrew Turner)</author>
    </item>
    <item>
      <title>Average US State Locations</title>
      <link>http://snippets.dzone.com/posts/show/1763</link>
      <description># A hash table of average US State Locations (latitude, longitude)&lt;br /&gt;# MI_Location = state_locations.[]("MI")&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;state_locations = {&lt;br /&gt;  'AK' =&gt; [61.3850,-152.2683],&lt;br /&gt;  'AL' =&gt; [32.7990,-86.8073],&lt;br /&gt;  'AR' =&gt; [34.9513,-92.3809],&lt;br /&gt;  'AS' =&gt; [14.2417,-170.7197],&lt;br /&gt;  'AZ' =&gt; [33.7712,-111.3877],&lt;br /&gt;  'CA' =&gt; [36.1700,-119.7462],&lt;br /&gt;  'CO' =&gt; [39.0646,-105.3272],&lt;br /&gt;  'CT' =&gt; [41.5834,-72.7622],&lt;br /&gt;  'DC' =&gt; [38.8964,-77.0262],&lt;br /&gt;  'DE' =&gt; [39.3498,-75.5148],&lt;br /&gt;  'FL' =&gt; [27.8333,-81.7170],&lt;br /&gt;  'GA' =&gt; [32.9866,-83.6487],&lt;br /&gt;  'HI' =&gt; [21.1098,-157.5311],&lt;br /&gt;  'IA' =&gt; [42.0046,-93.2140],&lt;br /&gt;  'ID' =&gt; [44.2394,-114.5103],&lt;br /&gt;  'IL' =&gt; [40.3363,-89.0022],&lt;br /&gt;  'IN' =&gt; [39.8647,-86.2604],&lt;br /&gt;  'KS' =&gt; [38.5111,-96.8005],&lt;br /&gt;  'KY' =&gt; [37.6690,-84.6514],&lt;br /&gt;  'LA' =&gt; [31.1801,-91.8749],&lt;br /&gt;  'MA' =&gt; [42.2373,-71.5314],&lt;br /&gt;  'MD' =&gt; [39.0724,-76.7902],&lt;br /&gt;  'ME' =&gt; [44.6074,-69.3977],&lt;br /&gt;  'MI' =&gt; [43.3504,-84.5603],&lt;br /&gt;  'MN' =&gt; [45.7326,-93.9196],&lt;br /&gt;  'MO' =&gt; [38.4623,-92.3020],&lt;br /&gt;  'MP' =&gt; [14.8058,145.5505],&lt;br /&gt;  'MS' =&gt; [32.7673,-89.6812],&lt;br /&gt;  'MT' =&gt; [46.9048,-110.3261],&lt;br /&gt;  'NC' =&gt; [35.6411,-79.8431],&lt;br /&gt;  'ND' =&gt; [47.5362,-99.7930],&lt;br /&gt;  'NE' =&gt; [41.1289,-98.2883],&lt;br /&gt;  'NH' =&gt; [43.4108,-71.5653],&lt;br /&gt;  'NJ' =&gt; [40.3140,-74.5089],&lt;br /&gt;  'NM' =&gt; [34.8375,-106.2371],&lt;br /&gt;  'NV' =&gt; [38.4199,-117.1219],&lt;br /&gt;  'NY' =&gt; [42.1497,-74.9384],&lt;br /&gt;  'OH' =&gt; [40.3736,-82.7755],&lt;br /&gt;  'OK' =&gt; [35.5376,-96.9247],&lt;br /&gt;  'OR' =&gt; [44.5672,-122.1269],&lt;br /&gt;  'PA' =&gt; [40.5773,-77.2640],&lt;br /&gt;  'PR' =&gt; [18.2766,-66.3350],&lt;br /&gt;  'RI' =&gt; [41.6772,-71.5101],&lt;br /&gt;  'SC' =&gt; [33.8191,-80.9066],&lt;br /&gt;  'SD' =&gt; [44.2853,-99.4632],&lt;br /&gt;  'TN' =&gt; [35.7449,-86.7489],&lt;br /&gt;  'TX' =&gt; [31.1060,-97.6475],&lt;br /&gt;  'UT' =&gt; [40.1135,-111.8535],&lt;br /&gt;  'VA' =&gt; [37.7680,-78.2057],&lt;br /&gt;  'VI' =&gt; [18.0001,-64.8199],&lt;br /&gt;  'VT' =&gt; [44.0407,-72.7093],&lt;br /&gt;  'WA' =&gt; [47.3917,-121.5708],&lt;br /&gt;  'WI' =&gt; [44.2563,-89.6385],&lt;br /&gt;  'WV' =&gt; [38.4680,-80.9696],&lt;br /&gt;  'WY' =&gt; [42.7475,-107.2085]&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 25 Mar 2006 18:44:20 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1763</guid>
      <author>ajturner (Andrew Turner)</author>
    </item>
  </channel>
</rss>
