Ruby 属于哪个多边形的点

Ruby 属于哪个多边形的点,ruby,postgis,rgeo,Ruby,Postgis,Rgeo,我试图找出某个点所在的区域(多边形) 我试着跟随丹尼尔·阿祖玛的RubyConf2012地理空间分析屏幕。 以下代码始终返回nil: Region.where{st_contains(poly, Point.last.coords)}.first 这是我的区域课程: class Region < ActiveRecord::Base attr_accessible :poly, :name, :multi has_many :points GEOFACTORY = RGeo::G

我试图找出某个点所在的区域(多边形)

我试着跟随丹尼尔·阿祖玛的RubyConf2012地理空间分析屏幕。 以下代码始终返回nil:

 Region.where{st_contains(poly, Point.last.coords)}.first
这是我的区域课程:

 class Region < ActiveRecord::Base
attr_accessible :poly, :name, :multi

has_many :points

GEOFACTORY = RGeo::Geographic.simple_mercator_factory
set_rgeo_factory_for_column(:poly, GEOFACTORY.projection_factory)


def self.load

path = File.join(Rails.root, 'lib/tasks/uk/districts')
factory = GEOFACTORY
RGeo::Shapefile::Reader::open(path, :factory => factory) do |file|
    file.each do |record|
        name = record['NAME']
        region = Region.where(:name => name).first ||
         record.geometry.projection.each do |poly|
         Region.create(:name => name, :poly => poly)

        end
    end
end
end
类区域factory)do |文件|
文件。每个do |记录|
name=记录['name']
region=region.where(:name=>name).first||
record.geometry.projection.each do | poly|
创建(:name=>name,:poly=>poly)
结束
结束
结束
结束
积分等级:

class Point < ActiveRecord::Base
attr_accessible :coords

belongs_to :region

def self.find_region
  region = Region.where{st_contains(poly, Point.last.coords)}.first
  puts region
end

end
类点
首先,您说您的查询返回nil。嗯,那不是真的。查询结果上的
first
方法返回nil。您的查询返回一个空数组。i、 它没有抛出错误,但没有产生任何结果。在rgeo中,当一个方法返回nil时,这通常意味着其他内容

您需要确保区域和点数据来自相同的投影。如果您的点不太可能是地理(lonlat)坐标,那么也是可能的。PostGIS只能在平面上进行空间连接。如果将地理坐标格式化为地理类型(使用
RGeo::geographic
工厂),尝试为投影(平面)数据列执行带有地理形状的空间连接将抛出错误。但是如果没有,并且生成了笛卡尔或几何类型的
实例,那么将地理点放入方法中肯定会返回
[]
。毕竟,
32,-81也都是几何投影上的点

最后一个点也可能不在区域形状内