Postgres 9.1 と PostGIS 2 を使用しています。
動作しないクエリの例:
SELECT
*
FROM measurement m
JOIN (SELECT unnest(array['002000000100000000404ff25e353f7cee401d01da7b0b3919']) AS p) AS ps
ON ST_DWithin(ps.p, m.groundtruth, 5)
動作するクエリの例:
SELECT
*
FROM measurement m
JOIN (SELECT 1) AS foo
ON ST_DWithin('002000000100000000404ff25e353f7cee401d01da7b0b3919', m.groundtruth, 5)
そして、これも機能します:
SELECT unnest(array['002000000100000000404ff25e353f7cee401d01da7b0b3919'])
しかし、もちろん、配列が機能するクエリが必要です。
このクエリを Rails から呼び出して、WKB 形式を自動的に挿入します (つまり、それが重要な場合、WKT に変更する方法がわかりません)。
完全なサンプル Rails コードは次のようになります。
x = [RGeo::Geos.factory.point(63.8935, 6.25181)]
@measurement = Measurement.find_by_sql([radius_search_query, x])
def radius_search_query
SELECT
*
FROM measurement m
JOIN (SELECT unnest(array[?]) AS p) AS ps
ON ST_DWithin(ps.p, m.groundtruth, 5)
end
しかし、上記のクエリも (を使用せずに?
) テストしましたが、同じエラー メッセージで失敗し続けます。
ERROR: function st_dwithin(text, geometry, integer) is not unique
LINE 5: ON ST_DWithin(ps.p, m.groundtruth, 5)
^
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
エラーメッセージに表示されているように、配列が型であり、型geometry
ではないことを配列に伝える必要があるのではないかと思いました。text
しかし、私はこれを行う方法を見つけていません。
ありがとうございました!!
詳しくは:
これは機能しません:
SELECT
*
FROM measurement m
JOIN (SELECT '002000000100000000404ff25e353f7cee401d01da7b0b3919' as bar) AS foo
ON ST_DWithin(foo.bar, m.groundtruth, 5)
エラーメッセージ:failed to find conversion function from unknown to geometry
これは機能します:
SELECT
*
FROM measurement m
JOIN (SELECT '002000000100000000404ff25e353f7cee401d01da7b0b3919'::geometry(Point) as bar) AS foo
ON ST_DWithin(foo.bar, m.groundtruth, 5)