Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DROP FUNCTION IF EXISTS MidPoint;
- DELIMITER //
- CREATE FUNCTION MidPoint(ls LINESTRING)
- RETURNS POINT
- DETERMINISTIC
- BEGIN
- DECLARE len double;
- DECLARE workLength double DEFAULT 0;
- DECLARE workPoint int DEFAULT 1;
- DECLARE point0 POINT;
- DECLARE point1 POINT;
- DECLARE distanceOver double;
- DECLARE segmentLength double;
- SET len := GLength(ls) / 2;
- WHILE (workLength < len) DO
- SET segmentLength = GLength(LineString(PointN(ls, workPoint), PointN(ls, workPoint + 1)));
- SET workLength := workLength + segmentLength;
- SET point0 = PointN(ls, workPoint);
- SET workPoint := workPoint + 1;
- SET point1 = PointN(ls, workPoint);
- END WHILE;
- SET distanceOver = workLength - len;
- RETURN POINT(
- X(point1) - distanceOver / segmentLength * (X(point1) - X(point0)),
- Y(point1) - distanceOver / segmentLength * (Y(point1) - Y(point0))
- );
- END//
- DELIMITER ;
- SET @ls = 'LineString(1 1,2 2,3 4)';
- SELECT AsText(MidPoint(GeomFromText(@ls)));
Add Comment
Please, Sign In to add comment