소스 검색

Dodanie funkcji do liczenia dlugosci do instalatora

Mariusz Muszyński 9 년 전
부모
커밋
6878767117
1개의 변경된 파일43개의 추가작업 그리고 2개의 파일을 삭제
  1. 43 2
      SE/superedit-DB_PROCEDURES_CREATE.php

+ 43 - 2
SE/superedit-DB_PROCEDURES_CREATE.php

@@ -1109,8 +1109,49 @@ END";
 $sql['view__CRM_LISTA_ZASOBOW_ALIASY_view']="CREATE or replace ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `CRM_LISTA_ZASOBOW_ALIASY_view` AS select `CRM_LISTA_ZASOBOW`.`ID` AS `ID`,`CRM_LISTA_ZASOBOW`.`ID` AS `CRM_LISTA_ZASOBOW_ID`,`ALIAS_CHILDS_FROM_CRM_LISTA_ZASOBOW`(`CRM_LISTA_ZASOBOW`.`ID`) AS `CHILDS`,`ALIAS_PATH_FROM_CRM_LISTA_ZASOBOW`(`CRM_LISTA_ZASOBOW`.`ID`) AS `PATH` from `CRM_LISTA_ZASOBOW`";
 
 
-
-
+// funkcja do liczenia dlugosci LINESTRING
+$sql['drop_function_GDistance']="drop function if exists GDistance";
+$sql['create_function_GDistance']="CREATE DEFINER=`root`@`localhost` FUNCTION `GDistance_test`(`LS` LINESTRING) RETURNS double
+    NO SQL
+BEGIN
+    DECLARE LON_A, LAT_A, LON_B, LAT_B, R, RESULT DOUBLE;
+    DECLARE A, B POINT;
+    DECLARE I, N INT;
+    -- if LS is not geometry type then return 0
+    -- if GeometryType is not 'LINESTRING' then return 1
+    -- if GeometryType is 'LINESTRING' then return length
+
+    IF LS is null or GeometryType(LS) is null THEN
+        RETURN 0;
+    END IF;
+    IF 'LINESTRING' != GeometryType(LS) THEN
+        RETURN 1;
+    END IF;
+
+    SET R = 6372795.477598;
+
+    SET N = NUMPOINTS(LS);
+    IF N is null or N = 1 THEN
+        RETURN 1;
+    END IF;
+
+    SET RESULT = 0;
+    SET I = 1;
+
+    WHILE I < N DO
+        SET A = POINTN(LS, I);
+        SET B = POINTN(LS, I + 1);
+        SET LON_A = RADIANS(X(A));
+        SET LAT_A = RADIANS(Y(A));
+        SET LON_B = RADIANS(X(B));
+        SET LAT_B = RADIANS(Y(B));
+        SET RESULT = RESULT + ACOS(SIN(LAT_A) * SIN(LAT_B) + COS(LAT_A) * COS(LAT_B) * COS(LON_A - LON_B));
+        SET I = I + 1;
+    END WHILE;
+
+    SET RESULT = RESULT * R;
+    RETURN RESULT;
+END";
 
 
 $sql['event_shedule_init']="SET GLOBAL event_scheduler = ON";