आर या आर्कजीआईएस में स्पैट-टेम्पोरल इंटरपोलेशन?


12

मैं ArcGIS 9.3 में व्युत्क्रम भारित दूरी उपकरण का उपयोग करके कई बिंदुओं से औसत वर्षा मूल्य की गणना करने की कोशिश कर रहा हूं।

मेरी समस्या यह है कि: प्रत्येक बिंदु की अपनी समय श्रृंखला है, इसलिए प्रक्षेप प्रक्रिया को सभी वर्षों के लिए बाहर ले जाने में सक्षम होना चाहिए (बोलने के लिए इस तरह की पुनरावृत्ति)।

निम्नलिखित एक नमूना विशेषता तालिका है:

ID X Y Name Rain1990 Rain1991 Rain1992 Rain1993 .... Rain2010

1 xx1 yy1 AA 1210 1189 1863 1269 ......  
2 xx2 yy2 BB 1492 1502 2187 1923 ......
......

किसी ने मुझे दिखा सकते हैं कि कैसे करना है?


संपादन 1: मैंने आखिरकार C ++ कोड का उपयोग करके ऐसा किया, जिसके लिए ArcGIS मास्क ग्रिड, डेटा फ़ाइलों और सभी बिंदुओं के स्थानों की आवश्यकता थी।


संपादन 2: मैंने हाल ही में इस प्रक्षेप कार्य को करने के लिए R का उपयोग किया। आप या तो उपयोग कर सकते हैं hydroTSM, gstatया spacetimeपैकेज। कुछ उदाहरण नीचे दिए गए हैं:

http://spatial-analyst.net/wiki/index.php?title=Spatial_interpolation_exercises_%28NL%29

http://www.geostat-course.org/Topic_Bivand_2012


संपादित 3: भविष्य के पाठकों के लिए नीचे एक कार्यशील उदाहरण जोड़ा गया


क्या इससे मदद मिलेगी? टाइम सीरीज़
ब्रैड नेसोम

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

आपके उत्तर के लिए thx वास्तव में एक बैच विकल्प होता है जब IDW टूल पर राइट क्लिक होता है लेकिन फिर भी यदि आपके पास प्रति घंटा या दैनिक डेटा है तो यह काफी थकाऊ काम है। केआर
तुंग

@thecatalyst - यदि बैच IDW टूल काम करता है तो आपको उत्तर के रूप में पोस्ट करना चाहिए। यद्यपि यह थकाऊ हो सकता है, अगर यह अनारक्षित है (जैसा कि वार्षिक वर्षा के अनुमान अनंत हैं) तो अन्य समाधानों की खोज करने का बहुत कम कारण है।
एंडी डब्ल्यू

@Andy: यदि आपके पास सीमित संख्या है तो बैच टूल मदद करेगा लेकिन मेरे पास सैकड़ों डेटा हैं जो इसे थोड़ा सा अवास्तविक उपयोग करने का विचार बनाते हैं। मैं अब भी इस समस्या का हल खोज रहा हूँ। केआर
तुंग

जवाबों:


3

मैंने एक मॉडल में "फ़ीचर चयन" पुनरावृत्ति सम्मिलित करके इसे हल किया। (मॉडल-विंडो विंडो में, सम्मिलित करें-> इटरेटर मेनू के अंतर्गत।)

अपने समय क्षेत्र का उपयोग अपने "समूह" चर के रूप में करें। ऐसा करने से, मॉडल आपके फीचर वर्ग में हर बार एक बार पुन: प्रसारित होगा।

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

ध्यान दें कि यह समाधान मानता है कि आपके पास तारीख या संख्यात्मक क्षेत्र के साथ समय नमूना बिंदुओं को असतत है जो आपके फीचर सेट में प्रत्येक रिकॉर्ड के लिए एक एकल समय बिंदु को इंगित करता है। यदि आप "शुरुआती समय" और "समाप्ति समय" प्रारूप का उपयोग कर रहे हैं, तो यह इतना सीधा नहीं हो सकता है।


1
इसके अलावा, अपने आउटपुट फ़ाइल नाम (या किसी विशिष्ट फ़ाइल नाम को उत्पन्न करने का कोई अन्य तरीका) में "% n%" चर का उपयोग करना न भूलें, वरना आप हर पुनरावृत्ति को रोक सकते हैं। अधिक जानकारी के लिए, help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//… या सिर्फ Google "ModelBuilder सिस्टम चर के साथ लाइन चर प्रतिस्थापन के उदाहरण" देखें

स्व। यह जानने का अच्छा तरीका है कि इसे करने का एक अलग तरीका है। चीयर्स!
तुंग

2

ऐसा लगता है कि यह धागा IDW टूल द्वारा उत्तर दिया गया है, लेकिन यदि आप प्रारंभ वर्ष का अनुरोध और इनपुट करना चाहते थे और फिर मॉडल बिल्डर में इनलाइन चर का उपयोग करके वर्ष क्षेत्रों के माध्यम से पुनरावृति करते हैं तो यह मॉडलिंग को संभालने के लिए एक और अधिक सुंदर तरीका होगा। ।

पुनश्च: मैं @AndyW से सहमत हूं कि यदि आपने इसे IDW का उपयोग करके हल किया है, तो स्वयं एक उत्तर के रूप में पोस्ट करें और फिर "टिक के लिए निशान"।


1

Rरैंडम वर्षा डेटा का उपयोग करके मेरा अपना समाधान जोड़ें

library(tidyverse)
library(sp) # for coordinates, CRS, proj4string, etc
library(gstat)
library(maptools)

# Coordinates of gridded precipitation cells
precGridPts <- ("ID lat long
                1 46.78125 -121.46875
                2 46.84375 -121.53125
                3 46.84375 -121.46875
                4 46.84375 -121.40625
                5 46.84375 -121.34375
                6 46.90625 -121.53125
                7 46.90625 -121.46875
                8 46.90625 -121.40625
                9 46.90625 -121.34375
                10 46.90625 -121.28125
                11 46.96875 -121.46875
                12 46.96875 -121.40625
                13 46.96875 -121.34375
                14 46.96875 -121.28125
                15 46.96875 -121.21875
                16 46.96875 -121.15625
                ")

# Read precipitation cells
precGridPtsdf <- read.table(text = precGridPts, header = TRUE)

किसी ऑब्जेक्ट में कनवर्ट करें

sp::coordinates(precGridPtsdf) <- ~long + lat # longitude first

एक स्थानिक संदर्भ प्रणाली (SRS) जोड़ें या संदर्भ प्रणाली (CRS) का समन्वय करें।

# CRS database: http://spatialreference.org/ref/epsg/
sp::proj4string(precGridPtsdf) <- sp::CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")
str(precGridPtsdf)
#> Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
#>   ..@ data       :'data.frame':  16 obs. of  1 variable:
#>   .. ..$ ID: int [1:16] 1 2 3 4 5 6 7 8 9 10 ...
#>   ..@ coords.nrs : int [1:2] 3 2
#>   ..@ coords     : num [1:16, 1:2] -121 -122 -121 -121 -121 ...
#>   .. ..- attr(*, "dimnames")=List of 2
#>   .. .. ..$ : chr [1:16] "1" "2" "3" "4" ...
#>   .. .. ..$ : chr [1:2] "long" "lat"
#>   ..@ bbox       : num [1:2, 1:2] -121.5 46.8 -121.2 47
#>   .. ..- attr(*, "dimnames")=List of 2
#>   .. .. ..$ : chr [1:2] "long" "lat"
#>   .. .. ..$ : chr [1:2] "min" "max"
#>   ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
#>   .. .. ..@ projargs: chr "+proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0"

यूटीएम 10 एन में परिवर्तित करें

utm10n <- "+proj=utm +zone=10 ellps=WGS84"
precGridPtsdf_UTM <- spTransform(precGridPtsdf, CRS(utm10n))

हाइपोथेटिकल वार्षिक वर्षा डेटा पोइसन वितरण का उपयोग करके उत्पन्न।

precDataTxt <- ("ID PRCP2016 PRCP2017 PRCP2018
                1 2125 2099 2203
                2 2075 2160 2119
                3 2170 2153 2180
                4 2130 2118 2153
                5 2170 2083 2179
                6 2109 2008 2107
                7 2109 2189 2093
                8 2058 2170 2067
                9 2154 2119 2139
                10 2056 2184 2120
                11 2080 2123 2107
                12 2110 2150 2175
                13 2176 2105 2126
                14 2088 2057 2199
                15 2032 2029 2100
                16 2133 2108 2006"
)

precData <- read_table2(precDataTxt, col_types = cols(ID = "i"))

Prec आकृतिफाइल के साथ मर्ज Prec डेटा फ़्रेम

precGridPtsdf <- merge(precGridPtsdf, precData, by.x = "ID", by.y = "ID")
precdf <- data.frame(precGridPtsdf)

रेन शेपफाइल (UTM) के साथ डेटा फ्रेम मर्ज करें

precGridPtsdf_UTM <- merge(precGridPtsdf_UTM, precData, by.x = "ID", by.y = "ID")

# sample extent
region_extent <- structure(c(612566.169007975, 5185395.70942594, 639349.654465079, 
                             5205871.0782451), .Dim = c(2L, 2L), .Dimnames = list(c("x", "y"
                             ), c("min", "max")))

स्थानिक प्रक्षेप के लिए सीमा को परिभाषित करें। प्रत्येक दिशा पर इसे 4 किमी बड़ा करें

x.range <- c(region_extent[1] - 4000, region_extent[3] + 4000)
y.range <- c(region_extent[2] - 4000, region_extent[4] + 4000)

1 किमी रिज़ॉल्यूशन पर वांछित ग्रिड बनाएं

grd <- expand.grid(x = seq(from = x.range[1], to = x.range[2], by = 1000), 
                   y = seq(from = y.range[1], to = y.range[2], by = 1000))   

# Convert grid to spatial object
coordinates(grd) <- ~x + y
# Use the same projection as boundary_UTM
proj4string(grd) <- "+proj=utm +zone=10 ellps=WGS84 +ellps=WGS84"
gridded(grd) <- TRUE

व्युत्क्रम दूरी भारित (IDW) का उपयोग करके इंटरपोल करें

idw <- idw(formula = PRCP2016 ~ 1, locations = precGridPtsdf_UTM, newdata = grd)  
#> [inverse distance weighted interpolation]

# Clean up
idw.output = as.data.frame(idw)
names(idw.output)[1:3] <- c("Longitude", "Latitude", "Precipitation")

precdf_UTM <- data.frame(precGridPtsdf_UTM)

प्लॉट प्रक्षेप परिणाम

idwPlt1 <- ggplot() + 
  geom_tile(data = idw.output, aes(x = Longitude, y = Latitude, fill = Precipitation)) +
  geom_point(data = precdf_UTM, aes(x = long, y = lat, size = PRCP2016), shape = 21, colour = "red") +
  viridis::scale_fill_viridis() + 
  scale_size_continuous(name = "") +
  theme_bw() +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  theme(axis.text.y = element_text(angle = 90)) +
  theme(axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0))) 
idwPlt1

### Now looping through every year 
list.idw <- colnames(precData)[-1] %>% 
  set_names() %>% 
  map(., ~ idw(as.formula(paste(.x, "~ 1")), 
               locations = precGridPtsdf_UTM, newdata = grd)) 

#> [inverse distance weighted interpolation]
#> [inverse distance weighted interpolation]
#> [inverse distance weighted interpolation]

idw.output.df = as.data.frame(list.idw) %>% as.tibble()
idw.output.df

#> # A tibble: 1,015 x 12
#>    PRCP2016.x PRCP2016.y PRCP2016.var1.pred PRCP2016.var1.var PRCP2017.x
#>  *      <dbl>      <dbl>              <dbl>             <dbl>      <dbl>
#>  1    608566.   5181396.              2114.                NA    608566.
#>  2    609566.   5181396.              2115.                NA    609566.
#>  3    610566.   5181396.              2116.                NA    610566.
#>  4    611566.   5181396.              2117.                NA    611566.
#>  5    612566.   5181396.              2119.                NA    612566.
#>  6    613566.   5181396.              2121.                NA    613566.
#>  7    614566.   5181396.              2123.                NA    614566.
#>  8    615566.   5181396.              2124.                NA    615566.
#>  9    616566.   5181396.              2125.                NA    616566.
#> 10    617566.   5181396.              2125.                NA    617566.
#> # ... with 1,005 more rows, and 7 more variables: PRCP2017.y <dbl>,
#> #   PRCP2017.var1.pred <dbl>, PRCP2017.var1.var <dbl>, PRCP2018.x <dbl>,
#> #   PRCP2018.y <dbl>, PRCP2018.var1.pred <dbl>, PRCP2018.var1.var <dbl>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.