कैसे रेखापुंज से स्थानिक ग्रिड का उत्पादन करने के लिए?


9

मुझे विविध विषयगत मानचित्रों के लिए एक मास्टर ग्रिड के रूप में एक स्थानिक ग्रिड की आवश्यकता है। मैं सभी एनए पिक्सल को त्यागने वाले रेखापुंज से एक स्थानिक ग्रिड का उत्पादन कैसे करूं?


6
हमें यहाँ कुछ स्क्रैप फेंको। एक रेखापुंज बनाने के लिए थोड़ा सा कोड और आप इसकी क्या उम्मीद करते हैं?
स्पेल्डमैन

जवाबों:


14

आप एक रेखापुंज में कोशिकाओं के सभी गैर-एनए निर्देशांक प्राप्त कर सकते हैं:

r = raster(matrix(runif(20),5,4))
r[r>.5]=NA

coordinates(r)[!is.na(values(r)),]
          x   y
 [1,] 0.375 0.7
 [2,] 0.125 0.5
 [3,] 0.375 0.5
 [4,] 0.625 0.5
 [5,] 0.875 0.5
 [6,] 0.125 0.3
 [7,] 0.375 0.3
 [8,] 0.625 0.3
 [9,] 0.375 0.1
[10,] 0.875 0.1

वे कोशिकाएं हैं जो NA नहीं हैं। तब आप संभवतः इन्हें SpatialPixels को खिला सकते हैं

SpatialPixels(SpatialPoints(coordinates(r)[!is.na(values(r)),]))
Object of class SpatialPixels
Grid topology:
  cellcentre.offset cellsize cells.dim
x             0.125     0.25         4
y             0.100     0.20         4
SpatialPoints:
          x   y
 [1,] 0.375 0.7
 [2,] 0.125 0.5
 [3,] 0.375 0.5
 [4,] 0.625 0.5
 [5,] 0.875 0.5
 [6,] 0.125 0.3
 [7,] 0.375 0.3
 [8,] 0.625 0.3
 [9,] 0.375 0.1
[10,] 0.875 0.1
Coordinate Reference System (CRS) arguments: NA 

हालांकि व्यक्तिगत रूप से एक ग्रिड पर कुछ भी मैं एक रेखापुंज के रूप में रखना होगा।

मुझे पूरी तरह से अभी भी यकीन नहीं है कि आप क्या चाहते हैं - SpatialGridऑब्जेक्ट पूर्ण आयताकार ग्रिड को परिभाषित करते हैं, इसलिए बिना एनए पिक्सल के कोई मतलब नहीं होता है।


धन्यवाद दोस्त, मुझे यकीन भी नहीं है कि क्या चाहिए। मैं विभिन्न स्थानिक बिंदु डेटा से समान रेखापुंज नक्शे (संकल्प, निर्देशांक, सीआरएस, ... के संदर्भ में) बनाने के लिए एक वर्कफ़्लो विकसित करने का प्रयास करता हूं। स्थानिक बिंदु बिखरने के कारण रेखापुंज एक विकल्प नहीं है। Iwd या समान का उपयोग करने की आवश्यकता है। आप सही हैं, ग्रिड आयताकार है - मुझे एक मास्टर टेम्पलेट के रूप में क्या चाहिए शायद एक स्पैटियलपॉइंट्सडैटाफ्रेम है। जिसे कसा जा सकता है। एस
जनाब स्क्वायरब्रिंस

आप शायद एक मास्टर रेखापुंज (हा!) चाहते हैं और उसके बाद सभी समवर्ती ग्रिडों को बना सकते हैं।
रडार

2
माना। यदि चीजों को ग्रिड किया जाता है, तो रेखापुंज लगभग हमेशा उत्तर होता है। या तो, या R के बारे में 20 पृष्ठों के माध्यम से एप्लाइड स्थानिक डेटा विश्लेषण के माध्यम से जा रहा है यह पता लगाने के लिए कि कैसे स्थानिक परीक्षण करने के लिए। मैंने आज एक पीएचडी छात्र को वह विकल्प दिया है, वास्तव में। उसने चुना ... समझदारी!
Spacedman

20

एक रैस्टरलेयर को एक स्थानिक * ऑब्जेक्ट (ग्रिड या पिक्सेल) में बदलने के लिए, आप कॉर्शनर "आप" का उपयोग कर सकते हैं

library(raster)
r <- raster(matrix(runif(20),5,4))
r[r>.5] <- NA
g <- as(r, 'SpatialGridDataFrame')
p <- as(r, 'SpatialPixels')

plot(r)
points(p)

7

आपकी दो आवश्यकताएं अलग-अलग चीजों के बारे में प्रतीत होती हैं:

1) विश्वसनीय रेखापुंज ग्रिड टेम्पलेट के कुछ प्रकार।

2) एक विरल ग्रिड जो स्पष्ट रूप से लापता कोशिकाओं को संग्रहीत नहीं करता है।

sp :: GridTopology पहला प्रदान करता है, यह केवल निचले बाएँ सेल के समन्वय (Cellcentre.offset), सेल रिक्ति (Cellize), और ग्रिड के आयाम (cells.dim) पर आधारित ग्रिड का वर्णन है।

Sp :: SpatialPixelsDataFrame वर्ग आपको विरल ग्रिडों को संग्रहीत करने की अनुमति देता है, लेकिन अपने दम पर यह "टेम्पलेट" की तुलना में बहुत अधिक संग्रहीत करता है - यह हर समन्वय को स्पष्ट रूप से संग्रहीत करता है। ऐसा इसलिए है क्योंकि यह दो काम करता है, एक यह आपको मूल निर्देशांक को संरक्षित करने की अनुमति देता है जो ग्रिड से आते हैं और संभवतः थोड़ा अनियमित होते हैं, दो यह आपको केवल उन कोशिकाओं को संग्रहीत करने देता है जिनके पास वैध मान हैं। (यकीनन * इन दोनों लक्ष्यों को अलग किया जाना चाहिए था, लेकिन यह एक और कहानी है)।

मुझे नहीं लगता कि रेखापुंज पैकेज में ग्रिडटोलॉजी का एक स्पष्ट एनालॉग है, लेकिन आप "अपना स्वयं का रोल" करने के लिए घटकों को पकड़ सकते हैं:

library(raster)
r1 <- raster(nrows=108, ncols=21, xmn=0, xmx=10)

## "cellsize"
res(r1)
## [1] 0.4761905 1.6666667

## extreme cell corners (just a different convention to sp's cellcentre)
extent(r1)
class       : Extent 
xmin        : 0 
xmax        : 10 
ymin        : -90 
ymax        : 90 

## we can also use bbox to get the same thing
bbox(r1)
min max
s1   0  10
s2 -90  90

## grid dimensions (including number of attributes/layers as 3rd "dim")
dim(r1)
## [1] 108  21   1

इन सभी को एक साथ जोड़कर, हम रेखापुंज से सपा तक जा सकते हैं:

GridTopology(bbox(r1)[,1] + res(r1)/2, res(r1), dim(r1)[2:1])

(ध्यान दें कि आयामों को कैसे उलट देना है)। एक और सरल तरीका है SpatialGrid के साथ सामंजस्य स्थापित करना और सपा के getGridTopology का उपयोग करना, हालांकि यह अधिक महंगा है क्योंकि निर्देशांक रास्ते के साथ उत्पन्न हो रहे हैं:

getGridTopology(as(r1, "SpatialGrid"))

रेखापुंज "टोपोलॉजी" के वे तीन भाग आवश्यक नहीं हैं, क्योंकि कुछ निरर्थक हैं, लेकिन अन्यथा उन सभी को एक वस्तु के रूप में कैप्चर करने का कोई तरीका नहीं है - सिवाय इसके कि ऊपर बनाया गया रेखापुंज "खाली" है और इसलिए यह ऐसा कर सकता है नौकरी जो GridTopology सपा के लिए करता है। मुझे इस बात पर यकीन नहीं है कि यह "खाली" कैसे है, लेकिन यह निश्चित रूप से "डेटा" स्लॉट को स्पष्ट रूप से संग्रहीत नहीं करता है और इसमें मूल्यों के साथ होने की तुलना में छोटा है। रैस्टर पैकेज सामान्य रूप से मेमोरी उपयोग को न्यूनतम रखने के लिए अपना सर्वश्रेष्ठ प्रयास करता है, और इसलिए इसके साथ आपको वास्तव में "विरल" होने के बारे में चिंता करने की आवश्यकता नहीं है।

यह थोड़ा और समझाने में मदद कर सकता है, मुझे पता है कि मैं स्पेल्डमैन के जवाब को ओवरलैप कर रहा हूं, लेकिन यह अभी भी स्पष्ट नहीं है कि प्रश्न में आपका क्या मतलब है।

  • (तर्क से, चूंकि आप स्पष्ट निर्देशांक के बजाय सिर्फ उनके सूचकांक को संग्रहीत करके विरल कोशिकाओं को स्टोर कर सकते हैं, और मूल रूप से "थोड़ा अनियमित" सेल निर्देशांक को केवल विशेषताओं के रूप में संग्रहीत किया जा सकता है यदि आप वास्तव में उन्हें चाहते थे। न तो सपा या बिल्कुल भी अनियमित आपदाओं से निपटने के लिए। साधारण रेक्टिलाइनियर केस भी नहीं - यह अधिकांश जीआईएस टूल्स के साथ है, लेकिन यह दुर्भाग्यपूर्ण है क्योंकि यह नेटसीडीएफ जैसे प्रारूपों में काफी सामान्य है और आर के अच्छे पुराने ग्राफिक्स द्वारा संभाला जाता है :: छवि फ़ंक्शन (हालांकि हाल के रैस्टोरेज विकल्प का उपयोग नहीं किया गया है) ।)

बहुत शिक्षाप्रद बयानों के लिए धन्यवाद, जिसे मुझे पचाने की जरूरत है। उम्मीद है कि मुझे अपनी समस्या को हल करने में सक्षम होना चाहिए या एक प्रश्न पोस्ट करना चाहिए जो अधिक स्पष्ट है!
जनाब स्क्वायरब्रिंस

इसके अलावा @Spacedman: मैं और अधिक सटीक रूप से यहाँ मंच में
जनाब स्क्वायरब्रिंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.