বহুভুজটি ক্লিপ করুন এবং ডেটা ধরে রাখবেন?


13

আমার এই দুটি বহুভুজ রয়েছে:

library(sp); library(rgeos); library(maptools)

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")))
proj4string(spdf1) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
plot(spdf1, col="red")

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")))
proj4string(spdf2) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
plot(spdf2, col="yellow", add=T)

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

আমি spdf1এর ছেদকৃত অংশগুলি কাটাতে চাই spdf2। তবে, আমি spdf1একটি স্পেশিয়ালপলিজোনস ডেটা ফ্রেম হিসাবে থাকতে এবং এর মধ্যে থাকা কোনও তথ্য ধরে রাখতে চাই spdf1@data

I¹ve gDifference চেষ্টা হিসাবে অনুসরণ করে, যা অংশের বাইরে মধ্যেও spdf1যে অন্তর্চ্ছেদ হয় spdf2, কিন্তু তারপর ধর্মান্তরিত spdf1SpatialPolygons (অর্থাৎ বাতিল তথ্য অন্তর্ভুক্ত spdf1@data)।

gDifference(spdf1, spdf2, byid=T)

আমি মধ্যে কিভাবে কেটে যাবে spdf1সঙ্গে spdf2কিন্তু ধরে রাখা ডাটা অন্তর্ভুক্ত spdf1@data? আমি স্প্যাটিয়ালপয়েন্টস ডেটা ফ্রেমের উপর কোনও বহুভুজকে ওভারলে কীভাবে এবং এসপিডিএফ ডেটা সংরক্ষণ না করে এই একই প্রশ্নটি পরীক্ষা করে দেখেছি?

উত্তর:


9

সহজ পদ্ধতির হবে

  library(raster)
  x <- spdf1 - spdf2

  # or, more formally
  y <- erase(spdf1,  spdf2)

বহুভুজ ওভারলে নিয়ে কাজ করে এমন আরও ফাংশনের জন্য 'রাস্টার-প্যাকেজ' (বিভাগ XIV) দেখুন? এই ফাংশনগুলি 'ব্যবহারকারী-স্তরের' ('বিকাশকারী-স্তরের' বিপরীতে) ফাংশনে হুডের নীচে rgeos এর বেস-ফাংশন ব্যবহার করে।


"ব্যবহারকারী-স্তরের" ('বিকাশকারী-স্তরের' বিপরীতে) ফাংশনগুলি দ্বারা আপনার অর্থ কী?
লুচিয়ানো

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

হ্যাঁ, তবে এটি স্প্যাটিয়ালপলিগনস ডেটা ফ্রেমে ত্রুটি বাড়ে পারে (পার্ট 2, এক্স @ ডেটা [ম্যাচ (সারি.নাম (পার্ট 2)): ডেটার সারি.নাম এবং পলিগনস আইডি মেলে না
জেবিরনেস

এটি একটি বাগ হবে। আপনি একটি উদাহরণ প্রদান করতে পারেন?
রবার্ট হিজম্যানস

4

একটি রূপান্তর হ'ল ক্লিপটি করার পরে অ্যাট্রিবিউটগুলি পুনরায় যুক্ত করা থেকে অন্যটিতে রূপান্তর SpatialPolygonsকরার সময় SpatialPolygonsDataFrame

sp3 <- gDifference(spdf1, spdf2, byid = TRUE)
row.names(sp3) <- row.names(spdf1)

spdf3 <- SpatialPolygonsDataFrame(sp3, data = spdf1@data)

spdf3@data

   variable1 variable2
p1       232       235
p2       242       464

plot(spdf3, col="red")

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


এটি আমার একটি সমস্যার মতো দেখে মনে হচ্ছে, কেবলমাত্র আমার নির্দিষ্ট উদাহরণে আউটপুট ক্লিপটি spdf1 থেকে অস্তিত্ব নেই যা (সারি হিসাবে দ্বিতীয় অঙ্ক থেকে মুক্তি পাওয়ার জন্য সরল জিসাব হিসাবে ব্যবহার করা উচিত nameনামগুলি রোম্যান্স ম্যাচের যত্ন নেওয়া উচিত, না? )
jebyrnes

স্পটিয়ালপলিজোনস ডেটা ফ্রেমে ত্রুটি (ক্লিপ, ডেটা = as.data.frame (all_spdfs_together @ ডেটা)): অবজেক্টের দৈর্ঘ্য মিল নেই: ক্লিপটিতে 1718 পলিগন অবজেক্ট রয়েছে, তবে as.data.frame (all_spdfs_together @ ডেটা) -এর 86 টি সারি রয়েছে
jebyrnes

অবশ্যই - আমার কাছে সমুদ্রের বহুগুণের জিনিস রয়েছে। কিছু ভুলভাবে জমিতে স্থাপন করা হয়, বা জমি দিয়ে ওভারল্যাপ করা হয়। আমি এটি ক্লিপ করতে চাই তাই আমার কেবল সমুদ্রের মধ্যে এমন অঞ্চল রয়েছে। এর সাথে তুলনা করার জন্য আমার কাছে একটি উপকূলরেখার শেফফাইল রয়েছে। এখানে কোডটি রয়েছে - gist.github.com/jebyrnes/c2e8d2b6c82849
داد3

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