为什么我的rgeo / postgis距离远离现实?

时间:2012-09-05 02:07:07

标签: ruby-on-rails postgis

我试图获得给定帖子记录的里程数......

    class Post < ActiveRecord::Base
      attr_accessor :lat, :lng
      set_rgeo_factory_for_column(:location, RGeo::Geographic.spherical_factory(:srid => 4326))

      def distance_from(current_location)
        rgeo_factory.point(current_location[:lng], current_location[:lat]).distance(location) / 1.60934
      end 

    private

      def update_location!
        self.location = rgeo_factory.point(lng, lat) if lat && lng
      end

      def rgeo_factory
        Post.rgeo_factory_for_column(:location)
      end 

    end

如果我创建一个位于拉斯维加斯,NV(lat:36.255123,lng:-115.238348)的帖子,我验证它 -

1.9.3p125 :018 > p.lat = 36.255123
 => 36.255123 
1.9.3p125 :019 > p.lng = -115.238348
 => -115.238348
1.9.3p125 :019 > p    
#<Post id: 133, location: #<RGeo::Geographic::SphericalPointImpl:0x81d7130c "POINT (-115.238348 36.255123)">

当我试图获得该帖子与加利福尼亚州的一个地点之间的距离时,我得到了一个INSANE里程... ...

1.9.3p125 :027 > p.distance_from(:lat => 34.019454, :lng => -118.491191)
=> 240327.390598477

我做错了什么?

2 个答案:

答案 0 :(得分:4)

你确定距离()返回km吗?你转换到里程似乎是这么认为的。 PostGIS本机距离以米为单位返回。是否有可能正确的英里数是240?

答案 1 :(得分:4)

RGeo球形工厂确实以米为单位返回距离结果。大多数坐标系统以米为单位(或其一些失真)。如果你想要里程,你可以乘以转换因子(约0.000621371)。