<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace">You're welcome !<br></div><div class="gmail_default" style="font-family:monospace,monospace">Actually I guess that the function is intended to work on one tile and one point.<br></div><div class="gmail_default" style="font-family:monospace,monospace">So using a bbox would have no sense.<br></div><div class="gmail_default" style="font-family:monospace,monospace">Now if you use it on a  whole table instead of one tile, <br></div><div class="gmail_default" style="font-family:monospace,monospace">you have to add intersect conditions and so.<br></div><div class="gmail_default" style="font-family:monospace,monospace">By the way your update is not safe because a point may intersects several tiles.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">Cheers<br></div><div class="gmail_default" style="font-family:monospace,monospace">,Rémi-C<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-02-04 20:00 GMT+01:00 J Payne <span dir="ltr"><<a href="mailto:jcpayne@uw.edu" target="_blank">jcpayne@uw.edu</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" link="blue" vlink="purple" lang="EN-US"><div class="m_-7060649639430181037WordSection1"><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Hi Rémi,<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Thanks for the suggestion.  I tiled the raster and added a ST_Intersects, and the whole operation finished in just a couple of minutes (the previous version hadn’t completed when I left it running overnight).  The command I used was this:<u></u><u></u></span></p><span class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">UPDATE hourly_positions hp SET landform = <u></u><u></u></span></p></span><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">  (SELECT ST_Value(rast,hp.geom4326) FROM landforms4326_128 lf where (lf.rast && hp.geom4326) AND ST_Intersects(lf.rast,hp.<wbr>geom4326))<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">So, I don’t mean to sound critical of PostGIS, because I love the program and I have the utmost respect for everyone who works on it, but it appears to me that ST_Value is a “dumb” function; i.e., it doesn’t know how to find pixels in a raster with any reasonable speed.  Is there any technical reason that its speed couldn’t be improved?  As I mentioned in my original question, this operation (finding pixel values at many individual points) is commonly needed for certain classes of problems.<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">Thanks again for saving my bacon!<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri">John<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:Calibri"><u></u> <u></u></span></p><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-family:Calibri;color:black">From: </span></b><span style="font-family:Calibri;color:black">postgis-users <<a href="mailto:postgis-users-bounces@lists.osgeo.org" target="_blank">postgis-users-bounces@lists.<wbr>osgeo.org</a>> on behalf of Rémi Cura <<a href="mailto:remi.cura@gmail.com" target="_blank">remi.cura@gmail.com</a>><br><b>Reply-To: </b>PostGIS Users Discussion <<a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a><wbr>><br><b>Date: </b>Saturday, February 4, 2017 at 3:01 AM<br><b>To: </b>PostGIS Users Discussion <<a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a><wbr>><br><b>Subject: </b>Re: [postgis-users] ST_value slow<u></u><u></u></span></p></div><div><div class="h5"><div><p class="MsoNormal"><u></u> <u></u></p></div><div><div><p class="MsoNormal"><span style="font-family:Courier">Hey,<u></u><u></u></span></p></div><div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:Courier">I suppose your raster is correctly cut into small pieces.<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier">You should first try to clock one point value retrieval.<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier">It should be < 50ms (or you have an index issue)<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier"><u></u> <u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier">Then you could force the use of index by writting a function <br>update_one_point(point) $$ update XXX set XXX WHERE ST_Intersects(rast,point);$$<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier"><u></u> <u></u></span></p></div><div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:Courier">You would then call your function on all points:<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier">SELECT update_one_point(hp.geom4326)<u></u><u></u></span></p></div><div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:Courier">FROM hp<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier">Cheers<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier">Rémi-C<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:Courier"> <u></u><u></u></span></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">2017-02-04 6:44 GMT+01:00 J Payne <<a href="mailto:jcpayne@uw.edu" target="_blank">jcpayne@uw.edu</a>>:<u></u><u></u></p><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal"><span style="font-size:11.0pt">Hello.  I have an animal track that wanders around on a landscape, and I want to extract the pixel values for each location on the track.  This kind of operation is very common for animal studies.  The landscape is represented by a one-row raster map (“landforms4326”), and the GPS positions are in a table called “hourly_positions”.  I am using a recent version of PostGIS and a very simple query to find the pixel values:</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt">UPDATE hourly_positions hp SET landform = (SELECT ST_Value(rast,hp.geom4326) FROM landforms4326)</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt">I have about 450,000 points, and both the landscape raster and the point geometries are indexed.  For some reason, the operation is *<b>incredibly</b>* slow (it’s already been running for more than 8 hours on a nearly new Macbook Pro, and still isn’t finished).  Am I missing something?  I can’t for the life of me imagine why it would be so slow, since PostGIS is very fast with all sorts of other operations on the same data (intersections, etc.).</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt">Thanks,</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt">John</span><u></u><u></u></p></div></div><p class="MsoNormal"><br>______________________________<wbr>_________________<br>postgis-users mailing list<br><a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a><br><a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" target="_blank">https://lists.osgeo.org/<wbr>mailman/listinfo/postgis-users</a><u></u><u></u></p></blockquote></div><p class="MsoNormal"><u></u> <u></u></p></div><p class="MsoNormal">______________________________<wbr>_________________ postgis-users mailing list <a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a> <a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" target="_blank">https://lists.osgeo.org/<wbr>mailman/listinfo/postgis-users</a><u></u><u></u></p></div></div></div></div>
<br>______________________________<wbr>_________________<br>
postgis-users mailing list<br>
<a href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank">https://lists.osgeo.org/<wbr>mailman/listinfo/postgis-users</a><br></blockquote></div><br></div>