আমি কীভাবে ল্যাট, লম্বা, মান আকারে ডেটা রূপান্তর করতে পারি একটি আরস্টার ফাইল ব্যবহার করে?


40

মহাদেশীয় মার্কিন যুক্তরাষ্ট্রে আমার কিমি গ্রিডের উপরে মানগুলির একটি ডেটা সেট রয়েছে কলামগুলি হল "অক্ষাংশ", "দ্রাঘিমাংশ" এবং "পর্যবেক্ষণ", যেমন:

"lat"    "lon"     "yield"
 25.567  -120.347  3.6 
 25.832  -120.400  2.6
 26.097  -120.454  3.4
 26.363  -120.508  3.1
 26.630  -120.562  4.4

বা, একটি আর ডেটা ফ্রেম হিসাবে:

mydata <- structure(list(lat = c(25.567, 25.832, 26.097, 26.363, 26.63), 
lon = c(-120.347, -120.4, -120.454, -120.508, -120.562), 
yield = c(3.6, 2.6, 3.4, 3.1, 4.4)), .Names = c("lat", 
"lon", "yield"), class = "data.frame", row.names = c(NA, -5L))

(সম্পূর্ণ ডেটা সেট CSV হিসাবে ডাউনলোড করা যাবে এখানে )

ডেটাগুলি একটি ক্রপ মডেল থেকে (আউটপুট উদ্দেশ্যে) একটি 30 কিলোমিটার এক্স 30 কিলোমিটার গ্রিড ( মিগুয়েজ এট আল 2012 থেকে) আউটপুট ।

এখানে চিত্র বর্ণনা লিখুন

আমি কীভাবে এগুলিকে জিআইএস-এর সাথে কোনও রাস্টার ফাইলে রূপান্তর করতে পারি - মানচিত্রের অভিক্ষেপের মতো সম্পর্কিত মেটাডেটা?

আদর্শভাবে ফাইলটি একটি পাঠ্য (ASCII?) ফাইল হবে কারণ আমি এটি প্ল্যাটফর্ম এবং সফ্টওয়্যার স্বাধীন হতে চাই।


CSV হিসাবে, এই ইতিমধ্যে হয় একটি "টেক্সট ফাইল" হওয়া ASCII হবে। এছাড়াও, এটি কোনও প্রক্ষেপণ ব্যবহার করে না, যুক্ত করার জন্য খুব কম প্রাসঙ্গিক মেটাডেটা থাকতে পারে (বেশিরভাগ ক্ষেত্রে ডেটুম)। আপনি কী ধরণের আউটপুট সন্ধান করেন এবং এটির সাথে আপনি কী করতে চান সে সম্পর্কে আপনি কি আরও একটু নির্দিষ্ট হতে পারেন?
whuber

আমি পুনরায় ব্যবহারের সুবিধার্থে, যেমন অতিরিক্ত রূপান্তর পদক্ষেপের প্রয়োজন না রেখে বিভিন্ন ম্যাপিং সফ্টওয়্যার (আরকজিআইএস, গুগল ম্যাপস, গ্রাস, আর ইত্যাদি) দিয়ে ডেটা ব্যবহার করা কারও পক্ষে সম্ভব হিসাবে সহজ করে তুলতে চাই। জিআইএস ফাইল ফর্ম্যাটগুলির উইকিপিডিয়া পৃষ্ঠার ভিত্তিতে , আমি অনুমান করি 1) একটি "রাস্টার" ফাইলের একটি দ্রাঘিমাংশের দ্রাঘিমাংশ এবং দ্রাঘিমাংশের কলামের নাম থাকতে হবে, যেমন একটি চিত্র এবং 2) মেটাডাটাতে ভৌগলিক তথ্য অন্তর্ভুক্ত থাকতে হবে (একটি কোণের অবস্থান, অঞ্চলটি আচ্ছাদিত) ডেটা দ্বারা)।
আবে

আর আর জিআইএস-এ আমি যে সেরা উল্লেখ পেয়েছি সেগুলির মধ্যে এটি অন্যতম। আপনাকে অনেক ধন্যবাদ! আপনি দয়া করে সঠিক প্রজ 4 স্ট্রিং সহ ল্যাট এবং লম্বা সহ আরও একটি সিএসভি সরবরাহ করতে পারেন? আমি সত্যিই প্রশংসা করব।

@Nandini না নিশ্চিত সঠিক proj4string হয়, আমি সন্দেহ ল্যাম্বার্ট কনফরমাল:proj +proj=lcc +lat_1=50.0 +lat_2=50.0 +units=km +lon_0=-145.5 +lat_0=1.0 । আমি নিশ্চিত নই যে আপনি অন্য সিএসভি ফাইলের বিষয়ে যা জিজ্ঞাসা করছেন তা - প্রশ্নটিতে লিঙ্কযুক্তটির থেকে এটি কীভাবে আলাদা হবে, বা গৃহীত উত্তর দ্বারা উত্পন্ন হবে?
আবে

আমার জন্য কাজ করে না! "X" এবং "y" কে "স্থানাঙ্ক (পিটিএস) = = x + y" এ কী রাখতে হবে তা আমি জানি না

উত্তর:


44

বেশ কয়েকটি পদক্ষেপের প্রয়োজন:

  1. আপনি বলছেন এটি নিয়মিত 1 কিলোমিটার গ্রিড, তবে এর অর্থ ল্যাট-লং নিয়মিত নয়। প্রথমে আপনাকে এটি একটি নিয়মিত গ্রিড স্থানাঙ্ক সিস্টেমে রুপান্তর করতে হবে যাতে এক্স এবং ওয়াইয়ের মানগুলি নিয়মিত ব্যবধানে থাকে।

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

    pts = read.table("file.csv",......)

    B ইংরেজী বর্ণমালার দ্বিতীয় অক্ষর. এসপি প্যাকেজ এবং এর মতো কিছু ব্যবহার করে ডেটা ফ্রেমটিকে একটি স্পেশালপয়েন্টস ডেটা ফ্রেমে রূপান্তর করুন:

    library(sp)
    library(rgdal)
    coordinates(pts)=~x+y
    

    গ। প্রথমে এটি কী সিআরএস তা জানিয়ে আপনার নিয়মিত কিমি সিস্টেমে রূপান্তর করুন এবং তারপরে গন্তব্যস্থলে স্প্রান্সফর্ম করুন।

    proj4string(pts)=CRS("+init=epsg:4326") # set it to lat-long
    pts = spTransform(pts,CRS("insert your proj4 string here"))
    

    ঘ। আর কে বলুন যে এটি গ্রিড হয়েছে:

    gridded(pts) = TRUE

    আপনার স্থানাঙ্কগুলি একটি ভাল নিয়মিত গ্রিডে না রাখলে আপনি এই মুহুর্তে একটি ত্রুটি পাবেন।

  2. এখন রাস্টার রূপান্তর করতে রাস্টার প্যাকেজটি ব্যবহার করুন এবং এর সিআরএস সেট করুন:

    r = raster(pts)
    projection(r) = CRS("insert your proj4 string here")
    
  3. এখন একবার দেখুন:

    plot(r)
  4. এখন রাস্টার প্যাকেজ ব্যবহার করে এটি জিওটিআইএফএফ ফাইল হিসাবে লিখুন:

    writeRaster(r,"pts.tif")

এই জিওটিআইএফএফ সমস্ত বড় জিআইএস প্যাকেজগুলিতে পঠনযোগ্য হওয়া উচিত। এখানে স্পষ্ট অনুপস্থিত অংশটি রূপান্তর করার জন্য প্রজ 4 স্ট্রিং: এটি সম্ভবত এক ধরণের ইউটিএম রেফারেন্স সিস্টেম হবে। আরও কিছু ডেটা ছাড়াই বলা শক্ত ...


+1 কর্মপ্রবাহের জন্য ধন্যবাদ। নোট করুন যে প্রশ্নটিতে প্রদত্ত লিঙ্কটিতে ডেটা পাওয়া যায়: একবার দেখুন। হায় আফসোস, আপনি তাদের সম্পর্কে কিছু অনুমান ভুল আছে যে। (বিশেষ করে, আমি শিকার কোনো গ্রিড তৈরি করতে ব্যবহার করা অভিক্ষেপ সম্পর্কে ডকুমেন্টেশন কিন্তু তেমন কাউকে পাওয়া এবং এটা একটা অদ্ভুত অভিক্ষেপ আছে, যেমন আপনি পয়েন্ট ষড়যন্ত্র দ্বারা দেখতে পারেন।।)
whuber

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

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

3
আমি ম্যাথামেটিকিয়া 8 দ্বারা সমর্থিত সমস্ত (ডিফল্ট) অনুমানগুলি পেরিয়ে গিয়েছিলাম It এটি একটি প্রক্ষেপণ পেয়েছিল যাতে পয়েন্টগুলি সত্যই গ্রিডের উপর পড়ে বলে মনে হয়: আলাস্কা স্টেট প্লেন (1983) অঞ্চল 10! এটি ল্যামবার্ট কনফর্মাল কনিক প্রজেকশন। আমি বিশ্বাস করি এটি ইপিএসজি 26940 । আপনি যদি এটি প্রায় দ্রাঘিমাংশ -106 এ এটি কেন্দ্র করতে পরিবর্তন করেন তবে পয়েন্টগুলি বেশ ভাল গ্রিড তৈরি করে।
হোবার

1
আবে, আপনি কি ওয়েব পৃষ্ঠাটি পড়তে চান? এটা ছিল r = Import[ "https://ebi-forecast.igb.illinois.edu/bety/miscanthusyield.csv", "Data"];। পরে data = Rest[r]; ListPlot[data[[;; , {3, 2}]]](বা ListPointPlot3D[data[[;; , {3, 2, 4}]]]) এর মাধ্যমে আপনি পয়েন্টগুলির দ্রুত প্লট পেতে পারেন । পুনঃনির্দেশগুলির জন্য, সাহায্য দিয়ে শুরু করুন GeoGridPosition, তারপরে কী চলছে তা নির্ধারণ করার জন্য কিছু বুদ্ধিমান অনুমান এবং ক্রস-রেফারেন্স তৈরি করুন :-)। বিটিডাব্লু, @ স্পেসডম্যানের ব্যাখ্যাটি সত্যই প্রাসঙ্গিক: 25 থেকে 49 ডিগ্রি থেকে মেট্রিক বিকৃতি সমান (25) / কোস (49) = 1.38; এটা যথেষ্ট।
whuber

29

যেহেতু প্রশ্নের শেষ উত্তর দেওয়া হয়েছিল, তাই রাস্টার প্যাকেজটির rasterFromXYZক্রিয়াকলাপটি যা প্রয়োজনীয় সমস্ত পদক্ষেপকে আবশ্যক করে (সিআরএস স্ট্রিংয়ের স্পেসিফিকেশন সহ) ব্যবহার করে একটি আরও সহজ সমাধান বিদ্যমান ।

library(raster)
rasterFromXYZ(mydata)

1
অক্লান্ত @ স্পিডম্যানের কাছে ক্ষমাপ্রার্থী, যিনি আমাকে প্রায়শই সহায়তা করেছেন, তবে আমি মনে করি এই উত্তরটি আনন্দময় সবুজ রঙের টিকিটের অধিকারী।
ভূগোলিক

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

1
... প্রকৃতপক্ষে এটি চেপে গেছে কারণ এটি আমার ~ 400 কেবি ফাইল নিয়েছে এবং আমার /tmp/যখন ডিস্কের জায়গা ছাড়েনি তখন এটিতে 19 গিগাবাইটের একটি ফাইল তৈরি হয়েছিল।
আবে

কোথাও কোথাও সম্ভবত একটি এন-স্কোয়ার প্রক্রিয়া রয়েছে। আপনি একটি বিস্তৃত গ্রিড দ্বারা পয়েন্ট ডেটাগুলি গোষ্ঠীভুক্ত করতে পারবেন, প্রতিটি গ্রুপকে পৃথকভাবে রাস্টারাইজ করুন এবং তারপরে merge()ফলাফলগুলি একসাথে করতে পারবেন।
ভূগোলিক 21

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