जवाबों:
st_intersection
शायद सबसे अच्छा तरीका है। sf
अपने इनपुट के साथ एक ऑब्जेक्ट को प्राप्त करने के लिए जो भी तरीका सबसे अच्छा काम करता है उसे ढूंढें । यहाँ raster::extent
पुराने और नए की सुविधा का उपयोग करने का एक तरीका है । 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
एक सटीक मिलान सीआरएस की आवश्यकता नहीं कर सकते हैं , इसलिए दोनों को NA पर सेट करें या सुनिश्चित करें कि वे समान हैं। बॉक्स / हद एफॉइक के लिए कोई आसान उपकरण नहीं है, इसलिए रास्टर का उपयोग चीजों को आसान-ईश बनाने के लिए अच्छा तरीका है।
spex::spex
को बदलने के लिए उपयोग कर सकते हैं st_as_sf(as(...))
। इसके अलावा, tmaptools::crop_shape()
यह कर सकते हैं।
sf
अब इसमें शामिल हैं st_crop
, विवरण के लिए मेरा उत्तर देखें।
आज के बाद , ( शायद निकट भविष्य में भी CRAN पर) st_crop
के github संस्करण में एक समारोह है ।sf
devtools::install_github("r-spatial/sf")
बस मुद्दा:
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)))
}
यह रेखापुंज के crs जानकारी को दूर फेंकता है क्योंकि मैं नहीं जानता कि कैसे raster crs () को st_crs () में परिवर्तित करें
मेरी मशीन पर और मेरे डेटा सैंपल के लिए इसमें डेटा raster::crop
के एक SpatialLinesDataFrame संस्करण के बराबर प्रदर्शन है ।
@ pbaylis का समाधान लगभग 2.5 गुना धीमा है:
# Slower option.
crop.sf2 = function(sfdf, rasta) {
st_as_sf(crop(as(sfdf, "Spatial"), rasta))
}
संपादित करें: कुछ लोग टिप्पणी करते हैं स्पैक्स , जो रस्टा से एसटीएस के साथ स्पैटियलपॉलीगॉन का उत्पादन करता है, अगर यह एक सीआरएस है।
यह कोड spex के समान विधि का उपयोग करता है:
# 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
लेकिन खुद इसे हल नहीं कर सका।