একাধিক স্পটিয়ালপলিগনডাটা ফ্রেমগুলিকে আর-তে 1 এসপিডিএফের সাথে একীভূত করছেন?


22

আমি কিউজিসে 2 টি বহুভুজ তৈরি করেছি। এগুলিকে আর-তে ব্যবহার করে বহুভুজগুলি স্বয়ংক্রিয়ভাবে স্পেশিয়ালপলিজোনস ডেটাফ্রেমে (এসপিডিএফ) হয়ে যায়। আমি তাদের একক এসপিডিএফ- তে মার্জ করতে চাই (যেমন সরঞ্জাম মার্জ ব্যবহার করে আর্কজিতে অত্যন্ত সহজ )। আমি নিশ্চিত যে আর-তে এটি কীভাবে সম্পন্ন করা যায় তার সহজ উপায় থাকতে হবে তবে আমি কীভাবে তা খুঁজে পাচ্ছি না। একত্রীকরণ ফাংশন, শুধুমাত্র data.frames একত্রীকরণ বলে মনে হয় সমষ্টিগত ফাংশন এক Shp, একাধিক বহুভুজ দ্রবীভূত gIntersect (টাইপ করে ফাংশন যোগদানের) লজিক্যাল মান ফেরৎ, সমস্ত SPDF না।

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

তথ্য এখানে উপলব্ধ: http://ulozto.cz/xpoo5jfL/ab-zip

library(sp)
library(raster)
library(rgeos)
library(spatstat)
library(rgdal)     
library(maptools)

setwd("C:/...")
a<-readOGR(dsn=getwd(), layer="pol.a")
b<- readOGR(dsn=getwd(), layer="pol.b")

ab<-merge(a, b)  # what tool if not "merge" to use??

2
দেখুন? Rgeos :: gUnion এবং / অথবা? রাস্টার :: ইউনিয়ন
mdsumner

সংশ্লিষ্ট: gis.stackexchange.com/questions/180682/...
MOX

উত্তর:


21

আপনার যদি টপোলজিটি মার্জ করার প্রয়োজন না হয় তবে কেবল নতুন বহুভুজ যুক্ত করুন, আপনি কেবল ব্যবহার করতে পারেন:

ab <- rbind(a,b)

যদি আপনি "অ-স্বতন্ত্র বহুভুজ আইডি স্লট মানগুলি" ত্রুটি পান তবে এর অর্থ হ'ল বস্তুর রওনামগুলি একই are এটি ঠিক করতে আপনি rownames এবং সম্পর্কিত স্লট সম্পর্কগুলি পরিবর্তন করতে spChFID ব্যবহার করতে পারেন। যেহেতু বস্তুর স্লটগুলি বস্তুকে সংযুক্ত করার জন্য রোউন নামগুলি ব্যবহার করে, আপনি কেবল @ ডেটা স্লটে সারি.নাম পরিবর্তন করতে পারবেন না।

b <- spChFIDs(b, paste("b", row.names(b), sep="."))

রাস্টার প্যাকেজটিতে ইউনিয়ন (ইউনিয়ন_স্প) ফাংশনটি এটি করছে এবং পর্দার পিছনে rgeos থেকে জিন্টারসেক্ট কল করে এবং এটি একটি খুব সুবিধাজনক সহায়ক ফাংশন।

**** 08-06-2018 সম্পাদনা করুন একটি অননুমোদিত আর্গুমেন্ট রয়েছে যা নকল আইডি ইস্যুটি এড়িয়ে যেতে ব্যবহার করা যেতে পারে।

ab <- rbind(a, b, makeUniqueIDs = TRUE) 

হাই, আপনাকে ধন্যবাদ, আমি এটি চেষ্টা করেছিলাম কিন্তু একটি ত্রুটি পেয়েছি: বৈধবজেক্টে ত্রুটি (পুনরায়): অবৈধ শ্রেণি "স্প্যাটিয়ালপলিগনস" অবজেক্ট: অ-স্বতন্ত্র বহুভুজ আইডি স্লট মান। আমি কীভাবে এই ত্রুটিটি মোকাবেলা করতে পারি?
maycca

3
আপনি এটি করতে পারেন: ab <- bind(a, b) সেই ত্রুটিটি এড়াতে
রবার্ট হিজম্যানস

রাস্টার :: ইউনিয়ন বর্তমানে কাজ spatialPOINTSdataframes কিছু করে
MOX

19

@ এমডিসমনার দ্বারা সরবরাহ করা দুর্দান্ত সহজ সমাধান:

library(sp)
library(raster)
library(rgeos)
library(spatstat)
library(rgdal)     
library(maptools)

setwd("C:/...")
a<-readOGR(dsn=getwd(), layer="pol.a")
b<- readOGR(dsn=getwd(), layer="pol.b")

# use union in {raster} package ?raster::union
ab<-union(a, b)

ফলে :

শ্রেণী (AB)

[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"

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


6
রাস্টার হিজম্যানস, রাস্টার এর লেখক দ্বারা সরবরাহ করা সুপার ইজি সহজ সমাধান :)
এমডসুমনার

'ইউনিয়ন' (বর্তমানে) স্প্যাটালিপয়েন্টসডেটা ফ্রেমগুলির জন্য কাজ করে না, যদিও আমাকে বলা হয়েছে এটি পরবর্তী প্রকাশে হবে। @ রবার্টএইচ রাইবাইন্ড ব্যবহারের পরামর্শ দিয়েছেন, যদিও এটি কীভাবে কাজ করে আমি ঠিক পরিষ্কার নই।
মোক্স

: বিস্তারিত জানতে এখানে gis.stackexchange.com/questions/274609/...
MOX

দেখে মনে হচ্ছে raster::unionএটি স্পিটালালাইনস ডেটা ফ্রেম শ্রেণীর জন্যও কাজ করে!
ফিলিপোরল্যান্ডো

1
library(sp)
data(meuse)
plot(meuse)
slotNames(meuse) #".Data"     "names"     "row.names" ".S3Class" 
coordinates(meuse) <- ~x+y #Add "ID" column to "meuse"
slotNames(meuse) #[1] "data"        "coords.nrs"  "coords"      "bbox"        "proj4string"
class(meuse) #[1] "SpatialPointsDataFrame"
names(meuse@data)
#[1] "cadmium" "copper"  "lead"    "zinc"    "elev"    "dist"    "om"      "ffreq"   "soil"    "lime"   
#[11] "landuse" "dist.m"
meuse@data <- data.frame(ID=1:nrow(meuse), meuse@data) #adds an ID field
names(meuse@data)
#[1] "ID"      "cadmium" "copper"  "lead"    "zinc"    "elev"    "dist"    "om"      "ffreq"   "soil"   
#[11] "lime"    "landuse" "dist.m" 
#Create a data.frame "df.new" with "IDS" (note different name) and "y" columns.
meuse_table.df <- data.frame(IDS=1:nrow(meuse), y=runif(nrow(meuse)))
class(meuse_table.df) #"data.frame"
#Now we can merge "df.new" to "meuse" (@data slot)
meuse <- merge(meuse, meuse_table.df, by.x = "ID", by.y = "IDS")
#create a new file named meuse, consisting of a merge of:
#   the meuse spatial points (from the original)
#   the dataframe created from the original, using the data.frame command
#   BY the field "ID" in the spatialpointsdataframe
#   By the field "IDS" in the tabular dataframe (df.new) 
head(meuse@data)
# I think the source of unease is that adding an ID field to both files 
#is based on them having the same number of rows in the same order. 
#in ArcGIS, this would be an unreasonable and dangerous assumption.
#R seems to have some sort of 'innate' key field, based on the order read it. 
#This is all great when splitting one file, and merging it back together.
#but what about two files? 
#I think it can be done, but it's a three-step process. 
#First, merge the polygons. Add an ID field, as above.
#Second, merge the tables (as dataframes), and add ID's. as above. 
#Third, attach the merged tables to the merged polygons. 
#For it to work, the order of things in the merge (polgyons, dataframe) needs be identfical. 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.