[R-sig-Geo] overlay 1D graph on a map or map image: van Langren data

Greg Snow Greg.Snow at imail.org
Wed Dec 3 17:41:53 CET 2008


Michael,

Using base graphics, the rimage package has a function for reading jpg files and plotting them and the subplot function from the TeachingDemos package could be used to place the plot on top of the image (the updateusr function in TeachingDemos may also help if you want to change the coordinate system for the map after plotting).

Hope this helps,

--
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at imail.org
801.408.8111


> -----Original Message-----
> From: r-sig-geo-bounces at stat.math.ethz.ch [mailto:r-sig-geo-
> bounces at stat.math.ethz.ch] On Behalf Of Michael Friendly
> Sent: Wednesday, December 03, 2008 7:34 AM
> To: r-sig-geo at stat.math.ethz.ch
> Subject: [R-sig-Geo] overlay 1D graph on a map or map image: van
> Langren data
>
> Hi
> I'm working with some historical data on determinations of longitude
> used by Michael F van Langren
> in 1644 to draw what is believed to be the first graph of statistical
> data. The values are estimates
> of the distance in longitude between Toledo and Rome.
>
> G. Iansonius      17.736  1501  Jan Jansson              Flanders
> [1588-1664] sb:~ 1615
> G. Mercator       19.872  1567  Gerardus Mercator        Flanders
> I. Schonerus      20.638  1536  Johann Schöner           Germany
> P. Lantsbergius   21.106  1530  Phillip van Lansberge    Belgium
> T. Brahe          21.447  1578  Tycho Brahe              Denmark
> I. Regiomontanus  25.617  1471  Johann Muller            Germany
> [1436-1476] sb: 1463
> Orontius          26.000  1542  Oronce Finé              France
> [1494-1555]
> C. Clavius        26.340  1567  Christoph Clavius        Germany
> C. Ptolomeus      27.787   150  Claudius Ptolemaeus      Alexandria
> A. Argelius       28.170  1610  Andrea Argoli            Italy
> sb: 1610
> A. Maginus        29.787  1582  Giovanni Antonio Magini  Italy
> D. Origanus       30.128  1601  David Origanus           Germany
>
> I want to show these overlaid on a map, something like the following:
>
> http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/langren
> -google-overlay.jpg
>
> using *either* a jpeg image,
> http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/google-
> toledo-rome3.jpg
> or a comparable portion of the world map, something like
>
> # approximate coordinates of the BBox of this map
> bbox <- c( 38.186, -9.184,
>            43.692, 28.674 )
> bbox <- matrix(bbox, 2, 2, byrow=TRUE)
> map("world", xlim=bbox[,2], ylim=bbox[,1], fill=TRUE, col=colors())
> map.axes()
>
> I created the overlay by manually rescaling and calibrating his graph
> with a portion of a Google map.
> But I'd like to be able to do this more exactly in R, possibly using
> other data.
>
> I can read in  the data as follows:
>
> langren <-
> read.csv("http://euclid.psych.yorku.ca/SCS/Gallery/Private/langrens.csv
> ",
> header=TRUE)
>
> # Lat/Long of Toledo & Rome, from Google map
>
> toledo <- c(39.86, -4.03)
> rome   <- c(41.89, 12.5)
>
> # locations of the estimates, converted to lat, long
> locations <- cbind( rep(rome[1], 12), toledo[2] + langren$long)
> rownames(locations) <- langren$name
> locations <- rbind( toledo, locations)
> colnames(locations) <- c("lat", "long")
>
> The above steps give:
>
> locations <-
> structure(c(39.86, 41.89, 41.89, 41.89, 41.89, 41.89, 41.89,
> 41.89, 41.89, 41.89, 41.89, 41.89, 41.89, -4.03, 13.706, 15.842,
> 16.608, 17.076, 17.417, 21.587, 21.97, 22.31, 23.757, 24.14,
> 25.757, 26.098), .Dim = c(13L, 2L), .Dimnames = list(c("toledo",
> "G. Iansonius", "G. Mercator", "I. Schonerus", "P. Lantsbergius",
> "T. Brahe", "I. Regiomontanus", "Orontius", "C. Clavius", "C.
> Ptolomeus",
> "A. Argelius", "A. Maginus", "D. Origanus"), c("lat", "long")))
>
> I can also read the .jpg Google map image, at least from a local file:
>
> # read the google image
> library(rimage)
> gimage <-
> read.jpeg("C:/Documents/milestone/images/vanLangren/google-toledo-
> rome3.jpg")
>
> #gimageloc <-
> "http://euclid.psych.yorku.ca/SCS/Gallery/images/Private/Langren/google
> -toledo-rome3.jpg"
> #dest <- paste(tempfile(),'.jpg', sep='')
> #download.file(gimageloc, dest)
> #  why doesn't this work?
> #gimage <- read.jpeg(dest)
>
> plot(gimage)
> # approx  pixel coordinates of Toledo and Rome in the image, measured
> from the *top left* corner as (0,0)
> toledo.map <- c(130, 119)
> rome.map <-(505, 59)
>
> Here's where I'm stumped.  How can I recreate a version of van
> Langren's
> graph shown on top of
> either the gimage or on top of the portion of the R world map?
>
> thanks
> -Michael
>
> --
> Michael Friendly     Email: friendly AT yorku DOT ca
> Professor, Psychology Dept.
> York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
> 4700 Keele Street    http://www.math.yorku.ca/SCS/friendly.html
> Toronto, ONT  M3J 1P3 CANADA
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo




More information about the R-sig-Geo mailing list