未添加到地图中的点

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/