Нанесение слоя точек с использованием tmap на базовую карту "World" - PullRequest
1 голос
/ 07 апреля 2020

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

 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

1 Ответ

1 голос
/ 09 апреля 2020

Что вам нужно сделать, это указать 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

enter image description here

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

...