【问题标题】:Geo distance Search MYSQL地理距离搜索MYSQL
【发布时间】:2011-08-26 19:23:29
【问题描述】:

我正在使用空间扩展名使用 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 无法返回结果 在给定的上下文中设置

那么..我怎样才能使用转身返回一组数据?

谢谢

【问题讨论】:

    标签: php mysql geolocation coordinates spatial


    【解决方案1】:

    你可以把最后一部分改成

    /*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 中选择并在那里找到结果集。

    【讨论】:

    • 是的,但是如果有多个用户进行搜索怎么办?这个搜索实际上是一个允许用户在城市周围搜索一些 POI 的功能,所以它会被很多用户调用......我不能使用那个方法......它不会工作
    • 好的.. 我使用了驱动程序 MYSQLI 而不是 MYSQL,它可以工作。我可以检索存储过程返回的数据集。但这是个好主意吗?谢谢
    • @Fazulete,这是一个 hack,但如果您使用临时表,每个会话都会有自己的表,因此用户不会看到彼此的结果。如果您直接从 SP 中获得结果集,那就更好了。
    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 2012-09-11
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2012-03-06
    相关资源
    最近更新 更多