2点間距離(1点からの距離)による検索方法3

一つ目にトラックバックが付いていたので補足


もう少し説明すると、半径 r の検索をするとして、UTM上で1辺 2r の外接矩形を求めますよね。
その矩形の四隅の点自体は、経緯度座標に戻しても、中心点から √2r の距離を持つ点として意味を持ちますが、いかんせん経緯度座標系に戻してしまった時点で、四隅の点を結ぶ辺自体が大圏コースじゃなくなってしまうので、駄目だと思います。
2点間距離(1点からの距離)による検索方法2でも言ったように、&&絞込みに限定するなら四隅の点によるジオメトリ(ポリゴン)のバウンディングボックス等距離円を内包すればいいはずです。*1

これはあるゾーンでの第2象限*2における等距離円とUTMで得た外接矩形(赤)、経緯度座標での外接矩形(青)、expand_by_meterで得られるポリゴンのバウンディングボックスの関係を示したものです。このように、青で示した外接矩形よりも大きくはなりますが、ポリゴンのバウンディングボックスは等距離円を内包しています。
中央経線を跨ぐ場合にはバウンディングボックスの北側の辺が等距離円に食い込みますがこれは前のエントリの方法で回避できます。

私がなぜこのような方法に固執するのかというと、検索対象レコードが等距離円を持っていて条件として与えた点をその等距離園内に含むすべてのレコードを得たいからです。等距離円は中心を示すgeometry型列と半径を示すdouble型列を用いて表現しています。このとき、中心点の列で空間インデックスを張っても半径を得るために逐次検索となってしまうのです。
考えてみるとUTM上で外接矩形を用いたインデックスを張る手もありますが、国内で動かす場合6つのゾーンすべてについてインデックスを張らなければいけないのが気になります。検索対象が頻繁に移動することがあるため避けたいところなのです。

*1:このとき四点を結ぶ大圏コースを内包する必要はありません。

*2:原点の北西