[R-sig-Geo] readOGR and proj4 string

Roger Bivand Roger.Bivand at nhh.no
Thu Apr 10 16:55:22 CEST 2008


On Thu, 10 Apr 2008, Agustin Lobo wrote:

> Thanks,
>
> This is what I'm doing:
>
>>  absUTMpolysHABS2 <- readOGR("C:/ALOBO/Lidia",layer="test_TNT")
>>  t1 <- CRS(paste("+proj=utm +zone=31 
> +ellps=intl","+towgs84=-87.0,-98.0,-121.0,0.0,0.0,0.0,0.0"))
>>  proj4string(absUTMpolysHABS2) <-t1
>>  proj4string(x) <-t1
>
> As my goal is
>>  a <- (joinPolys(SpatialPolygons2PolySet(x), 
> SpatialPolygons2PolySet(absUTMpolysHABS2)))
>
> the critical issue is that both objects have the
> same proj4string. But I'm saving absUTMpolysHABS2 again
> as shp and will look at it carefully to clarify
> the problem of the ED50 definition.
>
> But I'm getting this problem, which seems to be related to the
> proj4string:
>
>>  a1 <- SpatialPolygons2PolySet(absUTMpolysHABS2)
>>  a2 <- PolySet2SpatialPolygons(a1)
> Error in CRS(p4s) : invalid UTM zone number

Please ensure that t1 looks sane, spaces between tag=value pairs.

PBS have changed the way they store the UTM zone - it is now a top level 
attribute, but was an attribute of an attribute:

t1 <- CRS(paste("+proj=utm +zone=31 +ellps=intl",
    "+towgs84=-87.0,-98.0,-121.0,0.0,0.0,0.0,0.0"))
proj4string(x) <- t1
a1 <- SpatialPolygons2PolySet(x)
attr(a1, "projection")
attr(attr(a1, "projection"), "zone") <- attr(a1, "zone")
attr(a1, "projection")
a2 <- PolySet2SpatialPolygons(a1)

I'll update the function in due course.

Hope this helps,

Roger

>
>>  summary(a1)
> PolySet
>
> Records         : 95995
>   Contours      : 1595
>     Holes       : 0
>   Events        : NA
>     On boundary : NA
>
> Ranges
>   X             : [412000, 466000]
>   Y             : [4584000, 4624000]
>
> Attributes
>   Projection    : UTM
>   Zone          : 31
>
> Extra columns   :
>
> Agus
>
> Roger Bivand escribió:
>>  On Thu, 10 Apr 2008, Roger Bivand wrote:
>> 
>> >  On Thu, 10 Apr 2008, Agustin Lobo wrote:
>> > 
>> > >  The manual page of readOGR states:
>> > > 
>> > >  p4s     PROJ4 string defining CRS, if default NULL, the value is read 
>> > >  from
>> > >  the OGR data set
>> > > 
>> > >  then, if a  *.prj file is present for a *.shp,
>> > >  why is the proj4string of the resulting SpatialPolygonsDataframe
>> > >  set to NA? is this a general behaviour or am I doing someting
>> > >  wrong?
>> > 
>> >  Puzzling. Could you make your test file available for me to check?
>>
>>  OK, thanks. I can reproduce the problem. PROJ.4 does not support
>>  projection "names" as such, they are often not unique (same name but
>>  different parameters. In addition, ED50 is a collection of standards, not
>>  one standard. I suggest entering:
>>
>>  t1 <- CRS(paste("+proj=utm +zone=31 +ellps=intl",
>>   "+towgs84=-87.0,-98.0,-121.0,0.0,0.0,0.0,0.0")
>>
>>  manually. http://www.asprs.org/resources/grids/, July 200, gives different
>>  +towgs84= values. The ones in the file are prepended by a comma, which
>>  looks odd, but removing it doesn't help in parsing the file.
>>
>>  CRS("+init=epsg:23031")
>>
>>  is correct, but as usual with EPSG, no +towgs84= is given for ED50,
>>  because they vary so much.
>>
>>  So the underlying code in readOGR is erring on the side of caution - if
>>  the *.prj file cannot be interpreted unequivocally, return NA.
>>
>>  I set the value above:
>>
>>  x <- readOGR(".", "test_TNT")
>>  proj4string(x) <- t1
>>  x1 <- spTransform(x, CRS("+proj=longlat +datum=WGS84"))
>>  writeOGR(x1, "x1.kml", "x1", driver="KML")
>>
>>  and viewed in Google Earth, things looked more-or-less OK. You could try
>>  the +towgs84 parameters from Grids & Datums and see if they fit better on
>>  the ground.
>>
>>  Hope this helps,
>>
>>  Roger
>> 
>> > 
>> >  Roger
>> > 
>> > > 
>> > > >  absUTMpolysHABS2 <- readOGR("C:/ALOBO/Lidia",layer="test_TNT")
>> > > 
>> > >  where I have:
>> > > 
>> > >  test_TNT.avl
>> > >  test_TNT.dbf
>> > >  test_TNT.prj
>> > >  test_TNT.shp
>> > >  test_TNT.shx
>> > > 
>> > >  with test_TNT.prj:
>> > > 
>> > >  PROJCS["ED50_/_UTM_zone_31N_(CM_3E)",GEOGCS["ED50_/_Geographic",DATUM["D_European_1950",SPHEROID["International_1924",6378388.0,297.0]TOWGS84[,-87.0,-98.0,-121.0,0.0,0.0,0.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Decimal_Degree",0.01745329251994330]],PROJECTION["Transverse_Mercator"],PARAMETER["Latitude_Of_Center",0.0],PARAMETER["Longitude_Of_Origin",3.0],PARAMETER["Scale_Factor",0.9996000000],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],UNIT["Meter",1.0]] 
>> > > 
>> > > 
>> > >  I get:
>> > > >  class(delme)
>> > >  [1] "SpatialPolygonsDataFrame"
>> > >  attr(,"package")
>> > >  [1] "sp"
>> > > >  str(delme,max.level=2)
>> > >  Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
>> > >    ..@ data       :'data.frame': 1555 obs. of  16 variables:
>> > >    ..@ polygons   :List of 1555
>> > >    ..@ plotOrder  : int [1:1555] 148 143 792 740 209 335 895 619 1127
>> > >  1160 ...
>> > >    ..@ bbox       : num [1:2, 1:2]  412000 4584000  466000 4624000
>> > >    .. ..- attr(*, "dimnames")=List of 2
>> > >    ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
>> > > >  delme at proj4string
>> > >  CRS arguments: NA
>> > > 
>> > >  Agus
>> > > 
>> > 
>> >
>> 
>
>

-- 
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no


More information about the R-sig-Geo mailing list