我需要找到一个类的所有实例,Place
其中它的多边形属性包含一个提供的点,如Place.for_point(pt)
.
==== 已添加 ====
好的,我可以执行此查询,但结果错误:
Place.all.where("ST_Contains(poly, ST_Point(#{up_pt.join(',')}))")
Place Load (0.5ms) SELECT "places".* FROM "places" WHERE (ST_Contains(poly, ST_Point(25.1,25.09999999999999))) LIMIT $1 [["LIMIT", 11]]
=> #<ActiveRecord::Relation []>
似乎很清楚地提供了正确的坐标:提供的点中的坐标采用纬度格式。但是坐标来自表中一个多边形的质心,所以它们应该在那个多边形内,这意味着我应该得到一组返回的 Place 记录......但我不是。
为什么?我错过了什么?
这是我期望包含该点的多边形:
f.unproject(Place.last[:poly])
Place Load (0.3ms) SELECT "places".* FROM "places" ORDER BY "places"."id" DESC LIMIT $1 [["LIMIT", 1]]
=> #<RGeo::Geographic::ProjectedPolygonImpl:0x3fcdc30f807c "POLYGON ((24.999999999999996 24.999999999999996, 25.2 24.999999999999996, 25.2 25.20000000000001, 24.999999999999996 25.20000000000001, 24.999999999999996 24.999999999999996))">
irb(main):134:0>
==== 原帖====
我无法理解如何构建它。对于单个实例,我有一个方法contains?(pt)
作为实例方法,Place
该方法在调用时可以正常工作,place.contains?(@f.project(@pt_inside))
并且@pt_inside
是这样定义的:@pt_inside = @f.point(25.1,25.1)
,其中 @f 是对象的工厂。
的架构Place
如下所示:
create_table "places", force: :cascade do |t|
t.geometry "loc", limit: {:srid=>3857, :type=>"st_point"}
t.geometry "poly", limit: {:srid=>3857, :type=>"st_polygon"}
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
结尾
我的铁轨生锈了,但我无法查询班级 Place work....