0

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)
4

1 に答える 1

0

クエリをかなり遅くする1つの解決策を見つけた後(値をキャストするため):

SELECT
  *
FROM measurement m
JOIN (SELECT unnest(array['002000000100000000404ff25e353f7cee401d01da7b0b3919']) AS p) AS ps
  ON ST_DWithin(ps.p::geometry(Point), m.groundtruth, 5)

私は周りを見回して、PostGIS' に出くわしましlinestringた。そして今、すべてが機能しています!

SELECT
  *
FROM ST_DumpPoints('00200000020000000000000002404ff25e353f7cee401901da7b0b3919404ff25e353f7cee401d01da7b0b3919') AS ps
JOIN measurement m
  ON ST_DWithin(ps.geom, m.groundtruth, 5)

わーい!:-)

于 2013-02-27T20:07:45.103 に答える