ここでの回答を使用して、クエリをセットアップしました。
https://stackoverflow.com/a/1006668/211457
私はこのクエリを実行しています:
SELECT *
FROM users
WHERE MBRContains(LineFromText(CONCAT(
'(' , 39.76784253493 + 10 / ( 111.1 / cos(RADIANS(39.76784253493)))
, ' '
, -75.871009379625 + 10 / 111.1
, ','
, 39.76784253493 - 10 / ( 111.1 / cos(RADIANS(-75.871009379625)))
, ' '
, -75.871009379625 - 10 / 111.1
, ')' ))
,location)
私のデータベースには次のエントリがあります:
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`location` point NOT NULL,
PRIMARY KEY (`id`),
SPATIAL KEY `sx_place_location` (`location`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `users` (`id`, `location`)
VALUES
(1,X'000000000101000000E17A14AE47E1434088855AD3BCF752C0'),
(2,X'000000000101000000E9FF1F9EBEF752C0440008AA48E24340');
クエリで使用した値であるため、2 番目の行が返されると予想される場合、結果は返されません。私が確認したことの1つは、経度と緯度の値を切り替えたかどうかですが、どちらの場合も何も返されません。クエリで Explain を実行すると、「const テーブルを読み取った後に WHERE が認識されませんでした」と表示されます。MySQL 5.1.39 を使用しています。
エクスポートは何らかのエンコーディングまたはポイントであるため、ここにスクリーンショットがあります。余分な列は無視してください。
編集:Postgresqlに切り替えました。同様のクエリはより短く、機能します。