[R-sig-Geo] Adding Census polygons to OSM map?
Kevin Zembower
kev|n @end|ng |rom zembower@org
Thu Jun 8 17:17:17 CEST 2023
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 <r-sig-geo-bounces using r-project.org> On Behalf Of Howard,
>> Tim G (DEC) via R-sig-Geo
>> Sent: Thursday, June 8, 2023 8:53 AM
>> To: Kevin Zembower <kevin using zembower.org>; r-sig-geo using 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 <kevin using zembower.org>
>>> Sent: Wednesday, June 7, 2023 5:59 PM
>>> To: Howard, Tim G (DEC) <tim.howard using dec.ny.gov>; r-sig-geo using 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://cr/
>>>>
>> an%2F&data=05%7C01%7Ctim.howard%40dec.ny.gov%7Cbe436282b0844b9c
>> a99a0
>>>>
>> 8db681f6989%7Cf46cb8ea79004d108ceb80e8c1c81ee7%7C0%7C0%7C6382182
>> 5635
>>>>
>> 1940428%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV
>> 2luMzIi
>>>>
>> LCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=X4Cm12TD
>> 2iIH498
>>>> sJlRMPzOFz7IX9XuVdhGX8%2FO0Lv4%3D&reserved=0
>>>> .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://cr/
>>>>
>> an%2F&data=05%7C01%7Ctim.howard%40dec.ny.gov%7Cbe436282b0844b9c
>> a99a0
>>>>
>> 8db681f6989%7Cf46cb8ea79004d108ceb80e8c1c81ee7%7C0%7C0%7C6382182
>> 5635
>>>>
>> 1940428%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV
>> 2luMzIi
>>>>
>> LCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=X4Cm12TD
>> 2iIH498
>>>> sJlRMPzOFz7IX9XuVdhGX8%2FO0Lv4%3D&reserved=0
>>>> .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 <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://st/
>>>>
>> at%2F&data=05%7C01%7Ctim.howard%40dec.ny.gov%7Cbe436282b0844b9c
>> a99a0
>>>>
>> 8db681f6989%7Cf46cb8ea79004d108ceb80e8c1c81ee7%7C0%7C0%7C6382182
>> 5635
>>>>
>> 1940428%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV
>> 2luMzIi
>>>>
>> LCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=QJgBzdN0a
>> pmJ61x
>>>> gwFp8pY3WQLOSTjt2YVdJGX681q0%3D&reserved=0
>>>> .ethz.ch%2Fpipermail%2Fr-sig-geo%2F2023-
>>>
>> June%2F029284.html&data=05%7C01%7Ctim.howard%40dec.ny.gov%7C4d3f
>>>
>> 99e6eeff4493a3a108db67a26858%7Cf46cb8ea79004d108ceb80e8c1c81ee7%7
>>>
>> C0%7C0%7C638217719464245369%7CUnknown%7CTWFpbGZsb3d8eyJWIjoi
>>>
>> MC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C300
>>>
>> 0%7C%7C%7C&sdata=pQUYMZs%2FRsLeotKUB0XduKCkpq6Ir0Vq3VPsAZ8eT
>>> Yk%3D&reserved=0). 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://st/
>>>>
>> at%2F&data=05%7C01%7Ctim.howard%40dec.ny.gov%7Cbe436282b0844b9c
>> a99a0
>>>>
>> 8db681f6989%7Cf46cb8ea79004d108ceb80e8c1c81ee7%7C0%7C0%7C6382182
>> 5635
>>>>
>> 1940428%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV
>> 2luMzIi
>>>>
>> LCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=QJgBzdN0a
>> pmJ61x
>>>> gwFp8pY3WQLOSTjt2YVdJGX681q0%3D&reserved=0
>>>> .ethz.ch%2Fmailman%2Flistinfo%2Fr-sig-
>>> geo&data=05%7C01%7Ctim.howard%40
>>>>
>>>
>> dec.ny.gov%7C4d3f99e6eeff4493a3a108db67a26858%7Cf46cb8ea79004d108c
>>> eb80
>>>>
>>>
>> e8c1c81ee7%7C0%7C0%7C638217719464245369%7CUnknown%7CTWFpbGZs
>>> b3d8eyJWIj
>>>>
>>>
>> oiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3
>>> 000%7C
>>>>
>>>
>> %7C%7C&sdata=RVBbcRMpZINzm0yoMZuwfisK575l3hiQzYSAUiG9U4E%3D&r
>>> eserved=0
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo using r-project.org
>> https://stat.e/
>> thz.ch%2Fmailman%2Flistinfo%2Fr-sig-
>> geo&data=05%7C01%7Ctim.howard%40dec.ny.gov%7Cbe436282b0844b9ca9
>> 9a08db681f6989%7Cf46cb8ea79004d108ceb80e8c1c81ee7%7C0%7C0%7C6382
>> 18256351940428%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiL
>> CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sd
>> ata=%2FAyGIrey3G6HOOv3rWGC02L7LJCJ5NSaDnhqEvq8C2I%3D&reserved=
>> 0
More information about the R-sig-Geo
mailing list