Guest User

Untitled

a guest
Apr 25th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 0.96 KB | None | 0 0
  1. DROP FUNCTION IF EXISTS MidPoint;
  2. DELIMITER //
  3.  
  4. CREATE FUNCTION MidPoint(ls LINESTRING)
  5. RETURNS POINT
  6. DETERMINISTIC
  7. BEGIN
  8.     DECLARE len double;
  9.     DECLARE workLength double DEFAULT 0;
  10.     DECLARE workPoint int DEFAULT 1;
  11.     DECLARE point0 POINT;
  12.     DECLARE point1 POINT;
  13.     DECLARE distanceOver double;
  14.     DECLARE segmentLength double;
  15.  
  16.     SET len := GLength(ls) / 2;
  17.  
  18.     WHILE (workLength < len) DO
  19.         SET segmentLength = GLength(LineString(PointN(ls, workPoint), PointN(ls, workPoint + 1)));
  20.         SET workLength := workLength + segmentLength;
  21.         SET point0 = PointN(ls, workPoint);
  22.         SET workPoint := workPoint + 1;
  23.         SET point1 = PointN(ls, workPoint);
  24.     END WHILE;
  25.  
  26.     SET distanceOver = workLength - len;
  27.  
  28.     RETURN POINT(
  29.             X(point1) - distanceOver / segmentLength * (X(point1) - X(point0)),
  30.             Y(point1) - distanceOver / segmentLength * (Y(point1) - Y(point0))
  31.         );
  32.  
  33. END//
  34. DELIMITER ;
  35.  
  36. SET @ls = 'LineString(1 1,2 2,3 4)';
  37. SELECT AsText(MidPoint(GeomFromText(@ls)));
Add Comment
Please, Sign In to add comment