আর-তে ফটোগুলি সহজ বৈশিষ্ট্যগুলি object


20

maptools::pruneMap(lines, xlim= c(4, 10), ylim= c(10, 15))স্পাটিয়ালপলিগন বা স্পেশাললাইন এর অনুরূপ এসএফ মানচিত্রের অবজেক্টটি কাটাতে কোন ফাংশন আছে?

আমি বিবেচনা করছি st_intersection()তবে সঠিক উপায় থাকতে পারে।

উত্তর:


17

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সঠিক মিলের সিআরএসের প্রয়োজন না বজায় রাখতে পারেন , সুতরাং উভয়টিকে এনএতে সেট করুন বা নিশ্চিত করুন যে তারা একই রকম। ববক্স / ব্যাপ্তি আফিকের জন্য কোনও সহজ সরঞ্জাম নেই, সুতরাং জিনিসকে সহজ-ইশ করতে রাস্টার ব্যবহার করা ভাল উপায়।


অনেক ধন্যবাদ @ এমডিসামনার, এটি একটি কবজির মতো কাজ করেছে। আমি ঘন্টা ঘন্টা ব্যয় করেছি st_intersectionকিন্তু নিজেই সমাধান করতে পারিনি।
কাজুহিতো

আপনি এখন কলটি spex::spexপ্রতিস্থাপন করতে ব্যবহার করতে পারেন st_as_sf(as(...))। এছাড়াও, এটি tmaptools::crop_shape()করতে পারেন।
এএফ

1
sfএখন অন্তর্ভুক্ত st_crop, বিশদ জন্য আমার উত্তর দেখুন।
এএফ 7

23

আজ থেকে , 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ক্রপিং সীমা হিসাবে পড়তে পারেন এমন কোনও বস্তুও ব্যবহার করতে পারেন যা খুব সহজ।


5

আর একটি কাজ, আমার জন্য এটি বড় আকারের ফাইলগুলির জন্য দ্রুত ছিল:

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_as_sf () এর সংমিশ্রণ ... + 1। আমি আশা করি এসফের ভবিষ্যতের সংস্করণগুলিতে আমরা ক্রপ () এর মতো সহজেই অ্যাক্সেসযোগ্য ফাংশনটি পেতে পারি । গতি, আপনার ফাংশন system.time একটি দ্রুত রান রিপোর্ট ব্যবহারকারী: 5,42, সিস্টেম: 0.09, 5,52 অতিবাহিত , যখন st_intersection()পদ্ধতির ছিল ব্যবহারকারী: 1.18, সিস্টেম: 0.05, 1.23 অতিবাহিত আপনার ডেটা সেটটি উপর। (সম্ভবত আমার পরিবেশ আপনার সাথে আলাদা ... নিশ্চিত নয়)
কাজুহিতো

এটি আকর্ষণীয় - st_intersication পদ্ধতির আমার জন্য প্রায় 80s সময় লাগে।
pbaylis

মনে রাখবেন যে রাস্টার :: ক্রপ ফাংশন, এসপি জ্যামিতি অবজেক্টে প্রয়োগ করা হলে, rgeos ফাংশনগুলির জন্য একটি মোড়কের কাজ করে। তবুও, খুব সুবিধাজনক একটি র‍্যাপার। জিইওএস এপিআই ডব্লিউকেটি অবজেক্টগুলিতে কাজ করে তাই অবিচ্ছিন্নভাবে এসএফ ওভারলে ক্রিয়াকলাপের মান হবে।
জেফরি ইভান্স

1
এবং সময়ের সাথে সাথে এটি পরিবর্তিত হয়, এসএফ-তে এখন " স্প্যাটিয়াল ইনডেক্সিং" অন্তর্নির্মিত রয়েছে 0.5-1 ক্র্যান.আর - প্রজেক্ট.আর / ওয়েবে / প্যাকেজ / এসএফ / নিউজ এইচটিএমএল তেমন সম্ভবত এখন এসপি / আরজিওসের চেয়েও দ্রুত।
এমডসুমনার

1
sfএখন অন্তর্ভুক্ত st_crop, বিশদ জন্য আমার উত্তর দেখুন।
এএফ 7

1

@ 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ফাংশন রয়েছে যা সম্ভবত পরীক্ষা করে দেখার মতো।
সেএমসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.