আর-তে বহুভুজ শেফফাইল ব্যবহার করে রাস্টার থেকে রাস্টারটি বের করুন


13

আমি আরে নতুন এবং রাস্টার প্যাকেজটি ব্যবহার করছি। বিদ্যমান রাস্টার ফাইল থেকে বহুভুজ উত্তোলনে আমার সমস্যা আছে। যদি আমি ব্যবহার করি

extract(raster, poly_shape)

রাস্টারে কাজ করে এটি সর্বদা ডেটা সহ একটি তালিকা তৈরি করে। আমি সত্যিই যা চাই তা হ'ল আমি আরকজিআইএস দিয়ে আবার লোড করতে পারি এমন একটি রাস্টার ফাইল বের করতে। আরও কিছুটা পড়ার পরে আমি মনে করি ক্রপ ফাংশনটি আমার সত্যই প্রয়োজন। কিন্তু যখন আমি এই ফাংশনটি ব্যবহার করার চেষ্টা করি

crop(raster, poly_shape)

আমি এই ত্রুটি পেয়েছি:

Error in .local(x, y, ...) : extents do not overlap
In addition: Warning message:
In intersect(extent(x), extent(y)) : Objects do not overlap

ফাইল রাস্টার এবং পলি_শ্যাপ উভয় ফাংশনের জন্য একই। এখানে কি ভুল হতে পারে বলতে পারেন? এটি কি ঠিক যে ক্রপ ফাংশনটি অন্য একটি রাস্টার তৈরি করে এবং একটি তালিকা তৈরি করে না?

সম্পাদনা : পরিধি () ফাংশনটি আমার পক্ষে কাজ করে না। আমি এখনও একই ত্রুটি পেয়েছি। তবে আমি নিশ্চিত যে 2 টি ডাটাসেট ওভারল্যাপ হয়ে গেছে! সাথে

extract(raster, poly_shape)

আমি এটি থেকে সঠিক তথ্য পেতে। ঠিক একটি তালিকা হিসাবে এবং এটির মতো রাস্টার হিসাবে নয় have আমি কেবল আগে আর্কজিআইএসে ডেটাসেটগুলি লোড করেছি এবং সেগুলি খুব ভাল ফিট করে তাই আমি প্রজেকশনটি পরীক্ষা করিনি। এখন চেষ্টা করেছি

projection(raster) # "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs"
projection(poly_shape) # "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"

এবং আপনি দেখতে পারেন যে অনুমানগুলি মাপসই হয় না। এক্সট্রাক্ট ফাংশনটি সঠিকভাবে ফাইলগুলি স্বয়ংক্রিয়ভাবে রূপান্তর করতে সক্ষম বলে মনে হচ্ছে। আমি জানি যেহেতু আমি নিম্নলিখিতগুলি করেছি:

  • আমি আরজিজিআইএস-এ আরেও যে বহুভুজ বের করেছি তার সঠিক অংশটি কেটে ফেলেছি
  • আমি নিষ্কাশিত আর বহুভুজ (তালিকা) এর সমস্ত মানের যোগফল গণনা করেছি
  • আমি আর্কজিআইএসে কাটা সমস্ত রাস্টার কোষের যোগফল গণনা করেছি

2 এর সঠিক ফলাফল রয়েছে তাই আমি অনুমান করি যে উপসংহারটি এমন হওয়া উচিত যে এক্সট্রাক্ট ফাংশনটি সঠিকভাবে কাজ করেছিল। এখন আমার কাছে 2 টি বিকল্প রয়েছে বলে আমি অনুমান করি:

  1. আবার বের করা তালিকার বাইরে থেকে একটি রাস্টার পেতে আমার একটি উপায় প্রয়োজন
  2. 2 ডেটাसेट (রাস্টার + পলি_শ্যাপ) একই প্রক্ষেপণ ব্যবহার করা দরকার এবং ক্রপ ফাংশনটি কাজ করা উচিত

আপনি এখানে কি করার পরামর্শ দিবেন?


এটি যদি 4 টি ব্যান্ডের আরজিবি রাস্টার হয়? ব্যান্ডগুলি এখনও হারিয়ে গেছে ...
ডরিস

জিআইএস এসই তে আপনাকে স্বাগতম! নতুন ব্যবহারকারী হিসাবে, দয়া করে সংক্ষিপ্ত ভ্রমণটি নিশ্চিত হন । তারপরে অতিরিক্ত তথ্য এবং রেফারেন্স সরবরাহ করতে আপনার উত্তর সম্পাদনা বিবেচনা করুন। আমি কিভাবে একটি ভাল উত্তর লিখতে হবে দেখুন ? আরও তথ্যের জন্য.
অ্যান্ডি

আপনার যদি নতুন প্রশ্ন থাকে তবে দয়া করে প্রশ্ন জিজ্ঞাসা বোতামটি ক্লিক করে এটি জিজ্ঞাসা করুন । যদি এই প্রসঙ্গে সরবরাহ করতে সহায়তা করে তবে এই প্রশ্নের একটি লিঙ্ক অন্তর্ভুক্ত করুন। - পর্যালোচনা থেকে
এরিক

উত্তর:


19

এক্সট্রাক্ট ফাংশনটি ঠিক যেমনটি করা উচিত তেমন আচরণ করে। বহুভুজের সীমাটি ব্যবহার করতে আপনি ক্রপ ফাংশনকে জোর করতে পারেন এবং তারপরে বহুভুজ ক্ষেত্রের প্রতিনিধিত্ব করে সঠিক রাস্টারটি ফিরিয়ে দেওয়ার জন্য বস্তুটি মুখোশ করুন। আপনি যদি ত্রুটিটি পেতে থাকেন তবে এর অর্থ হ'ল আপনার ডেটা, প্রকৃতপক্ষে ওভারল্যাপ হয় না।

দয়া করে মনে রাখবেন যে আর "ফ্লাইতে" প্রক্ষেপণটি সম্পাদন করে না তাই আপনার অনুমানগুলি পরীক্ষা করে দেখুন। আপনার এক্সটেন্টস "ব্যাপ্তি ()" ফাংশনটি ব্যবহার করে ওভারল্যাপ করে কিনা তা আপনি পরীক্ষা করতে পারেন।

বহুভুজ পরিমাণ ব্যবহার করে ক্রপ করার একটি উদাহরণ রয়েছে তারপরে "রাস্টারাইজড" বহুভুজ ব্যবহার করে ফলাফলের রাস্টারকে মাস্কিং করুন।

# Add required packages
require(raster)
require(rgeos)
require(sp)

# Create some data using meuse 
data(meuse)
  coordinates(meuse) <- ~x+y
    proj4string(meuse) <- CRS("+init=epsg:28992")
data(meuse.grid)
  coordinates(meuse.grid) = ~x+y
    proj4string(meuse.grid) <- CRS("+init=epsg:28992")
      gridded(meuse.grid) = TRUE    
        r <- raster(meuse.grid) 
          r[] <- runif(ncell(r))

# Create a polygon
f <- gBuffer(meuse[10,], byid=FALSE, id=NULL, width=250, 
                         joinStyle="ROUND", quadsegs=10)   

# Plot full raster and polygon                       
plot(r)
  plot(f,add=T)

# Crop using extent, rasterize polygon and finally, create poly-raster
#          **** This is the code that you are after ****  
cr <- crop(r, extent(f), snap="out")                    
  fr <- rasterize(f, cr)   
    lr <- mask(x=cr, mask=fr)

# Plot results
plot(lr)
  plot(f,add=T)

4
নির্যাস () নেই মাছি reprojection পারফর্ম কিন্তু ফসল () না। এটি কিছু বিভ্রান্তির জন্য অ্যাকাউন্ট হতে পারে
এমডসুমনার

@ জেফেরি ফসল () এবং মাস্ক () কেবল বহুভুজের আয়তক্ষেত্রাকার বিস্তৃতি অনুসারে রাস্টারকে ক্লিপ করুন যা বহুভুজের সীমানা থেকে এটিকে ক্লিপ করে না। কোন ধারণা কোন আদেশ আদেশ প্রদত্ত বহুভুজের সীমানার মধ্যে রাস্টার ক্লিপ করতে পারে?
শিথ

1
@ চিন্টন শেঠ, বহুভুজের মধ্যে মুখোশটি সাবসেট করার জন্য আপনার বহুভুজের মধ্যে মানগুলির প্রতিনিধিত্বকারী একটি রাস্টার থাকতে হবে। এ কারণেই আপনি সাবসেট বহুভুজটিকে রাস্টেরাইজ করেন এবং তারপরে এটি মাস্ক করুন। ফসলের পদক্ষেপটি হ'ল উপগ্রহের বহুভুজ হিসাবে রাস্টারটির মাত্রা হ্রাস করা, যা অতীতে, যদি এড়িয়ে যায় তবে কিছুটা অমিল ত্রুটি ছুঁড়ে মারত।
জেফ্রি ইভান্স

spTransformspপ্যাকেজ থেকে (যা কখনও কখনও স্বয়ংক্রিয়ভাবে অন্যান্য স্থানিক আর প্যাকেজগুলির সাথে লোড হয়) পুনরায় প্রতারণার অনুমতি দেয় যাতে উভয় ফাইলই একই প্রক্ষেপণে থাকে যেমন, যেমন। good_poly=spTransform(spolygon, CRSobj=crs(raster_file))
ব্যবহারকারী 3386170

@ ব্যবহারকারী 3386170, হু? আপনি কী পাচ্ছেন তা নিশ্চিত নয়। এই প্রশ্নটি এমন এক সময়ে ঘটেছিল যখন রাস্টার প্যাকেজটি কিছুটির মধ্যে কেবল "ফ্লাই প্রজেকশন" যুক্ত করে যদি এর কাজগুলি করে। এই ফাংশনগুলি পূর্বে অনুমানগুলি মেলে না, তবে একটি ত্রুটি ফেলেছিল তবে এই পোস্টটি ২০১৪ সালের sp
জেফরি ইভান্স 21

8

আমি আসলে যা অনুসন্ধান করেছি তা হ'ল mask()ফাংশন।

mask(raster, poly_shape)

ত্রুটি ছাড়াই কাজ করে এবং আমি যা অনুসন্ধান করেছি তা ফেরত দেয়।


2
আপনার ডেটাটিকে পুনরায় প্রজেক্ট করুন যাতে এটি একই প্রক্ষেপণের জায়গাতে থাকে। এমনকি আর্কজিআইএসেও, যেখানে ফ্লাই প্রজেকশনটি স্বয়ংক্রিয় হয়, বিভিন্ন অনুমানে বিশ্লেষণ পরিচালনা করা খুব খারাপ অভ্যাস। বিভিন্ন অনুমানের ডেটা সহ আপনার ডেটা সাধারণ এক্সটেন্টগুলি ভাগ করে নেবে না, এটি হ'ল ত্রুটি receiving
জেফ্রি ইভানস

রাস্টার শস্য কাটার জন্য মাত্রা পেতে প্রজেক্টএক্সেন্ট () ব্যবহার করুন।
এমডসুমনার

সাইটের প্রশ্নোত্তর ফর্ম্যাটটি ফিট করার জন্য এটিকে সম্পাদনা / আপডেট হিসাবে প্রশ্নের মূল অংশে স্থাপন করা উচিত (এবং তারপরে উত্তরটিতে এটি একটি মন্তব্য যুক্ত করুন যাতে এটি দেখার মতো আরও কিছু রয়েছে)
ম্যাট উইলকি

@mattwilkie বিন্যাসটি ফিট না করার জন্য দুঃখিত তবে আমার পাঠ্যটি এখানে মন্তব্য হিসাবে পোস্ট করতে খুব দীর্ঘ ছিল। : @JeffreyEvans আমি নিম্নলিখিত চেষ্টা projection(raster) = projection(poly_shape)প্রায় এবং অন্যান্য পথ projection(poly_shape) = projection(raster)কিন্তু উভয় উপায় একই ভুল উত্পাদন: Error in .local(x, y, ...) : extents do not overlap In addition: Warning message: In intersect(extent(x), extent(y)) : Objects do not overlap। এক্সট্রাক্ট () ফাংশনটি ব্যবহার করে ফ্লাইতে কোন প্রজেকশন ব্যবহৃত হয় তা কীভাবে আমি দেখতে পাচ্ছি (কারণ এটি স্পষ্টভাবে কাজ করে)?
লার্স

1
আসলে আমি যা অনুসন্ধান করেছি তা হ'ল মুখোশ ফাংশন। mask(raster, poly_shape)ত্রুটি ছাড়াই কাজ করে এবং আমি যা অনুসন্ধান করেছি তা ফেরত দেয়।
লার্স

-1

এক্সট্যান্ট ঠিক ঠিক কাজ করে ... আমার মনে হয় আপনার ব্যাপ্তির এক্সমিন, এক্সম্যাক্স, ইয়ামিন এবং ইয়াম্যাক্স আপনার রাস্টার এর এক্স এবং ওয়াই থেকে আলাদা - অর্থাৎ সেগুলি বিপরীতে সেট করা আছে

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