R kullanarak uzamsal bir çokgen nesnesini veri çerçevesine dönüştürme


18

Amacım, belirli bir çokgenleri birleştirerek mevcut bir şekil dosyasını değiştirmek.

Şekil dosyasını içe aktardıktan ve UnionSpatialPolygons komutunu kullandıktan sonra, istediğim çokgen taslağını alıyorum.

Ancak, bu artık bir SpatialPolygons nesnesi değil, bir SpatialPolygonsDataFrame, bu yüzden bunu writeOGR kullanarak bir şekil dosyasına veremiyorum.

Bu sorunu nasıl çözebilirim?


3
Aşağıdaki cevap faydalıysa, cevap metninin solundaki onay işaretine tıklayarak doğru cevap olarak seçmelisiniz.
SlowLearner

Yanıtlar:


20

Adından da anlaşılacağı gibi, bir SpatialPolygonsDataFrame temelde yalnızca veri eklenmiş bir SpatialPolygons nesnesidir (öznitelik tablosu). Verilerin en az sayıda özellik içermesi gerekir

library(rgdal)
ob <- SpatialPolygons(..)# Your SpatialPolygons Object
spp <-     SpatialPolygonsDataFrame(ob,data=as.data.frame("yourData"),proj4string=CRS("+proj=    aea > +ellps=GRS80 +datum=WGS84"))
writeOGR(spp,"shapes","testShape",driver="ESRI Shapefile",)

----DÜZENLE----

SpatialPolygonsDataFrameSırtınızı bir SpatialPolygonsnesneye dönüştürmek istiyorsanız, R içindeki nesne yapısını ele almanız yeterlidir

ob <- SpatialPolygons(spp@polygons,proj4string=spp@proj4string)

Kesinlikle, @Curlew haklı. Yürütürken IDsbağımsız değişkeni doğru belirttiğinizden emin olun UnionSpatialPolygons. Aksi takdirde, dönüşüme dönülürken dataargüman belirtmekte sorun yaşayabilirsiniz SpatialPolygonsDataFrame.
fdetsch

1
Tabii, oldukça kolay. Bunun için orijinal cevabı düzenledim
Curlew

1
Kısa bir süre önce şekil dosyaları ile çalışmaya başladım ve hala kendimi buna alıştırmaya çalıştım. Sizin için veri tam olarak ne değiştirilmelidir data=as.data.frame("yourData")? İç çokgenleri kullanarak çözdükten sonra unionSpatialPolygons(...), sonucu yeni bir şekil dosyası olarak yazmak istiyorum
lightonphiri

SpatialPolygons nesnenizdeki özelliklerle aynı sayıda satıra sahip bir data.frame'e sahip olmanız gerekir. unionSorununuzla ilgili yeni bir soru sorun.
Curlew

1
@Curlew Teşekkürler, yeni sorular gönderdim gis.stackexchange.com/q/121405/40108
lightonphiri

9

sorunlar:

1: UnionSpatialPolygons'un sonucu uzamsal bir çokgendir

2: sonucu tekrar bir uzamsal poligon veri çerçevesine dönüştürmek gerçek bir acıdır

-a. uzamsal bir çokgene iliştirmek için çok kesin bir veri çerçevesine ihtiyacınız var

-b. UnionSpatialPolygons için kullandığınız verilerin çıktıdan daha fazla satırı vardır ve gereken şekilde biçimlendirilmez.

Benim (çirkin) çözümüm:

### Coerce into spatial polygon data frame with id and row name of spatial polygon

# Make a data frame that meets the requirements above:

df<- data.frame(id = getSpPPolygonsIDSlots(your.spatialpolygon))
row.names(df) <- getSpPPolygonsIDSlots(your.spatialpolygon)

# Make spatial polygon data frame
spdf <- SpatialPolygonsDataFrame(your.spatialpolygon, data =df)

# Then don't forget to make sure the projection is correct
# XXXX is your SRID

proj4string(spdf) <- CRS("+init=epsg:XXXX");
spdf <- spTransform(spdf , CRS("+init=epsg:XXXX"));

(Uzunluk (Sr @ çokgenleri)! = Nrow (veri)) stop (yapıştır ("Nesne uzunluğu uyuşmazlığı: \ n",: argüman uzunluğu sıfır ise Hata: Ayrıca: Uyarı iletileri: 1: * kullan ve doğrudan yerleştir
Mox
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.