moved stored proces from distance.php into maintain.php

This commit is contained in:
following
2013-06-24 16:27:39 +02:00
parent 78e217dc6d
commit 3d22e3c113
4 changed files with 385 additions and 222 deletions

View File

@@ -1,221 +0,0 @@
<?php
/***************************************************************************
Unicode Reminder メモ
Ggf. muss die Location des php-Binaries angepasst werden.
Erstellt stored procedures.
***************************************************************************/
$opt['rootpath'] = '../../../';
require_once($opt['rootpath'] . 'lib/clicompatbase.inc.php');
if (!file_exists($opt['rootpath'] . 'util/mysql_root/sql_root.inc.php'))
die("\n" . 'install util/mysql_root/sql_root.inc.php' . "\n\n");
require_once($opt['rootpath'] . 'util/mysql_root/sql_root.inc.php');
/* begin db connect */
db_root_connect();
if ($dblink === false)
{
echo 'Unable to connect to database';
exit;
}
/* end db connect */
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;");
?>

View File

@@ -7,6 +7,198 @@
***************************************************************************/
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
*/

View File

@@ -7,6 +7,198 @@
***************************************************************************/
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
*/

View File

@@ -21,7 +21,7 @@
flush();
}
else
echo "enter DB $db_root_username password:";
echo "enter DB $db_root_username password: ";
$fh = fopen('php://stdin', 'r');
$db_root_password = trim(fgets($fh, 1024));