Я основываю свой запрос ниже, чтобы выбрать точки около пространственной точки, называемой point
, с другой SO solution, но я не смог заставить ее возвращать любые результаты за последние несколько лет часов, и я немного нервничала сейчас ...MySQL - выбор около пространственной точки
Моя таблица lastcrawl
имеет простую схему:
id (primary int, autoinc) point (spatial POINT)
(Добавлен пространственный ключ через ALTER TABLE lastcrawl ADD SPATIAL INDEX(point);
)
$query = sprintf("SELECT * FROM lastcrawl WHERE MBRContains(LineFromText(CONCAT( '(' , %F + 0.0005 * (111.1/cos(%F)) , ' ' , %F + 0.0005/111.1 , ',' , %F - 0.0005/(111.1/cos(%F)) , ' ' , %F - 0.0005/111.1 , ')') ,point)", $lng,$lng,$lat,$lng,$lat,$lat); $result = mysql_query($query) or die (mysql_error());
Я успешно вставил несколько строк с помощью:
$query = sprintf("INSERT INTO lastcrawl (point) VALUES(GeomFromText('POINT(%F %F)'))",$lat,$lng);
Но, я просто не в состоянии запросить ближайшие точки, чтобы получить ненулевой набор результатов. Как вы получаете запрос для выбора точек, ближайших к данной пространственной точке?
После вставки $lat=40, $lng=-100
, пытаясь запросить это ничего не возвращает, а также (так, даже точные координаты матча):
SELECT * FROM lastcrawl WHERE MBRContains(LineFromText(CONCAT('(' , -100.000000 + 0.0005 * (111.1/cos(-100.000000)) , ' ' , 40.000000 + 0.0005/111.1 , ',' , -100.000000 - 0.0005/(111.1/cos(40.000000)) , ' ' , 40.000000 - 0.0005/111.1 , ')')) ,point)
Я попробовал это, используя MySQL 5.1.39 и никаких результатов, где возвращаемые. – Andy
@ Энди: он возвращает мне 42 записи. – Quassnoi
Эта формула на самом деле неверна. Вам нужно удалить паретез вокруг выражений: (111.1/COS (RADIANS (@lat))), или ваши результаты будут отключены в 2 раза. – deweydb