【问题标题】:Point belonging to which Polygon点属于哪个 Polygon
【发布时间】:2013-08-14 13:27:28
【问题描述】:

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

我正在尝试关注 Daniel Azuma 的 RubyConf2012 地理空间分析截屏视频。 以下代码总是返回 nil:

 Region.where{st_contains(poly, Point.last.coords)}.first

这是我的 Region 类:

 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

积分等级:

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

【问题讨论】:

    标签: ruby postgis rgeo


    【解决方案1】:

    首先,您说您的查询返回 nil。好吧,那不是真的。查询结果中的 first 方法返回 nil。您的查询返回了一个空数组。即它没有抛出错误但没有产生任何结果。在 rgeo 中,当一个方法返回 nil 时,这通常意味着别的东西。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-25
      • 2015-07-21
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 2013-06-22
      相关资源
      最近更新 更多