地理距离搜索MYSQL

时间:2011-05-16 22:02:16

标签: php mysql geolocation coordinates spatial

我正在使用空间扩展使用mysql进行地理搜索。我做了一个存储过程(当我在mysql的命令行上这样工作时非常好用

  

的MySQL>呼叫   TEST2(GeomFromText('POINT(-0.93961472   43.52843475)'),0.6);

DROP PROCEDURE `test2`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `test2`(IN center2 point,IN dist int)
BEGIN
SET @center = center2;
SET @radius = dist;

SET @bbox = CONCAT('POLYGON((', 
 X(@center) - @radius, ' ', Y(@center) - @radius, ',', 
 X(@center) + @radius, ' ', Y(@center) - @radius, ',', 
 X(@center) + @radius, ' ', Y(@center) + @radius, ',', 
 X(@center) - @radius, ' ', Y(@center) + @radius, ',', 
 X(@center) - @radius, ' ', Y(@center) - @radius, '))' 
);

SELECT professionnels.*, AsText(coord) 
FROM professionnels 
WHERE Intersects( coord, GeomFromText(@bbox) ) 
AND SQRT(POW( ABS( X(coord) - X(@center)), 2) + POW( ABS(Y(coord) - Y(@center)), 2 )) < @radius limit 20;
end

但问题是我需要从php调用它。当我这样做时,错误就是返回说

  

PROCEDURE test2无法返回结果   在给定的上下文中设置

那么..我如何使用转身来返回一组数据呢?

由于

1 个答案:

答案 0 :(得分:0)

您可以将最后一部分更改为

/*delete all rows from temp_table*/
DELETE FROM temp_table WHERE temp_table.somefield is not null;

INSERT INTO temp_table
  SELECT professionnels.*, AsText(coord) 
  FROM professionnels 
  WHERE Intersects( coord, GeomFromText(@bbox) ) 
  AND SQRT(POW( ABS( X(coord) - X(@center)), 2) 
      + POW( ABS(Y(coord) - Y(@center)), 2 )) < @radius limit 20;

然后你可以从temp_table中选择并在那里找到结果集。