Добавление данных / значений в shp вызывает ошибку. В чем дело? - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь использовать библиотеку (tmap) для окраски регионов после некоторого значения (например, дохода). У меня есть shp-файл для Швеции и некоторые данные о доходах в xlsx-файле.

Сначала я импортирую данные:

map <- readOGR("Kommun_RT90_region.shp", encoding = "UTF-8")
kapital_kommun <- read_xlsx("kapital_edit2.xlsx")

Вот как map@data выглядит:


KnKod         KnNamn
0  0114 Upplands Väsby
1  0115     Vallentuna
2  0117      Österåker
3  0120         Värmdö
4  0123       Järfälla
5  0125          Ekerö

KnKod - это официальный ключ для каждого региона, а KnNamn - это название региона. Если я запустил следующий код, я получу карту Швеции с уникальным цветом для каждых 290 регионов:

tm_shape(map) + tm_fill("KnKod") + tm_borders()

Вот как выглядит карта Проблема начинается, когда я добавляю информацию из моего xlsx-файла в shp-файл:

map <- merge(map, kapital_kommun, by = "KnKod")

KnKod         KnNamn medel_finans_kapital
1  0114 Upplands Väsby               125573
2  0115     Vallentuna                56361
3  0117      Österåker                93963
4  0120         Värmdö                67308
5  0123       Järfälla                32321
6  0125          Ekerö               102685

Это выглядит нормально, но теперь я получаю сообщение об ошибке, когда запускаю предыдущий код без карты / сюжет нарисован. Я пробовал как «KnKod», так и «medel_finans_kapital»:

tm_shape(map) + tm_fill("KnKod") + tm_borders()

> tm_shape(map) + tm_fill("KnKod") + tm_borders()
Error in st_as_sfc.SpatialPolygons(sp::geometry(x), ...) : 
  package rgeos required for finding out which hole belongs to which exterior ring
In addition: Warning message:
In sp::proj4string(obj) : CRS object has comment, which is lost in output

Похоже, что добавление кода столбца medel_finans_kapital «ломает». Есть идеи?

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

Пожалуйста, приведите более воспроизводимый пример вашей проблемы. Трудно найти, что не так, просто прочитав код.

Думаю, проблема в том, что когда вы используете функцию merge () , у вас еще есть sp объект после этого?

Также обратите внимание, что определение sp теперь устарело в пользу sf . Кроме того, с sf вы можете использовать стандартные функции tidyverse . Сын вместо merge вы можете использовать что-то вроде left_join .

Я рекомендую вам взглянуть на мои заметки из worksop: https://orlando-sabogal.github.io/SpatialAnalysis-MontevideoWorkshop2019/

Он не обновляется с прошлого года, но должен работать.

0 голосов
/ 02 августа 2020

РЕШЕНИЕ:
Вместо:
map <- merge (map, kapital_kommun, by = "KnKod") <br>Я использовал:
map $ доход <- kapital_kommun $ medel_finans_kapital <br>
Теперь я могу построить карту. Почему это имело значение, я понятия не имею. Результат выглядит одинаково - оба столбца выглядят одинаково и помечены как «число».

...