Skip to content

How do I read/work with PolyLineZM with maptools/sp?

8 messages · Edzer Pebesma, Mikhail Titov, Roger Bivand

#
Hi all!

I feel like I?m missing something simple. I can access X & Y coordinates like:

s <- readShapeLines(elev)
head(coordinates(s at lines[[1]]@Lines[[1]]))

I can?t seems to find any information on how to access Z and M values. I can easily access those with `shapefiles` package, but it has a limited support for Point Z when writing a shapefile and it is generally not as structured as `maptools`/`sp`. While having Z value as an attribute for an output point is not an issue for me, I do have PolylineZM as an input and I do need an access to both Z & M.

Thank you for any suggestions,
Mikhail
#
On 05/16/2011 08:06 PM, Mikhail Titov wrote:
I would try s$M and s$Z to access M and Z when they are attributes.

  
    
#
But what do I do when they are not? It can work for points, but not a line as I can't have attributes for individual points of a line. I would prefer not to do any extra conversions in GIS before using R.

Do I get it right that for now it is better to stick with shapefiles to read PolylineZM?

Mikhail
#
On 05/16/2011 08:22 PM, Mikhail Titov wrote:
as(s, "SpatialPointsDataFrame")

  
    
#
Edzer:

Thank you for your suggestions, but it doesn't help much. It does not recover either Z or M as attributes or anyhow else.
[1] "Id"       "Lines.NR" "Lines.ID" "Line.NR"
[1] "data"        "coords.nrs"  "coords"      "bbox"        "proj4string"
coords.x1 coords.x2
[1,]  408794.5   4893921
[2,]  409088.3   4893599
[3,]  409165.2   4893484
[4,]  409434.7   4893214
[5,]  409684.9   4893060
[6,]  409742.6   4893060
Id Lines.NR Lines.ID Line.NR
0    1        1        0       1
0.1  1        1        0       1
0.2  1        1        0       1
0.3  1        1        0       1
0.4  1        1        0       1
0.5  1        1        0       1
NULL
NULL

I double checked that I'm working with correct shapefile that has Z values.

Mikhail
#
On Mon, 16 May 2011, Mikhail Titov wrote:

            
The Z is dropped for SpatialPolygons and SpatialLines everywhere. The M is 
not a standard part of the specification - it isn't obvious what it should 
be. You'd need to rewrite the C code in shapelib for maptools or rgdal to 
access these, and create a 4D object. Alternatively, try anything perhaps 
in Python with OGR to dump 3D points with M as an attribute, and a 
grouping factor to point to the feature ID in the DBF file.

Roger

  
    
#
Roger:

I see. It is not a 5-minute job. I'll leave my script as is with `shapefiles` package for now as it is working okay. I just have a feeling that shapefiles is getting quite outdated (last published in 2006) and overall trend is towards structured sp and maptools.

Thanks for your help! Perhaps one day ZM support will be available in maptools/sp :-)

P.S. I always thought and used M for route *m*easure data as a distance along the line via `Create Routes` tool in ArcGIS. I don't know how it can be non-standard.

P.P.S. I used `Write Features to Text File` with `Samples` toolbox in ArcGIS. However I want to reduce number of steps overall and I thought I could use shapefiles directly. I would do everything in python with arcgisscripting module, but my script depends on `fda` and monotonic splines in R.

Mikhail
#
On Mon, 16 May 2011, Mikhail Titov wrote:

            
OGR says that it will not be returned:

http://www.gdal.org/ogr/drv_shapefile.html
It always was a kludge. I guess that it could once have been intended to 
hold a precision value, but is not used as such systematically. The 
maptools interface could return it, but there is no structure to put it 
in, as it is data at the point level, not the feature level. It is not in 
accord with OGC SFS, I think. It could be an extra function returning any 
such file as a SpatialPointsDataFrame with Z, M, and FID data fields. The 
FID could then be used to link to the data in the DBF.

Roger