[R-sig-Geo] Adding Census polygons to OSM map?

Kevin Zembower kev|n @end|ng |rom zembower@org
Wed Jun 7 23:59:03 CEST 2023


Tim, thank you very much. Yes, tmap seems to be moving in the right 
direction for me. This is what I can do with it so far:
=====================================
## Trying with tmap:
library(tidyverse)
library(sf)
library(tmap)
library(terra)
library(spData)
library(spDataLarge)
library(tigris)
options(tigris_use_cache = TRUE)
library(OpenStreetMap)

## Get an Open Street Map:
rw_map <- openmap(nw, se,
                   type = "osm",
                   mergeTiles = TRUE) %>%
     openproj(projection = "+proj=longlat +ellps=WGS84 +datum=WGS84 
+no_defs")

## Get an example census map:
rw_tract <- tracts(state = "MD",
                    county = "Baltimore city",
                    year = "2020") %>%
     filter(NAME == "2711.01")

ttm()

## Quick Tmap; also works:
qtm(rw_tract)

## Also works. _polygons combines _fill and _borders:
tm_shape(rw_tract) +
     tm_polygons()

## Works:
tm_shape(rw_tract) +
     tm_polygons(alpha = 0.2, col = "green") +
     tm_scale_bar() +
     tm_layout(title = "Radnor-Winston Neighborhood") +
     tm_basemap(server = "OpenStreetMap")

=======================================

So, in that last example, I can plot the basemap from Open Street Maps 
with the Census tract on top of it. However, from what I've learned so 
far (just about 4 hours of study), tm_basemap() only works with 
interactive maps that are 'viewed' (in a browser as HTML) rather than 
plotted (printed). I don't understand why I can't just get the 
appearance I want without all the unwanted interactivity features.

To take it a step further, I don't understand why I can't just plot both 
the basemap and the census tract with something like plot() (from 
ggplot) and sf.

Thanks, again, Tim, for your suggestion. I think it's moving me in the 
right direction.

-Kevin

On 6/7/23 10:57, Howard, Tim G (DEC) wrote:
> Kevin,
> the tmap​ package might be what you are looking for.
> 
> https://cran.r-project.org/web/packages/tmap/vignettes/tmap-getstarted.html
> 
> https://cran.r-project.org/web/packages/tmap/index.html
> 
> 
> Cheers,
> Tim
> 
> From: R-sig-Geo <r-sig-geo-bounces using r-project.org> on behalf of Kevin Zembower via R-sig-Geo <r-sig-geo using r-project.org>
> Sent: Monday, June 5, 2023 11:21 AM
> To: r-sig-geo using r-project.org <r-sig-geo using r-project.org>
> Subject: [R-sig-Geo] Adding Census polygons to OSM map?
> 
> ATTENTION: This email came from an external source. Do not open attachments or click on links from unknown senders or unexpected emails.
> 
> 
> Hello, again,
> 
> I've given up my work with leaflet, trying to map my neighborhood with
> US Census boundaries. Even though it was quick and easy to add the
> Census boundaries to the map, I couldn't create the labels I wanted (see
> https://stat.ethz.ch/pipermail/r-sig-geo/2023-June/029284.html). Also,
> it seems like leaflet added a lot of overhead that I didn't need, such
> as interactive maps. I just need a color printed 2D map for my use.
> 
> I'm now trying to work with tigris and OpenStreetMap, but I can't draw
> the US Census boundaries on the OSM map. Here's what I have so far:
> 
> ==================================================
> ## Experiment, using sf:
> library(tidyverse)
> library(tigris)
> options(tigris_use_cache = TRUE)
> library(sf)
> library(OpenStreetMap)
> ## library(sp)
> ## library(ggplot2)
> 
> lat_max <- 39.3525 #Distance from 39.35 to 39.34 = 0.691mi
> long_max <- -76.617 #Distance from -76.61 to -76.62 = 0.5343 mi
> lat_min <- 39.3455
> long_min <- -76.6095
> nw <- c(lat_max, long_max)
> se <- c(lat_min, long_min)
> 
> rw_map <- openmap(nw, se,
>                     type = "osm",
>                     mergeTiles = TRUE) %>%
>       openproj() %>%
>       OpenStreetMap::autoplot.OpenStreetMap() +
>       xlab("long") + ylab("lat")
> 
> rw_map
> 
> rw_tract <- tracts(state = "MD",
>                       county = "Baltimore city",
>                       year = "2020") %>%
>       filter(NAME == "2711.01")
>       ## openproj()
>       ## st_transform('+proj=longlat +datum=WGS84')
>       ## spTransform('osm')
> 
> OpenStreetMap::autoplot.OpenStreetMap(rw_tract, add = TRUE)
> ==================================================
> 
> The commented out sections show some of the things I've tried so far.
> I'd like to be able to draw the rw_tract geometry data on the rw_map
> image. What I'd like is a 'addPolygon()' function in OpenStreetMap, like
> I found in leaflet.
> 
> Can anyone offer me any suggestions or advice for accomplishing my task?
> Thanks so much.
> 
> -Kevin
> 
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo




More information about the R-sig-Geo mailing list