Разница между SpatialPolygonsDataFrame, возвращаемым readOGR в шейп-файле, и файлом, созданным на основе данных класса Polygon?

Если у меня есть список полигонов класса, скажем, sdp

centroids  <- coordinates(SP)
x  <- centroids[,1]
y  <- centroids[,2]
z <- 1.4 + 0.1*x + 0.2*y + 0.002*x*x
SP1  <- SpatialPolygonsDataFrame(SP, data = data.frame(x = x, y = y, z = z, value = 100*wardDensity$penetration, row.names = row.names(SP)))

SP1 — это SpatialPolygonsDataFrame, отличается ли он от созданного с помощью readOGR в файле формы.

заранее спасибо


person Aditya    schedule 19.08.2016    source источник
comment
кроме того, что ваш шейп-файл имеет разные полигоны и данные, нет. чтобы доказать это, вы можете записать этот SP в шейп-файл и прочитать его обратно с помощью readOGR.   -  person hrbrmstr    schedule 19.08.2016
comment
Я задал вопрос, потому что я использовал SP1 в ggplot с geom_polygon(aes(fill = value)), это возвращает ошибку: эстетика должна быть либо длиной 1, либо такой же, как данные (14710): x, y, группа , цвет. Спасибо за ваш вклад   -  person Aditya    schedule 19.08.2016
comment
Тогда это то, что вы должны были указать в вопросе. Мы понятия не имеем, как выглядит ваш код ggplot. И, если вы вставите какой-либо код ggplot, мы все равно не сможем полностью вам помочь, если вы не сделаете вопрос воспроизводимым.   -  person hrbrmstr    schedule 19.08.2016


Ответы (1)


По определению readOGR в документации:

https://www.rdocumentation.org/packages/rgdal/versions/1.4-3/topics/readOGR

readOGR импортируйте SpatialPolygonsDataFrame, если у вас есть многоугольник. SpatialLinesDataFrame, если у вас есть линии и точки, если нет. Это то, что мы можем проверить с помощью следующего кода для полигонов:

library(GISTools)
library(rgdal) # for readOGR
library(raster) # for shapefile function

Мы создаем полигональный пространственный объект, как в:

https://rstudio-pubs-static.s3.amazonaws.com/202536_7a122ff56e9f4062b6b012d9921afd80.html

x_coord <- c(16.48438,  17.49512,  24.74609, 22.59277, 16.48438)
y_coord <- c(59.736328125, 55.1220703125, 55.0341796875, 61.142578125, 59.736328125)
xym <- cbind(x_coord, y_coord)

p = Polygon(xym)
ps = Polygons(list(p),1)
sps = SpatialPolygons(list(ps))

class(sps)

У нас есть SpatialPolygon, который отличается от SpatialPolygonsDataFrame, мы можем экспортировать его как файл формы:

shapefile(sps, filename = 'sps')

Когда мы импортируем его с помощью readOGR в наш текущий каталог, мы получаем объект SpatialPolygonsDataFrame:

sps_import <- readOGR("sps")
class(sps_import)

В том же духе мы можем экспортировать объект SP1 и повторно импортировать его с помощью readOGR, мы видим, что у нас есть тот же тип объекта.

centroids  <- coordinates(sps)
x  <- centroids[,1]
y  <- centroids[,2]
z <- 1.4 + 0.1*x + 0.2*y + 0.002*x*x
SP1  <- SpatialPolygonsDataFrame(sps,
                                 data = data.frame(x = x, y = y, z = z,
                                                   row.names = row.names(sps)))
plot(sps)
points(centroids)

writeOGR(obj=SP1, dsn="tempdir", layer="SP1", driver="ESRI Shapefile") # this is in geographical projection
import <- readOGR("tempdir/SP1.shp")

class(import)
class(SP1)
person Rémi Coulaud    schedule 02.05.2019