আর-তে একটি রাস্টার ক্লিপিং


33

আমি উত্তর-পূর্ব ইউএসএর জন্য একটি মানচিত্র তৈরি করছি মানচিত্রের পটভূমিটি একটি উচ্চতার মানচিত্র বা গড় বার্ষিক তাপমাত্রার মানচিত্রের হওয়া দরকার। আমার কাছে Worldclim.org থেকে দু'জন রেস্টার রয়েছে যা আমাকে এই পরিবর্তনগুলি দেয় তবে আমি যে রাজ্যগুলিতে আগ্রহী সেগুলি পর্যন্ত আমাকে তাদের ক্লিপ করা দরকার this এটি কীভাবে করা যায় সে সম্পর্কে কোনও পরামর্শ। আমার এ পর্যন্ত যা আছে:

#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)

এটা কেমন ছিল? গ্যাডম শেফফাইলটি বেশ বিশদপূর্ণ, আপনি এর পরিবর্তে আরও সাধারণীকরণের সন্ধান করতে পারেন।


চিয়ার্স রবার্ট, দুর্দান্ত সম্পাদনা। আমি মনে করি আমি মুখোশের কথা ভুলে গেছি।
স্পেসডম্যান

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)

উত্তর-পূর্ব মার্কিন যুক্তরাষ্ট্রের রাজ্যের ডিইএম

চিয়ার্স,
ফ্লোরিয়ান


আপনি রাষ্ট্রের আকারটি কোথায় পেয়েছেন?
আই ডেল টোরো

@ আইডেল টোরো, আমি এটি জিওকমনস থেকে পেয়েছি
fdetsch

~ 11 মেগাবাইটের রাস্টারলেয়ার এবং একটি একক বহুভুজ আকৃতির ফাইলের সাথে কাজ করার জন্য কেন এটি এত দীর্ঘ সময় নেয় (>> 15 মিনিট, সম্ভবত কয়েক ঘন্টা)? আরও কার্যকর পদ্ধতি আছে কি?
পরিবেশবিদ

@ বাস্তুবিদ 1234, আপনি একটি উদাহরণ প্রদান করতে পারেন?
fdetsch
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.