= 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;"); ?>