sql >> Databáze >  >> RDS >> Mysql

Najděte N nejbližšího LineString z bodu pomocí MySQL Spatial Extensions

Byla to pro mě velmi užitečná odpověď, ale používám MySQL 5.7.18, která má pokročilejší nebo jen jiné funkce geo dotazů. Funkce vzdálenosti již není potřeba – použijte ST_Distance_Sphere. Zde je tedy aktualizace stejného kódu, aby byl DistanceFromLine kompatibilní s moderní (5.7.6+) MySQL...

DROP function IF EXISTS `DistanceFromLine`;
delimiter //
    CREATE FUNCTION `DistanceFromLine`(
    route LINESTRING, point1 POINT
    ) RETURNS INT DETERMINISTIC
        BEGIN
        DECLARE a INT Default 0 ;
        DECLARE minDistance INT Default 0;
        DECLARE currentDistance INT Default 0;
        DECLARE currentpoint point ;
        DECLARE size INT Default 0 ;
        SET size =  ST_NumPoints(route);
              simple_loop: LOOP
       SET a = a+1;
       SET currentpoint = ST_PointN(route,a);
       SET currentDistance = ST_Distance_Sphere(point1,currentpoint);

       IF a = 1 THEN
        SET minDistance = currentDistance;
           END IF;

       IF currentDistance < minDistance THEN
        SET minDistance = currentDistance;
       END IF;
       IF a=size THEN
                 LEAVE simple_loop;
       END IF;
          END LOOP simple_loop;
     RETURN (minDistance);
 END//


  1. seřadit souhrn ve skupině podle

  2. Jak nastavím časový limit skriptu SQL Server ze skriptu?

  3. Proč je výsledek `select 'a'=0;` 1?

  4. Výjimka při pokusu o spuštění programu Java z maven