sql >> Databasteknik >  >> RDS >> Mysql

Hitta N närmaste linjesträng från en punkt med MySQL Spatial Extensions

Det här var ett mycket användbart svar för mig, men jag använder MySQL 5.7.18, som har mer avancerade eller bara andra geofrågefunktioner. Den postade avståndsfunktionen behövs inte längre - använd ST_Distance_Sphere. Så här är en uppdatering av samma kod för att göra DistanceFromLine kompatibel med 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. Uppdatera databas med flera SQL-statement

  2. Hur man returnerar alla otillförlitliga CHECK-begränsningar i SQL Server (T-SQL-exempel)

  3. Kan vi importera SQL från S3-bucket till AWS ec2 (instans)?

  4. SQLite Välj Distinct