sql >> Database teknologi >  >> RDS >> Mysql

Find N nærmeste linjestreng fra et punkt ved hjælp af MySQL Spatial Extensions

Dette var et meget nyttigt svar for mig, men jeg bruger MySQL 5.7.18, som har mere avancerede eller bare andre geo-forespørgselsfunktioner. Den postede afstandsfunktion er ikke længere nødvendig - brug ST_Distance_Sphere. Så her er en opdatering af den samme kode for at gøre DistanceFromLine kompatibel med moderne (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. Entity Framework:kort varchar til DateTime-egenskaben

  2. #1062 - Dublet indtastning for nøgle 'PRIMÆR'

  3. Databasemodeller for e-handel Del 1:Nyhedsbrevet

  4. De dynamiske faner viser de samme poster