道路やホテルに関するデータを保存するためにMySQL Spatial Extensionsを使用しています。ホテルのデータを Point として保存し、道路のデータを LineString として保存します。テーブルはこんな感じ
CREATE TABLE IF NOT EXISTS `Hotels` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` text,
`coordinate` point NOT NULL,
PRIMARY KEY (`id`),
SPATIAL KEY `coordinate` (`coordinate`),
)
CREATE TABLE IF NOT EXISTS `Roads` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` text,
`route` linestring NOT NULL,
PRIMARY KEY (`id`),
SPATIAL KEY `coordinate` (`route`),
)
インスタンスの視覚化は次のようになります。
私の問題には、数値 N と点 P が与えられています。点 P から N 本の最も近い道路を見つけるための SQL クエリは何ですか? 距離は、上に示すように、道路のセグメントからポイントまでの最小の垂直距離によって定義されます。(実際には、高速道路のゲートとホテルの間が最も近い距離のはずですが、この場合、どの地点からでも高速道路に入ることができます:P)
この問題を単一の SQL ステートメントで解決できない場合は、中間の SQL クエリと後処理で問題ありません。しかし、効率的な SQL クエリとはどのようなもので、どのようにデータを後処理するのでしょうか?