【问题标题】:Trying to convert existing query to a stored procedure, gis试图将现有查询转换为存储过程,gis
【发布时间】:2020-02-02 20:54:07
【问题描述】:

我正在尝试转换现有查询,该查询返回距点(几何)特定距离内的所有记录

我在 mysql-workbench 中创建了一个存储过程,它需要很长时间和距离,我希望得到与查询相同的结果(返回指定距离内的所有记录。我哪里出错了,我在试图将 lat 和 long 的值传递给另一个空间函数以创建用户位置。但这里似乎没有失败

CREATE DEFINER=`root`@`localhost` PROCEDURE `findNearby`(

IN lat VARCHAR(255),
IN longVal VARCHAR(255),
IN distanceFrom INT
)
BEGIN
DECLARE user_location geometry default ST_GeomFromText( 'POINT(0 0)', 4326 ) ;
SET user_location = ST_GeomFromText( 'POINT(lat longVal)', 4326 );
SELECT 
    *,
    ST_AsText(`location`) AS `pos_wkt`,
    ST_Distance_Sphere(`location`, user_location) AS `distance`
FROM
    `business_details`
WHERE ST_Distance_Sphere(`location`, user_location) <= distanceFrom;
END

SET @user_location = ST_GeomFromText( 'POINT(30 50)', 4326 );
  SELECT 
    *,
    ST_AsText(`location`) AS `pos_wkt`,
    ST_Distance_Sphere(`location`, @user_location) AS `distance`
FROM
    `business_details`
WHERE ST_Distance_Sphere(`location`, @user_location) <= (1000*5000);

3037 - 向函数 st_geomfromtext 提供的 GIS 数据无效。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    设法解决了这个问题。

    CREATE DEFINER=`root`@`localhost` PROCEDURE `findNearby`(
    
    IN lat VARCHAR(255),
    IN longVal VARCHAR(255),
    IN distanceFrom INT
    )
    BEGIN
    DECLARE user_location geometry default ST_GeomFromText( 'POINT(0 0)', 4326 ) ;
    DECLARE pointString varchar(255);
    set pointString = concat('POINT(', lat, ' ', longVal, ')');
    SET user_Location = ST_GeomFromText(  pointString, 4326 );
    SELECT 
        *,
        ST_AsText(`location`) AS `pos_wkt`,
        ST_Distance_Sphere(`location`, user_location) AS `distance`
    FROM
        `business_details`
    WHERE ST_Distance_Sphere(`location`, user_location) <= distanceFrom * 1000;
    END
    

    【讨论】:

      猜你喜欢
      • 2013-06-18
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多