আর: কিভাবে একজন রাস্টারলেয়ার থেকে অক্ষাংশ এবং দ্রাঘিমাংশ পাবেন?


14

আমি ভৌগলিক তথ্যগুলির এক নিখুঁত শিক্ষানবিস, সুতরাং দয়া করে প্রশ্নটি উপযুক্ত না হলে আমাকে ক্ষমা করুন।

আমি এনসিডিসি এনএআরআর থেকে ডেটা ডাউনলোড করেছি এবং rasterপ্যাকেজটি ব্যবহার করে আর এ লোড করতে সক্ষম হলাম । অক্ষাংশ, দ্রাঘিমাংশ এবং মান সহ আমি একটি তালিকা পেতে চাই। আমি বুঝতে rasterToPoints()পারি যে আমি যা চাই ঠিক তাই করা উচিত, তবে আমার অক্ষাংশ এবং দ্রাঘিমাংশের মানগুলি অদ্ভুত দেখাচ্ছে:

r <- raster(myfile)
data_matrix <- rasterToPoints(r)
head(data_matrix)
            x       y value
[1,] -5405401 4347242    70
[2,] -5372938 4347242    88
[3,] -5340475 4347242    76
[4,] -5308012 4347242    85
[5,] -5275549 4347242    87
[6,] -5243086 4347242    88

আমি মনে করি প্রক্ষেপণের সাথে আমার কিছু করা উচিত যা বর্তমানে ল্যামবার্ট কনফর্মাল কনিক (এলসিসি)। রাস্টার সম্পর্কে আরও তথ্য এখানে।

> r
class       : RasterLayer 
dimensions  : 277, 349, 96673  (nrow, ncol, ncell)
resolution  : 32463, 32463  (x, y)
extent      : -5648874, 5680713, -4628777, 4363474  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=lcc +lat_1=50 +lat_2=50 +lat_0=50 +lon_0=-107 +x_0=0 +y_0=0 +a=6371200 +b=6371200 +units=m +no_defs 
data source : mypath-to-file
names       : value

মার্কিন যুক্তরাষ্ট্রের অক্ষাংশ এবং দ্রাঘিমাংশের মানগুলি পেতে আমি কী করব?

উত্তর:


14

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

আপনি যদি নিজের রাস্টার ডেটাটিকে স্পেশালপয়েন্টস ডেটা ফ্রেম অবজেক্টে জোর করে চাপিয়ে দেন তবে আপনি "স্পট ট্রান্সফর্ম" ব্যবহার করবেন এবং @ কোডর্ডিনেটস স্লট থেকে স্থানাঙ্কগুলি টানবেন এবং তাদেরকে @ ডেটা স্লটে ডেটা ফ্রেমে যুক্ত করবেন। এটি দেখতে কেমন হবে তার একটি উদাহরণ এখানে।

library(raster)
library(rgdal) # for spTransform

# Create data
r <- raster(ncols=100, nrows=100)
  r[] <- runif(ncell(r))
  crs(r) <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +ellps=WGS84"
  projection(r)

# Convert raster to SpatialPointsDataFrame
r.pts <- rasterToPoints(r, spatial=TRUE)
  proj4string(r.pts)

# reproject sp object
geo.prj <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0" 
r.pts <- spTransform(r.pts, CRS(geo.prj)) 
  proj4string(r.pts)

# Assign coordinates to @data slot, display first 6 rows of data.frame
r.pts@data <- data.frame(r.pts@data, long=coordinates(r.pts)[,1],
                         lat=coordinates(r.pts)[,2])                         
head(r.pts@data)

আমার লক্ষ করা উচিত যে রাস্টারদের ভেক্টর অবজেক্ট শ্রেণিতে রূপান্তর করা ভাল অনুশীলন নয় এবং মেমরির নিরাপদ প্রসেসিং সরবরাহকারী রাস্টার প্যাকেজের সুবিধার উপেক্ষা করে। আপনার সমস্যাটি সম্পর্কে সত্যই চিন্তা করা এবং আপনি যদি এটির সাথে সঠিকভাবে পৌঁছাচ্ছেন তবে মূল্যায়ন করা প্রায়শই বুদ্ধিমানের কাজ। ওপি যদি প্রতিটি কক্ষের জন্য তাদের [x, y] স্থানাঙ্কের প্রয়োজনীয়তা সরবরাহ করে থাকে তবে ফোরাম সম্প্রদায়টি গণনামূলক বিকল্পগুলি সরবরাহ করতে সক্ষম হতে পারে যা সমস্যাটিকে রাস্টার পরিবেশে রাখবে keep


1
আপনার সাবধানতা (ডেটা রূপান্তর এড়ানো সম্পর্কে) হৃদয়ের দিকে রাখার একটি উপায় হ'ল আসল রাস্টারটিকে অপ্রজেক্ট করা (সম্ভবত খুব মোটা গ্রিডের দিকে), অক্ষাংশ এবং দ্রাঘিমাংশের মানগুলির দুটি গ্রিড তৈরি করা এবং অপ্রয়োজনীয়তার মাত্রা covering মূল গ্রিডের পরিমাণ। কোনও ভেক্টর শ্রেণি তৈরি করা হয়নি: এটি সম্পূর্ণরূপে রাস্টার অপারেশনের একটি সেট।
whuber

4

ঘর কেন্দ্রের স্থানাঙ্কগুলি পান এবং একটি স্থানিক বস্তু তৈরি করুন:

spts <- rasterToPoints(r, spatial = TRUE)

আপনার পছন্দসই লক্ষ্যে পয়েন্টগুলি রূপান্তর করুন:

library(rgdal)
llprj <-  "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0"
llpts <- spTransform(spts, CRS(llprj))

মানগুলি ইতিমধ্যে এই স্পেশালপয়েন্টস ডেটা ফ্রেমে কলাম হিসাবে অনুলিপি করা হয়েছে।

print(llpts)

এখন শেষ করার জন্য একটি ডেটা.ফ্রেম পান:

x <- as.data.frame(llpts)

এসজিএটি প্যাকেজে এটির সাধারণ প্রয়োগ রয়েছে, lonlatFromCellএখানে ফাংশন দেখুন :

https://github.com/SWotherspoon/SGAT/blob/master/R/Raster.R


আমি এটি চেষ্টা করেছিলাম তবে নিম্নলিখিত ত্রুটি বার্তাটি পেয়েছি: > llpts$layer1 <- values(r[[1]]) Error in [[<-। (, name, value = c(NA, NA, NA, NA, NA, : replacement has 96673 rows, data has 95025
ডেটা.ফ্রেম

আসলে আপনাকে অ্যাট্রিবিউটগুলি স্থানান্তর করার দরকার নেই, আমি এটি সরিয়ে দেব।
এমডসুমনার

এসজিএটি প্যাকেজ পরামর্শ ব্যতীত, আমি যে সরবরাহ করেছি তা কি ঠিক একই উত্তর / উদাহরণ নয়? স্থানাঙ্কগুলি ডেটা স্লটে ডেটা.ফ্রেমে প্রচারিত হয় না, কেবল রাস্টার থেকে প্রাপ্ত মানগুলি। স্থানাঙ্কগুলি আসলে স্থানাঙ্কগুলির স্লটে থাকে এবং ডেটা.ফ্রেমে যুক্ত করা দরকার be
জেফ্রি ইভান্স

ধন্যবাদ, আমি as.data.frame পদক্ষেপ যুক্ত করেছি। আমি মনে করি যে স্থানাঙ্কগুলিকে গুণাবলী হিসাবে যুক্ত করা - এটি বিশেষত স্লট দিয়ে মুং করে - যেহেতু বস্তুর স্থানাঙ্কগুলি পরিবর্তন করতে পারে। আপনি যদি কোনও কাঁচা ডেটা চান তবে ফ্রেমটি একটি করুন। তথ্যটি কোথায় আছে সেদিকে আমার খেয়াল নেই, সম্ভবত কেবল আপনার সম্পাদনা করুন এবং আমরা এই উত্তরটি জ্যাপ করতে পারি।
mdsumner

ওপি বিশেষত স্থানাঙ্ক চেয়েছিল এবং আমি মনে করি যে এটি একটি পৃথক ডেটা.ফ্রেমে সংরক্ষণ করা বাড়াবাড়ি। আমি সাধারণত ডেটা স্লটে স্থানাঙ্ক যুক্ত করতে পছন্দ করি না, কারণ এটি স্থানাঙ্ক স্লটের সাথে অপ্রয়োজনীয়। এগুলি ছাড়া ডেটা স্লটে তথ্য যুক্ত করা "ভয়ানক পরামর্শ" নয়। আপনি যদি দুটি সমন্বয় ব্যবস্থা রাখতে চান তবে কী করবেন। আপনি ডেটা স্লটে ল্যাট / লম্বা যুক্ত করতে পারেন এবং একটি সম্পূর্ণ ভিন্ন প্রক্ষেপণে অবজেক্টটি রাখতে পারেন। এছাড়াও, আপনি যদি কেবল একটি ফ্ল্যাট ফাইল রফতানি করতে চান এবং প্রতি সেচ জিআইএস ফর্ম্যাটটি না চান তবে আপনি ডেটা.ফ্রেমে স্থানাঙ্ক যুক্ত করতে পারেন এবং সিএসভি হিসাবে সংরক্ষণ করতে পারেন।
জেফ্রি ইভান্স

0

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


আমি উত্তর দেওয়ার আগে আপনার পোস্টটি আমি রেফার করি নি। আপনি এটি সদৃশ হিসাবে পতাকাঙ্কিত করতে চাইতে পারেন। যদিও স্পটিয়ালপয়েন্টস ডেটা ফ্রেম জবরদস্তি এবং সমন্বিত কার্যভার সংযোজন যদি কিছুটা আলাদা হয়। আপনার কল
জেফ্রি ইভান্স

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

আপনার তালিকাভুক্ত উত্সগুলি দেখার চেষ্টা করেছি। স্ট্যান্ডার্ড অক্ষাংশ / দ্রাঘিমাংশ পেতে আমি জারি করেছি lonlat_r <- projectRaster(r, crs="+init=epsg:4326")। তবে, নতুন রাস্টারটির পরিমাণ হ'ল -181.3232, 181.4938, -1.590457, 87.76154 (xmin, xmax, ymin, ymax)যা মার্কিন যুক্তরাষ্ট্রের কাছ থেকে আমার প্রত্যাশা থেকে অনেক দূরে (যা কোথাও 30 থেকে 70 এবং -60 থেকে -160 এর মধ্যে হওয়া উচিত)। আমার কিছু ভুল বোঝা উচিত ছিল।
janosdivenyi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.