[spatstat] Convert shapefile to pixel image

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[spatstat] Convert shapefile to pixel image

Lluis.Hurtado
Dear all,

I am currently working with the spatstat package, using windows and pixel images.

First:

My aim is to transform a shapefile (see attached) into a pixel image.

My idea is to start transforming the shapefile into a Spatial Polygon file:

x <- readShapeSpatial("200001441.shp")
y <- as(x, "SpatialPolygons")
z <- as.owin(y)

Given z, I want to identify each polygon with a single constant value. This is like adding marks to the SpatialPolygons file. Then I want to convert these polygons into an image, such that the value of each pixel corresponds to the value associated to the polygon where the pixel lies.

I have been able to do this individually, polygon by polygon, but then I cannot merge the resulting images into a single one. Any idea?

Second:

I would also need a single window containing all the smallest polygons (the boundary). I have tried:

w <- union.owin(z)

But the resulting window w still shows internal polygons. As read in spatstas FAQ page:

"First, convert each of the regions into a separate owin object. Then apply union.owin to combine them."

So I try,

regions <- slot(y, "polygons")
regions <- lapply(regions, function(x) { SpatialPolygons(list(x)) })
windows <- lapply(regions, as.owin)

But windows is a list of 4307 polygons. How can introduce all of them as a single argument?

> M <- union.owin(windows)
Warning messages:
1: In union.owin(windows) : Some arguments were not windows
2: In union.owin(windows) : No windows were given


Thank you very much for you help.

Lluís Hurtado.
______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: [spatstat] Convert shapefile to pixel image

MacQueen, Don
This looks like to would be better to ask on R-sig-geo, instead of R-help.

-Don

--
Don MacQueen

Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062


On 6/1/17, 6:17 AM, "R-help on behalf of [hidden email]" <[hidden email] on behalf of [hidden email]> wrote:

    Dear all,
   
    I am currently working with the spatstat package, using windows and pixel images.
   
    First:
   
    My aim is to transform a shapefile (see attached) into a pixel image.
   
    My idea is to start transforming the shapefile into a Spatial Polygon file:
   
    x <- readShapeSpatial("200001441.shp")
    y <- as(x, "SpatialPolygons")
    z <- as.owin(y)
   
    Given z, I want to identify each polygon with a single constant value. This is like adding marks to the SpatialPolygons file. Then I want to convert these polygons into an image, such that the value of each pixel corresponds to the value associated to the polygon where the pixel lies.
   
    I have been able to do this individually, polygon by polygon, but then I cannot merge the resulting images into a single one. Any idea?
   
    Second:
   
    I would also need a single window containing all the smallest polygons (the boundary). I have tried:
   
    w <- union.owin(z)
   
    But the resulting window w still shows internal polygons. As read in spatstas FAQ page:
   
    "First, convert each of the regions into a separate owin object. Then apply union.owin to combine them."
   
    So I try,
   
    regions <- slot(y, "polygons")
    regions <- lapply(regions, function(x) { SpatialPolygons(list(x)) })
    windows <- lapply(regions, as.owin)
   
    But windows is a list of 4307 polygons. How can introduce all of them as a single argument?
   
    > M <- union.owin(windows)
    Warning messages:
    1: In union.owin(windows) : Some arguments were not windows
    2: In union.owin(windows) : No windows were given
   
   
    Thank you very much for you help.
   
    Lluís Hurtado.
    ______________________________________________
    [hidden email] mailing list -- To UNSUBSCRIBE and more, see
    https://stat.ethz.ch/mailman/listinfo/r-help
    PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
    and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: [spatstat] Convert shapefile to pixel image

Rolf Turner
In reply to this post by Lluis.Hurtado

On 02/06/17 01:17, [hidden email] wrote:

> Dear all,
>
> I am currently working with the spatstat package, using windows and pixel images.
>
> First:
>
> My aim is to transform a shapefile (see attached) into a pixel image.
>
> My idea is to start transforming the shapefile into a Spatial Polygon file:
>
> x <- readShapeSpatial("200001441.shp")
> y <- as(x, "SpatialPolygons")
> z <- as.owin(y)
>
> Given z, I want to identify each polygon with a single constant value. This is like adding marks to the SpatialPolygons file. Then I want to convert these polygons into an image, such that the value of each pixel corresponds to the value associated to the polygon where the pixel lies.
>
> I have been able to do this individually, polygon by polygon, but then I cannot merge the resulting images into a single one. Any idea?
>
> Second:
>
> I would also need a single window containing all the smallest polygons (the boundary). I have tried:
>
> w <- union.owin(z)
>
> But the resulting window w still shows internal polygons. As read in spatstas FAQ page:
>
> "First, convert each of the regions into a separate owin object. Then apply union.owin to combine them."
>
> So I try,
>
> regions <- slot(y, "polygons")
> regions <- lapply(regions, function(x) { SpatialPolygons(list(x)) })
> windows <- lapply(regions, as.owin)
>
> But windows is a list of 4307 polygons. How can introduce all of them as a single argument?
>
>> M <- union.owin(windows)
> Warning messages:
> 1: In union.owin(windows) : Some arguments were not windows
> 2: In union.owin(windows) : No windows were given
>
>
> Thank you very much for you help.

As Don has said, this question would be better asked on R-sig-geo.

A *reproducible* example would be nice, e.g. perhaps you could tell us
how to get the shapefile in question.

In respect of your last point:  Rather than "M <- union.owin(windows)"
you should use:

     M <- do.call(union.owin, windows)

But that's rather off the track.  What I think you should do (it's hard
to be certain without a reproducible example) is something like:

tw <- tess(tiles=windows)
iw <- as.im(funxy(as.function(tw,values=vvv),W=Window(tw)),dimyx=128)

where "vvv" is a vector of the values that you wish to associate with
the individual polygons.  There may be less cryptic ways of
accomplishing the same thing, but this is the sexiest way, I think.

The value chosen for "dimyx", i.e. 128, is just by way of example.  You
can use whatever value suits you.  The larger it is, the smoother the
individual polygons will look, in pixellated form, but the longer things
will take.  With 4307 polygons, that might be a rather long time!

HTH

cheers,

Rolf Turner

--
Technical Editor ANZJS
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: [spatstat] Convert shapefile to pixel image

Michael Sumner-2
Try fasterize, converting to spatstat from raster is straightforward, happy
to help.

https://github.com/ecohealthalliance/fasterize

Cheers, Mije

On Fri, 2 Jun 2017, 07:45 Rolf Turner, <[hidden email]> wrote:

>
> On 02/06/17 01:17, [hidden email] wrote:
>
> > Dear all,
> >
> > I am currently working with the spatstat package, using windows and
> pixel images.
> >
> > First:
> >
> > My aim is to transform a shapefile (see attached) into a pixel image.
> >
> > My idea is to start transforming the shapefile into a Spatial Polygon
> file:
> >
> > x <- readShapeSpatial("200001441.shp")
> > y <- as(x, "SpatialPolygons")
> > z <- as.owin(y)
> >
> > Given z, I want to identify each polygon with a single constant value.
> This is like adding marks to the SpatialPolygons file. Then I want to
> convert these polygons into an image, such that the value of each pixel
> corresponds to the value associated to the polygon where the pixel lies.
> >
> > I have been able to do this individually, polygon by polygon, but then I
> cannot merge the resulting images into a single one. Any idea?
> >
> > Second:
> >
> > I would also need a single window containing all the smallest polygons
> (the boundary). I have tried:
> >
> > w <- union.owin(z)
> >
> > But the resulting window w still shows internal polygons. As read in
> spatstas FAQ page:
> >
> > "First, convert each of the regions into a separate owin object. Then
> apply union.owin to combine them."
> >
> > So I try,
> >
> > regions <- slot(y, "polygons")
> > regions <- lapply(regions, function(x) { SpatialPolygons(list(x)) })
> > windows <- lapply(regions, as.owin)
> >
> > But windows is a list of 4307 polygons. How can introduce all of them as
> a single argument?
> >
> >> M <- union.owin(windows)
> > Warning messages:
> > 1: In union.owin(windows) : Some arguments were not windows
> > 2: In union.owin(windows) : No windows were given
> >
> >
> > Thank you very much for you help.
>
> As Don has said, this question would be better asked on R-sig-geo.
>
> A *reproducible* example would be nice, e.g. perhaps you could tell us
> how to get the shapefile in question.
>
> In respect of your last point:  Rather than "M <- union.owin(windows)"
> you should use:
>
>      M <- do.call(union.owin, windows)
>
> But that's rather off the track.  What I think you should do (it's hard
> to be certain without a reproducible example) is something like:
>
> tw <- tess(tiles=windows)
> iw <- as.im(funxy(as.function(tw,values=vvv),W=Window(tw)),dimyx=128)
>
> where "vvv" is a vector of the values that you wish to associate with
> the individual polygons.  There may be less cryptic ways of
> accomplishing the same thing, but this is the sexiest way, I think.
>
> The value chosen for "dimyx", i.e. 128, is just by way of example.  You
> can use whatever value suits you.  The larger it is, the smoother the
> individual polygons will look, in pixellated form, but the longer things
> will take.  With 4307 polygons, that might be a rather long time!
>
> HTH
>
> cheers,
>
> Rolf Turner
>
> --
> Technical Editor ANZJS
> Department of Statistics
> University of Auckland
> Phone: +64-9-373-7599 ext. 88276
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Dr. Michael Sumner
Software and Database Engineer
Australian Antarctic Division
203 Channel Highway
Kingston Tasmania 7050 Australia

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.