Extract highest point in raster and convert to point vector
You can use saga - raster values to points. Then use "join attributes by location" to join the points to the polygon layer. You can then select the max value from the attribute table of the joined points/polygon layer using "statistics by categories"
This is basically the same as the one provided by @firefly-orange already.
- Start SAGA
Raster values to points
tool. Select your raster layer asGrids
. - Select your polygon layer in the
Polygon[optional]
field and make sure to click onIterate over this layer
button. ThenRun
.
- You will obtain as many layers as your polygons. It will appear in reverse order on the layers panel, all named "Shapes". So you would probably want to rename these point layers to represent each of your polygon.
- Open any attribute table of newly created
Shapes
layer, and click twice on the header of your value column (the field name is automatically taken from your raster layer). The row with highest value comes on top. By hitting [CTRL+J] keys orZoom map to the selected rows
button, it will take you to the highest point.
Original question was certainly using QGIS 2.x so many algorithms have been added since. I don't know if this method could be used pre QGIS 3.x but it's certainly relevant now anyway.
I needed to do something similar where I wanted to locate more precise high points with the help of lidar data. My original high points were contained in a point layer that was based off much less precise raster data so what I turned out doing achieves what you were trying to do yourself.
There was no practical way to do it generating one point for each pixel as the spatial resolution of 1m would have been way too heavy to deal with. An alternate method to the other two answers is to isolate the pixel with highest value, turn everything else into NODATA
, and only then generate points from the raster. The null ones are ignored.
I built a model (in QGIS 3.4) where I could iterate over my point layer but it could be done with a polygon layer too. Here's the sequence (if you take a look at the model below, you'd start from the Bounding boxes
tool which you can replace with your polygon layer):
Clip raster by mask layer
Input
: your raster layerMask
: your polygon layer
Zonal statistics
Raster layer
: the result from step 1Vector layer zones
: your polygon layerStatistics to calculate
: Max
Reclassify by layer
Raster layer
: result from step 1Layer containing class breaks
: result from step 2all value fields
: _max (if you left the default field prefix in step 2)Use no data when no range matches value
: Yes
Raster pixels to points
Raster layer
: result from step 3
From this moment the output should be vector points at maximum pixel value from the original raster contained in your polygons. There are a few unneeded steps for you as I created a buffer around my original points to get polygons in which to find maximum values, and at the end I joined attributes from my bounding boxes so my output points would have the same attributes as my input points.
Of course, for this to work you have to click the button to iterate over your polygon layer, just like I had to iterate over my points. You'll have as many points layers as you had input polygons, but they can easily be merged into one layer afterwards.