ST_ClosestPoint(line、point)はラインと交差しません


11

PostGISデータベース(Postgres 8.4.1のPostGIS 1.5)には、道路(線ストリングで構成される)とクラッシュ(ポイントで構成される)の2つのテーブルがあります。私はそれぞれのクラッシュを道路に関連付けようとしましたが、以下を機能させるのに問題があります:

SELECT ST_ClosestPoint(road.the_geom, crash.the_geom),
    ST_Intersects(ST_ClosestPoint(road.the_geom, crash.the_geom), road.the_geom)
    ST_Distance(ST_ClosestPoint(road.the_geom, crash.the_geom), crash.the_geom) AS distance
    FROM
        --Table crashes is already in SRID 4326
        (SELECT the_geom FROM crashes WHERE gid = 360) as crash,
        (SELECT ST_SetSrid(the_geom, 4326) as the_geom from roads) as road
    ORDER BY distance;

このクエリは、各道路でgid 360を使用してクラッシュに最も近いポイントを返しますが、ST_Intersects関数は最初の結果(すべての道路で真の最も近いポイント)に対してfalseを返します。私は何か間違っていますか?クラッシュを最も近い道路にリンクする別の方法はありますか?

回答:


9

これは、ST_Intersectsに許容度がないために発生する問題です。倍精度の座標が多数の小数を保持している場合でも、ポイントの唯一の場所が交差点にあるグリッドを形成します。多くの場合、線はこれらの交差のいずれとも交差せず、ポイントが線と正確に交差する方法はありません。回避策は、代わりに小さな許容範囲でst_dwithinを使用することです。

/ Nicklas

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.