6

PostGIS で RoR を使用して位置データを保存しています。円を使用して推定位置を保存しようとしています (たとえば、半径のある中心点)。

私はそのようなことを試しましたが、うまくいきません:

@location = Location.new(:place_id => place.id,
                         :circle => %{ST_Buffer(ST_MakePoint(#{latitude}, #{longitude})::geography, #{accuracy})})

私も RGeo を使用してみましたが、これは工場ですが、正確な使用方法はわかりません。

どんな助けでも大歓迎です。ありがとう。

編集1:私はいくつかの進歩を遂げました。

factory = RGeo::Cartesian.factory
center_point = factory.point(latitude, longitude)
circle = center_point.buffer(accuracy)

@location = Location.new(:place_id => place.id,
                         :circle => circle)

しかし - 今では次の例外がスローされます:

can't cast RGeo::Cartesian::Polygon Impl to string

繰り返しますが、どんな助けでも大歓迎です。

4

1 に答える 1

1

表で名前が付けられている列circlelocations、ジオメトリ列ではなくテキスト列のようです。スキーマはどのように見えますか?

おそらく、SRID も設定する必要があります。

circle = RGeo::Cartesian.factory.point(0, 0).buffer(20)
@location = Location.new(:place_id => place.id, :circle => circle)
@locaiton.save

別の、そしておそらくより良いオプションは、正確な場所を保存し、特定の距離で場所を照会することです。距離演算子 ( http://postgis.net/docs/manual-2.1/geometry_distance_centroid.html ) またはオーバーラップ演算子 ( http://postgis.net/docs/manual-2.1/geometry_overlaps.html ) のいずれかを使用できます。

于 2014-03-23T07:50:33.350 に答える