将包含坐标的csv数据添加到从shp文件生成的地图中,并获取每个点的信息
Add csv data containing coordinates to a map generated from a shp file and obtain information on each point
我是 SAS 编程的新手,我一直在研究如何将从 INE 下载的 shp 文件与包含两个字段的 X 和 Y 坐标的商店特征文件结合起来。
我想为每个自治区制作一张地图,到目前为止,我已经成功地将我从 INE 下载的“基本”地图与我的人口普查部分的特征数据和这个连接起来我在地图上展示了,所以你可以看到巴斯克地区的地图,红色的是有商店的多边形。
这几乎是我想要的,但我不希望整个多边形都被着色,我只想在商店所在的多边形中出现一个点(X 和 Y 坐标),我也会就这样,把店家特征csv中的信息或者从INE下载的文件中的光标传给我。
不知道我自己解释的对不对,我希望是这样,我怎么能这样呢?非常感谢你,如果你能在这方面帮助我,我会很高兴。
您可以下载包含西班牙所有多边形的 INE 文件以及此页面上的所有人口普查部分:https://www.ine.es/ss/Satellite?L=es_ES&c=Page&cid=1259952026632&p=1259952026632&pagename=ProductosYServicios%2FPYSLayout
select 2021年然后继续。
我无法共享商店文件,但它适用于任何包含 2 个字段的 excel / csv,一个字段具有 X 坐标,另一个字段具有 Y 坐标。
https://ibb.co/26yqS8G
在这张图片中,您可以看到我用下面的代码做了什么
我想要类似的东西,但不是给有商店的多边形着色,而是显示商店所在的确切点,那个点给我信息(来自 csv)
library(ggplot2)
library(sf)
install.packages('rnaturalearth')
library(rnaturalearth)
ruta = "J:\Data Quality & Process\ABEL\MAPAS\CARACT_ESTANCOS_UV.csv"
datos.pos_ = read.csv2(ruta)
names(datos.pos_)
datos.INE = st_read('Espana_Seccionado2021/SECC_CE_20210101.shp')
names(datos.INE)
#Voy a intentar seccionar los datos del INE. País vasco (NCA)
PV = datos.INE[datos.INE$NCA == 'País Vasco' , ]
plot(st_geometry(PV), border="#aaaaaa", main="País Vasco")
#Join
datos_merged <- merge(PV, datos.pos_, by.x = "CUSEC", by.y = "SECCION_CENSAL")
plot(st_geometry(PV), border="#aaaaaa", main="País Vasco")
plot(st_geometry(datos.pos_), add=T, col="red")
plot(st_geometry(datos_merged_radio), add=T, lwd = 2) #Esto es para añadir un radio pero tengo que poner mas codigo antes que esta en el archivo de Pruebas20220111
´´´
你需要一些传单的味道。你应该了解一下 mapview.
这是 Llanes 的一个小例子(希望它也在 Pais Vasco!)。
使用osmdata
只是为了在兰内斯附近开一些商店。
它应该产生你想要的。你可以从它开始,然后将它与你的数据结合起来。祝你好运!
library(sf)
library(osmdata)
library(mapview)
#this will just download node for key = "shop" in Llanes
some_shop_in_Llanes <- osmdata::opq(osmdata::getbb("Llanes spain"),
nodes_only = TRUE) %>%
osmdata::add_osm_feature(key = "shop") %>%
osmdata::osmdata_sf() #keep them in sf format
# some_shop_in_Llanes is a bit more complex object but our shopes are in
# some_shop_in_Lanes$osm_points
# here I get their coords X/Y
just_the_coord <- sf::st_coordinates(some_shop_in_Llanes$osm_points)
# I get plenty of data so I selected only the name and X?Y
shop_with_coords <- cbind(some_shop_in_Llanes$osm_points, just_the_coord) %>%
dplyr::select(name, X, Y)
# then plot it!
mapview(shop_with_coords)
编辑以仅提供具有 X/Y
的数据框
# 1. Some shops
shop <- data.frame(X = c(-4.758628, -4.758244, -4.756829, -4.759394, -4.753698,
-4.735330, -4.864548, -4.863816, -4.784694, -4.738924),
Y = c(43.42144, 43.42244, 43.42063, 43.42170, 43.41899,
43.41181, 43.42327, 43.42370, 43.42422, 43.40150),
name = LETTERS[1:10])
# 2. Convert into an sf object
shop_sf <- sf::st_as_sf(shop, coords = c("X", "Y"))
# 2.b editing to add CRS my bad!
shop_sf <- sf::st_set_crs(shop_sf, 4326)
# Plot them thanks to mapview
mapview(shop_sf)
我是 SAS 编程的新手,我一直在研究如何将从 INE 下载的 shp 文件与包含两个字段的 X 和 Y 坐标的商店特征文件结合起来。
我想为每个自治区制作一张地图,到目前为止,我已经成功地将我从 INE 下载的“基本”地图与我的人口普查部分的特征数据和这个连接起来我在地图上展示了,所以你可以看到巴斯克地区的地图,红色的是有商店的多边形。
这几乎是我想要的,但我不希望整个多边形都被着色,我只想在商店所在的多边形中出现一个点(X 和 Y 坐标),我也会就这样,把店家特征csv中的信息或者从INE下载的文件中的光标传给我。
不知道我自己解释的对不对,我希望是这样,我怎么能这样呢?非常感谢你,如果你能在这方面帮助我,我会很高兴。
您可以下载包含西班牙所有多边形的 INE 文件以及此页面上的所有人口普查部分:https://www.ine.es/ss/Satellite?L=es_ES&c=Page&cid=1259952026632&p=1259952026632&pagename=ProductosYServicios%2FPYSLayout select 2021年然后继续。
我无法共享商店文件,但它适用于任何包含 2 个字段的 excel / csv,一个字段具有 X 坐标,另一个字段具有 Y 坐标。
https://ibb.co/26yqS8G 在这张图片中,您可以看到我用下面的代码做了什么
我想要类似的东西,但不是给有商店的多边形着色,而是显示商店所在的确切点,那个点给我信息(来自 csv)
library(ggplot2)
library(sf)
install.packages('rnaturalearth')
library(rnaturalearth)
ruta = "J:\Data Quality & Process\ABEL\MAPAS\CARACT_ESTANCOS_UV.csv"
datos.pos_ = read.csv2(ruta)
names(datos.pos_)
datos.INE = st_read('Espana_Seccionado2021/SECC_CE_20210101.shp')
names(datos.INE)
#Voy a intentar seccionar los datos del INE. País vasco (NCA)
PV = datos.INE[datos.INE$NCA == 'País Vasco' , ]
plot(st_geometry(PV), border="#aaaaaa", main="País Vasco")
#Join
datos_merged <- merge(PV, datos.pos_, by.x = "CUSEC", by.y = "SECCION_CENSAL")
plot(st_geometry(PV), border="#aaaaaa", main="País Vasco")
plot(st_geometry(datos.pos_), add=T, col="red")
plot(st_geometry(datos_merged_radio), add=T, lwd = 2) #Esto es para añadir un radio pero tengo que poner mas codigo antes que esta en el archivo de Pruebas20220111
´´´
你需要一些传单的味道。你应该了解一下 mapview.
这是 Llanes 的一个小例子(希望它也在 Pais Vasco!)。
使用osmdata
只是为了在兰内斯附近开一些商店。
它应该产生你想要的。你可以从它开始,然后将它与你的数据结合起来。祝你好运!
library(sf)
library(osmdata)
library(mapview)
#this will just download node for key = "shop" in Llanes
some_shop_in_Llanes <- osmdata::opq(osmdata::getbb("Llanes spain"),
nodes_only = TRUE) %>%
osmdata::add_osm_feature(key = "shop") %>%
osmdata::osmdata_sf() #keep them in sf format
# some_shop_in_Llanes is a bit more complex object but our shopes are in
# some_shop_in_Lanes$osm_points
# here I get their coords X/Y
just_the_coord <- sf::st_coordinates(some_shop_in_Llanes$osm_points)
# I get plenty of data so I selected only the name and X?Y
shop_with_coords <- cbind(some_shop_in_Llanes$osm_points, just_the_coord) %>%
dplyr::select(name, X, Y)
# then plot it!
mapview(shop_with_coords)
编辑以仅提供具有 X/Y
的数据框# 1. Some shops
shop <- data.frame(X = c(-4.758628, -4.758244, -4.756829, -4.759394, -4.753698,
-4.735330, -4.864548, -4.863816, -4.784694, -4.738924),
Y = c(43.42144, 43.42244, 43.42063, 43.42170, 43.41899,
43.41181, 43.42327, 43.42370, 43.42422, 43.40150),
name = LETTERS[1:10])
# 2. Convert into an sf object
shop_sf <- sf::st_as_sf(shop, coords = c("X", "Y"))
# 2.b editing to add CRS my bad!
shop_sf <- sf::st_set_crs(shop_sf, 4326)
# Plot them thanks to mapview
mapview(shop_sf)