marker
アプリ用に作成する線またはポリゴンの中心点を取得する必要があります。マーカーをクリックすると、ジオメトリが表示されます(ラインまたはポリゴン)。以前は機能さST_Centroid
せていました。
結果は、重心がジオメトリの外にあるいくつかのポリゴンまたはラインのネストを解除することを期待したものです。これらのラインまたはポリゴンに必要なのは、「最も中心点」を取得することですが、ジオメトリの内側にあります。
これどうやってするの?解決策はありますか?
marker
アプリ用に作成する線またはポリゴンの中心点を取得する必要があります。マーカーをクリックすると、ジオメトリが表示されます(ラインまたはポリゴン)。以前は機能さST_Centroid
せていました。
結果は、重心がジオメトリの外にあるいくつかのポリゴンまたはラインのネストを解除することを期待したものです。これらのラインまたはポリゴンに必要なのは、「最も中心点」を取得することですが、ジオメトリの内側にあります。
これどうやってするの?解決策はありますか?
回答:
ドキュメントから:ST_PointOnSurface —サーフェス上にあることが保証されているPOINTを返します。
私の場合、各ジオメトリを離散テーブルに持っています。私がしたことは:
ST_LineInterpolatePoint()
0.5係数。ST_Centroid()
がそのジオメトリ内にあるかどうかをテストします。もしそうST_Centroid()
なら、私が選ぶならそうでなければ、最良の選択PointOnSurface()
です。これがクエリです:
SELECT
CASE WHEN (SELECT the_geom FROM points WHERE gid = d.gid) IS NOT NULL
THEN (SELECT the_geom FROM points WHERE gid = d.gid)
WHEN (SELECT the_geom FROM lines WHERE gid = d.gid) IS NOT NULL
THEN ST_LineInterpolatePoint((SELECT the_geom FROM lines WHERE gid = d.gid), 0.5)
WHEN (SELECT the_geom FROM polygons WHERE gid = d.gid AND ST_Intersects(ST_Centroid(the_geom),the_geom)) IS NOT NULL
THEN ST_Centroid((SELECT the_geom FROM polygons WHERE gid = d.gid))
ELSE ST_PointOnSurface((SELECT the_geom FROM polygons WHERE gid = d.gid))
END AS center
FROM someTable d