Построение слоя точек с использованием tmap поверх базовой карты мира

Я работаю с геопространственными данными:

 place_name    id region_country     x     y
    <chr>      <dbl> <chr>          <dbl> <dbl>
     1 Barcelona  10102 Spain           41.4  2.18
     2 Bilbao     10103 Spain           43.2 -2.97
     3 Cadiz      10104 Spain           36.5 -6.30
     4 Gibraltar  10106 Spain           36.1 -5.35
     5 La Coruña  10107 Spain           43.4 -8.38

Я хочу нанести эти города на базовую карту мира tmap.

library(sf)
library(tmap)
data("World")

Вот мои данные:

x <- c(41.38333, 43.25000, 36.53361, 36.13333, 43.36667)
y <- c(2.18333, -2.96667, -6.29944, -5.35000, -8.38333)

Создание объекта data.frame:

 geocode <- data.frame(x,y)

Преобразование в объект SF:

geocode2 <- st_as_sf(geocode, coords = c("x", "y"))

Построение карты:

map1 <- tm_shape(World) +  # basemap
        tm_fill() +
        tm_borders() +
        tm_shape(geocode2)+      # dots shape
        tm_dots()

map1

Ошибка :

Error in if (!tmaptools::is_projected(shp)) { : valeur manquante là où TRUE / FALSE est requis

person Wilcar    schedule 07.04.2020    source источник


Ответы (1)


Что вам нужно сделать, так это указать CRS (Систему координат) при применении функции sf::st_as_sf(). Он дает систему отсчета для того, что в противном случае было бы просто некоторыми числами.

Ваши данные имеют вид GPS-координат, которые находятся в WGS84 = EPSG: 4326.

library(sf)
library(tmap)
data("World")

x <- c(41.38333, 43.25000, 36.53361, 36.13333, 43.36667)
y <- c(2.18333, -2.96667, -6.29944, -5.35000, -8.38333)

geocode <- data.frame(x,y)

geocode2 <- st_as_sf(geocode, coords = c("x", "y"), crs = 4326)

map1 <- tm_shape(World) +  # basemap
  tm_borders() +
  tm_shape(geocode2) +      # dots shape
  tm_dots(col = "red", size = .3)

map1

введите здесь описание изображения

Обратите внимание, что вы можете поменять местами координаты X и Y в вашем st_as_sf вызове, чтобы ваши точки были размещены на Пиренейском полуострове, а не в Экваториальной Африке :)

person Jindra Lacko    schedule 09.04.2020