sql >> データベース >  >> RDS >> Mysql

MySQLSpatialExtensionsを使用してポイントからN個の最も近いLineStringを検索します

    これは私にとって非常に有用な答えでしたが、私は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. SQL Server(T-SQL)でデータベースメールプロファイルを削除する

    2. Oracle-ORA-06502:PL / SQL:数値または値のエラー(DBMS_OUTPUT)

    3. Postgresが列が存在しないと言うのはなぜですか?

    4. postgresqlの国際化された正規表現