• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:特定範囲内に一部でも属す線分を抽出する方法)

特定範囲内の線分を抽出する方法

このQ&Aのポイント
  • MySQLにてシステムの構築を考えていますが、特定範囲内に一部でも属す線分を抽出する方法について質問です。
  • 線分テーブル「tblLine」には開始座標と終了座標が記録されています。任意の座標点に近い線分を抽出したいと考えています。
  • 具体的には、任意の座標点の周囲10単位の四角形に一部でも属す線分を抽出したいですが、抽出条件の組み立て方がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

オーソドックスな方法として、座標変換だけで比較する方法があります。 できるだけ軽い処理方法を希望されているようで、確かに座標変換すれば処理が重くなるとは思うけど、線分からの距離を求める以外に適当な方法が私にはわからなかったので、参考までに回答させていただきます。 P(X,Y)の座標値を 線分(SX,SY)-(EX,EY)の開始点を原点とし、終了点をu軸にとる u-v座標系に座標変換します。 線分の長さをL=SQRT((EX-SX)^2+(EY-SY)^2)とすれば、 これは、線分の終点のu座標値に他ならないので、 P点の座標変換した座標(u,v)について、 0<u<Lで、かつ vの絶対値(線分までの距離)が一定値以下のものを選択すれば 良いと思います。 座標変換の公式はここに書くと長くなりますので、ご存知でなければ別に調べてください。 比較する線分のテーブルに座標変換したu、vと線分長Lのカラムを作り、それから上記の条件で抽出するSQLを作れば良いのかな?

gotosyu510
質問者

お礼

回答ありがとうございます。 この方法ではP点を線分毎に座標変換することに なりますよね? 線分は今のところの想定で10万レコード程に なるため、一つ一つの線分に対してP点の 座標変換を行うとご指摘の通り重くなってしまうのでは ないでしょうか。 まずこの方法でどのくらい時間がかかるのか検証してみようと 思います。

その他の回答 (1)

回答No.1

こんばんは。 うーん・・・、 BETWEENじゃないのかな? 例えば・・・、 テーブル START INT 3 END INT 25 とかってなってた場合(START、ENDはカラムね) 条件8が範囲内かどうかなら、 select 'X' from table where 8(これ、検索条件) between START and END なんちゃって・・・。 上手く使えばできそうな・・・。

gotosyu510
質問者

お礼

回答ありがとうございます。 X軸のみ(つまり大小比較のみ)であれば その方法でもできそうですが・・・・ もうすこし考えてみます。

関連するQ&A