The OpenStreetMap package is using PseudoMercator (quite common for image tile servers) which is EPSG:3857. Using your long/lat min max the numbers give the right neighbourhood, perhaps a transcribe error in the original 'rw' data frame numbers for Y?
https://gist.github.com/mdsumner/e6997c2f4a54c743e078aca8401537a0?permalink_comment_id=4597644#gistcomment-4597644 On Mon, Jun 12, 2023 at 12:58 AM Kevin Zembower <ke...@zembower.org> wrote: > Hi, Mike, thanks for answering me from across the world! > > I created my polygon of my neighborhood the old fashion way: by printing > a map with a grid in meters, and using a pair of navigational dividers > to pick off the x and y coordinates of the borders of my neighborhood. > You can see a map of my neighborhood, drawn by someone else, at > https://www.radnorwinston.org/, if you're curious. > > Here's code to generate a map of this area, one with degrees lat/long, > and the one I used, with a grid of meters: > > =========================================== > ## This gives degrees lat long: > library(tidyverse) > library(tigris) > options(tigris_use_cache = TRUE) > library(sf) > library(OpenStreetMap) > > lat_max <- 39.3525 > long_max <- -76.617 > 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 > > ## This gives map with grid in meters: > library(tidyverse) > library(tidycensus) > library(sf) > library(tmap) > library(tigris) > options(tigris_use_cache = TRUE) > library(tmaptools) > > rw_block_list <- c("3000", "3001", "3002", "3005", "3006", "3007", > "3008", "3009", "3010", "3011", "3012") > > ## Get the RW blocks from the census: > rw_blocks <- blocks(state = "MD", > county = "Baltimore city", > year = "2020") %>% > filter(substr(GEOID20, 6, 11) == "271101" & > substr(GEOID20, 12, 15) %in% rw_block_list) > > ## Create a map of just the RW blocks: > rw_base_blocks <- read_osm(bb(rw_blocks, ext = 1.3)) > > tmap_mode("plot") > > (RW_block_map <- tm_shape(rw_base_blocks) + > tm_rgb() + > tm_shape(rw_blocks) + > tm_fill("MAP_COLORS", alpha = 0.2, palette = "Accent", n = 10) + > tm_borders() + > tm_scale_bar() + > tm_grid() + tm_xlab("Long") + tm_ylab("Lat") + > tm_layout(title = "Radnor-Winston Neighborhood") > ) > =================================================== > > You're right, that I did pick my example "1 POINT (-76.61246 39.35010)" > just by picking a random point in my neighborhood, using Google Maps. > > In the second example that gives the grid in meters, I just assumed that > this was CRS 6487, due to it being Maryland and in meters. Was this a > bad assumption? How can I tell what the CRS of the return of the call to > "read_osm(bb(rw_blocks, ext = 1.3))" is? When I display it, it says: > > > rw_base_blocks > stars object with 3 dimensions and 1 attribute > attribute(s), summary of first 1e+05 cells: > Min. 1st Qu. Median Mean 3rd Qu. Max. > X 0 217 224 219.915 238 255 > dimension(s): > from to offset delta refsys > values x/y > x 1 663 -8528854 1.19942 WGS 84 / Pseudo-Mercator > NULL [x] > y 1 907 4772338 -1.19981 WGS 84 / Pseudo-Mercator > NULL [y] > band 1 3 NA NA NA red , green, > blue > > > > Thanks, again, for your work to help me. Thanks also for introducing me > to Github Gist, which I had never heard of before. I'm going to go to > that page next and see if I can put this response in there. > > Take care. > > -Kevin > > On 6/11/23 04:04, Michael Sumner wrote: > > I took a guess that your coordinates are not in EPSG:6487 but in global > > Mercator (EPSG:3857) which seems to give a reasonable region from online > > image servers. > > > > https://gist.github.com/mdsumner/e6997c2f4a54c743e078aca8401537a0 > > <https://gist.github.com/mdsumner/e6997c2f4a54c743e078aca8401537a0> > > > > If that looks ok? Then, simply replace 6487 with 3857 in your code, > > but also please take care to track down where your neighbourhood > > coordinates for the x,y range came from. 3857 is the infamous global > > google mercator, and that might be what you're using or simply close to > > it, you should make sure you know. :) > > > > I'm using in-dev code in the example, it's not because I want you to > > use that or advise you to - it's just to keep a record of what I did. I > > experimented with the code and scale to guess at what might be the > problem. > > > > If the pic in my gist is not on the right track I'm happy to follow up, > > best of luck! > > > > HTH, Mike > > > > > > > > On Sun, Jun 11, 2023 at 5:27 AM Kevin Zembower via R-sig-Geo > > <email@example.com <mailto:firstname.lastname@example.org>> wrote: > > > > In my continuing work on reporting on US Census data for my > > neighborhood, I'd like to draw a map of the boundaries of it. I was > > successful in creating and printing an OSM basemap, with the US > Census > > blocks that make up my neighborhood on it. > > > > Now, I'd like to create my own polygon, of the boundaries of my > > neighborhood, because the census blocks don't line up exactly with > the > > neighborhood boundaries. I need help creating a polygon that I can > > submit to read_osm() that will correctly return an OSM map of my > area. > > > > Here's what I've tried so far: > > ## Reproducible simple example: > > library(tidyverse) > > library(sf) > > > > rw <- data.frame( ## Simplified neighborhood rectangle > > Longitude = c(-8528150, -8528500, -8528500, -8528150), > > Latitude = c( 4771475, 4771475, 4771880, 4771880) > > ) > > > > rw ## Returns (as expected): > > > > > rw > > Longitude Latitude > > 1 -8528150 4771475 > > 2 -8528500 4771475 > > 3 -8528500 4771880 > > 4 -8528150 4771880 > > > > > > > rw %>% > > st_as_sf(coords = c("Longitude", "Latitude"), dim = "XY") %>% > > st_set_crs(6487) %>% ## CRS 6487 is NAD83 (2011) Maryland in > > meters > > st_transform(crs = 4269) ## CRS 4269 is NAD83 > > > > ## Returns: > > > > Simple feature collection with 4 features and 0 fields > > Geometry type: POINT > > Dimension: XY > > Bounding box: xmin: 171.777 ymin: 24.65904 xmax: 171.7818 ymax: > > 24.66314 > > Geodetic CRS: NAD83 > > geometry > > 1 POINT (171.7818 24.66192) > > 2 POINT (171.7806 24.65904) > > 3 POINT (171.777 24.66026) > > 4 POINT (171.7781 24.66314) > > > > > > > I expected the POINTS to look like: > > 1 POINT (-76.61246 39.35010) > > > > Can anyone suggest what I'm doing wrong? Thanks so much in advance. > > I've > > worked on it all day today, without making much progress. > > > > -Kevin > > > > _______________________________________________ > > R-sig-Geo mailing list > > R-sig-Geo@r-project.org <mailto:R-sig-Geo@r-project.org> > > https://stat.ethz.ch/mailman/listinfo/r-sig-geo > > <https://stat.ethz.ch/mailman/listinfo/r-sig-geo> > > > > > > > > -- > > Michael Sumner > > Software and Database Engineer > > Australian Antarctic Division > > Hobart, Australia > > e-mail: mdsum...@gmail.com <mailto:mdsum...@gmail.com> > > -- Michael Sumner Software and Database Engineer Australian Antarctic Division Hobart, Australia e-mail: mdsum...@gmail.com [[alternative HTML version deleted]] _______________________________________________ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo