R 如何从形状文件中使用纬度和经度查找城市?

R 如何从形状文件中使用纬度和经度查找城市?,r,ggplot2,shapefile,R,Ggplot2,Shapefile,我的问题是:我想使用许多经度和纬度数据从shapefile中获取城市名称。某些晶格度和经度不一定位于多边形(城市)的中心,而是位于多边形的某些部分。我的意思是,我不知道这一点属于哪个城市,这就是我想知道的。在形状文件中,具有属于相应城市的每个多边形的名称 我知道谷歌和其他API是付费的和/或有限的。 我更喜欢从shapefile中获取 [链接至巴西圣保罗州的shapfile(城市)(geoftp.ibge.gov.br/organizacao_do_territorio/malhas_terri

我的问题是:我想使用许多经度和纬度数据从shapefile中获取城市名称。某些晶格度和经度不一定位于多边形(城市)的中心,而是位于多边形的某些部分。我的意思是,我不知道这一点属于哪个城市,这就是我想知道的。在形状文件中,具有属于相应城市的每个多边形的名称

我知道谷歌和其他API是付费的和/或有限的。 我更喜欢从shapefile中获取

[链接至巴西圣保罗州的shapfile(城市)(geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2020/UFs/SP/SP_Municipios_2020.zip)

以下是一些例子:


“coord出于某种原因,library
revgeo
(使用光子地理编码器进行反向地理编码)目前不适用于我。您可以尝试以下方法:

library(tidyverse)
library(rjson)

coord %>%
  select(lon, lat) %>%
  imap(~str_c(.y, "=", .x)) %>%
  pmap(~str_c(c(...), collapse = "&")) %>%
  str_c("https://photon.komoot.io/reverse?", .) %>%
  map(~rjson::fromJSON(file = .x)) %>%
  map(~pluck(.x, "features", 1, "properties")) %>%
  map_dfr(~.x[c("country", "city", "county", "district", "state")]) %>%
  cbind(coord, .)

       lon      lat country          city                                                   county        district     state
1 -48.1766 -21.7946  Brasil    Araraquara            Região Geográfica Intermediária de Araraquara    Vila Melhado São Paulo
2 -50.0780 -21.4209  Brasil     Penápolis             Região Geográfica Intermediária de Araçatuba       Penápolis São Paulo
3 -52.9580 -22.4820  Brasil        Rosana   Região Geográfica Intermediária de Presidente Prudente          Rosana São Paulo
4 -51.3837 -20.8939  Brasil     Andradina             Região Geográfica Intermediária de Araçatuba  Vila Peliciari São Paulo
5 -50.2466 -20.2834  Brasil Fernandópolis Região Geográfica Intermediária de São José do Rio Preto         Coester São Paulo
6 -47.0006 -21.4708  Brasil        Mococa              Região Geográfica Intermediária de Campinas          Centro São Paulo
7 -47.8348 -24.4881  Brasil      Registro              Região Geográfica Intermediária de Sorocaba   Vila Paraguai São Paulo
8 -45.0857 -23.4339  Brasil       Ubatuba  Região Metropolitana do Vale do Paraíba e Litoral Norte Jardim Carolina São Paulo
使用形状文件:

library(sf)

shp_df <- read_sf(data_path)
st_coord <- st_as_sf(coord, coords = c("lon", "lat"), crs = st_crs(shp_df))
coord$city <- shp_df[unlist(st_within(st_coord, shp_df)),]$NM_MUN

coord

       lon      lat          city
1 -48.1766 -21.7946    Araraquara
2 -50.0780 -21.4209     Penápolis
3 -52.9580 -22.4820        Rosana
4 -51.3837 -20.8939     Andradina
5 -50.2466 -20.2834 Fernandópolis
6 -47.0006 -21.4708        Mococa
7 -47.8348 -24.4881      Registro
8 -45.0857 -23.4339       Ubatuba
库(sf)

shp_df你也可以发布多边形的示例吗?并非每个人都愿意使用zip文件,因此提供一些示例可能会让您获得更多答案!!它解决了我的问题。谢谢@det