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';