R: построение соседних стран с помощью картографических инструментов

Скажем, я рисую страны на карте мира с помощью картографических инструментов. Если бы я рисовал страну, есть ли способ нанести страны, граничащие с этой страной, другим цветом? Я использую шейп-файл wrld_simpl, который поставляется с картографическими инструментами, поэтому, скажем, я рисую Китай:

plot(wrld_simpl[wrld_simpl$NAME=='China',], col='red', add=T)

есть ли способ заставить его отображать все страны, граничащие с Китаем. Я хочу иметь возможность сделать это для множества разных стран, поэтому в идеале мне нужно общее решение, а не конкретное для Китая.


person userk    schedule 07.08.2013    source источник


Ответы (1)


Как насчет gTouches или gIntersects в rgeos?

library(rgeos)
library(maptools)
wc <- subset(wrld_simpl, NAME == "China")
world <- subset(wrld_simpl, !NAME == "China")

Создайте вектор для хранения теста:

tst <- logical(nrow(world))

Пройдите тест:

for (i in 1:nrow(world)) {
    tst[i] <- gTouches(wc, world[i,])
}

Посмотрите результат:

levels(world$NAME)[world$NAME[tst]]
[1] "India"  "Russia"

plot(wc)
plot(world[tst, ], add = TRUE, col = "grey")

(Дальнейшая переписка по международным делам вестись не будет, но gIntersects, кажется, дает лучший ответ).

Я настоятельно советую вам относиться к этим встроенным наборам данных с осторожностью, вам обязательно нужно получить надежные данные, если вы собираетесь использовать такой инструмент для каких-либо нетривиальных целей. Геометрия и данные уже достаточно сложны. :)

for (i in 1:nrow(world)) {
     tst[i] <- gIntersects(wc, world[i,])
 }
length(levels(world$NAME)[world$NAME[tst]])
[1] 14
 plot(world[tst, ], col = "firebrick")
 plot(wc, add = TRUE, col = "grey")
person mdsumner    schedule 07.08.2013
comment
Это отличное решение, особенно с gIntersects, спасибо! - person userk; 07.08.2013