Вопрос по r – R: создание карты выбранных канадских провинций и штатов США

12

Я пытаюсь создать карту выбранных канадских провинций / территорий и отдельных штатов США. Пока что самые хорошие карты, по-видимому, сгенерированы с помощью данных GADM:http://www.gadm.org/

Однако я не смог нанести на карту США и Канаду одну и ту же карту или нанести на карту только отдельные провинции / территории и штаты. Например, меня интересуют Аляска, Юкон, СЗТ, Британская Колумбия, Альберта, Монтана и другие.

Кроме того, карта США, кажется, разделена вдоль международной линии дат.

Может кто-нибудь, пожалуйста, помогите мне:

plot the aforementioned provinces/territories and states on a single map avoid having the U.S. split along the International dateline overlay a latitude-longitude grid select a specific projection, maybe the polyconic.

Возможно, spplot не позволяет пользователям указывать прогнозы. Я не увидел опцию выбора проекции на странице справки spplot. Я знаю, как выбирать проекции с помощью функции карты в пакете карт, но эти карты выглядели не так хорошо, и я не мог построить желаемое подмножество провинций / территорий и штатов с этой функцией.

Я не знаю, как начать добавлять сетку широта-долгота. Тем не менее, раздел 3.2 файла "sp.pdf" кажется, чтобы обратиться к теме.

Ниже приведен код, который я придумал до сих пор. Я загрузил каждый связанный с картой пакет, на который я наткнулся, и закомментировал данные GADM, за исключением границ провинций / территорий или штатов.

К сожалению, пока мне удалось построить только карты Канады или США.

library(maps)
library(mapproj)
library(mapdata)
library(rgeos)
library(maptools)
library(sp)
library(raster)
library(rgdal)

# can0<-getData('GADM', country="CAN", level=0) # Canada
  can1<-getData('GADM', country="CAN", level=1) # provinces
# can2<-getData('GADM', country="CAN", level=2) # counties

plot(can1)    
spplot(can1, "NAME_1") # colors the provinces and provides
                       # a color-coded legend for them
can1$NAME_1            # returns names of provinces/territories
# us0 <- getData('GADM', country="USA", level=0)
  us1 <- getData('GADM', country="USA", level=1)
# us2 <- getData('GADM', country="USA", level=2)
plot(us1)              # state boundaries split at 
                       # the dateline
us1$NAME_1             # returns names of the states + DC
spplot(us1, "ID_1")
spplot(us1, "NAME_1")  # color codes states and
                       # provides their names
#
# Here attempting unsuccessfully to combine U.S. and Canada on one map.
# Attempts at selecting given states or provinces have been unsuccessful.
#
plot(us1,can1)
us.can1 <- rbind(us1,can1)

Спасибо за любую помощь. До сих пор я не добился прогресса с шагами 2 - 4 выше. Возможно, я прошу слишком много. Возможно, я должен просто переключиться на ArcGIS и попробовать это программное обеспечение.

Я прочитал этот пост StackOverflow:

Можно ли использовать R для ГИС?

РЕДАКТИРОВАТЬ

Теперь я позаимствовал электронную копию «Прикладного анализа пространственных данных у R». Bevand et al. (2008) и загрузил (или обнаружил) связанный R-код и данные с веб-сайта книги:

http://www.asdar-book.org/

Я также нашел здесь красивый R-код, связанный с ГИС:

https://sites.google.com/site/rodriguezsanchezf/news/usingrasagis

Если и когда я узнаю, как достичь желаемых целей, я опубликую решения здесь. Хотя я могу в конечном итоге перейти к ArcGIS, если не смогу достичь цели в R.

Ваш Ответ

2   ответа
8

SpatialPolygonsplot(..., add=TRUE)

spTransform()rgdal

## Specify a geographic extent for the map
## by defining the top-left and bottom-right geographic coordinates
mapExtent <- rbind(c(-156, 80), c(-68, 19))

## Specify the required projection using a proj4 string
## Use http://www.spatialreference.org/ to find the required string
## Polyconic for North America
newProj <- CRS("+proj=poly +lat_0=0 +lon_0=-100 +x_0=0 
            +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")

## Project the map extent (first need to specify that it is longlat) 
mapExtentPr <- spTransform(SpatialPoints(mapExtent, 
                  proj4string=CRS("+proj=longlat")),
                  newProj)

## Project other layers
can1Pr <- spTransform(can1, newProj)
us1Pr <- spTransform(us1, newProj) 

## Plot each projected layer, beginning with the projected extent
plot(mapExtentPr, pch=NA)
plot(can1Pr, border="white", col="lightgrey", add=TRUE)
plot(us1Pr, border="white", col="lightgrey", add=TRUE)

## Highlight provinces and states of interest
theseJurisdictions <- c("British Columbia",
                        "Yukon",
                        "Northwest Territories",
                        "Alberta",
                        "Montana",
                        "Alaska")

plot(can1Pr[can1Pr$NAME_1 %in% theseJurisdictions, ], border="white", 
    col="pink", add=TRUE)

plot(us1Pr[us1Pr$NAME_1 %in% theseJurisdictions, ], border="white", 
    col="pink", add=TRUE)

enter image description here

Error: User Rate Limit Exceeded
4

library(rgdal)
library(raster)

# define extent of map area
mapExtent <- rbind(c(0, 62), c(5, 45))

# BNG is British National Grid    
newProj <- CRS("+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601271625 
           +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs") 

mapExtentPr <- spTransform(SpatialPoints(mapExtent, 
                  proj4string=CRS("+proj=longlat")),
                  newProj)

# provide a valid 3 letter ISO country code
# obtain a list with: getData("ISO3")
uk0 <- getData('GADM', country="GBR", level=0) # UK
uk1 <- getData('GADM', country="GBR", level=1) # UK countries
uk2 <- getData('GADM', country="GBR", level=2) # UK counties

# United Kingdom projection
uk1Pr      <- spTransform(uk1, newProj)

# latitude-longitude grid projection
grd.LL     <- gridlines(uk1, ndiscr=100)
lat.longPR <- spTransform(grd.LL, newProj)

# latitude-longitude text projection
grdtxt_LL  <- gridat(uk1)
grdtxtPR   <- spTransform(grdtxt_LL, newProj)

# plot the map, lat-long grid and grid labels
plot(mapExtentPr, pch=NA)
plot(uk1Pr, border="white", col="lightgrey", add=TRUE)
plot(lat.longPR, col="black", add=TRUE)
text(coordinates(grdtxtPR),
   labels=parse(text=as.character(grdtxtPR$labels)))

enter image description here

Похожие вопросы