आर में एक रेखापुंज कतरना


33

मैं पूर्वोत्तर अमेरिका के लिए एक मानचित्र का निर्माण कर रहा हूं। मानचित्र की पृष्ठभूमि को या तो ऊंचाई के नक्शे या औसत वार्षिक तापमान के नक्शे के रूप में होना चाहिए। मेरे पास Worldclim.org से दो रिस्तेदार हैं जो मुझे ये वैरिएबल देते हैं लेकिन मुझे उन्हें राज्यों की सीमा तक क्लिप करने की जरूरत है। अभी तक मेरे पास इतना ही है:

#load libraries
library (sp)
library (rgdal)
library (raster)
library (maps)
library (mapproj)


#load data
state<- data (stateMapEnv)
elevation<-raster("alt.bil")
meantemp<-raster ("bio_1.asc")

#build the raw map
nestates<- c("maine", "vermont", "massachusetts", "new hampshire" ,"connecticut",
  "rhode island","new york","pennsylvania", "new jersey",
  "maryland", "delaware", "virginia", "west virginia")

map(database="state", regions = nestates, interior=T,  lwd=2)
map.axes()

#add site localities
sites<-read.csv("sites.csv", header=T)
lat<-sites$Latitude
lon<-sites$Longitude

map(database="state", regions = nestates, interior=T, lwd=2)
points (x=lon, y=lat, pch=17, cex=1.5, col="black")
map.axes()
library(maps)                                                                  #Add axes to  main map
map.scale(x=-73,y=38, relwidth=0.15, metric=T,  ratio=F)

#create an inset map

 # Next, we create a new graphics space in the lower-right hand corner.  The numbers are proportional distances within the graphics window (xmin,xmax,ymin,ymax) on a scale of 0 to 1.
  # "plt" is the key parameter to adjust
    par(plt = c(0.1, 0.53, 0.57, 0.90), new = TRUE)

  # I think this is the key command from http://www.stat.auckland.ac.nz/~paul/RGraphics/examples-map.R
    plot.window(xlim=c(-127, -66),ylim=c(23,53))

  # fill the box with white
    polygon(c(0,360,360,0),c(0,0,90,90),col="white")

  # draw the map
    map(database="state", interior=T, add=TRUE, fill=FALSE)
    map(database="state", regions=nestates, interior=TRUE, add=TRUE, fill=TRUE, col="grey")

उत्थान और मध्यमान वस्तु वे होते हैं जिन्हें घोंसले की वस्तु के क्षेत्र की सीमा तक ले जाने की आवश्यकता होती है। कोई इनपुट मदद करेगा


2
किसी भी मौका आप दूसरों के द्वारा इस प्रतिलिपि प्रस्तुत करने योग्य बना सकते हैं, शायद एक ही सीमा और संकल्प के साथ यादृच्छिक डेटा से आपदाओं का निर्माण?
स्पेसमैन

जवाबों:


38

मैं mapsपैकेज का उपयोग करना छोड़ देता हूं और एक राज्य आकार ढूंढता हूं । फिर उस आर का उपयोग करके लोड करें rgdal, और फिर कुछ बहुभुज ओवरले काम करें।

library(raster)
# use state bounds from gadm website:
# us = shapefile("USA_adm1.shp")
us <- getData("GADM", country="USA", level=1)
# extract states (need to uppercase everything)
nestates <- c("Maine", "Vermont", "Massachusetts", "New Hampshire" ,"Connecticut",
         "Rhode Island","New York","Pennsylvania", "New Jersey",
         "Maryland", "Delaware", "Virginia", "West Virginia")

ne = us[match(toupper(nestates),toupper(us$NAME_1)),]


# create a random raster over the space:        
r = raster(xmn=-85,xmx=-65,ymn=36,ymx=48,nrow=100,ncol=100)
r[]=runif(100*100)

# plot it with the boundaries we want to clip against:
plot(r)
plot(ne,add=TRUE)

# now use the mask function
rr <- mask(r, ne)

# plot, and overlay:
plot(rr);plot(ne,add=TRUE)

सो कैसे? गैजेट शेपफाइल काफी विस्तृत है, आप इसके बजाय एक अधिक सामान्यीकृत खोज करना चाहते हैं।


चीयर्स रॉबर्ट, अच्छा संपादन। मुझे लगता है कि मैं मास्क के बारे में भूल गया था।
Spacedman

32

यहाँ पैकेज extract()से उपयोग कर एक दृष्टिकोण है raster। मैंने इसे वर्ल्डकैम वेबसाइट से ऊंचाई और औसत तापमान डेटा के साथ परीक्षण किया (मैं इस उदाहरण को ऊंचाई तक सीमित करता हूं, तापमान समान काम करता है), और अमेरिका की राज्य सीमाओं से युक्त एक उचित आकार आकृति यहां पाया जाना है । बस .zip डेटा डाउनलोड करें और इसे अपनी वर्किंग डायरेक्टरी में डिकम्प्रेस करें।

आप लोड करने की आवश्यकता है rgdalऔर rasterआगे बढ़ने के लिए पुस्तकालयों।

library(rgdal)
library(raster)

आइए अब यूएस शेपफाइल का उपयोग करके आयात करें readOGR()। शेपफाइल के सीआरएस को सेट करने के बाद, मैं एक सबसेट बनाता हूं जिसमें वांछित राज्य होते हैं। पूंजी और छोटे प्रारंभिक अक्षरों के उपयोग पर ध्यान दें!

state <- readOGR(dsn = path.data, layer = "usa_state_shapefile")
projection(state) <- CRS("+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")

# Subset US shapefile by desired states
nestates <- c("Maine", "Vermont", "Massachusetts", "New Hampshire" ,"Connecticut",
             "Rhode Island","New York","Pennsylvania", "New Jersey",
             "Maryland", "Delaware", "Virginia", "West Virginia")

state.sub <- state[as.character(state@data$STATE_NAME) %in% nestates, ]

इसके बाद, रास्टर डेटा का उपयोग करके आयात करें raster()और इसे पहले से उत्पन्न राज्यों की सीमा के साथ फसल दें।

elevation <- raster("/path/to/data/alt.bil")

# Crop elevation data by extent of state subset
elevation.sub <- crop(elevation, extent(state.sub))

अंतिम चरण के रूप में, आपको अपने उन्नयन के उन पिक्सरों की पहचान करने की आवश्यकता है जो दिए गए राज्य बहुभुज की सीमाओं के भीतर स्थित हैं। उसके लिए 'मास्क' फंक्शन का इस्तेमाल करें।

elevation.sub <- mask(elevation.sub, state.sub)

यहाँ परिणामों का एक बहुत ही सरल प्लॉट है:

plot(elevation.sub)
plot(state.sub, add = TRUE)

उत्तर पूर्व अमेरिकी राज्यों के डीईएम

चीयर्स,
फ्लोरियन


आपको राज्य कहां से मिला?
मैं डेल टोरो

@IDelToro, मैंने इसे जियोकोमन्स से प्राप्त किया
fdetsch

~ 11mb रस्टरलेयर और एकल-बहुभुज फ़ाइल के साथ काम करते समय यह इतना लंबा (>> 15 मिनट, शायद घंटे) क्यों लेता है? क्या कोई अधिक कुशल विधि है?
ecologist1234

@ ecologist1234, क्या आप एक उदाहरण प्रदान कर सकते हैं?
fdetsch
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.