Raster devs, sorry for the delay,<br><br>I've been thinking of a solution that would be acceptable moving forward for all cases. I am playing a bit of the Devil's advocate on this issue, so please bear with me.<br>
<br>I'll back off on my earlier request to rename things -- I was proposing that because it made sense to me, but I see that GDAL (and the like) don't do things that way, and it would be confusing to new users.<br>
<br>It seems like it would be most clear to have a set of functions for accessing the georeference components, named 'scale', 'skew', and 'upperleft'. The 'scale' functions would be renamed from their current name, which is 'pixelsize'. That would provide 3 sets of functions:<br>
<br>Scale (renamed from Pixelsize):<br><ul><li>ST_SetScale(r,x,y)</li><li>ST_ScaleX(r)<br></li><li>ST_ScaleY(r)</li></ul>Skew:<br><ul><li>ST_SetSkew(r,x,y) <br></li><li>ST_SkewX(r)</li><li>ST_SkewY(r)</li></ul>Upper Left:<br>
<ul><li>ST_SetUpperLeft(r,x,y)</li><li>ST_UpperLeftX(r)</li><li>ST_UpperLeftY(r)</li></ul>Then, I propose adding some new functions that compute their values based on the values in the georeference. I propose that pixelsize is now computed from scale and skew, to accurately reflect the size of a pixel at any rotation angle. Also, rotation is also computed from scale and skew. When these values are 'set', both scale and skew will change. That would provide another couple sets of functions:<br>
<br>PixelSize (dynamically computed from scale and skew):<br><ul><li>ST_SetPixelSize(r,x,y)</li><li>ST_PixelSizeX(r)</li><li>ST_PixelSizeY(r)</li></ul>Rotation (dynamically computed from scale and skew):<br><ul><li>ST_SetRotation(r,angle)</li>
<li>ST_Rotation(r)</li></ul>If one uses these methods on a North-up raster, skew will be 0,0, rotation will be 0, and PixelSize = Scale (let's say these are 1). This is consistent with the way wktraster currently works. Now, when one uses these methods on a Pi/6 radian (30 degree) rotated raster, the skew will be 0.5, 0.5, rotation will be Pi/6, PixelSize will <i>still be</i> 1, and scale will be 0.866, 0.866. It is important that as one rotates the raster, the <b>Pixelsize remains constant</b>. Note that the skew values are pixelsize * sin(rotation), and scale values are pixelsize * cos(rotation).<br>
<br>I haven't yet figured out a good way to represent rotation for diamond-shaped rasters (with different skewX and skewY values). Maybe ST_Rotation is broken into ST_RotationX and ST_RotationY?<br><br>Thoughts?<br>Zwarg<br>
<br><div class="gmail_quote">On Tue, Sep 14, 2010 at 11:19 AM, Pierre Racine <span dir="ltr"><<a href="mailto:Pierre.Racine@sbf.ulaval.ca">Pierre.Racine@sbf.ulaval.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div link="blue" vlink="purple" lang="EN-US">
<div>
<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">So in the end, what are the proposed changes from the users point
of view (in rtpostgis.sql)? Sorry I have been away a bit.</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span></p>
<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">Pierre</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span></p>
<div style="border-width: medium medium medium 1.5pt; border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color blue; padding: 0cm 0cm 0cm 4pt;">
<div>
<div style="border-width: 1pt medium medium; border-style: solid none none; border-color: rgb(181, 196, 223) -moz-use-text-color -moz-use-text-color; padding: 3pt 0cm 0cm;">
<p class="MsoNormal"><b><span style="font-size: 10pt;">From:</span></b><span style="font-size: 10pt;">
<a href="mailto:postgis-devel-bounces@postgis.refractions.net" target="_blank">postgis-devel-bounces@postgis.refractions.net</a>
[mailto:<a href="mailto:postgis-devel-bounces@postgis.refractions.net" target="_blank">postgis-devel-bounces@postgis.refractions.net</a>] <b>On Behalf Of </b>David
Zwarg<br>
<b>Sent:</b> 10 septembre 2010 11:35<br>
<b>To:</b> PostGIS Development Discussion<br>
<b>Subject:</b> Re: [postgis-devel] WKTRaster Scale and Skew</span></p>
</div>
</div><div><div></div><div class="h5">
<p class="MsoNormal"> </p>
<div>
<p class="MsoNormal">On Fri, Sep 10, 2010 at 11:16 AM, Pierre Racine <<a href="mailto:Pierre.Racine@sbf.ulaval.ca" target="_blank">Pierre.Racine@sbf.ulaval.ca</a>>
wrote:</p>
<div>
<p class="MsoNormal" style="margin-bottom: 12pt;">> Width is computed
based on scale & skew?</p>
</div>
<p class="MsoNormal">In 99% of the cases there is no rotation and pixel width
& height ARE synonyms for scale X and scale Y. Is it worth changing their
names? Adding confusion? How does GDAL name it?</p>
<div>
<p class="MsoNormal"><br>
I agree that 99% of the time, there is no rotation. I don't propose
changing the names of the pixel width methods, just change the way it is
computed to account for the skewing. I wouldn't mind hiding the
set_skews() method, in favor of accepting all adjustments in the form of the
georeference string. This is the way GDAL gets around it -- they don't
name the 6 components of the georeference, and just note that "In case of
north up images, the GT(2) and GT(4) coefficients are zero" -- not much
help if you want to know what happens when north is not up.<br>
</p>
</div>
<blockquote style="border-width: medium medium medium 1pt; border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color rgb(204, 204, 204); padding: 0cm 0cm 0cm 6pt; margin-left: 4.8pt; margin-right: 0cm;">
<div>
<p class="MsoNormal" style="margin-bottom: 12pt;"><br>
>We don't call it scaleX and scaleY, but cell_width_x and cell_height_y<br>
>We don't call it skewX and skewY, but cell_width_y and cell_height_x</p>
</div>
<p class="MsoNormal">In rt_api.c? Why not...</p>
<div>
<p class="MsoNormal" style="margin-bottom: 12pt;"><br>
>We separate the accessors for the pixel width and the georeference
component that is now used as the width.</p>
</div>
<p class="MsoNormal">You mean creating a "truepixelwidth" function?
Same reluctance since it is not really a width when the pixel shape is a
diamond. But you could say "this happen only 0.001 of the time"...
Does that mean removing or renaming the ST_PixelSizeX and ST_PixelSizeY
function?</p>
</blockquote>
<div>
<p class="MsoNormal"><br>
I would propose some other name besides pixel 'width', since it's only a part
of the width. Maybe we don't have any accessors for this value at all,
and the only way to get it is through the georeference string?<br>
</p>
</div>
<blockquote style="border-width: medium medium medium 1pt; border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color rgb(204, 204, 204); padding: 0cm 0cm 0cm 6pt; margin-left: 4.8pt; margin-right: 0cm;">
<div>
<p class="MsoNormal" style="margin-bottom: 12pt;"><br>
>Tests assume the upper left coordinate is SMALLER in the X and GREATER in
the Y for all other coordinates in the raster -- this would require adjusting
our tests to handle the coordinate space uniformly.</p>
</div>
<p class="MsoNormal">Ok.<br>
<br>
My main concern is to not confuse users with scale, skew and width. Most people
know only pixelsize.</p>
</blockquote>
<div>
<p class="MsoNormal"><br>
I agree -- it took me a few minutes to understand that the parameters are not
exactly width or scale or skew. This may be sacrilege, but what if all
that was hidden under the hood, and we just provide the true width/height get
functions and the get/set functions for the georeference? Because most of
the time, nobody will care about the skew.<br>
<br>
Thoughts?<br>
Zwarg<br>
</p>
</div>
<blockquote style="border-width: medium medium medium 1pt; border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color rgb(204, 204, 204); padding: 0cm 0cm 0cm 6pt; margin-left: 4.8pt; margin-right: 0cm;">
<p class="MsoNormal"><br>
Pierre<br>
_______________________________________________<br>
postgis-devel mailing list<br>
<a href="mailto:postgis-devel@postgis.refractions.net" target="_blank">postgis-devel@postgis.refractions.net</a><br>
<a href="http://postgis.refractions.net/mailman/listinfo/postgis-devel" target="_blank">http://postgis.refractions.net/mailman/listinfo/postgis-devel</a></p>
</blockquote>
</div>
<p class="MsoNormal"> </p>
</div></div></div>
</div>
</div>
<br>_______________________________________________<br>
postgis-devel mailing list<br>
<a href="mailto:postgis-devel@postgis.refractions.net">postgis-devel@postgis.refractions.net</a><br>
<a href="http://postgis.refractions.net/mailman/listinfo/postgis-devel" target="_blank">http://postgis.refractions.net/mailman/listinfo/postgis-devel</a><br>
<br></blockquote></div><br>