[GRASS-user] re-order boundaries by relative position along polyline

Dylan Beaudette dylan.beaudette at gmail.com
Wed May 27 12:53:40 PDT 2015


Thanks Thomas and Adrien! These are some great ideas. I'll be sure to
check out (haha) github repository when I have chance.

It turns out that a combination of GRASS + R did the trick. Essentially:

1. export snapshot of initial mapping linework via R
 * data are kept in their native, projected coordinate system
2. import into PostGIS
 * data are transformed to GCS WGS84
3. create UNION of "exterior ring" of initial mapping + "interior
ring" of adjacent polygons
 * a threshold of 0.0001 (~10 meters) is used to locate adjacent polygons
4. export to shapefile
 * data are converted back to native, projected coordinate system
5. import into GRASS
 * data are converted into a topological vector format with snapping
tolerance of 10 meters
6. generate join document in GRASS and export to shapefile
 * result is a set of line segments, one for each "join decision"
7. create a unique set of IDs for join decision line segments, based
on a hash of (rounded) segment start and end coordinates in R.

The "solution"-- which is still a work in progress-- is here:

https://github.com/dylanbeaudette/work-misc/tree/master/join-document

I'll be refining this considerably over the next two days for
field-testing the following week. Ideas welcome!

Dylan




On Tue, Apr 7, 2015 at 8:54 AM, Thomas Adams <tea3rd at gmail.com> wrote:
> Adrien,
>
> Thank you! I'll give it a try...
>
> Tom
>
> On Tue, Apr 7, 2015 at 10:44 AM, Adrien André <adrien.andre at onf.fr> wrote:
>>
>> Dylan, Tom,
>>
>> not about the main question, but to complete Tom's answer:
>>
>> I had once to vectorize a raster stream network according to flow
>> direction.
>> You can find here the Python script i wrote:
>> https://github.com/adrienandrem/r.to.vect.dir
>>
>> I hope this helps.
>>
>>
>> Regards,
>>
>> Adrien
>>
>>
>> Le 05/04/2015 14:48, Thomas Adams a écrit :
>> > Hi Dylan!
>> >
>> > (I'm about to start a new position — more on that later). This may help…
>> >
>> > I had a problem somewhat analogous to this a little while ago, where I
>> > needed to create a text file that, among a couple of other things,
>> > needed to identify the 'downstream' pixel for all grid cells within a
>> > basin area. I was able to do that with help here, but an issue I had was
>> > that the integer IDs needed to be numbered from 0-N in basically
>> > upstream to downstream order, but after my GRASS analysis I had IDs with
>> > some large number ranging to some other very large number for the IDs
>> > and the 'downstream IDs' (with values skipped and not in order). I got
>> > help writing a Perl script that uses hashes for a lookup table to relate
>> > the old ID to the new ID.
>> >
>> > Perhaps you could do something like this, starting with a new vector map
>> > (copy) where you could simply update the attributes using an SQL query?
>> > Some coding would be needed, obviously…
>> >
>> > Just my 2 cents…
>> >
>> > Cheers!
>> > Tom
>> >
>> > On Thu, Apr 2, 2015 at 6:31 PM, Dylan Beaudette
>> > <dylan.beaudette at gmail.com <mailto:dylan.beaudette at gmail.com>> wrote:
>> >
>> >     Hi,
>> >
>> >     Once again, I am reminded that complex spatial analysis in other
>> >     software
>> >     can usually be reduced to a couple of lines of code in GRASS--
>> > thanks!
>> >
>> >     Here is a fun question. Suppose you have a set of line segments, or
>> >     boundaries that are the result of a digitizing process that
>> > generated
>> >     segments out of "order":
>> >
>> >           2             4              1           3
>> >     O---------+-----------------+------------+------O
>> >
>> >     'O' = start / end point
>> >     '+' = vertex
>> >
>> >     ... in this case "order" is associated with order in which records
>> >     appear
>> >     in the attribute table and the order in which segments are drawn on
>> > the
>> >     screen.
>> >
>> >     Is there a module, or set of modules that could be used to re-order
>> > the
>> >     segments so that the order of records in the attribute table and
>> > drawing
>> >     order is:
>> >
>> >           1             2              3           4
>> >     O---------+-----------------+------------+------O
>> >
>> >     Note that I do not wan't to shuffle the linkages between geometry
>> > and
>> >     attributes, rather, I would like to re-order the segments and
>> > attribute
>> >     table according to the linear position within the set of contiguous
>> >     boundaries or polyline.
>> >
>> >     Here is an example set of lines in ASCII format, WGS84 GCS.
>> >
>> >     ORGANIZATION:
>> >     DIGIT DATE:
>> >     DIGIT NAME:   dylan
>> >     MAP NAME:
>> >     MAP DATE:     Thu Apr  2 11:46:34 2015
>> >     MAP SCALE:    1
>> >     OTHER INFO:
>> >     ZONE:         0
>> >     MAP THRESH:   0.000000
>> >     VERTI:
>> >     B  6 1
>> >      -118.71960108 36.71846736
>> >      -118.71946261 36.71783146
>> >      -118.71905508 36.71717314
>> >      -118.71863837 36.71610377
>> >      -118.71807413 36.71546352
>> >      -118.71786286 36.71527706
>> >      2     132
>> >     B  3 1
>> >      -118.7153795 36.73403608
>> >      -118.71537992 36.73272737
>> >      -118.71538933 36.73177277
>> >      2     133
>> >     B  3 1
>> >      -118.71536851 36.76205202
>> >      -118.7153724 36.7609144
>> >      -118.71537619 36.75980591
>> >      2     150
>> >     B  2 1
>> >      -118.73128842 36.69749903
>> >      -118.73130166 36.69760244
>> >      2     175
>> >     B  5 1
>> >      -118.71538933 36.73177277
>> >      -118.7153944 36.73125742
>> >      -118.71573607 36.73044156
>> >      -118.71618977 36.72875872
>> >      -118.71651025 36.72811846
>> >      2     581
>> >     B  15 1
>> >      -118.71651025 36.72811846
>> >      -118.71661716 36.72766138
>> >      -118.71660977 36.7273294
>> >      -118.71645785 36.72668322
>> >      -118.71689758 36.7261392
>> >      -118.71724087 36.72567564
>> >      -118.71747107 36.7248177
>> >      -118.71753527 36.72390024
>> >      -118.71787045 36.72307308
>> >      -118.71797278 36.72237579
>> >      -118.71781832 36.72073331
>> >      -118.71825483 36.72004703
>> >      -118.71908689 36.71948153
>> >      -118.71963768 36.71863545
>> >      -118.71960108 36.71846736
>> >      2     602
>> >     B  8 1
>> >      -118.7180943 36.70872005
>> >      -118.71827421 36.7083356
>> >      -118.71841915 36.7080259
>> >      -118.7190169 36.70752707
>> >      -118.72008403 36.70694237
>> >      -118.72042476 36.70636815
>> >      -118.72049695 36.70608245
>> >      -118.7212077 36.70547966
>> >      2     604
>> >     B  15 1
>> >      -118.7212077 36.70547966
>> >      -118.721692  36.70506892
>> >      -118.72256889 36.70442599
>> >      -118.72372477 36.702873
>> >      -118.72417965 36.70213899
>> >      -118.72496002 36.70190631
>> >      -118.72660809 36.70183505
>> >      -118.72765407 36.70118732
>> >      -118.72831767 36.70100376
>> >      -118.72866574 36.7007615
>> >      -118.72887421 36.70026501
>> >      -118.72998965 36.69849669
>> >      -118.73066541 36.69798083
>> >      -118.73118943 36.69770441
>> >      -118.73130166 36.69760244
>> >      2     609
>> >     B  8 1
>> >      -118.7153867 36.75138736
>> >      -118.7153804 36.7500365
>> >      -118.7153634 36.7464107
>> >      -118.7153465 36.742785
>> >      -118.7153296 36.7391593
>> >      -118.71533791 36.73753527
>> >      -118.7153438 36.7363838
>> >      -118.7153795 36.73403608
>> >      2     610
>> >     B  13 1
>> >      -118.71786286 36.71527706
>> >      -118.71763335 36.71507451
>> >      -118.71748992 36.71480774
>> >      -118.71754381 36.71369999
>> >      -118.71750723 36.7131568
>> >      -118.71786592 36.71228789
>> >      -118.71745106 36.71129755
>> >      -118.71716489 36.71079564
>> >      -118.71709787 36.71043286
>> >      -118.71712906 36.71006868
>> >      -118.71740871 36.70978478
>> >      -118.717644  36.709369
>> >      -118.7180943 36.70872005
>> >      2     612
>> >     B  7 1
>> >      -118.71411256 36.77582538
>> >      -118.71445897 36.77550631
>> >      -118.71478471 36.77508229
>> >      -118.7149828 36.77446623
>> >      -118.71532537 36.77406797
>> >      -118.7153339 36.7717931
>> >      -118.71534777 36.76808916
>> >      2     613
>> >     B  3 1
>> >      -118.71534777 36.76808916
>> >      -118.71536   36.7645405
>> >      -118.71536851 36.76205202
>> >      2     622
>> >     B  4 1
>> >      -118.71537619 36.75980591
>> >      -118.7153848 36.7572883
>> >      -118.7153973 36.7536622
>> >      -118.7153867 36.75138736
>> >      2     623
>> >
>> >
>> >     I have been able to convert these segments into polylines, however,
>> > I am
>> >     not sure how one would go about computing the position along the
>> >     polylines.
>> >     Perhaps a linear referencing system?
>> >
>> >
>> >
>> >     Thanks!
>> >     Dylan
>> >     _______________________________________________
>> >     grass-user mailing list
>> >     grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>
>> >     http://lists.osgeo.org/mailman/listinfo/grass-user
>> >
>> >
>> >
>> >
>> > --
>> > Thomas E Adams, III
>> > 718 McBurney Drive
>> > Lebanon, OH 45036
>> >
>> > 1 (513) 739-9512 (cell)
>> >
>> >
>> >
>> > _______________________________________________
>> > grass-user mailing list
>> > grass-user at lists.osgeo.org
>> > http://lists.osgeo.org/mailman/listinfo/grass-user
>> >
>>
>> _______________________________________________
>> grass-user mailing list
>> grass-user at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/grass-user
>
>
>
>
> --
> Thomas E Adams, III
> 718 McBurney Drive
> Lebanon, OH 45036
>
> 1 (513) 739-9512 (cell)
>
>
> _______________________________________________
> grass-user mailing list
> grass-user at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-user


More information about the grass-user mailing list