From 65359eaadbc620d0c3d4286e164717c52d3f34f7 Mon Sep 17 00:00:00 2001 From: following Date: Wed, 10 Jul 2013 21:53:12 +0200 Subject: [PATCH] reverted 3d22e3c1: distance.php is old stuff updates #248 --- bin/dbsv-update.php | 7 +- .../doc/sql/stored-proc/maintain-115.inc.php | 24 ++ .../sql/stored-proc/maintain-current.inc.php | 193 --------------- htdocs/doc/sql/stored-proc/old/distance.php | 221 ++++++++++++++++++ 4 files changed, 251 insertions(+), 194 deletions(-) create mode 100644 htdocs/doc/sql/stored-proc/maintain-115.inc.php create mode 100644 htdocs/doc/sql/stored-proc/old/distance.php diff --git a/bin/dbsv-update.php b/bin/dbsv-update.php index aa02ac45..a3d3207a 100644 --- a/bin/dbsv-update.php +++ b/bin/dbsv-update.php @@ -31,7 +31,7 @@ // maintain.php will not fit either. } - if (!sql_function_exists('distance') || !sql_procedure_exists('sp_touch_cache')) + if (!sql_procedure_exists('sp_touch_cache')) { // We need a consistent starting point including triggers & functions, and it's // safer not to decide HERE which trigger version to install. @@ -320,6 +320,11 @@ update_triggers(); } + function dbv_115() // remove obsolete functions + { + update_triggers(); + } + // When adding new mutations, take care that they behave well if run multiple // times. This improves robustness of database versioning. diff --git a/htdocs/doc/sql/stored-proc/maintain-115.inc.php b/htdocs/doc/sql/stored-proc/maintain-115.inc.php new file mode 100644 index 00000000..db376f1a --- /dev/null +++ b/htdocs/doc/sql/stored-proc/maintain-115.inc.php @@ -0,0 +1,24 @@ + diff --git a/htdocs/doc/sql/stored-proc/maintain-current.inc.php b/htdocs/doc/sql/stored-proc/maintain-current.inc.php index 5b3c1862..e53c48e3 100644 --- a/htdocs/doc/sql/stored-proc/maintain-current.inc.php +++ b/htdocs/doc/sql/stored-proc/maintain-current.inc.php @@ -7,199 +7,6 @@ ***************************************************************************/ - sql_dropFunction('distance'); - sql("CREATE FUNCTION `distance` (lat1 DOUBLE, lon1 DOUBLE, lat2 DOUBLE, lon2 DOUBLE) RETURNS DOUBLE DETERMINISTIC - BEGIN - RETURN ACOS(COS((90-lat1) * 3.14159 / 180) * COS((90-lat2)* 3.14159 / 180) + SIN((90-lat1) * 3.14159 / 180) * SIN((90-lat2) * 3.14159 / 180) * COS((lon1-lon2) * 3.14159 / 180)) * 6370; - END;"); - - sql_dropFunction('projLon'); - sql("CREATE FUNCTION `projLon` (nLat DOUBLE, nLon DOUBLE, nDistance DOUBLE, nAngle DOUBLE) RETURNS DOUBLE DETERMINISTIC - BEGIN - DECLARE nLatProj DOUBLE DEFAULT 0; - DECLARE nDeltaLon DOUBLE DEFAULT 0; - DECLARE nLonProj DOUBLE DEFAULT 0; - - SET nLat = nLat * 3.141592654 / 180; - SET nLon = nLon * 3.141592654 / 180; - SET nAngle = nAngle * 3.141592654 / 180; - SET nDistance = (3.141592654/ (180 * 60)) * nDistance / 1.852; - - SET nLatProj = asin(sin(nLat) * cos(nDistance) + cos(nLat) * sin(nDistance) * cos(nAngle)); - SET nDeltaLon = -1 * (atan2(sin(nAngle) * sin(nDistance) * cos(nLat), cos(nDistance) - sin(nLat) * sin(nLatProj))); - SET nLonProj = (nLon - nDeltaLon + 3.141592654) - floor((nLon - nDeltaLon + 3.141592654) / 2 / 3.141592654) - 3.141592654; - - return nLonProj * 180 / 3.141592654; - END;"); - - sql_dropFunction('projLat'); - sql("CREATE FUNCTION `projLat` (nLat DOUBLE, nLon DOUBLE, nDistance DOUBLE, nAngle DOUBLE) RETURNS DOUBLE DETERMINISTIC - BEGIN - DECLARE nLatProj DOUBLE DEFAULT 0; - - SET nLat = nLat * 3.141592654 / 180; - SET nLon = nLon * 3.141592654 / 180; - SET nAngle = nAngle * 3.141592654 / 180; - SET nDistance = (3.141592654 / (180 * 60)) * nDistance / 1.852; - - SET nLatProj = asin(sin(nLat) * cos(nDistance) + cos(nLat) * sin(nDistance) * cos(nAngle)); - - return nLatProj * 180 / 3.141592654; - END;"); - - sql_dropFunction('angle'); - sql("CREATE FUNCTION `angle` (nLat1 DOUBLE, nLon1 DOUBLE, nLat2 DOUBLE, nLon2 DOUBLE) RETURNS DOUBLE DETERMINISTIC - BEGIN - DECLARE nDegCorrection DOUBLE DEFAULT 0; - DECLARE nEntfernungsWinkel DOUBLE DEFAULT 0; - DECLARE nArccosEntfernungsWinkel DOUBLE DEFAULT 0; - DECLARE n DOUBLE DEFAULT 0; - DECLARE nAngle DOUBLE DEFAULT 0; - - SET nLat1 = nLat1 * 3.141592654 / 180; - SET nLon1 = nLon1 * 3.141592654 / 180; - SET nLat2 = nLat2 * 3.141592654 / 180; - SET nLon2 = nLon2 * 3.141592654 / 180; - - SET nDegCorrection = IF(nLon1 < nLon2, 360, 0); - SET nEntfernungsWinkel = sin(nLat1) * sin(nLat2) + cos(nLat1) * cos(nLat2) * cos(nLon1 - nLon2); - - IF ((nEntfernungsWinkel < -1.0) OR (nEntfernungsWinkel >= 1.0)) THEN - RETURN 0; - END IF; - - SET nArccosEntfernungsWinkel = acos(nEntfernungsWinkel); - SET n = sin(nLat2) / sin(nArccosEntfernungsWinkel) / cos(nLat1) - tan(nLat1) / tan(nArccosEntfernungsWinkel); - - IF (n < -1.0) OR (n > 1.0) THEN - IF nLon1 = nLon2 THEN - IF nLat1 > nLat2 THEN - RETURN 90.0; - ELSE - RETURN 270.0; - END IF; - END IF; - - RETURN 0.0; - ELSE - SET nAngle = acos(n) * 180.0 / 3.141592654 - nDegCorrection; - IF nAngle < 0.0 THEN - RETURN 360 + nAngle; - ELSE - RETURN 360 - nAngle; - END IF; - END IF; - - RETURN 0; - END;"); - - sql_dropFunction('ptonline'); - sql("CREATE FUNCTION `ptonline` (nLat DOUBLE, nLon DOUBLE, nLatPt1 DOUBLE, nLonPt1 DOUBLE, nLatPt2 DOUBLE, nLonPt2 DOUBLE, nMaxDistance DOUBLE) RETURNS DOUBLE DETERMINISTIC - BEGIN - DECLARE nTmpLon DOUBLE DEFAULT 0; - DECLARE nTmpLat DOUBLE DEFAULT 0; - - DECLARE nAnglePt1Pt2 DOUBLE DEFAULT 0; - DECLARE nAnglePt1 DOUBLE DEFAULT 0; - DECLARE nAngleLinePt1 DOUBLE DEFAULT 0; - DECLARE nAnglePt2 DOUBLE DEFAULT 0; - DECLARE nAngleLinePt2 DOUBLE DEFAULT 0; - DECLARE nDistancePt1 DOUBLE DEFAULT 0; - DECLARE nDistancePt2 DOUBLE DEFAULT 0; - - DECLARE nProjLat DOUBLE DEFAULT 0; - DECLARE nProjLon DOUBLE DEFAULT 0; - DECLARE nProjAngle DOUBLE DEFAULT 0; - DECLARE nAngleProj DOUBLE DEFAULT 0; - DECLARE nAnglePt1Proj DOUBLE DEFAULT 0; - - IF nLonPt2 < nLonPt1 THEN - SET nTmpLon = nLonPt1; - SET nTmpLat = nLatPt1; - SET nLonPt1 = nLonPt2; - SET nLatPt1 = nLatPt2; - SET nLonPt2 = nTmpLon; - SET nLatPt2 = nTmpLat; - END IF; - - IF nLonPt1 = nLonPt2 THEN - SET nLonPt2 = nLonPt2 + 0.000001; - END IF; - - SET nAnglePt1Pt2 = angle(nLatPt1, nLonPt1, nLatPt2, nLonPt2); - SET nAnglePt1 = angle(nLatPt1, nLonPt1, nLat, nLon); - SET nAngleLinePt1 = nAnglePt1Pt2 - nAnglePt1; - - IF nAngleLinePt1 > 180 THEN - SET nAngleLinePt1 = 360 - nAngleLinePt1; - END IF; - IF nAngleLinePt1 < -180 THEN - SET nAngleLinePt1 = nAngleLinePt1 + 360; - END IF; - - SET nAnglePt2 = angle(nLat, nLon, nLatPt2, nLonPt2); - SET nAngleLinePt2 = nAnglePt1Pt2 - nAnglePt2; - - IF nAngleLinePt2 > 180 THEN - SET nAngleLinePt2 = 360 - nAngleLinePt2; - END IF; - IF nAngleLinePt2 < -180 THEN - SET nAngleLinePt2 = nAngleLinePt2 + 360; - END IF; - - IF (nAngleLinePt1 > 90) OR (nAngleLinePt1 < -90) THEN - SET nDistancePt1 = distance(nLat, nLon, nLatPt1, nLonPt1); - IF nDistancePt1 < nMaxDistance THEN - RETURN 1; - ELSE - RETURN 0; - END IF; - END IF; - - IF (nAngleLinePt2 > 90) OR (nAngleLinePt2 < -90) THEN - SET nDistancePt2 = distance(nLat, nLon, nLatPt2, nLonPt2); - IF nDistancePt2 < nMaxDistance THEN - RETURN 1; - ELSE - RETURN 0; - END IF; - END IF; - - IF nAngleLinePt1 > 0 THEN - IF nAnglePt1Pt2 > 270 THEN - SET nProjAngle = nAnglePt1Pt2 - 270; - ELSE - SET nProjAngle = nAnglePt1Pt2 + 90; - END IF; - ELSE - IF nAnglePt1Pt2 > 90 THEN - SET nProjAngle = nAnglePt1Pt2 - 90; - ELSE - SET nProjAngle = nAnglePt1Pt2 + 270; - END IF; - END IF; - - SET nProjLat = projLat(nLat, nLon, nMaxDistance, nProjAngle); - SET nProjLon = projLon(nLat, nLon, nMaxDistance, nProjAngle); - - SET nAnglePt1Proj = angle(nLatPt1, nLonPt1, nProjLat, nProjLon); - SET nAngleProj = nAnglePt1Pt2 - nAnglePt1Proj; - IF nAngleProj > 180 THEN - SET nAngleProj = 360 - nAngleProj; - END IF; - IF nAngleProj < -180 THEN - SET nAngleProj = nAngleProj + 360; - END IF; - - IF (nAngleLinePt1 >= 0) AND (nAngleProj < 0) THEN - RETURN 1; - ELSEIF (nAngleLinePt1 < 0) AND (nAngleProj >= 0) THEN - RETURN 1; - ELSE - RETURN 0; - END IF; - END;"); - /* get prefered language from string */ sql_dropFunction('PREFERED_LANG'); diff --git a/htdocs/doc/sql/stored-proc/old/distance.php b/htdocs/doc/sql/stored-proc/old/distance.php new file mode 100644 index 00000000..3f121562 --- /dev/null +++ b/htdocs/doc/sql/stored-proc/old/distance.php @@ -0,0 +1,221 @@ += 1.0)) THEN + RETURN 0; + END IF; + + SET nArccosEntfernungsWinkel = acos(nEntfernungsWinkel); + SET n = sin(nLat2) / sin(nArccosEntfernungsWinkel) / cos(nLat1) - tan(nLat1) / tan(nArccosEntfernungsWinkel); + + IF (n < -1.0) OR (n > 1.0) THEN + IF nLon1 = nLon2 THEN + IF nLat1 > nLat2 THEN + RETURN 90.0; + ELSE + RETURN 270.0; + END IF; + END IF; + + RETURN 0.0; + ELSE + SET nAngle = acos(n) * 180.0 / 3.141592654 - nDegCorrection; + IF nAngle < 0.0 THEN + RETURN 360 + nAngle; + ELSE + RETURN 360 - nAngle; + END IF; + END IF; + + RETURN 0; + END;"); + + sql_dropFunction('ptonline'); + sql("CREATE FUNCTION `ptonline` (nLat DOUBLE, nLon DOUBLE, nLatPt1 DOUBLE, nLonPt1 DOUBLE, nLatPt2 DOUBLE, nLonPt2 DOUBLE, nMaxDistance DOUBLE) RETURNS DOUBLE DETERMINISTIC + BEGIN + DECLARE nTmpLon DOUBLE DEFAULT 0; + DECLARE nTmpLat DOUBLE DEFAULT 0; + + DECLARE nAnglePt1Pt2 DOUBLE DEFAULT 0; + DECLARE nAnglePt1 DOUBLE DEFAULT 0; + DECLARE nAngleLinePt1 DOUBLE DEFAULT 0; + DECLARE nAnglePt2 DOUBLE DEFAULT 0; + DECLARE nAngleLinePt2 DOUBLE DEFAULT 0; + DECLARE nDistancePt1 DOUBLE DEFAULT 0; + DECLARE nDistancePt2 DOUBLE DEFAULT 0; + + DECLARE nProjLat DOUBLE DEFAULT 0; + DECLARE nProjLon DOUBLE DEFAULT 0; + DECLARE nProjAngle DOUBLE DEFAULT 0; + DECLARE nAngleProj DOUBLE DEFAULT 0; + DECLARE nAnglePt1Proj DOUBLE DEFAULT 0; + + IF nLonPt2 < nLonPt1 THEN + SET nTmpLon = nLonPt1; + SET nTmpLat = nLatPt1; + SET nLonPt1 = nLonPt2; + SET nLatPt1 = nLatPt2; + SET nLonPt2 = nTmpLon; + SET nLatPt2 = nTmpLat; + END IF; + + IF nLonPt1 = nLonPt2 THEN + SET nLonPt2 = nLonPt2 + 0.000001; + END IF; + + SET nAnglePt1Pt2 = angle(nLatPt1, nLonPt1, nLatPt2, nLonPt2); + SET nAnglePt1 = angle(nLatPt1, nLonPt1, nLat, nLon); + SET nAngleLinePt1 = nAnglePt1Pt2 - nAnglePt1; + + IF nAngleLinePt1 > 180 THEN + SET nAngleLinePt1 = 360 - nAngleLinePt1; + END IF; + IF nAngleLinePt1 < -180 THEN + SET nAngleLinePt1 = nAngleLinePt1 + 360; + END IF; + + SET nAnglePt2 = angle(nLat, nLon, nLatPt2, nLonPt2); + SET nAngleLinePt2 = nAnglePt1Pt2 - nAnglePt2; + + IF nAngleLinePt2 > 180 THEN + SET nAngleLinePt2 = 360 - nAngleLinePt2; + END IF; + IF nAngleLinePt2 < -180 THEN + SET nAngleLinePt2 = nAngleLinePt2 + 360; + END IF; + + IF (nAngleLinePt1 > 90) OR (nAngleLinePt1 < -90) THEN + SET nDistancePt1 = distance(nLat, nLon, nLatPt1, nLonPt1); + IF nDistancePt1 < nMaxDistance THEN + RETURN 1; + ELSE + RETURN 0; + END IF; + END IF; + + IF (nAngleLinePt2 > 90) OR (nAngleLinePt2 < -90) THEN + SET nDistancePt2 = distance(nLat, nLon, nLatPt2, nLonPt2); + IF nDistancePt2 < nMaxDistance THEN + RETURN 1; + ELSE + RETURN 0; + END IF; + END IF; + + IF nAngleLinePt1 > 0 THEN + IF nAnglePt1Pt2 > 270 THEN + SET nProjAngle = nAnglePt1Pt2 - 270; + ELSE + SET nProjAngle = nAnglePt1Pt2 + 90; + END IF; + ELSE + IF nAnglePt1Pt2 > 90 THEN + SET nProjAngle = nAnglePt1Pt2 - 90; + ELSE + SET nProjAngle = nAnglePt1Pt2 + 270; + END IF; + END IF; + + SET nProjLat = projLat(nLat, nLon, nMaxDistance, nProjAngle); + SET nProjLon = projLon(nLat, nLon, nMaxDistance, nProjAngle); + + SET nAnglePt1Proj = angle(nLatPt1, nLonPt1, nProjLat, nProjLon); + SET nAngleProj = nAnglePt1Pt2 - nAnglePt1Proj; + IF nAngleProj > 180 THEN + SET nAngleProj = 360 - nAngleProj; + END IF; + IF nAngleProj < -180 THEN + SET nAngleProj = nAngleProj + 360; + END IF; + + IF (nAngleLinePt1 >= 0) AND (nAngleProj < 0) THEN + RETURN 1; + ELSEIF (nAngleLinePt1 < 0) AND (nAngleProj >= 0) THEN + RETURN 1; + ELSE + RETURN 0; + END IF; + END;"); +?>