MySQL – выбор около пространственной точки

Я основывал свой запрос ниже, чтобы выбрать точки вблизи пространственной точки, называемой point на другом SO-решении , но я не смог заставить ее вернуть какие-либо результаты за последние несколько часов, и я немного острый Теперь…

Моя таблица lastcrawl имеет простую схему:

  id (первичный int, autoinc)
  точка (пространственная точка)

(Добавлен пространственный ключ через 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 
         , ')') ')
         , Точка)»,
         $ LNG, $ LNG, $ ш, $ LNG, $ ш, $ ш);
 $ result = mysql_query ($ query) или 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)

Я немного скорректировал формулу.

Это работает для меня:

 CREATE TABLE lastcrawl (id INT NOT NULL PRIMARY KEY, pnt POINT NOT NULL) ENGINE=MyISAM; INSERT INTO lastcrawl VALUES (1, POINT(40, -100)); SET @lat = 40; SET @lon = -100; SELECT * FROM lastcrawl WHERE MBRContains ( LineString ( Point ( @lat + 10 / 111.1, @lon + 10 / ( 111.1 / COS(RADIANS(@lat))) ), Point ( @lat - 10 / 111.1, @lon - 10 / ( 111.1 / COS(RADIANS(@lat))) ) ), pnt );