<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7036.0">
<TITLE>[postgis-users] a line' s direction</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<BR>
<P><FONT SIZE=2 FACE="Arial">Hi Ahmet,</FONT>
<BR><FONT SIZE=2 FACE="Arial">In an earlier message that didn't arrive as part of this thread and with its body scrapped, I posted a function (see below) that will calculate azimuth between two points. You would pass the start and end points to get the direction of a line.</FONT></P>
<P><FONT SIZE=2 FACE="Arial">Cheers,<BR>
Hartmut</FONT>
<BR><FONT SIZE=2 FACE="Arial">Hartmut Tschauner</FONT>
<BR><FONT SIZE=2 FACE="Arial">Department of Archaeology</FONT>
<BR><FONT SIZE=2 FACE="Arial">Seoul National University</FONT>
<BR><FONT SIZE=2 FACE="Arial">Gwanak-Gu Sillim 9-dong San 56-1</FONT>
<BR><FONT SIZE=2 FACE="Arial">Seoul, 151-742</FONT>
<BR><FONT SIZE=2 FACE="Arial">Korea</FONT>
<BR><FONT SIZE=2 FACE="Arial">ph. +82 (2) 880-9260</FONT>
</P>
<BR>
<P><FONT SIZE=2 FACE="Arial">CREATE OR REPLACE FUNCTION public.azimuth(geometry, geometry)</FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURNS float8 AS</FONT>
<BR><FONT SIZE=2 FACE="Arial">'</FONT>
<BR><FONT SIZE=2 FACE="Arial">DECLARE</FONT>
<BR><FONT SIZE=2 FACE="Arial"> geom1 ALIAS FOR $1;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> geom2 ALIAS FOR $2;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> geom2trans geometry;</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">BEGIN</FONT>
<BR><FONT SIZE=2 FACE="Arial"> IF geom1 IS NULL OR geom2 IS NULL THEN</FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN NULL;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSE</FONT>
<BR><FONT SIZE=2 FACE="Arial"> IF isempty(geom1) OR isempty(geom2) OR geometrytype(geom1) != \'POINT\' OR geometrytype(geom2) != \'POINT\' THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN NULL;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> END IF;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> END IF;</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"> IF srid(geom1) != -1 AND srid(geom2) != srid(geom1) THEN</FONT>
<BR><FONT SIZE=2 FACE="Arial"> geom2trans := transform(geom2, srid(geom1));</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSE</FONT>
<BR><FONT SIZE=2 FACE="Arial"> geom2trans := geom2;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> END IF;</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial"> IF x(geom1) = x(geom2trans) AND y(geom1) < y(geom2trans) THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN 0;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSIF x(geom1) = x(geom2trans) AND y(geom1) > y(geom2trans) THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN 180;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSIF y(geom1) = y(geom2trans) AND x(geom1) < x(geom2trans) THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN 90;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSIF y(geom1) = y(geom2trans) AND x(geom1) > x(geom2trans) THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN 270;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSIF x(geom1) < x(geom2trans) AND y(geom1) < y(geom2trans) THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN degrees(atan(abs(x(geom1) - x(geom2trans)) / abs(y(geom1) - y(geom2trans))));</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSIF x(geom1) < x(geom2trans) AND y(geom1) > y(geom2trans) THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN degrees(atan(abs(y(geom1) - y(geom2trans)) / abs(x(geom1) - x(geom2trans)))) + 90;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSIF x(geom1) > x(geom2trans) AND y(geom1) > y(geom2trans) THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN degrees(atan(abs(x(geom1) - x(geom2trans)) / abs(y(geom1) - y(geom2trans)))) + 180;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSIF x(geom1) > x(geom2trans) AND y(geom1) < y(geom2trans) THEN </FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN degrees(atan(abs(y(geom1) - y(geom2trans)) / abs(x(geom1) - x(geom2trans)))) + 270;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> ELSE</FONT>
<BR><FONT SIZE=2 FACE="Arial"> RETURN 0;</FONT>
<BR><FONT SIZE=2 FACE="Arial"> END IF;</FONT>
</P>
<P><FONT SIZE=2 FACE="Arial">END;</FONT>
<BR><FONT SIZE=2 FACE="Arial">'</FONT>
<BR><FONT SIZE=2 FACE="Arial"> LANGUAGE 'plpgsql' VOLATILE;</FONT>
</P>
<BR>
</BODY>
</HTML>