<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">Hi,</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px"><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<span style="font-family:arial,sans-serif;font-size:12.727272033691406px">If baseline is straight and can be drawn, I was thinking about linear</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<span style="font-family:arial,sans-serif;font-size:12.727272033691406px">referencing to identify steps for perpendicular lines, then using</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">translate/rotate operations to move the centerline to each point and</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<span style="font-family:arial,sans-serif;font-size:12.727272033691406px">to rotate it to create perpendicular segments.</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">Then an intersection is done with original polygon to cut segments:</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<br style="font-family:arial,sans-serif;font-size:12.727272033691406px"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">The below query shows the steps in separate CTE's to illustrate. they</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<span style="font-family:arial,sans-serif;font-size:12.727272033691406px">could be grouped:</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px"><font face="arial, sans-serif">On the picture (<a href="http://imgur.com/pozhnZn">http://imgur.com/pozhnZn</a>), the red points are steps (70 units in my</font><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<span style="font-family:arial,sans-serif;font-size:12.727272033691406px">example) computed from the centerline.</span><br style="font-family:arial,sans-serif;font-size:12.727272033691406px"><br style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<font face="courier new, monospace" style="font-size:12.727272033691406px">with iter as (<br>    -- computes the number of steps required to cut the centerline by a fixed distance (70m here)<br><br>    select generate_series(1,ceil(st_length(geom)/70)::int) as idx, ceil(st_length(geom)/70)::int as steps<br>


    from centerline<br>), npoints as (<br>   -- computes the point geometries with LR functions<br><br>    select  idx, steps, st_lineInterpolatePoint(p.geom, (idx::double precision/steps::double precision)) as pt, p.geom<br>


    from iter n, centerline p<br>), rot_trans as (<br>   -- translate the centerline to move it to one step point (center of line is taken for the move, then rotate it by pi/2 around<br>   -- the step point to create perpendicular segment</font><div style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<font face="courier new, monospace"><br>    select st_rotate(st_translate(n.geom,<br>        st_x(<a href="http://n.pt/" target="_blank">n.pt</a>) - st_X(st_lineInterpolatePoint(n.geom, 0.5)),<br>--xcenter -xtarget,<br>        st_y(<a href="http://n.pt/" target="_blank">n.pt</a>)   - st_Y(st_lineInterpolatePoint(n.geom, 0.5))),<br>


--ycenter - ytarget<br>        pi()/2, <a href="http://n.pt/" target="_blank">n.pt</a>) as geom<br>    from npoints n<br>) <br>-- finaly, cut each segment by the original polygon</font></div><div style="font-family:arial,sans-serif;font-size:12.727272033691406px">


<font face="courier new, monospace"><br>select st_intersection(r.geom, t.geom) as geom<br>from rot_trans r, testpg t;</font><br><br>Nicolas</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 3 December 2013 19:04, Karl Zinglersen <span dir="ltr"><<a href="mailto:karl.zinglersen@gmail.com" target="_blank">karl.zinglersen@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi, I believe I was unclear - the centerlines have to straight. But I'll keep in mind your reference to delauney triangles and skeletonization for future purposes.<div>

To create the centerline a manual sketch is probably OK. Could I then just move on with linear referencing? Which function should I use - most seems to be percentages of a linestring.</div><div><br></div><div>Karl<br><br>

Den lørdag den 30. november <a href="tel:2013%2013.21.46" value="+12013132146" target="_blank">2013 13.21.46</a> UTC-3 skrev Nicolas Ribot:<blockquote class="gmail_quote" style="margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im">Hi,
<br>
<br>You should look at this french article for skeletonization of
<br>irregular polygons. The st_delaunayTriangles method can also help.
<br>Note that the middle line of a polygon is not always a straight line.
<br>Then, using linear referencing, it should be easy to walk the middle
<br>line to create perpendicular segments.
<br>
<br>Nicolas
<br>
<br></div><div><div class="h5">On 29 November 2013 18:25, Karl Zinglersen <<a>karl.zi...@gmail.com</a>> wrote:
<br>> I need to create transect lines across polygons for planning aerial surveys
<br>> for musk oxen and caribous in Greenland.
<br>> 1. In QGIS I have made polygons of the polygon zones for each survey. Each
<br>> polygon hold an attribute of spacing value, e.g. 5, 10 and 20 km.
<br>> 2. Lines must be equally spaced and parallel.
<br>> 3. Lines must be perpendicular to the polygon centerline.
<br>> 4. Centerline must run at the longest distance across the polygon - and
<br>> consequently the transects run as the shorter distances.
<br>> I've attached a hand made sketch, which display the concept.
<br>>
<br>> I've tried this query
<br>>
<br>> SELECT GENERATE_SERIES(FLOOR(ST_YMin(<u></u>the_polygon))::int ,
<br>> CEILING(ST_YMax(the_polygon)):<u></u>:int,200) y_value, ST_XMin(the_polygon) x_min,
<br>> ST_XMax(the_polygon) x_max from
<br>>             (SELECT the_geom AS the_polygon FROM lakes) l
<br>>
<br>>
<br>> SELECT ST_Intersection(the_geom, the_polygon)  AS the_geom FROM
<br>>     (SELECT the_polygon, ST_Setsrid(ST_MakeLine(ST_<u></u>MakePoint(x_min,
<br>> y_value),ST_MakePoint(x_max, y_value) ), ST_Srid(the_polygon)) AS the_geom
<br>> FROM
<br>>         (SELECT the_polygon,
<br>> GENERATE_SERIES(FLOOR(ST_YMin(<u></u>the_polygon))::int ,
<br>> CEILING(ST_YMax(the_polygon)):<u></u>:int,200) y_value, ST_XMin(the_polygon) x_min,
<br>> ST_XMax(the_polygon) x_max from
<br>>             (SELECT the_geom AS the_polygon FROM lakes) l
<br>>         )c
<br>>
<br>> ) lines
<br>>
<br>> from gis stackechange
<br>> <a href="http://gis.stackexchange.com/questions/24064/filling-a-polygon-with-lines-using-postgis" target="_blank">http://gis.stackexchange.com/<u></u>questions/24064/filling-a-<u></u>polygon-with-lines-using-<u></u>postgis</a>
<br>>
<br>> however these transects runs horisontally and don't seem to take into
<br>> account the shape and rotation of the polygon centerline.
<br>>
<br>> Should I be able to change the query or should take a different approach?
<br>>
<br>> Karl Zinglersen
<br>>
<br>> ______________________________<u></u>_________________
<br>> postgis-users mailing list
<br></div></div>> <a>postgi...@lists.osgeo.org</a>
<br>> <a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" target="_blank">http://lists.osgeo.org/cgi-<u></u>bin/mailman/listinfo/postgis-<u></u>users</a>
<br>______________________________<u></u>_________________
<br>postgis-users mailing list
<br><a>postgi...@lists.osgeo.org</a>
<br><a href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users" target="_blank">http://lists.osgeo.org/cgi-<u></u>bin/mailman/listinfo/postgis-<u></u>users</a>
<br></blockquote></div></div></blockquote></div><br></div>