Order a SpatialLine passes through a SpatialPolygons

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Order a SpatialLine passes through a SpatialPolygons

Jonathan Thayn
I’m trying to write a function that returns the polygons through which a line passes, but I want the polygons to be listed in order. For example, in the code below, I get a list of polygons over which the lines passes, but the polygons are listed in numeric order, not spatial order. I would like the polygons to be listed as 21, 24, 25, 26, and 22 (the reverse would be fine to). Any ideas.


library(spdep)
example(columbus)
plot(columbus)
coords <- coordinates(columbus)
text(coords,labels=1:49)

the.line <- SpatialLines(list(Lines(Line(coords[c(21,22),]),ID="A")))
plot(the.line,col="red",add=T)

which(!is.na(over(columbus,the.line)))



Jonathan B. Thayn, Ph.D.

Associate Professor
Department of Geography – Geology
Illinois State University
Felmley Hall of Science, Rm 200A
Normal, IL 61790

[hidden email]<mailto:[hidden email]>
my.ilstu.edu/~jthayn<http://my.ilstu.edu/~jthayn>





        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Order a SpatialLine passes through a SpatialPolygons

Barry Rowlingson
Slightly hacky method: sample lots of points along the line, over() the
points with the polygons, returns polygon IDs in order:

>
unique(over(spsample(the.line,10000,"regular"),as(columbus,"SpatialPolygons")))
[1] 21 24 25 26 22

if the line goes back into a polygon with the same ID you'll see that too -
"21 24 25 26 24 22" for example.

Problem with this is that you have to make enough points on the line to
make sure one point hits each intersecting polygon. Maybe compare the list
from the points with the polygon intersection and then...

Wait, another idea. Get all the line-polygon intersections points to cut
your line into segments, and then compute the midpoints of each segment,
and see which polygon they lie in.  Coffee time now, so can't implement
this...

Note that SpatialLines objects can be more than one line segment in which
case the ordering is undefined, so make sure your SpatialLines have one
Line component.

B






On Thu, Aug 31, 2017 at 9:06 PM, Thayn, Jonathan <[hidden email]> wrote:

> I’m trying to write a function that returns the polygons through which a
> line passes, but I want the polygons to be listed in order. For example, in
> the code below, I get a list of polygons over which the lines passes, but
> the polygons are listed in numeric order, not spatial order. I would like
> the polygons to be listed as 21, 24, 25, 26, and 22 (the reverse would be
> fine to). Any ideas.
>
>
> library(spdep)
> example(columbus)
> plot(columbus)
> coords <- coordinates(columbus)
> text(coords,labels=1:49)
>
> the.line <- SpatialLines(list(Lines(Line(coords[c(21,22),]),ID="A")))
> plot(the.line,col="red",add=T)
>
> which(!is.na(over(columbus,the.line)))
>
>
>
> Jonathan B. Thayn, Ph.D.
>
> Associate Professor
> Department of Geography – Geology
> Illinois State University
> Felmley Hall of Science, Rm 200A
> Normal, IL 61790
>
> [hidden email]<mailto:[hidden email]>
> my.ilstu.edu/~jthayn<http://my.ilstu.edu/~jthayn>
>
>
>
>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email]
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo