名前

GetEdgeByPoint — 与えられたポイントにインターセクトするエッジの識別番号を探索します。

概要

bigint GetEdgeByPoint(varchar atopology, geometry apoint, float8 tol1);

説明

与えられたポイントにインタセクトするエッジの識別番号を探索します。

この関数は、トポロジ、ポイント、許容差を引数にして、整数 (エッジの識別番号) を返します。許容差が 0の場合、ポイントはエッジとインタセクトしていなければなりません。

apointがエッジとインタセクトしない場合には、0を返します。

許容差 > 0 として、ポイント付近のエッジが一つより多い場合には、例外が投げられます。

[注記]

許容差が 0の場合には、ST_Intersects を使い、それ以外では、ST_DWinthin を使います。

GEOS モジュールで実現しています。

Availability: 2.0.0

本例では AddEdge で作ったエッジを使います。

コード
SELECT topology.GetEdgeByPoint('ma_topo', geom, 1) As with1mtol, topology.GetEdgeByPoint('ma_topo', geom, 0) As withnotol
FROM ST_GeomFromEWKT('SRID=26986;POINT(227622.6 893843)') As geom;
出力
with1mtol | withnotol
-----------+-----------
         2 |         0

このクエリーは二つ以上のエッジが発見されるのでエラーになります。

コード
SELECT topology.GetEdgeByPoint('ma_topo', geom, 1) As nearnode
FROM ST_GeomFromEWKT('SRID=26986;POINT(227591.9 893900.4)') As geom;
出力
ERROR:  Two or more edges found