未添加到地图中的点
Points not added to the map plot
我需要使用简单的 points
函数向地图添加一些点。问题是点不会添加到地图中。这是一个简单的命令,我遵循了一些教程,其中以这种方式向地图添加点,但在我的情况下不是这样。 Plot
函数正确地绘制了德克萨斯等值线,但下一行 (points
) 根本没有向地图添加点:
library(rgdal)
library(rgeos)
library(sp)
companies <- read.csv('geoloc_data_comp.csv', header = T, dec = ',', sep = ';')
states <- readOGR('.', 'states')
plot(states[states@data$stat_name == 'texas',])
points(companies$coords.x1, companies$coords.x2, pch = 21)
首先你应该开始避免使用 rgeos
/rgdal
因为它们将不再被维护。参见:https://github.com/r-spatial/evolution
sf
正在替换它们:
library(sp)
library(sf)
library(spData) #used because I wanted US states
# list of data in spData you have one with US states
data(package = "spData")
如果您想读取 shapefile 或其他 GIS 格式,请检查 sf::st_read()
(而不是 readOGR()
)
# one way with sf
plot(us_states$geometry[us_states$NAME == "Texas"])
# if you want do use the sp way
us_sp <- as(us_states, "Spatial") # convert to sp
plot(us_sp[us_sp@data$NAME == "Texas",])
在 sf
中,几何图形位于一列中(参见“几何图形”),而不是具有嵌套列表的 R S4(参见@data 和 @polygones)。
在获得一些分数之前,我们需要检查我们的数据在哪个 CRS 中。如果你不知道 CRS 我喜欢这个网站:https://ihatecoordinatesystems.com/
您在 us_states 文档中也有信息:https://www.rdocumentation.org/packages/spData/versions/2.0.1/topics/us_states
那么你可以使用:
sp::proj4string(us_sp)
sf::st_crs(us_states)
# This is EPSG 4269 or NAD83
如果你想使用 points()
他们需要在这个坐标系中(我怀疑这解释了你的问题 即不同的 CRS)。
你没有提供数据点所以我制作了一些:
library(osmdata)
#this will just download node matching the key/value place=city
some_city_in_texas <- osmdata::opq(osmdata::getbb("Texas US"),
nodes_only = TRUE) %>%
osmdata::add_osm_feature(key = "place", value = "city") %>%
osmdata::osmdata_sf() #keep them in sf format
# osmdata_sp() also exist
class osmdata有点复杂,不过这里你只需要知道some_city_in_texas$osm_points
给我们提供点数(测试points()
)。现在我们可以查看他们的 CRS:
sf::st_crs(some_city_in_texas$osm_points)
如您所见,我们在另一个 CRS 中,因此我们需要对其进行转换。 (您可能需要这样做)。
city_in_texas <- sf::st_transform(some_city_in_texas$osm_points,
4269)
sf
使用简单特征标准来存储定位,points()
需要两个向量 x&y。您还应该检查(错误的常见原因):R 使用 x/y (long/lat) 而不是 lat/long.
这里我们将 city_in_texas
转换为坐标。 (如果你需要做相反的事情,即将带有 X/Y 的数据帧转换为 sf 对象,请查看 sf::st_as_sf()
)
coords_city <- sf::st_coordinates(city_in_texas)
现在终于可以正常工作了:
plot(us_states$geometry[us_states$NAME == "Texas"])
points(coords_city, pch = 21)
好的资源是https://r-spatial.org/ and https://geocompr.robinlovelace.net/
我需要使用简单的 points
函数向地图添加一些点。问题是点不会添加到地图中。这是一个简单的命令,我遵循了一些教程,其中以这种方式向地图添加点,但在我的情况下不是这样。 Plot
函数正确地绘制了德克萨斯等值线,但下一行 (points
) 根本没有向地图添加点:
library(rgdal)
library(rgeos)
library(sp)
companies <- read.csv('geoloc_data_comp.csv', header = T, dec = ',', sep = ';')
states <- readOGR('.', 'states')
plot(states[states@data$stat_name == 'texas',])
points(companies$coords.x1, companies$coords.x2, pch = 21)
首先你应该开始避免使用 rgeos
/rgdal
因为它们将不再被维护。参见:https://github.com/r-spatial/evolution
sf
正在替换它们:
library(sp)
library(sf)
library(spData) #used because I wanted US states
# list of data in spData you have one with US states
data(package = "spData")
如果您想读取 shapefile 或其他 GIS 格式,请检查 sf::st_read()
(而不是 readOGR()
)
# one way with sf
plot(us_states$geometry[us_states$NAME == "Texas"])
# if you want do use the sp way
us_sp <- as(us_states, "Spatial") # convert to sp
plot(us_sp[us_sp@data$NAME == "Texas",])
在 sf
中,几何图形位于一列中(参见“几何图形”),而不是具有嵌套列表的 R S4(参见@data 和 @polygones)。
在获得一些分数之前,我们需要检查我们的数据在哪个 CRS 中。如果你不知道 CRS 我喜欢这个网站:https://ihatecoordinatesystems.com/
您在 us_states 文档中也有信息:https://www.rdocumentation.org/packages/spData/versions/2.0.1/topics/us_states
那么你可以使用:
sp::proj4string(us_sp)
sf::st_crs(us_states)
# This is EPSG 4269 or NAD83
如果你想使用 points()
他们需要在这个坐标系中(我怀疑这解释了你的问题 即不同的 CRS)。
你没有提供数据点所以我制作了一些:
library(osmdata)
#this will just download node matching the key/value place=city
some_city_in_texas <- osmdata::opq(osmdata::getbb("Texas US"),
nodes_only = TRUE) %>%
osmdata::add_osm_feature(key = "place", value = "city") %>%
osmdata::osmdata_sf() #keep them in sf format
# osmdata_sp() also exist
class osmdata有点复杂,不过这里你只需要知道some_city_in_texas$osm_points
给我们提供点数(测试points()
)。现在我们可以查看他们的 CRS:
sf::st_crs(some_city_in_texas$osm_points)
如您所见,我们在另一个 CRS 中,因此我们需要对其进行转换。 (您可能需要这样做)。
city_in_texas <- sf::st_transform(some_city_in_texas$osm_points,
4269)
sf
使用简单特征标准来存储定位,points()
需要两个向量 x&y。您还应该检查(错误的常见原因):R 使用 x/y (long/lat) 而不是 lat/long.
这里我们将 city_in_texas
转换为坐标。 (如果你需要做相反的事情,即将带有 X/Y 的数据帧转换为 sf 对象,请查看 sf::st_as_sf()
)
coords_city <- sf::st_coordinates(city_in_texas)
现在终于可以正常工作了:
plot(us_states$geometry[us_states$NAME == "Texas"])
points(coords_city, pch = 21)
好的资源是https://r-spatial.org/ and https://geocompr.robinlovelace.net/