- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑 经过更多研究但仍然没有解决方案,我添加了实质性编辑以及指向 .shp 文件的链接。
The shape file is included here
我有一个包含 9 个多边形的 SpatialPolygonsDataFrame,每个多边形还包含多个嵌套多边形 - “孔”。数据摘要在这里。
> summary(data)
Object of class SpatialPolygonsDataFrame
Coordinates:
min max
x 483298.9 643204.4
y 4782172.1 4997248.3
Is projected: TRUE
proj4string :
[+proj=utm +zone=12 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0]
Data attributes:
Id IndID
Min. :0 BHS_011_A:1
1st Qu.:0 BHS_015_A:1
Median :0 BHS_083_A:1
Mean :0 BHS_089_A:1
3rd Qu.:0 BHS_091_A:1
Max. :0 BHS_129_A:1
(Other) :3
数据的结构
示例如下。
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
..@ data :'data.frame': 9 obs. of 2 variables:
.. ..$ Id : int [1:9] 0 0 0 0 0 0 0 0 0
.. ..$ IndID: Factor w/ 9 levels "BHS_011_A","BHS_015_A",..: 1 2 3 4 5 6 7 8 9
..@ polygons :List of 9
.. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. .. .. ..@ Polygons :List of 5
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] 513497 4986246
.. .. .. .. .. .. ..@ area : num 76614017
.. .. .. .. .. .. ..@ hole : logi FALSE
.. .. .. .. .. .. ..@ ringDir: int 1
.. .. .. .. .. .. ..@ coords : num [1:287, 1:2] 509244 507384 507214 507010 506899 ...
.. .. .. .. .. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. .. .. .. .. ..$ : NULL
.. .. .. .. .. .. .. .. ..$ : chr [1:2] "x" "y"
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] 509678 4979511
.. .. .. .. .. .. ..@ area : num 1462398
.. .. .. .. .. .. ..@ hole : logi TRUE
.. .. .. .. .. .. ..@ ringDir: int -1
.. .. .. .. .. .. ..@ coords : num [1:7, 1:2] 509301 509269 509194 509007 509412 ...
.. .. .. .. .. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. .. .. .. .. ..$ : NULL
.. .. .. .. .. .. .. .. ..$ : chr [1:2] "x" "y"
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] 515572 4988493
.. .. .. .. .. .. ..@ area : num 1579348
.. .. .. .. .. .. ..@ hole : logi TRUE
.. .. .. .. .. .. ..@ ringDir: int -1
.. .. .. .. .. .. ..@ coords : num [1:10, 1:2] 514520 514570 514684 516501 515996 ...
.. .. .. .. .. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. .. .. .. .. ..$ : NULL
.. .. .. .. .. .. .. .. ..$ : chr [1:2] "x" "y"
如下例(九个之一)所示,父多边形有多个孔。
data <- readOGR(".", "IndLineBuff")
plot(data[data$IndID == "MTG_005_A",])
这是我第一次涉足 sp()
、rgdal()
、rgeos()
和其他空间包,我有找到了许多关于使用运算符提取区域等有用的帖子,但问题仍然存在。同时this post提供接近的解决方案,我似乎无法调整代码以满足此处描述的需求。
我想获得一个 SpatialPolygonsDataFrame,它只包含来自每组子列表(即 data@polygon)的父(最大)多边形。看来我应该能够只提取父多边形或“溶解”孔。
最终的结果是 9 个多边形,每个都是 9 个列表的父项,我可以将其导出为 ESRI shapefile。
如有任何建议,我们将不胜感激。
最佳答案
当我第一次学习 sp 和相关包时,我发现 Barry Rowlingson 的网站非常有用。
它包括:
备忘单
非常有用的引用表,其中包含有关如何做事的提示使用 R 包\ http://www.maths.lancs.ac.uk/~rowlings/Teaching/UseR2012/cheatsheet.html
空间简介
spatialDataframe 结构的解释包 sp。还解释了 CRS(坐标引用系统)和投影(proj4string 和 proj4.Project)。最后还有涵盖光栅图像的使用和操作,以及提取来自他们的数据使用 R\ http://www.maths.lancs.ac.uk/~rowlings/Teaching/UseR2012/static/talk1.pdf
谈到你的问题,这很困惑,因为你正在处理一连串的事情,但这是可以做到的。
下面的代码似乎可以工作(我已经在我已有的 shapefile 上测试了它(一点),而不是下载你的)。如果您在读入后将 NSWACTA
替换为您的 shapefile 的名称,它应该适合您的情况。虽然没有 promise :-)。
第一部分是介绍性的,展示所有类列表的情况。希望这可以帮助您弄清楚发生了什么。它是 dropHole
函数,它是实际执行您想要的操作的方法。
class(NSWACTA)
# NSWACTA has class sp::SpatialPolygonsDataFrame
slotNames(NSWACTA)
# The SpatialPolygonsDataFrame has a slot called @polygons
class(NSWACTA@polygons)
# The @polgyons slot contains a list
class(NSWACTA@polygons[[1]])
# Elements of that list are of class sp::Polygons
slotNames(NSWACTA@polygons[[1]])
# An sp::Polygons class has several slots, one of which is @Polygons
class(NSWACTA@polygons[[1]]@Polygons)
# The @Polygons slot contains a list
class(NSWACTA@polygons[[1]]@Polygons[[1]])
# The entries in the @Polygons list are of class sp::Polygon
slotNames(NSWACTA@polygons[[1]]@Polygons[[1]])
# An sp::Polygon has several slots.
# @coords holds the coordinates which define the boundary.
# @hole is a logical field indicating whether or not the sp::Polygon is a hole
setGeneric('dropHole',def=function(poly, ...){
standardGeneric('dropHole')
})
# Drop a single sp::Polygon if it is holey
setMethod('dropHole',signature=signature('Polygon'),
def=function(poly) {
#return only Polygons which are not holes
if (poly@hole) NULL else poly
}
)
# Drop holey sp::Polygon entries in the @Polygons list of an sp::Polygons class
setMethod('dropHole', signature = signature('Polygons'),
def = function(poly) {
noHoles <- lapply(poly@Polygons, dropHole)
#Remove the NULL entries from the list
noHoles <- Filter(Negate(is.null), noHoles)
# Turn back into a (single) Polygons
# The generator function (sp::Polygons) fills in the other slots!
# return the new sp:Polygons object
sp::Polygons(noHoles, ID = poly@ID)
}
)
# Drop holey parts of sp::Polygons in the @polygons list
# of an sp::SpatialPolygonsDataFrame
setMethod('dropHole', signature = signature('SpatialPolygonsDataFrame'),
def = function(poly) {
noHoles <- lapply(poly@polygons, dropHole)
# Put the un holey Polygons list back into the @polygons slot
poly@polygons <- noHoles
#return the modified SpatialPolygonsDataFrame
poly
}
)
newmap <- dropHole(NSWACTA)
这是第一部分的输出。 注意 注意名字大小写、单数和复数的区别! (即多边形、多边形和多边形)
d> class(NSWACTA)
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
d> # NSWACTA has class sp::SpatialPolygonsDataFrame
d> slotNames(NSWACTA)
[1] "data" "polygons" "plotOrder" "bbox" "proj4string"
d> # The SpatialPolygonsDataFrame has a slot called @polygons
d> class(NSWACTA@polygons)
[1] "list"
d> # The @polgyons slot contains a list
d> class(NSWACTA@polygons[[1]])
[1] "Polygons"
attr(,"package")
[1] "sp"
d> # Elements of that list are of class sp::Polygons
d> slotNames(NSWACTA@polygons[[1]])
[1] "Polygons" "plotOrder" "labpt" "ID" "area"
d> # An sp::Polygons class has several slots, one of which is @Polygons
d> class(NSWACTA@polygons[[1]]@Polygons)
[1] "list"
d> # The @Polygons slot contains a list
d> class(NSWACTA@polygons[[1]]@Polygons[[1]])
[1] "Polygon"
attr(,"package")
[1] "sp"
d> # The entries in the @Polygons list are of class sp::Polygon
d> slotNames(NSWACTA@polygons[[1]]@Polygons[[1]])
[1] "labpt" "area" "hole" "ringDir" "coords"
d> # An sp::Polygon has several slots.
d> # @coords holds the coordinates which define the boundary.
d> # @hole is a logical field indicating whether or not the sp::Polygon is a hole
关于r - 从嵌套的 SpatialPolygonsDataFrame 中提取父多边形或从父多边形中提取 'Dissolving' 孔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29421257/
我有一个层次结构中的项目列表,我正在尝试将此列表解析为实际的对象层次结构。我正在使用modified pre-order tree traversal存储/迭代此列表,所以我拥有的是树的子集,包括所有
给定这个类: public class Parent { public Child[] Children {get;set;} } 还有这个数组: Parent[] parents; 如何使用 L
我面临着一些难以完成这个看似简单的任务。 我在一个嵌套块 (Suggest.phtml) 中,我想从父块 (result.phtml) 获取一个值(搜索结果的数量,以及集合计数) 我错了还是这里没有简
我在访问子模型重复器字段以在没有用户操作的情况下加载时遇到问题,我在父模型 Controller 中使用 RelationController这就是我在父 Controller 中所做的 class
我有一个 datetime 指令,其范围内包含两个属性:date 和 time。如何从父 Controller 访问这些属性?我尝试这样做 Start: End: You
我的父类是: public Class Parent { protected void foo() { bar(); } protected void
所以我知道如何中断列表的继承 (SPList.BreakRoleInheritance(true)),但是如何以编程方式从其父级重新继承? 谢谢 最佳答案 MSDN link . SPList.Res
最近我们将maven版本更改为3.5.4根据https://issues.apache.org/jira/browse/MNG-5940 Maven Super POM 中的 maven-source
我需要在单击页面背景(#page)时触发一个事件(例如隐藏 float 购物车),但在单击内部内容时不会发生此事件。所以我需要这个事件发生在空间:页面减去内容。我该如何实现它?谢谢 如果我有这个结构:
我在另一个 ajax 函数中有一个 ajax 函数 $.ajax({ url: '../...', type: 'POST',
我创建了两个类 - Building 和 Warehouse。 Warehouse 扩展 Building。我创建了 Building map (building_map),其中放置了 Buildin
我有一个获取和处理数据的 Activity ,我想启动一个新 Activity ,该 Activity 能够从父 Activity 访问一些变量(复杂数据结构)。 我不能在这里使用序列化,有没有一种简
在 HTML 中,我有两个函数,一个是仅带有警报的 abc,另一个是使用 window.open() 创建一个新窗口,并填充预定义的 HTML 字符串。我想从父 HTML 调用该函数。我尝试过调用pa
我一直在研究这个脚本并且一切正常,除了 $(this).parents(".clonedInput").clone()。按钮克隆引用放置在 .clonedInput div 中。 如果能帮助我从 cl
我有以下代码: 主要 HTML 文档 $(function(){ $("#i").load(function(){ var $iframeConten
html 的一部分结构如下。我想从中获得工作“标题”和“时间”。我可以单独获取它们,例如: from bs4 import BeautifulSoup pages = ' \
我正在尝试从父 div 中删除底部边框。我已经编写了以下 HTML 代码,但我认为我的方法不正确。看到这张图片 这是我的 HTML 代码 j
通常,我可以从 Activity 调用扩展 DialogFragment 并实现 DialogInterface.OnClickListener() 的对象。 然后,如果我想从那个 Dialog 调用
我花了好几个小时搜索如何从嵌套 Controller 更新服务值。 我的子 Controller 需要更新服务中的值。该值需要显示在父 Controller 中。 我做了一个jsfiddle,让它更清
我有一个包含一些数据的表格,表格中的每个元素都是一个 React 类组件。它看起来像这样: 我想要的只是有一个用于“选中所有”功能的复选框(左上角的复选框)。问题是我不知道如何解决这个问题,因为 pr
我是一名优秀的程序员,十分优秀!