-- Return a line for the Great Circle between two points
--
-- start_point geometry : The origin of the line
-- end_point   geometry : The distination of the line
-- retruns     geometry
create or replace function CDB_GreatCircle(start_point geometry ,end_point geometry ) RETURNS geometry as
$$
DECLARE
	line geometry;
BEGIN

line = ST_Segmentize(
         ST_Makeline(
           start_point,
           end_point
         )::geography,
         100000
     )::geometry;

if ST_XMax(line) - ST_XMin(line) > 180 then

	line = ST_Difference(
    ST_Shift_Longitude(line), ST_Buffer(ST_GeomFromText('LINESTRING(180 90, 180 -90)',4326), 0.00001));
end if;


return line;

END $$
LANGUAGE 'plpgsql'
