Code Monkey home page Code Monkey logo

ggmap's People

Contributors

corynissen avatar dannguyen avatar dkahle avatar eriqande avatar geobrando avatar hadley avatar ianthetechie avatar kent37 avatar lluisramon avatar mattmoehr avatar mvkorpel avatar nikolai-hlubek avatar restonslacker avatar scottmmjackson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ggmap's Issues

several style arguments to get_googlemap

Is it possible to give more than one style argument to get_googlemap?

I wrote a possible solution, but I am not good with github yet so you get it here:

In line 188
You could insert:

if(is.list(style)){
  style <- lapply(style, FUN = function(style) paste(paste(names(style), style, sep = ":"), collapse = "|" ))
}

And in line 294
You could add a collapse argument to paste:

style_url <- if(!missing(style)){ paste("style=", style, sep="", collapse ="&") } else { "" }

This might add support for style arguments in this form:

style       <- list()
style[[1]] <- c(feature = "all", element = "labels", visibility = "off")
style[[2]] <- c(feature = "landscape.man_made", element = "geometry", lightness = -100)
geo_map_cph            <- get_googlemap2("Vanløse", zoom = 11, color = "bw", maptype = "terrain", style = style)
map.cph                <- ggmap(geo_map_cph, extent = "device")
map.cph

I think you need to adjust the checks for argument validity for this code to work.

couldn't open "ggmapFileDrawer/.png"

require(ggmap)
pic = get_googlemap(center = c(lon = -95.3632715, lat = 29.7632836), zoom = 10, size = c(640, 640))

get_googlemap does not work and return an error:

错误于download.file(url, destfile = paste0("ggmapFileDrawer/", destfile), :
无法打开目的文件'ggmapFileDrawer/.png',原因是'没有那个文件或目录'

which means couldn't open file 'ggmapFileDrawer/.png' cause the folder 'ggmapFileDrawer/' isn't exist.
It will work after I create a folder named 'ggmapFileDrawe' in my working folder.

Unwanted spaces while specifying size, scale and style (maybe for other parameters as well)

Hi. Thanks for this very helpful package.

I found that unwanted single space is appearing in the parameters in URL to be sent to Google Maps. When I checked in the code, I saw the following:

  scale_url <- if (!missing(scale)) {
    paste("scale=", scale)
  }

In the paste function above, sep="" is missing and hence an unwanted space is appearing in the generated URL. The same happens for scale, style and maybe other places where I haven't checked.

geocode results caching

Let me see if I can start a conversation about a recent issue.

In the course of batch processing many addresses (1000s...) to geocode, I sometimes hit an error that causes geocode to fail and take with it all of the previously successful executions. It might be an Error 500 (internal server) or something like #24.

I'm wondering what would be the better approach to error handling: in the event of an error should geocode handle this internally and return only the successful results with a warning for the error(s)? Or, should I handle this externally by looping through the list of addresses and submit an address to geocode one by one and cache the successful results separately as part of the loop?

For now the latter is easy enough to do and keep my project moving, but if someone will suggest an approach for geocode to handle this internally, I would have interest to write a patch and submit a pull request.

Allow to dim the map in order to better highlight the data

Compare the readability of the following maps

library("ggmap")
crimes <- subset(crime, offense %in% c("murder", "rape"))
crimes <- crimes[crimes$lat < 30.5,]
houston <- get_map("houston", zoom=10)
bb <- attr(houston, "bb")
points <- geom_point(aes(x=lon, y=lat, colour=offense), data = crimes, size=2)

ggmap(houston, expand=T) + theme_nothing() + points

ggmap(houston, expand=T) + theme_nothing() +
  annotate("rect", xmin=bb$ll.lon, ymin=bb$ll.lat,
                   xmax=bb$ur.lon, ymax=bb$ur.lat,
           fill="white", alpha=0.5) +
  points

ggmap(houston, expand=T) + theme_nothing() +
  annotate("rect", xmin=bb$ll.lon, ymin=bb$ll.lat,
                   xmax=bb$ur.lon, ymax=bb$ur.lat,
           fill="black", alpha=0.5) +
  points

It would be nice to have this functionality built into ggmap (and qmap etc.). Possible interfaces could be

  • presets such as dodge or wash (lighten) and burn or dim (darken)

  • colorize argument which gives control over the colour and opacity and enables the user to do

    ggmap(houston, expand=T) + theme_nothing() +
      annotate("rect", xmin=bb$ll.lon, ymin=bb$ll.lat,
                       xmax=bb$ur.lon, ymax=bb$ur.lat,
               fill="purple", alpha=0.5) +
      points
    

    even if that's ugly ;)

geom_polygon incorrect at specific zoom levels

When using geom_polygon with ggmap, polygons that are drawn onto the map are incorrect if the initial zoom level is too small (far away).

Reproducible example code that produces a correct polygon:

longitude <- c(-83.01422, -83.01429, -83.01468, -83.01466, -83.01377, -83.01331, -83.01285)
latitude <- c(39.98964, 39.98962, 39.99023, 39.99031, 39.99068, 39.99061, 39.99026)
coordinates <- data.frame(longitude, latitude)
mapImageData <- ggmap::get_map(c(mean(range(longitude)), mean(range(latitude))), zoom=15)
map <- ggmap::ggmap(mapImageData)
map <- map + ggplot2::geom_polygon(ggplot2::aes(x=longitude, y=latitude), data=coordinates)
plot(map)

The same code that produces an incorrect polygon (might need to zoom in to see):

longitude <- c(-83.01422, -83.01429, -83.01468, -83.01466, -83.01377, -83.01331, -83.01285)
latitude <- c(39.98964, 39.98962, 39.99023, 39.99031, 39.99068, 39.99061, 39.99026)
coordinates <- data.frame(longitude, latitude)
mapImageData <- ggmap::get_map(c(mean(range(longitude)), mean(range(latitude))), zoom=14)
map <- ggmap::ggmap(mapImageData)
map <- map + ggplot2::geom_polygon(ggplot2::aes(x=longitude, y=latitude), data=coordinates)
plot(map)

Problem with finding scale_clone in R-devel

When using ggmap in R devel I have problems with finding the function scale_clone see the error and all code below. Anything i'm doing wrong? or has this to do with changes in namespaces in R

ggmap> ggmap(hdf, extent = "normal")
Error in match.fun(FUN) : object 'scale_clone' not found
In addition: Warning message:
In initialize(value, ...) :
  Class definition for Class "Scales" doesn't have a parent environment for objects defined.  Bug??
> require(ggmap)
Loading required package: ggmap
Loading required package: ggplot2
Need help? Try the ggplot2 mailing list: http://groups.google.com/group/ggplot2.
Google Maps API Terms of Service: http://developers.google.com/maps/terms.
Please cite ggmap if you use it: see citation('ggmap') for details.
> example(ggmap)

ggmap> ## extents and legends
ggmap> ##################################################
ggmap> hdf <- get_map()
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=29.763284,-95.363271&zoom=10&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false

ggmap> ggmap(hdf, extent = "normal")
Error in match.fun(FUN) : object 'scale_clone' not found
In addition: Warning message:
In initialize(value, ...) :
  Class definition for Class "Scales" doesn't have a parent environment for objects defined.  Bug??
> installed.packages()['ggmap',]
Package 
"ggmap" 
LibPath 
"/home/bart/bmisc/small_projects/rDevel/svn/R/library" 
Version 
"2.5" 
Priority 
NA 
Depends 
"\nR (>= 2.14.0),\nggplot2 (>= 0.9.2)" 
Imports 
"\nproto,\nscales,\nRgoogleMaps,\npng,\nplyr,\nreshape2,\ngrid,\nrjson,\nmapproj,\njpeg,\ngeosphere,\ndigest" 
LinkingTo 
NA 
Suggests 
"\nMASS,\nstringr,\nhexbin,\ndplyr" 
Enhances 
NA 
License 
"GPL-2" 
License_is_FOSS 
NA 
License_restricts_use 
NA 
OS_type 
NA 
MD5sum 
NA 
NeedsCompilation 
NA 
Built 
"3.3.0" 
> R.version
               _                                                 
platform       x86_64-unknown-linux-gnu                          
arch           x86_64                                            
os             linux-gnu                                         
system         x86_64, linux-gnu                                 
status         Under development (unstable)                      
major          3                                                 
minor          3.0                                               
year           2015                                              
month          07                                                
day            04                                                
svn rev        68627                                             
language       R                                                 
version.string R Under development (unstable) (2015-07-04 r68627)
nickname       Unsuffered Consequences 

Incorrect latitude on large area CloudMade maps

When plotting with source maps from cloudmade the latitude of the grid does not always correspond with the map features. It starts to be noticeable at around zoom level 7 and by level 4 can be off by nearly 3 degrees.

At zoom levels greater than 8 it seems negligible and longitude seems unaffected. Google and OSM maps do not have this problem.

This example centred on Europe illustrates the problem:

gmap = get_map(location = c(0,50), zoom = 4)
omap = get_map(location = c(0,50), zoom = 4, source="osm")
cmap = get_map(location = c(0,50), zoom = 4, source = 'cloudmade', api_key = api_key)

ggmap(gmap) + geom_hline(yintercept=c(30, 40, 50, 60))
ggmap(omap) + geom_hline(yintercept=c(30, 40, 50, 60))
ggmap(cmap) + geom_hline(yintercept=c(30, 40, 50, 60))

I'll be using the final maps for a commercial project so I cannot use the Google maps. OSM is OK but the advantage of CloudMade is the ability customise with your own style so I can get a nice clean look.

google-map

cloudmade-map

Thanks for reading.

Cannot download some tiles (often stamen maps)

Hi,

This is probably not related to ggmap itsefl but impairs its usage (and maybe you can work around it). Quite otfen, I cannot download a tile through R while using the address in a web browser works.

For example

qmap("new-york", zoom=13, source="stamen", maptype="watercolor")Error in download.file(urls[[k]], destfile = destfile, quiet = !messaging,  : 
  cannot open URL 'http://tile.stamen.com/watercolor/13/2411/3078.png'
In addition: Warning message:
In download.file(urls[[k]], destfile = destfile, quiet = !messaging,  :
  cannot open: HTTP status was '504 Gateway Time-out'

while immediately after, using http://tile.stamen.com/watercolor/13/2411/3078.png in chrome returns the map.

However, both curl and wget also get the 504 time out.

Is there a usage limit in stamen maps?

get_googlemap: 'style' argument produces invalid style specifications in request URL

Hi,

It seems that there might be an issue with how ggmap parses 'style' arguments to 'get_googlemap'. At the moment, on line 255 of 'get_googlemap.R', the 'style' argument is prefixed with 'style=' before being added to the URL for the request to Google Maps:

style_url <- if(!missing(style)){ paste("style=", style) } else { "" }

Unfortunately, 'paste' inserts an additional space (%20) between 'style=' and the 'style' argument, which causes Google to ignore the given styling information. To fix this, all that's needed is to specify an empty separator in 'paste':

style_url <- if(!missing(style)){ paste("style=", style, sep="") } else { "" }

Included below is an example, showing the 'style' argument being used to leave out the labels on a Google Maps terrain map. Without the above change, the current version of ggmap returns a map with the styling information ignored and all of the text labels still visible:

library(ggplot2)
library(ggmap)

# Suppress text labels on Google Maps terrain maps.
map.nolabels = get_googlemap(center = c(lon = -106.5813, lat = 52.47975), zoom = 10, maptype = 'terrain', style = 'feature:all|element:labels|visibility:off')
ggmap(map.nolabels, extent = 'device')

I hope this helps, but if any other information is needed to reproduce this issue, please let me know, and I would be glad to do what I can.

  • Chris

Installation error

I have the dev version of ggplot2 and scales installed so perhaps that is causing problems:

> install_github("dkahle/ggmap")
Downloading github repo dkahle/ggmap@master
Installing ggmap
Skipping 2 packages ahead of CRAN: ggplot2, scales
'/Library/Frameworks/R.framework/Resources/bin/R' --no-site-file --no-environ  \
  --no-save --no-restore CMD INSTALL  \
  '/private/var/folders/wc/zv89d1fx5nxdljsysq40m6vr0000gn/T/RtmpYSGjDx/devtoolse2a716fe460/dkahle-ggmap-99653f1'  \
  --library='/Library/Frameworks/R.framework/Versions/3.2/Resources/library'  \
  --install-tests 

* installing *source* packageggmap...
** R
** data
*** moving datasets to lazyload DB
** inst
** preparing package for lazy loading
Warning: replacing previous import bygrid::arrowwhen loadingggmapWarning: replacing previous import bygrid::unitwhen loadingggmapWarning: replacing previous import byscales::alphawhen loadingggmapError in eval(expr, envir, enclos) : could not find function "eval"
Error : unable to load R code in packageggmapERROR: lazy loading failed for packageggmap* removing/Library/Frameworks/R.framework/Versions/3.2/Resources/library/ggmap* restoring previous/Library/Frameworks/R.framework/Versions/3.2/Resources/library/ggmapError: Command failed (1)
> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.3 (Yosemite)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] devtools_1.8.0

loaded via a namespace (and not attached):
 [1] httr_1.0.0      R6_2.1.0        magrittr_1.5    rversions_1.0.2
 [5] tools_3.2.1     curl_0.9.1      Rcpp_0.12.0     memoise_0.2.1  
 [9] xml2_0.1.1      stringi_0.5-5   git2r_0.10.1    stringr_1.0.0  
[13] digest_0.6.8    fortunes_1.5-2 

> library(ggplot2)
> session_info()
Session info -------------------------------------------------------------------
 setting  value                       
 version  R version 3.2.1 (2015-06-18)
 system   x86_64, darwin13.4.0        
 ui       X11                         
 language (EN)                        
 collate  en_US.UTF-8                 
 tz       America/Chicago             

Packages -----------------------------------------------------------------------
 package    * version    date       source                         
 colorspace   1.2-6      2015-03-11 CRAN (R 3.2.0)                 
 curl         0.9.1      2015-07-04 CRAN (R 3.2.0)                 
 devtools   * 1.8.0      2015-05-09 CRAN (R 3.2.0)                 
 digest       0.6.8      2014-12-31 CRAN (R 3.2.0)                 
 fortunes     1.5-2      2013-12-14 CRAN (R 3.2.0)                 
 ggplot2    * 1.0.1.9002 2015-08-05 Github (hadley/ggplot2@d5947cb)
 git2r        0.10.1     2015-05-07 CRAN (R 3.2.0)                 
 gtable       0.1.2      2012-12-05 CRAN (R 3.2.0)                 
 httr         1.0.0      2015-06-25 CRAN (R 3.2.0)                 
 magrittr     1.5        2014-11-22 CRAN (R 3.2.0)                 
 memoise      0.2.1      2014-04-22 CRAN (R 3.2.0)                 
 munsell      0.4.2      2013-07-11 CRAN (R 3.2.0)                 
 plyr         1.8.3      2015-06-12 CRAN (R 3.2.0)                 
 R6           2.1.0      2015-07-04 CRAN (R 3.2.0)                 
 Rcpp         0.12.0     2015-07-25 CRAN (R 3.2.0)                 
 rstudioapi   0.3.1      2015-04-07 CRAN (R 3.2.0)                 
 rversions    1.0.2      2015-07-13 CRAN (R 3.2.0)                 
 scales       0.2.5.9003 2015-08-05 Github (hadley/scales@356bee8) 
 stringi      0.5-5      2015-06-29 CRAN (R 3.2.0)                 
 stringr      1.0.0      2015-04-30 CRAN (R 3.2.0)                 
 xml2         0.1.1      2015-06-02 CRAN (R 3.2.0) 

Allow for other coordinate systems (e.g. UTM)

I would like to be able to use UTM coordinates for my axes in ggmap. I currently do this by getting my background with get_map(), converting the bounding box attributes via rgdal::spTransform, and using ggplot() + inset_raster() + ... + coord_fixed(). For small map areas, UTM are more understandable units because they are in meters. It would probably be helpful to be able to convert to meters/km and/or set the axes to start at zero at the origin.

Importing a stamenmap of Chicago returns a map of Houston

Entered this command to import a map of Chicago, IL:

chicagoMap <- get_stamenmap(location = 'Chicago', zoom = 12)

Was surprised to receive a map of Houston, TX instead.

I was able to get a map of Chicago with this command:

get_stamenmap(bbox = c(left = -87.9401009, bottom = 41.643919, right = -87.523984, top = 42.0230219), zoom=12)

But just thought it would be helpful to report this.

High Zoom Accuracy Issue

I'm currently building maps at zoom levels around 15-16, sometimes more. The stamen maps ("toner" type) seems to be more accurate than the other types. All of my coordinates are currently shifted a little to the left along the longitude from where they should be (they are locations for buildings only they're found in streets and parks).

For example (inaccurate):
ny_plot<-ggmap(get_map(location=center,zoom=16,maptype='terrain'))
ny_plot + geom_point(x= -73.96457, y= 40.80993, color="red")

versus (accurate):
ny_plot<-ggmap(get_map(location=center,zoom=16,maptype='toner'))
ny_plot + geom_point(x= -73.96457, y= 40.80993, color="red")

I'm using:
ggmap version 2.4
ggplot version 1.01
R version 3.1.3

Cache mechanism

The get_*** functions may have a support to caching mechanism.
The basic idea is,

  1. First extract the unique key from the query, perhaps by using digest::digest
  2. If cache for the query exists, return the cached object, otherwise issue the query to the (e.g., google) server.
  3. The get_*** functions may have an option force. If true ignore the cache and always download a new map.

Missing values returned as NA (logical), should match type of expected result

When running on geocode on each row of a data.table, data.table will give a type mismatch error if any of the rows return NULL/NA for a location.

Error in `[.data.table`(crimes, , geocodeWrapper(Location), by = Location) : 
  Column 1 of result for group 178 is type 'logical' but expecting type 'double'. Column types must be consistent for each group.

For example, lat and lon are expected to be reals, if missing or null should return as NA_real_

geom_ggmap

Would it be possible to have a geom_ggmap() that made it easier to add a layer to an existing plot?

I think this should just be a simple modification of insert_raster that also gets the attributes from the object. Something like:

geom_ggmap <- function(map) {
  stopifnot(inherits(map, "ggmap"))

  bb <- attr(mi_raster$bb)

  GeomRasterAnn$new(
    geom_params = list(
      raster = raster, 
      xmin = bb[1],
      ymin = bb[2],
      xmax = bb[3],
      ymax = bb[4]
    )
    stat = "identity", 
    position = "identity", 
    data = NULL, 
    inherit.aes = FALSE
  )
}

(note the use of inherit.aes = FALSE - insert_raster should also do that

ggmap() pushes unused argument down to layer(), resulting in "unused argument" error

Hello, all:

In order to avoid a ggsave error with tableGrob objects, I updated to the development version of ggplot2 from GitHub (1.0.1.9003).

However, it looks like the ggmap() function now pushes an unused argument down to layer(), resulting in the following error:

map <- get_map()
ggmap(map)

Error in layer(mapping = NULL, data = NULL, stat = "identity", geom = <environment>,  : 
  unused argument (geom_params = list(raster = c("#E2E8DC", "#E4EADE", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E4EADE", "#E4EADE", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E0E5D8", "#E0E5D8", "#E0E5D8", "#E0E5D8", "#E2E8DC", "#E2E8DC", "#E4EADE", "#E4EADE", "#E2E8DC", "#E2E8DC", "#E0E5D8", "#E2E8DC", "#E2E8DC", "#E4EADE", "#E4EADE", "#E4EADE", "#E4EADE", "#E4EADE", "#E0E5D8", "#E4EADE", "#E8EADE", 
"#E4EADE", "#E4EADE", "#E4EADE", "#E2E8DC", "#E2E8DC", "#E4EADE", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E0E5D8", "#E0E5D8", "#E4EADE", "#E2E8DC", "#E4EADE", "#E2E8DC", "#E2E8DC", "#E4EADE", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E4EADE", "#E2E8DC", "#E4EADE", "#E2E8DC", "#E0E5D8", "#E2E8DC", "#E2DFD4", "#E2E8DC", "#F8F8F8", "#F8F8F8", "#E4EADE", "#E4EADE", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E2E8DC", "#E4EADE", "#E0E5D8", "#E2E8DC", "#DCD8D0", "#E8EAD ...

sessionInfo()

R version 3.2.2 (2015-08-14)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] stringr_1.0.0      reshape2_1.4.1     scales_0.3.0       dplyr_0.4.3        zoo_1.7-12         lubridate_1.3.3    leafletR_0.3-3    
 [8] jsonlite_0.9.17    brew_1.0-6         ggmap_2.5.2        rgdal_1.0-7        classInt_0.1-23    RColorBrewer_1.1-2 rgeos_0.3-13      
[15] maptools_0.8-37    sp_1.2-0           maps_3.0.0-2       ggplot2_1.0.1.9003 gtable_0.1.2       gridExtra_2.0.0    RCurl_1.95-4.7    
[22] bitops_1.0-6      

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.1         plyr_1.8.3          class_7.3-14        tools_3.2.2         digest_0.6.8        memoise_0.2.1       lattice_0.20-33    
 [8] png_0.1-7           DBI_0.3.1           rstudioapi_0.3.1    mapproj_1.2-4       parallel_3.2.2      proto_0.3-10        e1071_1.6-7        
[15] RgoogleMaps_1.2.0.7 R6_2.1.1            jpeg_0.1-8          foreign_0.8-66      RJSONIO_1.3-0       magrittr_1.5        assertthat_0.1     
[22] geosphere_1.4-3     colorspace_1.2-6    labeling_0.3        stringi_0.5-5       lazyeval_0.1.10     munsell_0.4.2       rjson_0.2.15

Can y'all please help us out?

Many thanks.

force new geocode or rm(.GeocodedInformation)

I might be way of the mark here, but after a good look through the documentation there isn't a way to force new geocoding for cached items is there?

This might be an issue if for example a string is geocoded with the wrong encoding and contains special characters. Then the user is forced to figure out that the geocoded places are stored in the .GeocodeInformation and remove it. Since new geocoding with the right encoding won't suffice.New workfile would also do the trick but maybe that is not the right approach.

Maybe a note in the documentation or a force argument in geocode?

geocode() error using cached data from mutiple match

An error is thrown with subsequent attempts to geocode a location that had multiple matches and the response cached in .GeocodedInformation. The loc variable used in the message is only defined when the result is not on file.

This is fixed by changes in #61

> geocode("Peach Leaf Gaithersburg MD 20878",source="google",messaging=T)
contacting http://maps.googleapis.com/maps/api/geocode/json?address=Peach+Leaf+Gaithersburg+MD+20878&sensor=false...Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Peach+Leaf+Gaithersburg+MD+20878&sensor=false
 done.
more than one location found for "Peach Leaf Gaithersburg MD 20878", using address
  "peach leaf drive, gaithersburg, md 20878, usa"

        lon      lat
1 -77.25023 39.10837
>
> geocode("Peach Leaf Gaithersburg MD 20878",source="google",messaging=T)
Using stored information.
Error in paste("more than one location found for \"", loc, "\", using address\n  \"",  : 
  object 'loc' not found

Landsat and USGS imagery?

Just wondering if in the course of development of this (very awesome) package, if the possibility of interfacing with Landsat had been considered? Not pushing this for a feature request, just wanted to know from people who are more familiar with the landscape/obstacles. I haven't kept up with U.S. map offerings in the recent years but doing a search now yields some promising leads:

The most promising service seems to be AWS's Landsat S3:

Landsat 8 data is available for anyone to use via Amazon S3. All Landsat 8 scenes from 2015 are available along with a selection of cloud-free scenes from 2013 and 2014. All new Landsat 8 scenes are made available each day, often within hours of production.

A CLI from Development Seed: Power tools for Satellite Imagery

Over the past few months we’ve built tools to automate our own work with satellite imagery. It once took us all day to collect, georeference, composite, color correct, and pan-sharpen imagery. Now, we can do it in a matter of minutes. We’ve packaged our processing scripts into a command line utility. Landsat-util makes it easier for other developers and organizations to work with open satellite imagery.

USGS: The following examples demonstrate usage of The National Map services in other APIs.

GIS Stackexchange: Site to download al USGS Topo Maps in bulk - a couple of interesting suggestions and options.

ProPublica's SimpleTiles library, which may have some useful guidance: https://propublica.github.io/simple-tiles/

Installation of ggmap with the new dev version of ggplot2

Under the dev version of ggplot2, ggmap will not install from either CRAN or github.

install.packages('ggmap')
Installing package into ‘/usr/local/lib/R/3.2/site-library’
(as ‘lib’ is unspecified)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0 33 2879k   33  961k    0     0  1438k      0  0:00:02 --:--:--  0:00:02 1436k100 2879k  100 2879k    0     0  2832k      0  0:00:01  0:00:01 --:--:-- 2833k
* installing *source* package ‘ggmap’ ...
** package ‘ggmap’ successfully unpacked and MD5 sums checked
** R
** data
*** moving datasets to lazyload DB
** inst
** preparing package for lazy loading
Warning: replacing previous import by ‘grid::arrow’ when loading ‘ggmap’
Warning: replacing previous import by ‘grid::unit’ when loading ‘ggmap’
Warning: replacing previous import by ‘scales::alpha’ when loading ‘ggmap’
Error in eval(expr, envir, enclos) : could not find function "eval"
Error : unable to load R code in package ‘ggmap’
ERROR: lazy loading failed for package ‘ggmap’
* removing ‘/usr/local/lib/R/3.2/site-library/ggmap’
Warning in install.packages :
  installation of package ‘ggmap’ had non-zero exit status
library(devtools)
install_github("dkahle/ggmap")
Downloading GitHub repo dkahle/ggmap@master
Installing ggmap
Skipping 1 packages ahead of CRAN: ggplot2
'/usr/local/Cellar/r/3.2.2_1/R.framework/Resources/bin/R' --no-site-file --no-environ --no-save  \
  --no-restore CMD INSTALL  \
  '/private/var/folders/mc/rdd5ddpn2ng8ypg91nk__71c0000gn/T/Rtmpliic2O/devtools5c622cb5cf78/dkahle-ggmap-8972677'  \
  --library='/usr/local/lib/R/3.2/site-library' --install-tests 

* installing *source* package ‘ggmap’ ...
** R
** data
*** moving datasets to lazyload DB
** inst
** preparing package for lazy loading
Warning: replacing previous import by ‘grid::arrow’ when loading ‘ggmap’
Warning: replacing previous import by ‘grid::unit’ when loading ‘ggmap’
Warning: replacing previous import by ‘scales::alpha’ when loading ‘ggmap’
Error in eval(expr, envir, enclos) : could not find function "eval"
Error : unable to load R code in package ‘ggmap’
ERROR: lazy loading failed for package ‘ggmap’
* removing ‘/usr/local/lib/R/3.2/site-library/ggmap’
Error: Command failed (1)
sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-apple-darwin14.5.0 (64-bit)
Running under: OS X 10.10.3 (Yosemite)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] maps_3.0.0-2   devtools_1.9.1 sp_1.2-0      

loaded via a namespace (and not attached):
 [1] httr_1.0.0        R6_2.1.1          magrittr_1.5      tools_3.2.2       curl_0.9.3       
 [6] shinychord_0.0.99 memoise_0.2.1     stringi_0.5-5     grid_3.2.2        stringr_1.0.0    
[11] digest_0.6.8      lattice_0.20-33 

Google API key

It is possible to specify an api key for cloudmade maps with the parameter api_key for the function get_cloudmademap.

I would like to have the same functionality also for the function get_googlemap. Please add the argument api_key also for the function get_googlemap. I believe the function get_map should be adjusted accordingly.

mapdist() returns too many lines with duplicated from/to

When passing a vector of to/from to mapdist that includes repeated pairs of to/from, the returned data frame re-duplicates repeated entries, and returns too many lines.

Here is code that demonstrates the problem.

library(ggmap)
library(dplyr)

# Create data frame with cities for map test, including repeated lines
cities <-c("Paris, France","London,England","Berlin, Germany")
df <- data_frame(from=rep(cities,2)) %>% mutate(to=lead(from,1)) %>% na.omit()

# Limit to the round trip of cities
roundTrip <- df[1:length(cities),]

# Repeat the first leg
tripRepeatedLeg <- df[1:(length(cities)+1),]

# The starting round trip trip gives the same number of results
roundTripDist <- suppressMessages(mapdist(roundTrip$from,roundTrip$to))
nrow(roundTrip)==nrow(roundTripDist)

# Trips with repeated legs return frames with additional rows
tripRepeatedLegDist <- suppressMessages(mapdist(tripRepeatedLeg$from,tripRepeatedLeg$to))
nrow(tripRepeatedLeg)==nrow(tripRepeatedLegDist)

incorrect latitude alignment of stamen maps

When I use source="stamen" with a zoom=5 (or other zooms at the regional / state / country / continent level), the latitude of the map is not aligned with reality.

I have included an example below. You will see by comparing liberty.map1 and liberty.map2 that the zoom=5 map puts the Statue of Liberty in the Catskill region (significantly north of reality). Comparing liberty.map2 and liberty.map3, you will see that the tick-mark for latitude 35 is at the southern border of Tennessee in the Google map and much further north in Tennessee in the stamen map.

I am using R 3.1.0, ggplot2 1.0.0, and ggmap 2.3.

library(ggmap)
library(ggplot2)

geocode("statue of liberty")

liberty.map1 <- get_map(location = c(lon=-74.0445, lat= 40.68925), source="stamen", maptype="toner", zoom=15)
liberty.map2 <- get_map(location = c(lon=-74.0445, lat= 40.68925), source="stamen", maptype="toner", zoom=5)
liberty.map3 <- get_map(location = c(lon=-74.0445, lat= 40.68925), zoom=5)

ggmap(liberty.map1) + geom_point(x= -74.0445, y= 40.68925, color="red")
ggmap(liberty.map2) + geom_point(x= -74.0445, y= 40.68925, color="red")
ggmap(liberty.map3)

Problem parsing æ, ø and å

The geocode function returns NAs whenever the letters æ, ø or å appear in the address.

I have tried to build the url manually to check if it is the API that returns an error but both of these work.

https://maps.googleapis.com/maps/api/geocode/json?address=Højdetoften+1,+4500&region=dk

https://maps.googleapis.com/maps/api/geocode/json?address=H%C3%B8jdetoften+1,+4500&region=dk

Here's some code that returns both lat/lon and NAs.

library(ggmap)

addr <- c("Bjerget 30, 4500 Denmark", "Topvej 18, 4500 Denmark", "Højdetoften 1, 4500 Denmark", 
"Bøsserup Eng 12, 4500 Denmark", "Udlodden 12, 4500 Denmark", 
"Møstvej 4, 4500 Denmark")

latlon <- geocode(location = addr, output = "latlon", messaging = FALSE, sensor = FALSE)

head(latlon)

Otherwise a great package! I hope I'm not missing something obvious.

EDIT: Here's the result I get.

head(latlon)
       lon      lat
1 11.57720 55.95856
2 11.64852 55.93368
3       NA       NA
4       NA       NA
5 11.60960 55.93532
6       NA       NA

EDIT_EDIT: And here's my sessioninfo :)

sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Danish_Denmark.1252  LC_CTYPE=Danish_Denmark.1252    LC_MONETARY=Danish_Denmark.1252
[4] LC_NUMERIC=C                    LC_TIME=Danish_Denmark.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggmap_2.3       lubridate_1.3.3 ggplot2_1.0.0   tidyr_0.1       dplyr_0.4.1     magrittr_1.5    mapDK_0.3.0    

loaded via a namespace (and not attached):
 [1] assertthat_0.1      colorspace_1.2-4    DBI_0.3.1           digest_0.6.4        grid_3.1.2          gtable_0.1.2       
 [7] labeling_0.2        lazyeval_0.1.10     mapproj_1.2-2       maps_2.3-9          MASS_7.3-35         memoise_0.2.1      
[13] munsell_0.4.2       parallel_3.1.2      plyr_1.8.1          png_0.1-7           proto_0.3-10        Rcpp_0.11.2        
[19] reshape2_1.4        RgoogleMaps_1.2.0.7 rjson_0.2.15        RJSONIO_1.3-0       scales_0.2.4        stringi_0.3-1      
[25] stringr_0.6.2       tools_3.1.2        

Bug (?) when getting google maps that are not square

It seems that the function get_googlemap does not like it when I request a rectangular map size.

I have R 3.0.0 running on Ubuntu 12.04 and ggmap version 2.3. When I run the following code, the map is not what I expect.

map_center <- c(lon=-123.1119, lat=49.2505)
test <- get_googlemap(center=map_center, zoom=3, maptype="satellite", size=c(640,320))
ggmap(test)

When I change the size parameter to any square dimensions, I get a nice map

zoom produces unexpected behaviour when not integer

qmap("new york", zoom=12)
qmap("new york", zoom=13)
qmap("new york", zoom=12.2)
qmap("new york", zoom=12.7)

12.2 and 12.7 produce the same output which is the default zoom=10. Use round on the zoom argument (and possibly issue a warning that only integers are accepted).

For other map sources it simply fails

qmap("new york", zoom=12.4, source="osm")

The 'toner-lines' map gets its colors inverted

library(ggmap)

mapzoom=13
map_type="toner-lines"
map_source='stamen'

manhattan = c(left = -74.028, bottom = 40.695367, right = -73.92, top = 40.794)
map <-get_stamenmap(
  bbox=manhattan,
  zoom=mapzoom,
  maptype=map_type
)
ggmap(map)

This is what an individual tile looks like:

img

This is the result:

image

Cannot map poles

qmap("antarctica")

fails and produces the warnings

Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In min(x) : no non-missing arguments to min; returning Inf
4: In max(x) : no non-missing arguments to max; returning -Inf

On the other side of the earth:

ggmap(get_map("greenland", zoom=4))

works

ggmap(get_map("greenland", zoom=3))

fails.

Create geom_map() which draws a map layer

The goal is to allow constructions such as

ggplot(data=mydata) +
    geom_map(source="stamen", maptype="toner) +
    geom_point(aes(x=lon, y=lat))

geom_map() would figure out the bounding box of the data argument (inherited from the ggplot call in the example above) and draw the appropriate map. I should probably also set coord_map even though that kind of breaks the grammar of graphics convention.

ggmap currently fails R CMD check

    > ### Name: geocode
    > ### Title: Geocode
    > ### Aliases: geocode geocodeQueryCheck
    > 
    > ### ** Examples
    > 
    > # Types of input
    > geocode('Baylor University')
    Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=Baylor+University&sensor=false
     lon lat
    1 -97.11844 31.54822
    > geocode('1600 Pennsylvania Avenue, Washington DC')
    Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=1600+Pennsylvania+Avenue,+Washington+DC&sensor=false
     lon lat
    1 -76.98168 38.87866
    > geocode('the white house')
    Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=the+white+house&sensor=false
     lon lat
    1 -77.03653 38.89768
    > geocode(c('baylor university', 'salvation army waco'))
    Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=baylor+university&sensor=false
    Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=salvation+army+waco&sensor=false
     lon lat
    1 -97.11844 31.54822
    2 -97.12858 31.54158
    > 
    > # Types of output
    > geocode('Baylor University', output = "latlona")
     lon lat
    1 -97.11844 31.54822
     address
    1 baylor university, 1311 south 5th street, waco, tx 76706, usa
    > geocode('Baylor University', output = "more")
    Error in data.frame(long_name = "Baylor University", short_name = "Baylor University", : 
     arguments imply differing number of rows: 1, 0
    Calls: geocode ... as.data.frame -> as.data.frame.list -> eval -> eval -> data.frame
    Execution halted 

Expand the data range a little in qmplot

In this example

library("ggmap")
crimes <- subset(crime, offense %in% c("murder", "rape"))
crimes <- crimes[crimes$lat < 30.5,]
qmplot(lon, lat, data=crimes, size=I(5))

Two points are cut out on the right and on the left. The map needs to be a bit larger to accomodate such situations (and it's actually surprising that it works correctly on the top and bottom).

This is different from expand because we don't want blank space around the data, we want more map.

Can one really use zoom = 0?

The documentation for v 2.2 (http://cran.r-project.org/web/packages/ggmap/ggmap.pdf) states:

zoom map zoom, an integer from 0 (whole world) to 21 (building), default value 10
(city)

I am using v2.2:

> sessionInfo
ggmap_2.2    

However when trying to use zoom = 0, I get the following error:

Error: zoom must be a whole number between 1 and 21

I get errors with 0-2, with 3 seeming like the minimum value in my attempts with google, Open Street Maps, and/or Stamen. At zoom = 3, they all seem to successfully download.

Is the documentation in error, or am I doing something wrong? Was trying to get a world map as I thought it would be easier to center around something other than 0 or 180 compared to just using the maps library.

Thanks for this package! For smaller scale work (not at the world level), I am really excited to use it!

qmplot: gray background / no map

Try this:

bug
lon lat
1 10.56261 48.67790
2 10.70112 48.69171
3 10.54414 48.59922
4 10.59666 48.79024
5 10.62209 48.67063
6 10.45170 48.70223
7 10.62660 48.71989
8 10.68440 48.69027
9 10.53342 48.82974
10 10.43407 48.74760

str(bug)
'data.frame': 10 obs. of 2 variables:
$ lon: num 10.6 10.7 10.5 10.6 10.6 ...
$ lat: num 48.7 48.7 48.6 48.8 48.7 ...

qmplot(lon, lat, data = bug)

Dots are on a gray background.

geocode() unable to connect - datasciencetoolkit.org down

The geocode function in ggmap relies on the datasciencetoolkit.org to use the Google Maps API. However, datasciencetoolkit.org is down. Based on creator Pete Warden's post in late September - http://petewarden.com/2015/09/27/openheatmap-and-datasciencetoolkit-under-new-management/ - the site may be down for good.

Since Thursday running geocode() has resulted in errors like this:
Warning messages:
1: In readLines(connect, warn = FALSE) :
unable to connect to 'www.datasciencetoolkit.org' on port 80.
2: In FUN(X[[i]], ...) :
geocoding failed for "0 13TH ST NE, Washington DC".
if accompanied by 500 Internal Server Error with using dsk, try google.

geocode suggestion

David, ggmap is great!

I've been working with geocode a lot this morning and I have a suggestion: it'd be nice if geocode appended the original input to the data set it returns when it returns a data set. This would make it quicker to add the geocode data back into an existing dataset. For example,

df  <- data.frame(place = sample(c("Juneau, AK", "Houston, TX" , "Austin, TX"), 10, replace = TRUE), 
                  value = 1:10, stringsAsFactors = FALSE)
places <- unique(df$place) 
place_info <- geocode(places2, output = "more")
place_info$place <- places   ## can cut out this step
df <- join(df, place_info, by = "place")

If there's a more obvious workflow that I'm missing, just close this comment and ignore it :)

Issue with png R package

Hi all

Not sure this is right forum, but I could not find a better.. :)

I installed the newest version of ggmap from CRAN and get the following error.

> R.Version()
$platform
[1] "x86_64-apple-darwin14.0.0"

$arch
[1] "x86_64"

$os
[1] "darwin14.0.0"

$system
[1] "x86_64, darwin14.0.0"

$status
[1] ""

$major
[1] "3"

$minor
[1] "1.2"

$year
[1] "2014"

$month
[1] "10"

$day
[1] "31"

$`svn rev`
[1] "66913"

$language
[1] "R"

$version.string
[1] "R version 3.1.2 (2014-10-31)"

$nickname
[1] "Pumpkin Helmet"

> sunMap <- get_map(location = 'Copenhagen')
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=Copenhagen&zoom=10&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false
Error in readPNG(tmp) : unable to initialize libpng
In addition: Warning message:
In readPNG(tmp) :
  libpng warning: Application built with libpng-1.6.16 but running with 1.5.17

I tried deleting the png package and letting ggmap install it as a dependency, but same result. It should be mentioned that I have libpng version 1.6.16 installed via macports.

Any help is greatly appreciated!

Best,
Per

get_map ignores the source argument

I am trying to grab a map like this:

get_map(location = c(6.815375, 51.217942), zoom = 11, source = "osm")

Following error occures:

Error in download.file(url, destfile = destfile, quiet = !messaging, mode = "wb") :
can't open URL 'http://maps.googleapis.com/maps/api/staticmap?center=51.217942,6.815375&zoom=11&size=%20640x640&maptype=terrain&sensor=false'

And an additional warning:

W
In download.file(url, destfile = destfile, quiet = !messaging, mode = "wb") :
cannot open: HTTP status was '403 Forbidden'

Why does ggmap query google, although source is set to "osm" ? And why is the status 403 forbidden?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.