Перетворіть об’єкт просторового багатокутника в кадр даних за допомогою R


18

Моя мета - змінити існуючий файл форм шляхом злиття певних багатокутників.

Після імпорту форми файлу та використання команди UnionSpatialPolygons я отримую контур багатокутника, який я хочу.

Однак це тепер об’єкт SpatialPolygons, а не SpatialPolygonsDataFrame, тому я не можу експортувати його у файл файлів за допомогою writeOGR.

Як я можу обійти цю проблему?


3
Якщо відповідь нижче була корисною, слід вибрати її як правильну, натиснувши на галочку зліва від тексту відповіді.
SlowLearner

Відповіді:


20

Як видно з назви, SpatialPolygonsDataFrame - це в основному об'єкт SpatialPolygons з доданими даними (таблиця атрибутів). Дані повинні мати принаймні стільки рядків, скільки є функцій

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",)

---- РЕДАКТИВАТИ ----

Якщо ви хочете перетворити SpatialPolygonsDataFrameспину на SpatialPolygonsоб'єкт, вам просто потрібно звернутися до структури об'єкта в межах R

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

Напевно, @Curlew має рацію. Не забудьте правильно вказати IDsаргумент під час виконання UnionSpatialPolygons. В іншому випадку у вас можуть виникнути проблеми із зазначенням dataаргументу під час переходу до SpatialPolygonsDataFrame.
fdetsch

1
Звичайно, досить просто. Я відредагував оригінальну відповідь на це
Curlew

1
Я лише нещодавно почав працювати з shapefiles і досі намагаюся ознайомитись із цим. Що саме має бути замінено для васData в data=as.data.frame("yourData")? Розчинивши внутрішні багатокутники з використанням unionSpatialPolygons(...), я хотів би записати результат як новий
форм-

Потрібно мати кадр data.frame з такою ж кількістю рядків, що і у вас в об'єкті SpatialPolygons. Краще задайте нове запитання щодо вашого unionпитання ..
Curlew

1
@Curlew Дякую, щойно опублікували нові запитання тут gis.stackexchange.com/q/121405/40108
lightonphiri

9

Проблеми:

1: результат UnionSpatialPolygons - просторовий багатокутник

2: перетворення результату назад у рамку даних просторового багатокутника - справжня біль

-а. вам потрібен дуже точний кадр даних для приєднання до просторового багатокутника

-б. дані, які ви використовували для UnionSpatialPolygons, мають більше рядків, ніж вихід, і не відформатовані так, як це потрібно.

Моє (потворне) рішення:

### 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"));

Помилка if (length (Sr @ многокутників!
Мокс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.