Mysql
 sql >> база данни >  >> RDS >> Mysql

Намерете N най-близкия LineString от точка с помощта на MySQL Spatial Extensions

Това беше много полезен отговор за мен, но аз използвам MySQL 5.7.18, който има по-разширени или просто различни функции за гео заявка. Публикуваната функция за разстояние вече не е необходима - използвайте ST_Distance_Sphere. Ето актуализация на същия код, за да направи DistanceFromLine съвместим с модерен (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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Изберете номер на ред на запис

  2. MySQL 'secure-file-priv' не позволява зареждане на файл с данни, дори от разпределената безопасна папка

  3. База данни/SQL:Как да съхранявам данни за дължина/ширина?

  4. Достъпът до mysql е отказан за потребител [имейл защитен] (използвайки парола:НЕ), въпреки че сте задали парола и я въвели във връзка uri

  5. 4 начина за проверка на типа данни на колона в MySQL