Skip to content

Instantly share code, notes, and snippets.

@mperham
Created November 12, 2008 20:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mperham/24252 to your computer and use it in GitHub Desktop.
Save mperham/24252 to your computer and use it in GitHub Desktop.
diff --git a/vendor/plugins/geokit/lib/geo_kit/acts_as_mappable.rb b/vendor/plugins/geokit/lib/geo_kit/acts_as_mappable.rb
index c6c5eba..23dbab1 100644
--- a/vendor/plugins/geokit/lib/geo_kit/acts_as_mappable.rb
+++ b/vendor/plugins/geokit/lib/geo_kit/acts_as_mappable.rb
@@ -377,20 +377,22 @@ module GeoKit
lat = deg2rad(origin.lat)
lng = deg2rad(origin.lng)
multiplier = units_sphere_multiplier(units)
- case connection.adapter_name.downcase
- when "sqlite"
+ adapter = connection.adapter_name.downcase
+ adapter = connection.config[:adapter].downcase if adapter == 'jdbc' # get at the underlying driver if this is JDBC/jruby
+ case adapter
+ when /sqlite/
sql=<<-SQL_END
(ACOS(least(1,COS(#{lat})*COS(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*COS(RADIANS(#{qualified_lng_column_name}))+
COS(#{lat})*SIN(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*SIN(RADIANS(#{qualified_lng_column_name}))+
SIN(#{lat})*SIN(RADIANS(#{qualified_lat_column_name}))))*#{multiplier})
SQL_END
- when "mysql"
+ when /mysql/
sql=<<-SQL_END
(ACOS(least(1,COS(#{lat})*COS(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*COS(RADIANS(#{qualified_lng_column_name}))+
COS(#{lat})*SIN(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*SIN(RADIANS(#{qualified_lng_column_name}))+
SIN(#{lat})*SIN(RADIANS(#{qualified_lat_column_name}))))*#{multiplier})
SQL_END
- when "postgresql"
+ when /postgresql/
sql=<<-SQL_END
(ACOS(least(1,COS(#{lat})*COS(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*COS(RADIANS(#{qualified_lng_column_name}))+
COS(#{lat})*SIN(#{lng})*COS(RADIANS(#{qualified_lat_column_name}))*SIN(RADIANS(#{qualified_lng_column_name}))+
@@ -406,18 +408,20 @@ module GeoKit
def flat_distance_sql(origin, units)
lat_degree_units = units_per_latitude_degree(units)
lng_degree_units = units_per_longitude_degree(origin.lat, units)
- case connection.adapter_name.downcase
- when "sqlite"
+ adapter = connection.adapter_name.downcase
+ adapter = connection.config[:adapter].downcase if adapter == 'jdbc' # get at the underlying driver if this is JDBC/jruby
+ case adapter
+ when /sqlite/
sql=<<-SQL_END
SQRT(POW(#{lat_degree_units}*(#{origin.lat}-#{qualified_lat_column_name}),2)+
POW(#{lng_degree_units}*(#{origin.lng}-#{qualified_lng_column_name}),2))
SQL_END
- when "mysql"
+ when /mysql/
sql=<<-SQL_END
SQRT(POW(#{lat_degree_units}*(#{origin.lat}-#{qualified_lat_column_name}),2)+
POW(#{lng_degree_units}*(#{origin.lng}-#{qualified_lng_column_name}),2))
SQL_END
- when "postgresql"
+ when /postgresql/
sql=<<-SQL_END
SQRT(POW(#{lat_degree_units}*(#{origin.lat}-#{qualified_lat_column_name}),2)+
POW(#{lng_degree_units}*(#{origin.lng}-#{qualified_lng_column_name}),2))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment