উত্তর:
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
কিন্তু নিজেই সমাধান করতে পারিনি।