উত্তর:
st_intersectionসম্ভবত সেরা উপায়। sfআপনার ইনপুট দিয়ে ছেদ করার জন্য কোনও উপায় পেতে সর্বোত্তম উপায়ে কাজ করুন Find এখানে সুবিধার্থে raster::extentএবং পুরানো এবং নতুন মিশ্রণটি ব্যবহার করার একটি উপায়'s ncদ্বারা নির্মিত example(st_read):
st_intersection(nc, st_set_crs(st_as_sf(as(raster::extent(-82, -80, 35, 36), "SpatialPolygons")), st_crs(nc)))
আমি মনে করি না যে আপনি st_intersectionসঠিক মিলের সিআরএসের প্রয়োজন না বজায় রাখতে পারেন , সুতরাং উভয়টিকে এনএতে সেট করুন বা নিশ্চিত করুন যে তারা একই রকম। ববক্স / ব্যাপ্তি আফিকের জন্য কোনও সহজ সরঞ্জাম নেই, সুতরাং জিনিসকে সহজ-ইশ করতে রাস্টার ব্যবহার করা ভাল উপায়।
spex::spexপ্রতিস্থাপন করতে ব্যবহার করতে পারেন st_as_sf(as(...))। এছাড়াও, এটি tmaptools::crop_shape()করতে পারেন।
sfএখন অন্তর্ভুক্ত st_crop, বিশদ জন্য আমার উত্তর দেখুন।
আজ থেকে , st_cropগিথুব সংস্করণে একটি ফাংশন রয়েছে sf( devtools::install_github("r-spatial/sf")সম্ভবত নিকট ভবিষ্যতে CRAN- এও))
কেবল ইস্যু করুন:
st_crop(nc, c(xmin=-82, xmax=-80, ymin=35, ymax=36))
ভেক্টরের নাম অবশ্যইxmin xmax ymin ymax (যে কোনও ক্রমে) দিয়ে রাখা উচিত ।
আপনি st_bboxক্রপিং সীমা হিসাবে পড়তে পারেন এমন কোনও বস্তুও ব্যবহার করতে পারেন যা খুব সহজ।
আর একটি কাজ, আমার জন্য এটি বড় আকারের ফাইলগুলির জন্য দ্রুত ছিল:
library(sf)
library(raster)
library(rgeos)
library(ggplot2)
# Load National Forest shapefile
# https://data.fs.usda.gov/geodata/edw/edw_resources/shp/S_USA.AdministrativeForest.zip
nf.poly <- st_read("S_USA.AdministrativeForest"), "S_USA.AdministrativeForest")
crop_custom <- function(poly.sf) {
poly.sp <- as(poly.sf, "Spatial")
poly.sp.crop <- crop(poly.sp, extent(c(-82, -80, 35, 36)))
st_as_sf(poly.sp.crop)
}
cropped <- crop_custom(nf.poly)
st_intersection()পদ্ধতির ছিল ব্যবহারকারী: 1.18, সিস্টেম: 0.05, 1.23 অতিবাহিত আপনার ডেটা সেটটি উপর। (সম্ভবত আমার পরিবেশ আপনার সাথে আলাদা ... নিশ্চিত নয়)
sfএখন অন্তর্ভুক্ত st_crop, বিশদ জন্য আমার উত্তর দেখুন।
@ mdsumner এর সমাধান হিসাবে একটি ফাংশন। কাজ করে rastaএকটি RasterBrick, পরিমাণ, bbox, ইত্যাদি
# Crop a Simple Features Data Frame to the extent of a raster
crop.sf = function(sfdf, rasta) {
st_intersection(sfdf, st_set_crs(st_as_sf(as(extent(rasta), "SpatialPolygons")), st_crs(sfdf)))
}
এটি রাস্টার সম্পর্কিত সিআরএস তথ্যকে ছুঁড়ে ফেলেছে কারণ আমি জানি না কীভাবে একজন রাস্টার সিআর () কে স্টেট_সিআরসে রূপান্তর করতে হয় ()
আমার মেশিনে এবং আমার ডেটা নমুনার raster::cropজন্য এটি ডেটার একটি স্পেসিটালাইনস ডেটা ফ্রেম সংস্করণের সাথে সমান পারফরম্যান্স রাখে ।
@ পেবাইলিসের দ্রবণটি প্রায় আড়াইগুণ ধীর:
# Slower option.
crop.sf2 = function(sfdf, rasta) {
st_as_sf(crop(as(sfdf, "Spatial"), rasta))
}
সম্পাদনা: Somebodies মন্তব্য প্রস্তাব দেওয়া spex , যা, Rasta থেকে CRS সঙ্গে SpatialPolygons উত্পাদন করে যদি এটি একটি CRS হয়েছে।
এই কোডটি স্পেক্সের মতো একই পদ্ধতি ব্যবহার করে:
# Crop a Simple Features Data Frame to the extent of a raster
crop.sf3 <- function(sfdf, rasta) {
# Get extent and crs
ext.sp <- as(extent(rasta), "SpatialPolygons")
crs(ext.sp) <- crs(rasta)
# crop
st_intersection(sfdf, st_as_sf(ext.sp))
}
st_cropফাংশন রয়েছে যা সম্ভবত পরীক্ষা করে দেখার মতো।
st_intersectionকিন্তু নিজেই সমাধান করতে পারিনি।