আর-তে বহুভুজ স্তর ব্যবহার করে বহুভুজ স্তরটির সত্যিকারের জিআইএস ক্লিপ কীভাবে সম্পাদন করবেন?


16

আমি একক সীমানা বহুভুজগুলির একটি সিরিজ ব্যবহার করে মৃত্তিকার বহুভুজের আরে সত্যিকারের জিআইএস ক্লিপটি করতে চাই, তবে এটির সঠিকভাবে কাজ করার জন্য আর ফাংশনটি খুঁজে পাচ্ছি না। এটি clipইএসআরআই এর আরক্যাপে ফাংশনের মতোই কাজ করা উচিত । আমি প্যাকেজে overপদ্ধতিটি চেষ্টা করেছি spতবে পোলির পক্ষে পোলির জন্য এটি কাজ করে বলে মনে হয় না।

এক পরামর্শ ব্যবহার করতে ছিল gIntersectionমধ্যে rgeosনিম্নলিখিত কোড ব্যবহার করে একটি ক্লিপ যেমন প্যাকেজ:

#------------------------------------
library(rgeos)
library(maptools)

#Read layers as SpatialPolygonsDataFrame (both the same Albers projection)
Soils_poly = readShapePoly("Soils_polygons")  #Note - Has 400 polygons
clipper_poly = readShapePoly("clipper_polygon")  #Note - Has 1 polygon

#Try gintersection as clip 
Clipped_polys = gIntersection(Clipper_Tile_poly, Soils_poly)

#-----------------------------------

এটি চালাতে 5 মিনিট সময় নেয় (খুব ধীর পথে) এবং এর সাথে ত্রুটিগুলি:

আরজিইওএসবিন টোপোফ্যাঙ্কে ত্রুটি (স্পিজোম 1, স্পিজোম 2, বাইড, আইডি, ড্রপ_নোট_পলি, "rgeos_intersection"): টপোলজিএক্সেপশন: -721459.77681285271 2009506.5980877089 এ খুঁজে পাওয়া যায় না

ওভারল্যাপ পরীক্ষা করার জন্য আমি এই কোডটি চেষ্টা করেছিলাম:

gIntersects(Clipper_Tile_poly, Soils_poly)

এবং ফলাফল সত্য ছিল। clipESRI আর্কম্যাপে ফাংশন এই ডেটাটির জন্য সূক্ষ্মভাবে কাজ করে।

স্থানিক বহুভুজ ব্যবহার করে স্থানিক বহুভুজগুলিতে সঠিকভাবে একটি ক্লিপ করতে কোনও আর ফাংশন জানেন?


বাইড = সত্যের সাথে জিন্টারেকশন চেষ্টা করুন (আমার মনে হয় এটি নির্দিষ্ট ক্লিপগুলির জন্য ঝোলা টপোলজিসহ একটি সমস্যা, এবং কখনও কখনও এটির সাহায্যে হয়) গতি পরীক্ষা করার জন্য gUnarySTRtreeQuery () বা gBinarySTRtreeQuery () পরীক্ষা করে বহুভুজগুলির জোড়া জোড়ের ছেদকৃত বক্সগুলি সনাক্ত করতে পারেন pairs জোড়াটি ছেদ করুন। এই আফিকের জন্য এখন পর্যন্ত কোনও উচ্চ-স্তরের মোড়ক নেই
এমডসুমনার

উত্তর:


20

@Mdsummer ব্যবহারের ইঙ্গিতটি byid=TRUEসঠিকভাবে কাজ করে ।

নীচে পুনরুত্পাদনযোগ্য উদাহরণ দেখুন:

library(rgeos)
library(sp)

#Create SpatialPlygons objects
polygon1 <- readWKT("POLYGON((-190 -50, -200 -10, -110 20, -190 -50))") #polygon 1
polygon2 <- readWKT("POLYGON((-180 -20, -140 55, 10 0, -140 -60, -180 -20))") #polygon 2

par(mfrow = c(1,2)) #in separate windows
plot(polygon1, main = "Polygon1") #window 1
plot(polygon2, main = "Polygon2") #window 2

বহুভুজ পাশাপাশি রয়েছে

polygon_set <- readWKT(paste("POLYGON((-180 -20, -140 55, 10 0, -140 -60, -180 -20),",
                     "(-190 -50, -200 -10, -110 20, -190 -50))"))

par(mfrow = c(1,1)) #now, simultaneously
plot(polygon_set, main = "Polygon1 & Polygon2")

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

clip <- gIntersection(polygon1, polygon2, byid = TRUE, drop_lower_td = TRUE) #clip polygon 2 with polygon 1
plot(clip, col = "lightblue")

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

GT <- GridTopology(c(-175, -85), c(10, 10), c(36, 18))
gr <- as(as(SpatialGrid(GT), "SpatialPixels"), "SpatialPolygons")
plot(gr)

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

clip2 <- gIntersection(clip, gr, byid = TRUE, drop_lower_td = TRUE)
plot(clip2, col = "pink")

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


1
অবিশ্বাস্যভাবে দ্রুত - একটি স্বপ্ন কাজ করে। আমি পলিইন ক্লিপ করতে এটি ব্যবহার করছি। আমি ব্রিটিশ নদীগুলির জন্য শেফফিলের সাবসেটগুলি তৈরি করতে চেয়েছিলাম, কারণ ডেটার একটি ছোট উপসেট নিয়ে কাজ করা আরও দ্রুত faster
সিজেবি

1
@ আন্ড্রেসিলভা, ভেবেছিলাম আমার কাছে আছে, তবে অনুমান করুন আমি না! পুনঃ সম্প্রদায়, আমি আশা করি আর জিআইএস বিকাশকারী সম্প্রদায়টি কিছুটা বড় টিবিএইচ হবে। কিছু ডিজিটাইজেশন এবং জিইউআইতে দ্রুত হওয়া অন্যান্য প্রক্রিয়াগুলির জন্য আমাকে সম্ভবত আরক্যাম্যাপে ফিরে যেতে হবে।
ধনী পাওলো

3

আপনি রাস্টার প্যাকেজটিও ব্যবহার করতে পারেন raster::intersect(spdf1, spdf2)। আপনার কাছে স্প্যাটিয়ালপলিজোনডাটা ফ্রেম থাকলে এই বৈশিষ্ট্যগুলি বজায় রাখার সুবিধা রয়েছে।

library(sp); library(rgeos)

coords1 <- matrix(c(-1.841960, -1.823464, -1.838623, -1.841960, 55.663696,
                55.659178, 55.650841, 55.663696), ncol=2)
coords2 <- matrix(c(-1.822606, -1.816790, -1.832712, -1.822606, 55.657887,
                55.646806, 55.650679, 55.657887), ncol=2)
p1 <- Polygon(coords1)
p2 <- Polygon(coords2)
p1 <- Polygons(list(p1), ID = "p1")
p2 <- Polygons(list(p2), ID = "p2")
myPolys <- SpatialPolygons(list(p1, p2))
spdf1 = SpatialPolygonsDataFrame(myPolys, data.frame(variable1 = c(232,
                                                               242), variable2 = c(235, 464), row.names = c("p1", "p2")))
coords1a <- matrix(c(-1.830219, -1.833753, -1.821154, -1.830219, 55.647353,
                 55.656629, 55.652122, 55.647353), ncol=2)
p1a <- Polygon(coords1a)
p1a <- Polygons(list(p1a), ID = "p1a")
myPolys1 <- SpatialPolygons(list(p1a))
spdf2 = SpatialPolygonsDataFrame(myPolys1, data.frame(variable1 = c(2),
                                                  variable2 = c(3), row.names = c("p1a")))

# works but drop the attributes
#gIntersection(spdf1, spdf2, byid=T)

#better to keep attributes
inter1=raster::intersect(spdf1, spdf2)

plot(spdf1, col="red")
plot(spdf2, col="yellow", add=T)
plot(inter1,col="blue", add=T)

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

এই প্রশ্নটি আপনাকে নির্দেশ করে এবং নমুনা কোডটির জন্য ধন্যবাদ ।

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