[postgis-tickets] [PostGIS] #3658: ST_Azimuth shows unexpected results

PostGIS trac at osgeo.org
Sat Oct 8 11:34:40 PDT 2016


#3658: ST_Azimuth shows unexpected results
-----------------------+---------------------------
 Reporter:  darkblueb  |      Owner:  pramsey
     Type:  defect     |     Status:  new
 Priority:  medium     |  Milestone:  PostGIS 2.2.4
Component:  postgis    |    Version:  2.2.x
 Keywords:  Azimuth    |
-----------------------+---------------------------
 Given a POLY, its ENVELOPE, and the CENTROID of the ENVELOPE, call
 ST_Azimuth( centroid, corner_point) for all corner points. Do this in
 EPSG:4326 and EPSG:900913. Note that the results do not match -- in one
 corner only --


 {{{
 EPSG:4326;
 ------------------------------------------------
 POINT (-69.96961422411715 12.524908758632279)

 POLYGON ((-70.06240800672413 12.417669988878856, -70.06240800672413
 12.632147528385701, -69.87682044151018 12.632147528385701,
 -69.87682044151018 12.417669988878856, -70.06240800672413
 12.417669988878856))

 ---
 SELECT

 degrees(ST_Azimuth(
   'POINT (-69.96961422411715 12.524908758632279)'::geometry,
   'POINT (-70.06240800672413 12.417669988878856)'::geometry
 )) as a1,

 degrees(ST_Azimuth(
   'POINT (-69.96961422411715 12.524908758632279)'::geometry,
   'POINT (-70.06240800672413 12.632147528385701)'::geometry
 )) as a2,

 degrees(ST_Azimuth(
   'POINT (-69.96961422411715 12.524908758632279)'::geometry,
   'POINT (-69.87682044151018 12.632147528385701)'::geometry
 )) as a3,

 degrees(ST_Azimuth(
   'POINT (-69.96961422411715 12.524908758632279)'::geometry,
   'POINT (-69.87682044151018 12.417669988878856)'::geometry
 )) as a4
 ;
 --

 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-69.96961422411715
 12.524908758632279)'::geometry,
 natural_earth2(#   'POINT (-70.06240800672413
 12.417669988878856)'::geometry
 natural_earth2(# )) as a1,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-69.96961422411715
 12.524908758632279)'::geometry,
 natural_earth2(#   'POINT (-70.06240800672413
 12.632147528385701)'::geometry
 natural_earth2(# )) as a2,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-69.96961422411715
 12.524908758632279)'::geometry,
 natural_earth2(#   'POINT (-69.87682044151018
 12.632147528385701)'::geometry
 natural_earth2(# )) as a3,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-69.96961422411715
 12.524908758632279)'::geometry,
 natural_earth2(#   'POINT (-69.87682044151018
 12.417669988878856)'::geometry
 natural_earth2(# )) as a4
 natural_earth2-# ;
         a1        |        a2        |        a3        |        a4
 ------------------+------------------+------------------+------------------
  220.869659035397 | 319.130340964603 | 40.8696590353968 | 139.130340964603
 (1 row)


 ================================================================================
 EPSG:900913; Given a POLY, its ENVELOPE, and the CENTROID of the ENVELOPE:
 ---

 select
 ST_AsEWKT(st_transform( 'SRID=4326;POINT (-69.96961422411715
 12.524908758632279)'::geometry,
 900913));

 select
 ST_AsEWKT(st_transform( 'SRID=4326;POLYGON ((-70.06240800672413
 12.417669988878856, -70.06240800672413 12.632147528385701,
 -69.87682044151018 12.632147528385701, -69.87682044151018
 12.417669988878856, -70.06240800672413 12.417669988878856))'::geometry,
 900913));


  SRID=900913;POINT(-7788981.82643051 1405505.48023334)

  SRID=900913;POLYGON((-7799311.5830591 1393279.22657004,-7799311.5830591
 1417736.81854813,-7778652.06980192 1417736.81854813,-7778652.06980192
 1393279.22657004,-7799311.5830591 1393279.22657004))

 ---
 SELECT

 degrees(ST_Azimuth(
   'SRID=900913;POINT (-7788981.82643051 1405505.48023334)'::geometry,
   'SRID=900913;POINT (-7799311.5830591 1393279.22657004)'::geometry
 )) as m1,

 degrees(ST_Azimuth(
   'SRID=900913;POINT (-7788981.82643051 1405505.48023334)'::geometry,
   'SRID=900913;POINT (-7799311.5830591 1417736.81854813)'::geometry
 )) as m2,

 degrees(ST_Azimuth(
   'SRID=900913;POINT (-7788981.82643051 1405505.48023334)'::geometry,
   'SRID=900913;POINT (7778652.06980192 1417736.81854813)'::geometry
 )) as m3,

 degrees(ST_Azimuth(
   'SRID=900913;POINT (-7788981.82643051 1405505.48023334)'::geometry,
   'SRID=900913;POINT (-7778652.06980192 1393279.22657004)'::geometry
 )) as m4
 ;

 natural_earth2=# SELECT
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-7788981.82643051 1405505.48023334)'::geometry,
 natural_earth2(#   'POINT (-7799311.5830591 1393279.22657004)'::geometry
 natural_earth2(# )) as m1,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-7788981.82643051 1405505.48023334)'::geometry,
 natural_earth2(#   'POINT (-7799311.5830591 1417736.81854813)'::geometry
 natural_earth2(# )) as m2,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-7788981.82643051 1405505.48023334)'::geometry,
 natural_earth2(#   'POINT (7778652.06980192 1417736.81854813)'::geometry
 natural_earth2(# )) as m3,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-7788981.82643051 1405505.48023334)'::geometry,
 natural_earth2(#   'POINT (-7778652.06980192 1393279.22657004)'::geometry
 natural_earth2(# )) as m4
 natural_earth2-# ;
        m1        |        m2        |        m3        |        m4
 -----------------+------------------+------------------+------------------
  220.19390618527 | 319.817837775187 | 89.9549832733927 | 139.806093814733
 (1 row)

 ===============================================


 \db22=# SELECT
 db22-#
 db22-# degrees(ST_Azimuth(
 db22(#   'SRID=900913;POINT (-7788981.82643051
 1405505.48023334)'::geometry,
 db22(#   'SRID=900913;POINT (-7799311.5830591 1393279.22657004)'::geometry
 db22(# )) as m1,
 db22-#
 db22-# degrees(ST_Azimuth(
 db22(#   'SRID=900913;POINT (-7788981.82643051
 1405505.48023334)'::geometry,
 db22(#   'SRID=900913;POINT (-7799311.5830591 1417736.81854813)'::geometry
 db22(# )) as m2,
 db22-#
 db22-# degrees(ST_Azimuth(
 db22(#   'SRID=900913;POINT (-7788981.82643051
 1405505.48023334)'::geometry,
 db22(#   'SRID=900913;POINT (7778652.06980192 1417736.81854813)'::geometry
 db22(# )) as m3,
 db22-#
 db22-# degrees(ST_Azimuth(
 db22(#   'SRID=900913;POINT (-7788981.82643051
 1405505.48023334)'::geometry,
 db22(#   'SRID=900913;POINT (-7778652.06980192
 1393279.22657004)'::geometry
 db22(# )) as m4
 db22-# ;
        m1        |        m2        |        m3        |        m4
 -----------------+------------------+------------------+------------------
  220.19390618527 | 319.817837775187 | 89.9549832733927 | 139.806093814733



 ===========
 select
 ST_AsEWKT(st_transform( 'SRID=4326;POINT (-69.96961422411715
 12.524908758632279)'::geometry,
 900913));

 select
 ST_AsEWKT(st_transform( 'SRID=4326;POLYGON ((-70.06240800672413
 12.417669988878856, -70.06240800672413 12.632147528385701,
 -69.87682044151018 12.632147528385701, -69.87682044151018
 12.417669988878856, -70.06240800672413 12.417669988878856))'::geometry,
 900913));


  SRID=900913;POINT(-7788981.82643051 1405505.48023334)

  SRID=900913;POLYGON((-7799311.5830591 1393279.22657004,-7799311.5830591
 1417736.81854813,-7778652.06980192 1417736.81854813,-7778652.06980192
 1393279.22657004,-7799311.5830591 1393279.22657004))

 ---
 SELECT

 degrees(ST_Azimuth(
   'SRID=900913;POINT (-7788981.82643051 1405505.48023334)'::geometry,
   'SRID=900913;POINT (-7799311.5830591 1393279.22657004)'::geometry
 )) as m1,

 degrees(ST_Azimuth(
   'SRID=900913;POINT (-7788981.82643051 1405505.48023334)'::geometry,
   'SRID=900913;POINT (-7799311.5830591 1417736.81854813)'::geometry
 )) as m2,

 degrees(ST_Azimuth(
   'SRID=900913;POINT (-7788981.82643051 1405505.48023334)'::geometry,
   'SRID=900913;POINT (7778652.06980192 1417736.81854813)'::geometry
 )) as m3,

 degrees(ST_Azimuth(
   'SRID=900913;POINT (-7788981.82643051 1405505.48023334)'::geometry,
   'SRID=900913;POINT (-7778652.06980192 1393279.22657004)'::geometry
 )) as m4
 ;

 natural_earth2=# SELECT
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-7788981.82643051 1405505.48023334)'::geometry,
 natural_earth2(#   'POINT (-7799311.5830591 1393279.22657004)'::geometry
 natural_earth2(# )) as m1,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-7788981.82643051 1405505.48023334)'::geometry,
 natural_earth2(#   'POINT (-7799311.5830591 1417736.81854813)'::geometry
 natural_earth2(# )) as m2,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-7788981.82643051 1405505.48023334)'::geometry,
 natural_earth2(#   'POINT (7778652.06980192 1417736.81854813)'::geometry
 natural_earth2(# )) as m3,
 natural_earth2-#
 natural_earth2-# degrees(ST_Azimuth(
 natural_earth2(#   'POINT (-7788981.82643051 1405505.48023334)'::geometry,
 natural_earth2(#   'POINT (-7778652.06980192 1393279.22657004)'::geometry
 natural_earth2(# )) as m4
 natural_earth2-# ;
        m1        |        m2        |        m3        |        m4
 -----------------+------------------+------------------+------------------
  220.19390618527 | 319.817837775187 | 89.9549832733927 | 139.806093814733
 (1 row)

 ===============================================
 }}}

--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/3658>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.


More information about the postgis-tickets mailing list