2014-01-05 6 views
7

Im folgenden Skript lese ich eine Reihe von Punkten ein und zeichne Linien auf einer Karte. Ich verwende ggmap in einer Karte von Google zu ziehen diese Zeilen plotten über:Erstellen einer Orthographischen Karte mit ggmap

source('./library/latlong2state.R') 

library(maps) 
library(mapproj) 
library(mapdata) 
library(geosphere) 
library(ggmap) 

fileName = "_CanadaData/CanadaHospitalComplete.csv" 

getLineColor <- function(val) { 
    pal <- colorRampPalette(lineColours) 
    colors <- pal(80) 
    val.log <- log(val) 

    if (val > 50) { 
    col <- colors[80] 
    } else { 
    colindex <- max(1, round(80 * val/50)) 
    col <- colors[colindex] 
    } 
    return(col) 
} 

# Load the data 
location <- read.csv(fileName, stringsAsFactors=FALSE) 

# Omit locations that are not on the map of focus (not needed for city maps unless they are on a border) 
location$state <- latlong2state(data.frame(location$lng, location$lat)) 
location$nearstate <- latlong2state(data.frame(location$lngnear, location$latnear)) 
location <- na.omit(location) 

createMap <- function(bbox, thedata, mapzoom=3, linesize=0.6, pointsize=2) { 
    basemap <- get_map(location=bbox, zoom=mapzoom, source='google', maptype="roadmap", color="color") 
    ggmap(basemap) + geom_segment(aes(x=lng, xend=lngnear, y=lat, yend=latnear, color=dist_miles), size=0.6, data=thedata) + geom_point(aes(x=lngnear, y=latnear), size=2, color="#000000", border="black", data=thedata) + scale_color_gradient(low="blue", high="red", limits=c(0, max(thedata$dist_miles))) + coord_map("orthographic") 
} 

# Country bounding box c(left, bottom, right, top) 
canada <- c(-140.920514, 42.016722, -52.524864, 83.2911) 
createMap(canada, location) 

Leider führt dies zu massiven Verwerfungen des Abstandes an der Spitze der Karte wegen Kanadas nördlicher Breite:

Distances to hospitals in Canada

Dies kann leicht durch Umschalten auf ein orthographisches Diagramm behoben werden, und ich kann die Projektion der Linien durch Hinzufügen von projection=mapprojection(orthographic) in der CreateMap-Funktion ändern, aber ich kann die Projektion des Kartenbildes von Google nicht ändern - Es ist in der Web Mercator-Projektion stecken geblieben. Gibt es eine Möglichkeit, dies mit ggmap zu tun, oder muss ich ein anderes Paket ausprobieren? Wenn ja, was empfehlen Sie?

+0

Sie sollten upvotes für Schönheit erhalten. –

Antwort

3

Die kurze Antwort ist "Nein". Sie stecken fest mit Googles sogenannter "Web Mercator" -Projektion. (Es ist nicht WGS84. Das ist ein Datum, keine Projektion.)

Ich weiß nicht, ob es R-Bibliotheken dafür gibt, aber Sie müssen wahrscheinlich einen WMS-Server verwenden. Eine gute Wahl wäre wahrscheinlich die für Kanada spezifische GeoBase.

Ich würde auch vorschlagen, eine orthographische Projektion zu vermeiden, und stattdessen eine, die für Kanada ausgewählt wurde, wie die für den Atlas von Kanada ausgewählt: EPSG: 42304.

Verwandte Themen