0

MySQLで(Haversine式を使用して)場所の周りに描かれた円に含まれるすべてのポイントを見つける方法について多くのことを見つけています。

私の関数は、少なくとも部分的に円と交差しているすべてのポリゴンを返す必要があります。

  1. そのサークルを作成するにはどうすればよいですか?

  2. ポリゴンがその円と交差しているかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

2

あなたは2Dまたは3Dで作業しているかどうかについて言及することを怠りました。circleあなたがではなく言ったことを考えるとsphere、私はあなたが2Dを意味すると仮定します。

円と交差するすべてのポリゴンを見つけるには、次のことを知っておく必要があります。

a)各ポリゴンの原点(より具体的には、ポリゴンの中心)。

b)円の原点。

c)円の直径(または半径)。

これらの値を使用して、円の中心と各ポリゴンの中心との間の距離を決定できます。円の中心と多角形の中心との間の距離の大きさが円の半径よりも小さい場合、多角形は交差します。

最初に円に関連する各ポリゴンの大きさを計算し、次にそれらを円の半径に対して評価する必要があるため、これをSQLクエリにプラグインする方法がわかりません。私がSQLを書いてからしばらく経ちましたが、それは次のようなものになると思います。

  • ポリゴンの中心と円の中心の間の距離が半径よりも大きいすべてのアイテムを収集します。

詳細については、次の便利な画像を参照してください。

円の交点

これは複雑な形状を考慮していないため、交差点を決定するための非常に大まかな基本的な方法を提供するだけです。基本的に、これは、境界球がポリゴンを囲む球と球の交差線に沿ったものです。状況によっては誤検知が発生する場合がありますが、これらの結果をよりきめ細かい衝突検出に簡単に渡して、必要に応じて結果をフィルタリングできます。

お役に立てば幸いです。

于 2012-09-20T13:34:46.390 に答える
1

これは古いものですが、この問題を検索したときにGoogleが最もヒットしたものの1つです。既存の回答は、MySQLで使用するために合理的に実装できないため、有用ではありません。少なくとも、リモートで許容できるパフォーマンスを持つ方法では実装できません。

解決策は、ポイント/半径でST_Bufferを使用することです。

ST_Buffer(point, radius)

ポリゴンデータを含む列「ポリゴン」を含むテーブルのクエリ例では、半径9のポイントmypointを中心とする円が交差する行を返します。

SELECT * FROM mytable WHERE ST_Intersects(polygon, ST_Buffer(mypoint, 9))
于 2017-05-13T21:30:48.063 に答える