From 9c227730970657a08ddee95c7287469e651d85d7 Mon Sep 17 00:00:00 2001
From: Emre Hasegeli <emre@hasegeli.com>
Date: Sun, 19 Jun 2016 14:32:34 +0200
Subject: [PATCH] fix-line-interpt

---
 src/backend/utils/adt/geo_ops.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index 657bcee..6ff7174 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -1236,22 +1236,24 @@ line_interpt_internal(LINE *l1, LINE *l2)
 		x = l1->C;
 		y = (l2->A * x + l2->C);
 	}
 	else if (FPzero(l2->B))		/* l2 vertical? */
 	{
 		x = l2->C;
 		y = (l1->A * x + l1->C);
 	}
 	else
 	{
-		x = (l1->C - l2->C) / (l2->A - l1->A);
-		y = (l1->A * x + l1->C);
+		x = (l1->B * l2->C - l2->B * l1->C) / (l1->A * l2->B - l2->A * l1->B);
+		y = (l1->A * x + l1->C) / l1->B;
+		if (y != 0.0)
+			y = -y;
 	}
 	result = point_construct(x, y);
 
 #ifdef GEODEBUG
 	printf("line_interpt- lines are A=%.*g, B=%.*g, C=%.*g, A=%.*g, B=%.*g, C=%.*g\n",
 		   DBL_DIG, l1->A, DBL_DIG, l1->B, DBL_DIG, l1->C, DBL_DIG, l2->A, DBL_DIG, l2->B, DBL_DIG, l2->C);
 	printf("line_interpt- lines intersect at (%.*g,%.*g)\n", DBL_DIG, x, DBL_DIG, y);
 #endif
 
 	return result;
-- 
2.7.4 (Apple Git-66)

