[R-sig-Geo] Timezone boundaries (for adding to world map)?
Roger Bivand
Roger.Bivand at nhh.no
Wed Feb 25 17:42:11 CET 2009
On Tue, 24 Feb 2009, Martin Maechler wrote:
>>>>>> "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 ?
I've put simpl_tz.rda on the same site with the smaller non-principal
islands removed, so it plots faster. However, attempts to do line
simplification to reduce the detail on coastlines have not yet succeeded.
Anyone like to try to do the line simplification? In GRASS, I'm seeing
"Attempt to read dead line" after both v.generalize and v.simplify.
Compared to the original object, this one has very many fewer constituent
Polygons objects, because all the geometries with the same time zone have
been collected into single Polygons objects, rather than being almost all
singletons. This has also speeded up plotting.
Hope this helps,
Roger
>
> 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
>
--
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