আরে স্থানিক বহুভুজ অবজেক্টের একটি তালিকা মার্জ করুন


16

আমার কাছে ফাংশনটি দিয়ে তৈরি করা স্থানিক বাফারগুলির (30000 বাফার) একটি তালিকা রয়েছে lapply:

buff.pts <- lapply(1:nrow(pts.prj), FUN=function(l){
  buff <- gBuffer(pts.prj[l,], width=1000) ## 1km
  return(buff)
}))

> head(buff.pts)
[[1]]
class       : SpatialPolygons 
features    : 1 
extent      : 307941.8, 311941.8, 4994518, 4998518  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0 

[[2]]
class       : SpatialPolygons 
features    : 1 
extent      : 307226, 311226, 4991153, 4995153  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0 

এই তালিকা থেকে, আমি কীভাবে সমস্ত স্থানিক বাফারগুলিকে 30000 বাফারগুলি (বা বৈশিষ্ট্যগুলি) দিয়ে একটি শেফফিল পেতে মেশাতে পারি? (এই শেফফাইলটি ফাংশনে aggregateবৈশিষ্ট্য অনুসারে স্থানিক বহুভুজকে একত্রিত করতে ব্যবহৃত হবে ))

আমি এই কোডটি পরীক্ষা করেছি তবে আমি এই ত্রুটি বার্তাটি পেয়েছি:

test <- as.data.frame(do.call("rbind", buff.pts))
Error in as.data.frame(do.call("rbind", buff.pts)) : 
  error in evaluating the argument 'x' in selecting a method for function 'as.data.frame': Error in validObject(res) : 
  invalid class SpatialPolygons object: non-unique Polygons ID slot values

3
কোন কারণে আপনার সাথে আপনার বাফার নির্মাণ করা প্রয়োজন lapplyব্যবহারের পরিবর্তে gBufferসঙ্গে byid = TRUE?
চেঞ্জেল

উত্তর:


12

SpatialPolygonsঅবজেক্টের একটি তালিকা দেওয়া হয়েছে, এখানে মূল SpatialPolygonsবৈশিষ্ট্য অনুসারে একটি বৈশিষ্ট্য সহ একটি স্থানিক বহুভুজ ডেটা ফ্রেম কীভাবে তৈরি করবেন তা এখানে ।

নমুনা ডেটা: spl12 টি SpatialPolygonsসামগ্রীর একটি তালিকা - নিশ্চিত করুন যে আপনার অবজেক্টটি এর মতো একই ফলাফল দেয় এবং 30,000 তে চালানোর আগে একটি ছোট নমুনায় পরীক্ষা করুন:

> length(spl)
[1] 12
> class(spl)
[1] "list"
> class(spl[[1]])
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"

Spatial Polygonsএরপরে স্পেশিয়াল বহুভুজ ডেটা ফ্রেম তৈরি করতে আপনি এতে সমস্ত বৈশিষ্ট্য সহ একটি একক বস্তু তৈরি করতে চান :

> joined = SpatialPolygons(lapply(spl, function(x){x@polygons[[1]]}))
> plot(joined)

এটি polygonsঅবজেক্ট থেকে প্রথম স্লট নেয় (এবং সেখানে কেবলমাত্র একটি হওয়া উচিত, যেহেতু প্রতিটি তালিকার উপাদান বর্তমানে একক বৈশিষ্ট্যযুক্ত) এবং তারপরে বহুভোজনীয় বস্তুগুলির একটি তালিকা তৈরি করে যা আপনি SpatialPolygonsএকাধিক বৈশিষ্ট্য তৈরির জন্য খাওয়ান SpatialPolygons। এটি প্লট করুন এবং আপনার সমস্ত বৈশিষ্ট্য দেখতে হবে। এর পরে, আপনি যদি হিসাবে সংরক্ষণ করতে চান তবে আপনাকে shapefileকিছু ডেটা যুক্ত করতে হবে। অন্য কিছুর অভাবে আমি একটি সাধারণ 1 থেকে 12 আইডি কলাম তৈরি করি:

> jdata = SpatialPolygonsDataFrame(Sr=joined, data=data.frame(i=1:12),FALSE)

FALSEপতাকা মাত্র আর আপ মেলে স্থানিক এবং অ স্থানিক ডেটা নতুন করে সাজানো বের করার চেষ্টা স্টপ। আপনি বাফার আকারগুলি ডেটা ফ্রেমে বা কোনও কিছুর মধ্যে রাখতে পারেন।

কাজ শেষ.



2

আপনার বহুভুজনের অনন্য আইডি না থাকলে আপনি rbind এ MakeUniqueIDs টি যুক্তি ব্যবহার করতে পারেন।

 library(purrr)

list(buff.pts, makeUniqueIDs = T) %>% 
  flatten() %>% 
  do.call(rbind, .)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.