Rgeos kesişen çokgenler sırasında ilişkili değerleri düşürür


11

İki SpatialPolygonsDataFrames kesişmeye ve sonuç olarak bir SpatialPolygonsDataFrame almaya çalışıyorum. Ne yazık ki, gIntersectionişlevini kullanarak rgeos(çokgenleri kesişmek için etkileyici bir şekilde hızlı çalışır), ilişkili veri çerçevelerini alamıyorum. Aşağıdaki örneği düşünün:

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

Aktarımını işleyen bir sarıcı işlevi yazabilirim data.frames, ancak tüm kontrolü doğru yapmak küçük bir acı olacaktır ve yapmadan önce birisinin ya daha iyi bir yol olmadığını ya da başka bir işleve (ya da seçeneğe yönlendirdiğini) umuyordum ile ilgili gIntersectionolanı korumamı sağlar data.frames.

Güncelleme

Daha fazla yansıma üzerine, bu çok kasıtlı bir davranış olabilir gIntersection. Sonuçta, data.frame'ini ileten iki SPDF'den hangisi? Bu yüzden ikisini birleştiren bir sargı yazmam gerekebilir.


1
Polgyons'larınızı nasıl yüklüyorsunuz - readShape * veya readOGR? SPDF'leri yüklemek için kullandığım kütüphaneye bağlı olarak gIntersection ile garip davranışlar elde ediyorum.
Simbamangu

@Simbamangu İlginç. Ben readShapePoly kullanıyorum ve sonra bir data.frame birleştirme ....
Ari B. Friedman

gIntersection Üst üste binen alanlar için birleştirilen data.frames değerlerini vermelidir - Vector | Geoprocessing | QGIS'de Intersect çalıştırırsanız, çıktı örtüşme için birleştirilmiş öznitelikler kümesidir ve QGIS, aynı GEOS kütüphanesini bu?
Simbamangu

Eğer öyleyse, o zaman ben güdük. Zaten data.frames elle birleştirmek ve onları geri munge için kodumu yeniden yazdım, bu yüzden şimdilik bu konuda daha fazla zaman harcamak için değil. Ancak şekil dosyasında okunan işlevin önemli olduğu ipucu yardımcı olur.
Ari B. Friedman

1
Bu açıkça bir cevap değil, ama yorum bırakmak için yeterli puanım yok ... Ari, rgeos overlay fonksiyonlarını takip eden değişkenleri çıkarmak için kod yığınınızı paylaşıp paylaşmayacağınızı merak ediyordum. Orijinal çokgen kimliklerini gUnion gibi çeşitli rgeos işlemlerinden korumak için başımı iyi bir şekilde sarmakta sorun yaşıyorum ...
jed.a.long

Yanıtlar:


2

Bazı projeler için aynı ihtiyaç vardı. Tutmaktan çok daha fazlası data.frame, çıktı geometrisi türünü yönetmek için daha fazla kod koymak ve bazı tam kavşak geoprocessine sahip olmak için bazı temizlik işlemlerine (örn. Temiz geometri koleksiyonları) devam etmek zorunda kaldık. Hala R'de böyle bir görev yapmanız gerekiyorsa, RFigisGeo paketini deneyebilirsiniz :

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)

Hem sizin hem de @ berndv'ın cevapları sorunumu çözecek gibi görünüyor. Teşekkürler! İlk geldiğinden beri bunu işaretlemek.
Ari B. Friedman

10

GIntersection'ın davranışı, kesişen verileri tasarım gereği iletmemek:

Kesişen uzamsal nesneler arasında genel eşleşme olmadığından, öznitelikler üzerindeki keyfi işlemler bilinmeyen kullanıcı niyetleri hakkında varsayımlar gerektirir. Bu nedenle hiçbir veri aralığının geçirilmemesi gerekir ...

... gIntesection () 'nin tasarımı kasıtlıdır, çünkü sadece kullanıcı geometrileri değiştirilmiş varlıkların nitelikleriyle ne yapılacağını bilir. Farklı kullanıcılar farklı varsayımlar yapabilir, ancak row.names () mekanizmasında olduğu gibi kesişen geometrilerin kimliklerinden geçmenin ötesinde genel bir çözüm yoktur.

Şaşırtıcı bir şekilde , raster paketinin sadece kesişen ve verileri de veren bir kavşak işlevi var.

Raster paketi, öznitelik verilerini de işlemeye çalışarak rgeo'ları genişleten birkaç işleve sahiptir. Bu durumda, bkz. Raster :: kesişimi Ve buradaki işlevlerin listesi:? "Raster paketi" (bölüm XIV)

Bununla ilgili eksiksiz bilgi: http://r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html


0

Yukarıdaki cevapların işe yaramadığı (benim gibi) için, buradaki bağlantı, bu kesin şeyi raster kesişimi ile yapabileceğinizi açıklıyor.

R'de iki çokgen kırpılırken tüm özellik verilerini nasıl saklarım?

Ben bir SpatialPointsDataFrame bir SpatialPolygons şekil dosyası ile kırpmak için kullandım; SpatialPointsDataFrame öğesinin kırpılmış / kırpılmış bir sürümünü oluşturur ve orijinal verileri korur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.