sql >> Database >  >> RDS >> Mysql

Vind N dichtstbijzijnde LineString vanaf een punt met behulp van MySQL Spatial Extensions

Dit was een zeer nuttig antwoord voor mij, maar ik gebruik MySQL 5.7.18, dat meer geavanceerde of gewoon andere geo-queryfuncties heeft. De geposte afstandsfunctie is niet meer nodig - gebruik ST_Distance_Sphere. Dus hier is een update van dezelfde code om DistanceFromLine compatibel te maken met 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. een omgevingsvariabele gebruiken voor lokale vervolgconfiguratie

  2. Hoe u alle beperkingen van CHECK &Foreign Key voor een tabel in SQL Server uitschakelt (T-SQL-voorbeelden)

  3. Hoe de controller-variabele te gebruiken in Views + cakephp

  4. Dagelijkse PostgreSQL-taken automatiseren met Jenkins