Gdalwarp এবং প্রজেক্টরেস্টারের মধ্যে পার্থক্য


9

আমি একটি রাস্টার প্রকল্পের চেষ্টা করছি। আর-তে এটির কাজ রয়েছে projectRaster()(সম্পূর্ণ পুনরুত্পাদনযোগ্য উদাহরণের নীচে):

# example Raster
require(raster)
r <- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40)
r <- setValues(r, 1:ncell(r))
projection(r)
# project to
newproj <- "+init=epsg:4714"


# using raster package to reproject
pr1 <- projectRaster(r, crs = CRS(newproj), method = 'bilinear')

যা ভাল কাজ করে। তবে এটি বেশ ধীর।

গতি বাড়ানোর জন্য যদিও আমি gdalwarpপরিবর্তে ব্যবহার করতে চাই (এসএসডি দিয়ে / থেকে ডিস্ক / আর-তে পড়ার এবং লেখার ব্যয় খুব বেশি হয় না)।

তবে, আমি projectRaster()ব্যবহারের ফলাফলগুলি পুনরুত্পাদন করতে পারি না gdalwarp:

# using gdalwarp to reproject
tf <- tempfile(fileext = '.tif')
tf2 <- tempfile(fileext = '.tif')
writeRaster(r, tf)
system(command = paste(paste0("gdalwarp -t_srs \'", newproj, "\' -r bilinear -overwrite"), 
                       tf,
                       tf2))
pr2 <- raster(tf2)

এটি কাজ করছে বলে মনে হয়, তবে ফলাফলগুলি পৃথক:

# Info
system(command = paste("gdalinfo", 
                       tf))
system(command = paste("gdalinfo", 
                       tf2))

# plots
plot(r)
plot(pr1)
plot(pr2)

#extents
extent(r)
extent(pr1)
extent(pr2)

# PROJ4
proj4string(r)
proj4string(pr1)
proj4string(pr2)

# extract value
take <- SpatialPoints(matrix(c(-100, 50), byrow = T, ncol = 2), proj4string = CRS(newproj))
plot(take, add = TRUE)
extract(pr1, take)
extract(pr2, take)

আমি কী মিস করছি / ভুল করছি?

এর অন্যান্য (দ্রুত) বিকল্প রয়েছে projectRaster()কি?


কেউ না? আমি একটি সম্পূর্ণ পুনরুত্পাদনযোগ্য উদাহরণ সরবরাহ করেছি (লিনাক্স বা ম্যাকের সাথে কাজ করা উচিত) ...
EDi

আপনি কি আশা করছেন? উভয় বিকল্প কি একই প্রকল্প ব্যবহার করে?

আমি প্রত্যাশা করি যে উভয় পদ্ধতিই একই রি-প্রজেক্টেড রাস্টার, একই পরিমাণ এবং একই মান (-100, 50) এ প্রাপ্ত হবে। যাইহোক, তারা আপাতভাবে না :(
EDi

1
দুটি কর্মসূচি বিভিন্ন ধরণের বিভিন্ন গ্রিড তৈরি করছে war এমনকি যদি বিলিনারের নমুনা ঠিক একই রকম হয়, তবে যে পয়েন্টগুলি ইন্টারপোল্ট করা হচ্ছে সেগুলি বিভিন্ন জায়গায় রয়েছে এবং আপনার বিভিন্ন উত্তর হতে পারে। উত্স এবং পিক্সেল আকারগুলি পৃথক। আপনি আর ডি সংস্করণটি পুনরুত্পাদন করার জন্য gdalwarp (-te, -tr, ইত্যাদি) কিছু পতাকা সেট করতে পারেন এবং তারপরে পিক্সেলের মানগুলির তুলনা করতে এবং সেগুলি দেখতে কতটা আলাদা তা দেখতে পারেন।

আমি একাধিক অনুষ্ঠানে দেখেছি যে জিসিপি ব্যবহার না করেও -orderপতাকাটি ("ওয়ারপিংয়ের জন্য ব্যবহৃত বহুপদী ক্রম") gdalwarpব্যবহার করলে আরও সঠিক ফলাফল পাওয়া যায়।
ক্রিসটফ

উত্তর:


10

সুন্দর এবং পুনরুত্পাদনযোগ্য প্রশ্ন। ব্যক্তিগতভাবে, আমি আশা করব যে পার্থক্যটির কারণটি বিলিনিয়ার পুনরায় প্রত্যাবর্তনের বাস্তবায়নে in আপনি দুটি পদ্ধতির জন্য অবশ্যই সোর্স কোডটি সন্ধান করতে পারেন তবে আমি আশা করব এটি একটি বিশাল ওভারকিল হবে।
এটি প্রদর্শিত হয় যে আর বাস্তবায়ন কাঁচা জিডিএল সংস্করণের চেয়ে বড় "ত্রুটি" / "পরিবর্তন" প্রবর্তন করে (আমার সংস্করণে এবং পরীক্ষাগুলিতে অন্ততপক্ষে - প্রজেক্টরেস্টার + -0.01-এর আশেপাশের পরিবর্তনের সাথে পরিচয় করিয়ে দেয় এবং জিডিএল + -0.০০2 এর आसपास মান দেয়) values

যদি আপনি নিকটস্থ প্রতিবেশী পুনরায় প্রত্যাশা ব্যবহার করে উভয় পদ্ধতির তুলনা করেন তবে তারা প্রত্যাশার সাথে মেলে।


অভিক্ষেপ পদ্ধতি সহ এই ইঙ্গিতটির জন্য ধন্যবাদ! যদি আমি সময় পাই তবে আমি সেগুলির আরও গভীরভাবে নজর রাখব (তবে আমি আর এর সাথে সি এর সাথে আরও পরিচিত)।
ইডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.