-UPDATE- Since Postgis3 this function is available by default when SFCGAL is enabled as: ST_ConstrainedDelauneyTriangles
The ST_DelaunayTriangles function is based on points in the input and doesn't look at the already available linework in your geometry. Hence, it will not only ignore the holes, the resulting triangles may also cross your original polygon. ...
If I understood right what you want to do and if you can use OpenJUMP then perhaps the triangulation with constraints layer is usable.
Create a point layer and a polygon layer with the areas of interest
Use these settings
The result will look like this
GRASS command v.delaunaycan be configured with v.in.ogr min area to define a minimum area for each triangle. But, could be tricky, because the algorithm could generates small polygons out river area.
The easiest way is take buffer polygon (in your case) into account and execute an execute Select by location. You'll select only polygons inside your desire ...
I believe this would work for ArcGIS Desktop:
Use the “Create Fishnet” tool, setting the output to “polygons”.
Convert fishnet polygons to lines.
Split lines at vertices.
Identify split-line midpoints.
Create Thiessen polygons from midpoints.
Convert Theissen polygons to lines.
Merge lines from step 2 and step 6 if you want as shown below. Or just use ...
The easiest way I found is using PostGIS to create buffers and then use use ST_ApproximateMedialAxis. It is (slightly) approximate but it does work really well in the vast majority of cases. It allows much better results than using buffer and then use the centroid of the polygons to generate a Voronoi Diagram to clip it with.
In practice, the buffer size ...
I like the answer which mentioned "Segment Voronoi diagrams," but I ultimately found it difficult to implement in my particular workflow. I found that because my geometries were fairly detailed (i.e., they had a large number of vertices compared to their area) I was able to calculate the voronoi diagram for the vertices of all input polygons using ...
Here's how - use triang.list to get the points that make the triangles, then wrap it all up in some code that constructs SpatialPolygons from the sp package. Then do an overlay test.
pts1 = data.frame(ID=LETTERS, x=runif(26),y=runif(26))
pts2 = data.frame(ID=LETTERS, x=runif(26),y=runif(26))
The solution proposed by Spacedman is easy to do with GRASS GIS and Python scripting or or OpenJump's "planar graph" command.
1) Generate random points (or specific points) from the DEM and sample elevation at each of these points. (v.random, v.drape)
2) Compute a TIN with the Delaunay algorithm (v.delaunay, 3D)
3) Compute the Planar Graph (with Python ...
One of most efficient methods to find the minimal wall-thickness (value and location) of a complex, non convex polygon area including holes, it could be by using a regularly spaced layer (or random) of points for determining, first, closest segment with context for each point and, next, the point for intersection between incremental segment and opposite side ...
Two more ideas to throw in the pot:
Rasterize your polygon and use a distance transform (returns image of the shortest distance from each nonzero pixel to a zero-pixel). Skeletonize your rasterized image, then take the values of the distance transformed image along the skeleton. From that set you will have some minimums that should correspond to your ...
I am afraid doing all the task within a GIS software could involve rigorous workflow. (Honestly I do not know how to accomplish it).
May I suggest doing this in two steps, (1) In QGIS create a table of all combination of your stations and their distances, and then save it as a CSV file. (2) Open the output CSV file in a spreadsheet software (Excel, Calc) ...