<!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>