আর বা আর্কজিআইএস-এ স্পটিও-টেম্পোরাল ইন্টারপোলেশন?


12

আমি আর্কজিআইএস 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: অবশেষে আমি সি ++ কোড ব্যবহার করে এটি করেছি যার জন্য আর্কজিআইএস মাস্ক গ্রিড, ডেটা ফাইল এবং সমস্ত পয়েন্টের অবস্থান প্রয়োজন।


সম্পাদনা 2: আমি সম্প্রতি এই অন্তরঙ্গকরণ কাজটি করতে আর ব্যবহার করেছি। হয় আপনি ব্যবহার করতে পারেন 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। আসলে আইডিডাব্লু সরঞ্জামে ডান ক্লিক করার পরে একটি ব্যাচের বিকল্প রয়েছে তবে আপনার যদি প্রতি ঘন্টা বা প্রতিদিনের ডেটা থাকে তবে এটি বেশ ক্লান্তিকর কাজ। কেআর
টুং

@ থ্যাচ্যাটালিস্ট - যদি ব্যাচ আইডাব্লু সরঞ্জামটি কাজ করে তবে আপনার এটি উত্তর হিসাবে পোস্ট করা উচিত। যদিও এটি ক্লান্তিকর হতে পারে, যদি এটি বিরল হয় (হিসাবে বার্ষিক বৃষ্টিপাতের অনুমান খুব কম হয়) তবে অন্যান্য সমাধানগুলি অনুসন্ধান করার খুব কম কারণ রয়েছে।
অ্যান্ডি ডাব্লু

@ অ্যান্ডি: ব্যাচ সরঞ্জামটি যদি আপনার সীমিত সংখ্যক হয় তবে সাহায্য করবে তবে আমার কাছে শত শত ডেটা রয়েছে যা এটিকে কিছুটা অবাস্তব ব্যবহারের ধারণা দেয়। আমি এখনও এই সমস্যার সমাধান অনুসন্ধান করছি। কেআর
টুং

উত্তর:


3

আমি একটি মডেলটিতে "বৈশিষ্ট্য নির্বাচন" পুনরাবৃত্তিকে সন্নিবেশ করে এটি সমাধান করেছি। (সারণী-> আইট্রেটারস মেনু এর অধীনে মডেলবিল্ডার উইন্ডোতে))

আপনার সময় ক্ষেত্রটি আপনার "গ্রুপ বাই" ভেরিয়েবল হিসাবে ব্যবহার করুন। এটি করে, মডেলটি আপনার বৈশিষ্ট্য শ্রেণিতে প্রতিবারের জন্য একবারে পুনরাবৃত্তি করবে।

তারপরে আপনার পছন্দসই ইন্টারপোলেশন সরঞ্জামটি (স্প্লাইন, আইডিডাব্লু, যাই হোক না কেন) পুনরুক্তি থেকে ফিচার আউটপুটে সংযুক্ত করুন। মডেলটি চালান, কয়েক সপ্তাহের জন্য অবকাশে যান, এবং আপনি ফিরে আসার পরে, বৈশিষ্ট্য শ্রেণিতে আপনার সময় পয়েন্টের যতটা গ্রিড থাকবে।

নোট করুন যে এই সমাধানটি ধরে নিয়েছে যে আপনার কাছে একটি তারিখ বা সংখ্যাসূচক ক্ষেত্রের সাথে পৃথক সময় স্যাম্পলিং পয়েন্ট রয়েছে যা আপনার বৈশিষ্ট্য সেটে প্রতিটি রেকর্ডের জন্য একক সময় পয়েন্ট নির্দেশ করে। আপনি যদি "শুরুর সময়" এবং "শেষ সময়" ফর্ম্যাটটি ব্যবহার করে থাকেন তবে এটি সম্ভবত এতটা সোজা হবে না।


1
এছাড়াও, আপনার আউটপুট ফাইলের নামটিতে "% n%" ভেরিয়েবলটি ব্যবহার করতে ভুলবেন না (বা কোনও অনন্য ফাইলের নাম উত্পন্ন করার কোনও অন্য উপায়), না হলে আপনি প্রতিটি পুনরাবৃত্তিকে আপনার উপর চাপিয়ে দিতে পারেন। আরও তথ্যের জন্য, help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//… বা কেবল গুগল "মডেলবিল্ডার সিস্টেম ভেরিয়েবলগুলির সাথে ইন-লাইন ভেরিয়েবল বিকল্পের উদাহরণ"

TY। এটি করার আলাদা উপায় রয়েছে তা জেনে রাখা ভাল। চিয়ার্স!
টুং

2

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

পিএস: আমি @ অ্যান্ডডাব্লু এর সাথে একমত যে আপনি যদি আইডিডাব্লু ব্যবহার করে এটি সমাধান করেন তবে উত্তর হিসাবে নিজে পোস্ট করুন এবং তারপরে "টিক দিয়ে চিহ্নিত করুন"


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

একটি স্থানিক রেফারেন্স সিস্টেম (এসআরএস) যোগ করুন বা সমন্বিত রেফারেন্স সিস্টেম (সিআরএস)।

# 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"

ইউটিএম 10N তে রূপান্তর করুন

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"))

যথার্থ শেফফিলের সাথে যথাযথ ডেটা ফ্রেমটি মার্জ করুন

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

বৃষ্টিপাতের শেফফাইল (ইউটিএম) এর সাথে বৃষ্টিপাতের ডেটা ফ্রেমটি মার্জ করুন

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")))

স্থানিক প্রক্ষিপ্তকরণের জন্য সীমাটি নির্ধারণ করুন। এটি প্রতিটি দিকে 4km বড় করুন

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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.