[R-sig-Geo] Timezone boundaries (for adding to world map)?
Martin Maechler
maechler at stat.math.ethz.ch
Tue Feb 24 11:24:46 CET 2009
>>>>> "RB" == Roger Bivand <Roger.Bivand at nhh.no>
>>>>> on Fri, 20 Feb 2009 09:55:52 +0100 (CET) writes:
RB> On Wed, 18 Feb 2009, Greg Snow wrote:
>> There is a shapefile (works well with maptools and sp packages) with a
>> world map and time zone information at:
>> http://openmap.bbn.com/data/shape/timezone/
>>
>> It has the info needed to color the countries or parts of countries
>> based on time zone, but does not have polygons for time zone stripes
>> over the oceans.
RB> In fact, this shapefile provoked an update in sp, because it is really
RB> buggy.
I'm happy to have provoked progress ;-) :-)
RB> There are straight-line polygons and many others have multiple
RB> repeated coordinates (the sp update fixes these to retain finite label
RB> points), but it doesn't fix the absence of most of the data (several DBF
RB> columns are empty - checked in oocalc):
>> library(rgdal)
>> tz <- readOGR(".", "WrldTZA")
RB> OGR data source with driver: ESRI Shapefile
RB> Source: ".", layer: "WrldTZA"
RB> with 1890 rows and 11 columns
RB> Feature type: wkbPolygon with 2 dimensions
RB> Warning messages:
RB> 1: In Polygon(cbind(jG[[1]], jG[[2]])) :
RB> Non-finite label point detected and replaced
RB> 2: In Polygon(cbind(jG[[1]], jG[[2]])) :
RB> Non-finite label point detected and replaced
RB> 3: In Polygon(cbind(jG[[1]], jG[[2]])) :
RB> Non-finite label point detected and replaced
>> names(tz)
RB> [1] "FIPS" "NAME" "COMMENTS" "REGION" "LAT" "LON"
RB> [7] "TZ" "GMTOFF" "LOCALSUM" "OFFSET" "CLASSES"
>> summary(tz$GMTOFF)
RB> NA's
RB> 1890
>> summary(tz$TZ)
RB> NA's
RB> 1890
>> summary(tz$OFFSET)
RB> 0 \xff0 -1 \xff-1 \xff+1 -10 +10
RB> 25 57 13 7 181 24 38
RB> \xff+10 +10.5 +11 +11.5 +12 \xff+12 +2
RB> 24 1 19 3 12 13 1
RB> \xff-2 \xff+2 +3 \xff-3 \xff+3 -3.5 \xff+3.5
RB> 4 90 59 146 25 7 3
RB> -4 +4 \xff-4 \xff+4 \xff+4.5 -5 +5
RB> 56 4 165 8 1 130 13
RB> \xff-5 \xff+5 \xff+5.5 \xff+5.75 -6 +6 \xff-6
RB> 12 3 16 1 77 10 16
RB> \xff+6 \xff+6.5 -7 +7 \xff+7 -8 +8
RB> 12 15 63 98 14 61 68
RB> \xff-8 \xff+8 -9 +9 \xff+9 +9.5 NA's
RB> 3 56 82 97 13 11 33
RB> where my locale is UTF-8.
RB> I wrote to Martin offline that a more recent link is:
RB> http://efele.net/maps/tz/world/
RB> and I've put tz_world.rda on http://spatial.nhh.no/R/etc, but it is not
RB> line generalised, so it is very large and takes a long time to display -
RB> they've kept a lot of boundary detail.
indeed. But thanks a lot to make it available!!
RB> Because TZ follow administrative boundaries, they are actually hard to do
RB> right. Maybe a raster version might help more if vector precision isn't
RB> needed?
as long as we can add a couple of cities (using geographical
coordinates) to it, afterwards, that's fine.
When I load your (above URL) tz file and plot it,
I get the impression that much time is spent on thousands of
very small polygons;
consequently, if I'd want a ``subset'' of tz that only contains
the polygons that correspond to areas larger than, say, 100 km^2,
how could I do that ?
Looking at the sp-object:
------------------------------------------------------------------------
load("tz_world.rda")
## Look a bit at the 'tz' object:
str(tz, max=2)
## Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
## ..@ data :'data.frame': 27704 obs. of 1 variable:
## .. ..- attr(*, "data_types")= chr "C"
## ..@ polygons :List of 27704
## ..@ plotOrder : int [1:27704] 24471 111 14349 24641 1598 10291 22351 ...
## ..@ bbox : num [1:2, 1:2] -180 -90 180 83.6
## .. ..- attr(*, "dimnames")=List of 2
## ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
ltz <- sapply(slotNames(tz), slot, object=tz)
sapply(ltz, object.size)
## data polygons plotOrder bbox proj4string
## 1690424 110706296 110856 704 704
str(tz at data[,1])
## Factor w/ 382 levels "Africa/Abidjan",..: 307 307 307 307 307 307 ...
str(head(tz at polygons[1:3]), max=1)
## List of 3
## $ :Formal class 'Polygons' [package "sp"] with 5 slots
## $ :Formal class 'Polygons' [package "sp"] with 5 slots
## $ :Formal class 'Polygons' [package "sp"] with 5 slots
------------------------------------------------------------------------
and then ask for
showMethods(class = "Polygons")
the result is not so revealing to me; but of course, I'm really
an sp greenhorn.
How could I compute areas?
Regards,
Martin
RB> Roger
>>
>> Hope this helps,
>>
>>
RB> --
RB> Roger Bivand
RB> Economic Geography Section, Department of Economics, Norwegian School of
RB> Economics and Business Administration, Helleveien 30, N-5045 Bergen,
RB> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
RB> e-mail: Roger.Bivand at nhh.no
More information about the R-sig-Geo
mailing list