PostGIS  2.2.8dev-r@@SVN_REVISION@@

## ◆ rt_raster_calc_phys_params()

 void rt_raster_calc_phys_params ( double xscale, double xskew, double yskew, double yscale, double * i_mag, double * j_mag, double * theta_i, double * theta_ij )

Calculates the physically significant descriptors embodied in an arbitrary geotransform.

Always succeeds unless one or more of the output pointers is set to NULL.

Parameters
 xscale geotransform coefficient o_11 xskew geotransform coefficient o_12 yskew geotransform coefficient o_21 yscale geotransform coefficient o_22 i_mag size of a pixel along the transformed i axis j_mag size of a pixel along the transformed j axis theta_i angle by which the raster is rotated (radians positive clockwise) theta_ij angle from transformed i axis to transformed j axis (radians positive counterclockwise)

Definition at line 250 of file rt_raster.c.

References return().

Referenced by RASTER_getGeotransform(), and rt_raster_get_phys_params().

253 {
254  double theta_test ;
255
256  if ( (i_mag==NULL) || (j_mag==NULL) || (theta_i==NULL) || (theta_ij==NULL))
257  return ;
258
259  /* pixel size in the i direction */
260  *i_mag = sqrt(xscale*xscale + yskew*yskew) ;
261
262  /* pixel size in the j direction */
263  *j_mag = sqrt(xskew*xskew + yscale*yscale) ;
264
265  /* Rotation
266  * ========
267  * Two steps:
268  * 1] calculate the magnitude of the angle between the x axis and
269  * the i basis vector.
270  * 2] Calculate the sign of theta_i based on the angle between the y axis
271  * and the i basis vector.
272  */
273  *theta_i = acos(xscale/(*i_mag)) ; /* magnitude */
274  theta_test = acos(yskew/(*i_mag)) ; /* sign */
275  if (theta_test < M_PI_2){
276  *theta_i = -(*theta_i) ;
277  }
278
279
280  /* Angular separation of basis vectors
281  * ===================================
282  * Two steps:
283  * 1] calculate the magnitude of the angle between the j basis vector and
284  * the i basis vector.
285  * 2] Calculate the sign of theta_ij based on the angle between the
286  * perpendicular of the i basis vector and the j basis vector.
287  */
288  *theta_ij = acos(((xscale*xskew) + (yskew*yscale))/((*i_mag)*(*j_mag))) ;
289  theta_test = acos( ((-yskew*xskew)+(xscale*yscale)) /
290  ((*i_mag)*(*j_mag)));
291  if (theta_test > M_PI_2) {
292  *theta_ij = -(*theta_ij) ;
293  }
294 }
return(const char *)
Definition: dbfopen.c:1609
Here is the call graph for this function:
Here is the caller graph for this function: