Поиск ограничивающей рамки в MySQL

Я пытаюсь выяснить, как получить информацию из приведенной ниже таблицы MySQL, используя «верхнюю левую широту и долготу» и «нижнюю правую широту и долготу» для географической ограничивающей рамки.

CREATE TABLE `markers` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `name` VARCHAR( 60 ) NOT NULL ,
  `address` VARCHAR( 80 ) NOT NULL ,
  `lat` decimal(10,7) NOT NULL ,
  `long` decimal(10,7) NOT NULL,
  `geopoint` point NOT NULL,
  PRIMARY KEY  (id),
  SPATIAL geopoint (geopoint)
) ENGINE = MYISAM ;

Пока у меня есть SQL-запрос ниже, и я не уверен, что это самый эффективный и действенный способ получения информации?

$sql = "SELECT * FROM `markers` WHERE (long BETWEEN '$west_long' AND '$east_long') AND (lat BETWEEN '$north_lat' AND '$south_lat')";

person Chris    schedule 18.04.2013    source источник
comment
Чем отличается получение информации из любой другой таблицы?   -  person Royal Bg    schedule 18.04.2013
comment
Мне нужно получить информацию на основе ограничивающей рамки карты, как описано выше!   -  person Chris    schedule 18.04.2013
comment
Вопрос остается прежним. Но вы также можете предоставить дополнительную информацию о своей ограничивающей рамке, например... code?   -  person Royal Bg    schedule 18.04.2013
comment
Я добавил SQL-запрос, чтобы показать, что мне нужно   -  person Chris    schedule 19.04.2013


Ответы (1)


Существуют довольно впечатляющие формулы для преобразования двух широт в расстояние (метры, мили), то же самое для долгот.

Пока ваши запросы находятся в определенном диапазоне Земли, вы должны помочь MySQL со вторым значительно упрощенным расширенным условием where, чтобы уменьшить его до правильного прямоугольника.

Это ваш выбор, если вы возьмете эти формулы в php или в sql - поле в метрах можно преобразовать в поле в широте/долготе.

Простой прямоугольник в широтно-долгой форме никогда не был бы настоящим прямоугольником, как вы можете видеть на каждом апельсине.

Марко

person flaschenpost    schedule 18.04.2013