gpt4 book ai didi

r - 如何在R或ArcGIS中处理多边形shapefile中的“孤立孔”?

转载 作者:行者123 更新时间:2023-12-03 14:24:43 24 4
gpt4 key购买 nike

我正在尝试使用over函数(rgeos)在两个多边形(“ grd”和“ range”)之间进行空间叠加。

此代码适用于除以下文件以外的所有文件:

range.grd.overlay <- grd[!is.na(over(grd, range)), ]@data$grdID # get gridcells that overlap with range


并得到以下错误信息:

Error in createPolygonsComment(p) : 
rgeos_PolyCreateComment: orphaned hole, cannot find containing polygon for hole at index 9


我知道shapefile的某个地方有一个洞,周围没有多边形,但是我不知道该如何解决。
我可以简单地删除索引9处的孔吗?怎么样 ?
如果您有在ArcGIS中修复shapefile的解决方案,那对我也很好。

提前非常感谢您的帮助!

问候,
卡斯滕

最佳答案

grdrange都是SpatialPolygonsDataFrame类。

range具有如下结构:

> str(range)
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
..@ data :'data.frame': 3 obs. of 17 variables:
.. ..$ OBJECTID : int [1:3] 725 726 727
.. ..$ SPCRECID : int [1:3] 3313 3313 3313
.. ..$ DATE_ : Factor w/ 1 level "19/10/2009": 1 1 1
.. ..$ SCINAME : Factor w/ 1 level "Synthliboramphus antiquus": 1 1 1
.. ..$ SOURCE : Factor w/ 1 level "Gaston & Jones, 1998; Brazil, 2009": 1 1 1
.. ..$ PRESENCE : int [1:3] 1 1 1
.. ..$ ORIGIN : int [1:3] 1 1 1
.. ..$ SEASONAL : int [1:3] 2 1 3
.. ..$ DATA_SENS : Factor w/ 0 levels: NA NA NA
.. ..$ SENS_COMM : Factor w/ 0 levels: NA NA NA
.. ..$ COMPILER : Factor w/ 1 level "Philip Taylor (BirdLife International)": 1 1 1
.. ..$ TAX_COM : Factor w/ 0 levels: NA NA NA
.. ..$ DIST_COM : Factor w/ 0 levels: NA NA NA
.. ..$ REVIEWERS : Factor w/ 0 levels: NA NA NA
.. ..$ CITATION : Factor w/ 1 level "BirdLife International and Natureserve (2011) Bird species distribution maps of the world.": 1 1 1
.. ..$ SHAPE_Leng: num [1:3] 190 209 1240
.. ..$ SHAPE_Area: num [1:3] 39 16.6 600.8
.. ..- attr(*, "data_types")= chr [1:17] "N" "N" "C" "C" ...
..@ polygons :List of 3
.. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. .. .. ..@ Polygons :List of 138
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] 178.6 51.8
.. .. .. .. .. .. ..@ area : num 4.58
.. .. .. .. .. .. ..@ hole : logi FALSE
.. .. .. .. .. .. ..@ ringDir: int 1
.. .. .. .. .. .. ..@ coords : num [1:49, 1:2] 180 180 179 179 179 ...
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] -172.2 52.6


... 等等。

grd具有如下结构:

> str(grd)
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
..@ data :'data.frame': 40680 obs. of 12 variables:
.. ..$ ID : int [1:40680] 361 362 363 364 365 366 367 368 369 370 ...
.. ..$ X_COORD : num [1:40680] -180 -178 -178 -176 -176 ...
.. ..$ Y_COORD : num [1:40680] 79.1 79.1 79.1 79.1 79.1 ...
.. ..$ ID_1 : Factor w/ 13713 levels "10","10000","10001",..: NA NA NA NA NA NA NA NA NA NA ...
.. ..$ grdID : int [1:40680] 1 2 3 4 5 6 7 8 9 10 ...
.. ..$ ROW : int [1:40680] 1 1 1 1 1 1 1 1 1 1 ...
.. ..$ COL : int [1:40680] 1 2 3 4 5 6 7 8 9 10 ...
.. ..$ AREA : num [1:40680] 12364 12364 12364 12364 12364 ...
.. ..$ PERIMETER : num [1:40680] 445 445 445 445 445 ...
.. ..$ MAJORITY : int [1:40680] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ PROP0_0062: num [1:40680] 0 0 0 0 0 0 0 0 0 0 ...
.. ..$ AREA_KM2 : num [1:40680] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "data_types")= chr [1:12] "N" "N" "N" "C" ...
..@ polygons :List of 40680
.. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. .. .. ..@ Polygons :List of 1
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] -179.5 79.1
.. .. .. .. .. .. ..@ area : num 5.3
.. .. .. .. .. .. ..@ hole : logi FALSE
.. .. .. .. .. .. ..@ ringDir: int 1
.. .. .. .. .. .. ..@ coords : num [1:13, 1:2] -179 -180 -180 -180 -180 ...
.. .. .. ..@ plotOrder: int 1
.. .. .. ..@ labpt : num [1:2] -179.5 79.1


... 等等。

我从 Roger Bivand找到了这个帮助,并且对三个有问题的文件中的两个有用:

>slot(shape.input, "polygons") <- lapply(slot(shape.input, "polygons"), checkPolygonsHoles)
>range.grd.overlay <- grd[!is.na(over(grd, range)), ]@data$grdID # get gridcells of that overlay with range polygon


但对于第三个文件,修复不起作用。 R会冻结,直到最终按下Esc键,然后在尝试进行空间覆盖时会收到相同的错误消息:

 Error in createPolygonsComment(p) : 
rgeos_PolyCreateComment: orphaned hole, cannot find containing polygon for hole at index 13

关于r - 如何在R或ArcGIS中处理多边形shapefile中的“孤立孔”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11433063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com