class Geokit::Adapters::SQLServer

Public Class Methods

load(klass) click to toggle source
# File lib/geokit-rails/adapters/sqlserver.rb, line 7
        def load(klass)
          klass.transaction do
            klass.connection.execute <<-EOS
              if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[geokit_least]') and xtype in (N'FN', N'IF', N'TF'))
              drop function [dbo].[geokit_least]
            EOS

            klass.connection.execute <<-EOS
              CREATE FUNCTION [dbo].geokit_least (@value1 float,@value2 float) RETURNS float AS BEGIN
              return (SELECT CASE WHEN @value1 < @value2 THEN  @value1 ELSE @value2 END) END
            EOS
          end
          self.loaded = true
        end
new(*args) click to toggle source
Calls superclass method Geokit::Adapters::Abstract::new
# File lib/geokit-rails/adapters/sqlserver.rb, line 24
def initialize(*args)
  super(*args)
end

Public Instance Methods

flat_distance_sql(origin, lat_degree_units, lng_degree_units) click to toggle source
# File lib/geokit-rails/adapters/sqlserver.rb, line 36
def flat_distance_sql(origin, lat_degree_units, lng_degree_units)
  %|
    SQRT(POWER(#{lat_degree_units}*(#{origin.lat}-#{qualified_lat_column_name}),2)+
    POWER(#{lng_degree_units}*(#{origin.lng}-#{qualified_lng_column_name}),2))
   |
end
sphere_distance_sql(lat, lng, multiplier) click to toggle source
# File lib/geokit-rails/adapters/sqlserver.rb, line 28
def sphere_distance_sql(lat, lng, multiplier)
  %|
    (ACOS([dbo].geokit_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})
   |
end