0

我想获得两个 GeoPoints 之间的距离(使用 LatLong),因为我从提供的解决方案中编写了 GETDISTANCE 函数 [ MySQL 函数来计算两个纬度和经度之间的距离。如果我独立调用函数,它就像魅力一样。据我了解,我无法ResultSet从 MySQL 中的函数返回,所以我创建了过程并在过程中调用了函数,如下所示:

  DELIMITER $$
     CREATE PROCEDURE GetNearByGeoPoints(IN Lat REAL, IN Longi REAL)
       BEGIN
       DECLARE v_max int;
       DECLARE v_counter int unsigned default 0;


       SET @v_max = (SELECT COUNT(*) FROM TransmitterPointsData);

       START TRANSACTION;

       WHILE v_counter < v_max
       DO

       SELECT @coverageID :=CoverageID, @tableLatitude := Latitude, @tableLongitude :=Longitude FROM TransmitterPointsData LIMIT v_counter,1;

       SET @Dist= GETDISTANCE(Lat, Longi, tableLatitude, tableLongitude);

       UPDATE TransmitterPointsData SET DynamicDistance = @Dist WHERE CoverageID= @coverageID;

       set v_counter=v_counter+1;

       END WHILE;
       COMMIT;

       SELECT * FROM TransmitterPointsData;
       END $$
     DELIMITER ;

我想做的是从用户那里获取一组 LatLong 参数,并将其与表中的每组 LatLong 进行比较。在从函数获得输出后,我正在使用 coverageID 上的 where 条件更新 TransmitterPointsData 表。

到目前为止,这是我的第一个 MySQL 查询,我遵循语法,但我不知道为什么要在Column中获取所有null值。DynammicDistance

先感谢您

4

1 回答 1

0

尝试用这个替换while循环:

UPDATE TransmitterPointsData
SET DynamicDistance = GETDISTANCE(Lat, Longi, Latitude, Longitude)

短得多,并且您可以通过限制 + 偏移避免潜在的行选择问题(这充其量是糟糕的风格,并且每次都会给您一个随机行,更糟糕的是)。

于 2018-11-05T07:21:52.813 回答