Re: [R-sig-Geo] Adding Census polygons to OSM map?
Wow, Tim, that is just exactly what I was looking for. I wasn't aware of the tmaptools package at all, but even if I knew of it, I doubt that I could have put the pieces together to solve my problem. Thanks so much for your efforts to help solve my problem. I really appreciate you sharing your knowledge and experience. -Kevin On 6/8/23 09:07, Howard, Tim G (DEC) wrote: > And I just realized an easier way to get a bounding box for the basemap is to > use the spatial information > you already have in the polygon: > > basem <- read_osm(bb(rw_tract, ext = 1.5)) > > The 'ext' option allows you to expand a certain amount beyond the > neighborhood polygon. > You can modify it to your liking. And skip the lat/lon shenanigans. > > Cheers, > Tim > >> -Original Message- >> From: R-sig-Geo On Behalf Of Howard, >> Tim G (DEC) via R-sig-Geo >> Sent: Thursday, June 8, 2023 8:53 AM >> To: Kevin Zembower ; r-sig-geo@r-project.org >> Subject: Re: [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. >> >> >> Kevin, >> To get the basemap in plot mode you need to download the tiles using >> read_osm. This works for me, I Simplified a bit: >> >> library(sf) >> library(tmap) >> library(tigris) >> options(tigris_use_cache = TRUE) >> library(tmaptools) >> >> ## Get an example census map: >> rw_tract <- tracts(state = "MD", >> county = "Baltimore city", >> year = "2020") >> rw_tract <- rw_tract[rw_tract$NAME == "2711.01",] >> >> # for some reason had to re-jigger the box a bit. >> # also note your longitudes were backwards. >> lat_max <- 39.36 >> long_min <- -76.63 >> lat_min <- 39.34 >> long_max <- -76.60 >> >> bbox <- bb(c(xmin=long_min, ymin=lat_min, xmax=long_max, >> ymax=lat_max)) >> >> basem <- read_osm(bbox) >> >> tmap_mode("plot") >> >> myMap <- tm_shape(basem) + >>tm_rgb() + >>tm_shape(rw_tract) + >>tm_polygons(alpha = 0.2, col = "green") + >>tm_scale_bar() + >>tm_layout(title = "Radnor-Winston Neighborhood") >> >> # check it out >> myMap >> # save it. >> tmap_save(myMap, "c:/temp/myMapOut.jpg") >> >> >> Hope that helps. >> Tim >> >> >> >> >> >> >>> -Original Message- >>> From: Kevin Zembower >>> Sent: Wednesday, June 7, 2023 5:59 PM >>> To: Howard, Tim G (DEC) ; r-sig-geo@r- >>> project.org >>> Subject: Re: 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. >>> >>> >>> 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_ba
Re: [R-sig-Geo] Adding Census polygons to OSM map?
And I just realized an easier way to get a bounding box for the basemap is to use the spatial information you already have in the polygon: basem <- read_osm(bb(rw_tract, ext = 1.5)) The 'ext' option allows you to expand a certain amount beyond the neighborhood polygon. You can modify it to your liking. And skip the lat/lon shenanigans. Cheers, Tim > -Original Message- > From: R-sig-Geo On Behalf Of Howard, > Tim G (DEC) via R-sig-Geo > Sent: Thursday, June 8, 2023 8:53 AM > To: Kevin Zembower ; r-sig-geo@r-project.org > Subject: Re: [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. > > > Kevin, > To get the basemap in plot mode you need to download the tiles using > read_osm. This works for me, I Simplified a bit: > > library(sf) > library(tmap) > library(tigris) > options(tigris_use_cache = TRUE) > library(tmaptools) > > ## Get an example census map: > rw_tract <- tracts(state = "MD", >county = "Baltimore city", >year = "2020") > rw_tract <- rw_tract[rw_tract$NAME == "2711.01",] > > # for some reason had to re-jigger the box a bit. > # also note your longitudes were backwards. > lat_max <- 39.36 > long_min <- -76.63 > lat_min <- 39.34 > long_max <- -76.60 > > bbox <- bb(c(xmin=long_min, ymin=lat_min, xmax=long_max, > ymax=lat_max)) > > basem <- read_osm(bbox) > > tmap_mode("plot") > > myMap <- tm_shape(basem) + > tm_rgb() + > tm_shape(rw_tract) + > tm_polygons(alpha = 0.2, col = "green") + > tm_scale_bar() + > tm_layout(title = "Radnor-Winston Neighborhood") > > # check it out > myMap > # save it. > tmap_save(myMap, "c:/temp/myMapOut.jpg") > > > Hope that helps. > Tim > > > > > > > > -Original Message- > > From: Kevin Zembower > > Sent: Wednesday, June 7, 2023 5:59 PM > > To: Howard, Tim G (DEC) ; r-sig-geo@r- > > project.org > > Subject: Re: 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. > > > > > > 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'
Re: [R-sig-Geo] Adding Census polygons to OSM map?
Kevin, To get the basemap in plot mode you need to download the tiles using read_osm. This works for me, I Simplified a bit: library(sf) library(tmap) library(tigris) options(tigris_use_cache = TRUE) library(tmaptools) ## Get an example census map: rw_tract <- tracts(state = "MD", county = "Baltimore city", year = "2020") rw_tract <- rw_tract[rw_tract$NAME == "2711.01",] # for some reason had to re-jigger the box a bit. # also note your longitudes were backwards. lat_max <- 39.36 long_min <- -76.63 lat_min <- 39.34 long_max <- -76.60 bbox <- bb(c(xmin=long_min, ymin=lat_min, xmax=long_max, ymax=lat_max)) basem <- read_osm(bbox) tmap_mode("plot") myMap <- tm_shape(basem) + tm_rgb() + tm_shape(rw_tract) + tm_polygons(alpha = 0.2, col = "green") + tm_scale_bar() + tm_layout(title = "Radnor-Winston Neighborhood") # check it out myMap # save it. tmap_save(myMap, "c:/temp/myMapOut.jpg") Hope that helps. Tim > -Original Message- > From: Kevin Zembower > Sent: Wednesday, June 7, 2023 5:59 PM > To: Howard, Tim G (DEC) ; r-sig-geo@r- > project.org > Subject: Re: 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. > > > 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://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcran > > .r-project.org%2Fweb%2Fpackages%2Ftmap%2Fvignettes%2Ftmap- > getstarted.h > > > tml&data=05%7C01%7Ctim.howard%40dec.ny.gov%7C4d3f99e6eeff4493a3a > 108db6 > > > 7a26858%7Cf46cb8ea79004d108ceb80e8c1c81ee7%7C0%7C0%7C63821771946 > 393381 > > > 9%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzI > iLCJBTiI6 > > > Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=MY4b3C%2Bqm7w > ycxiX%2F3ww5 > > zMLltw59fmCgQTAeSxGu60%3D&reserved=0 > > > > https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcran > > .r- > project.org%2Fweb%2Fpackages%2Ftmap%2Findex.html&data=05%7C01%7 > Ctim > > > .howard%40dec.ny.gov%7C4d3f99e6eeff4493a3a108db67a26858%7Cf46cb8e > a7900 > > > 4d108ceb80e8c1c81ee7%7C0%7C0%7C638217719463933819%7CUnknown%7 > CTWFpbGZs > > > b3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn > 0%3D > > > %7C3000%7C%7C%7C&sdata=R61uJO4g0WW1GLh47uXGCB%2FX6%2B9grO4 > WYue3XxkfdQ0 > > %3D&reserved=0 > > > > > > Cheers, > > Tim > > > > From: R-sig-Geo on behalf of Kevin > > Zembower via R-sig-Geo > > Sent: Monday, June 5, 2023 11:21 AM > > To: r-sig-geo@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
Re: [R-sig-Geo] Adding Census polygons to OSM map?
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 on behalf of Kevin Zembower > via R-sig-Geo > Sent: Monday, June 5, 2023 11:21 AM > To: r-sig-geo@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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-sig-geo ___ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Re: [R-sig-Geo] Adding Census polygons to OSM map?
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 on behalf of Kevin Zembower via R-sig-Geo Sent: Monday, June 5, 2023 11:21 AM To: r-sig-geo@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@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo ___ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo