R-创建一个边界框,转换为Polygon类并绘制


11

我有 NE lat lngSW lat lng。我的目标很简单,我使用的是RStudio,我想从上述两个纬度和经度创建一个边界框,然后生成多边形,并想向正方形多边形添加随机点。我在CSV文件中包含NELat / Lng和SW-Lat / Lng,可以将其导入到data.frame中。

我只需要一点指导就可以开始使用,对于R语言来说我是非常陌生的人,它与我以前所使用的完全不同。

到目前为止,我有这个:

coords = cbind(78.46801, 19.53407)
coordsmax = cbind(78.83157, 19.74557 )
sp = SpatialPoints(coordsmax)
sp2 = SpatialPoints(coords)

r1 = rbind(coords, coordsmax[1, ])  # join
P1 = Polygon(r1)
Ps1 = Polygons(list(P1), ID = "a")
plot(Ps1)

我只是在其他地方看到了一些示例,但无法绘制4个角的多边形。


您在r1中只有一个重复的坐标,即为'r1 = rbind(coords,coordsmax)`?
mdsumner '16

是的,更正了它。它仍然不能正常工作
user134611 '16

一次仔细地解决问题是获得解决方案的好方法。我认为,仅给出两个或一个坐标时,Polygon()不会出错的错误,我在sp问题中已经指出。为您q,库(光栅);SPs1 <-as(extent(r1),“ SpatialPolygons”); plot(SPs1)
mdsumner

很抱歉,我必须使用stackexchange的答案功能,但是我的声誉不够高,无法发表评论。@ dof1985使用(x_min,y_min),(x_max,y_min),(x_max,y_max),(x_max,y_min),(x_min,y_min)作为创建多边形的坐标。我已经尝试过相同的方法,但是失败了。然后我仔细查看您的示例并进行检查,您使用的是(x_min,y_min),(x_min,y_min),(x_min,y_min),...(x_min,y_min),...我的错误原因?请更正您的示例:)
ExploreR

Answers:


7

对您的代码进行了一些更改:

首先,请注意,我放弃了积分的创建。您可以不使用来形成多边形SpatialPoints。尽管万一涉及到许多点,最好还是用点创建多边形。

其次,我在下面的矩阵中编写了5对坐标,每对坐标代表边界框的一个角,第五个坐标重复第一个点。即矩阵包括:[[ x_min,y_min),(x_max,y_min),(x_max,y_max),(x_max,y_min),(x_min,y_min) ]

最后,我用SpatialPolygonsespg:4326,形成一个地域范围内的阴谋,能够对象。

library(sp)

coords = matrix(c(78.46801, 19.53407,
               78.46801, 19.74557,
               78.83157, 19.74557,
               78.83157, 19.53407,
               78.46801, 19.53407), 
             ncol = 2, byrow = TRUE)


P1 = Polygon(coords)
Ps1 = SpatialPolygons(list(Polygons(list(P1), ID = "a")), proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
plot(Ps1, axes = TRUE)

如果我绘制您的代码,将会发生以下情况:

看起来像一条线的多边形

这是在此处介绍的代码修改之后:

接线盒


而已!您能谈点proj4String什么吗?您在定义经久耐用的特征吗?
user134611 '16

点击?is.projectedR-console以查看proj4string帮助。是的,它用于定义空间对象的CRS类
dof1985

21

您可以extent从栅格库中嵌套该函数as以创建SpatialPolygons对象。

library(sp)
e <- as(raster::extent(78.46801, 78.83157, 19.53407, 19.74557), "SpatialPolygons")
proj4string(e) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
plot(e)

2
这看起来比我的答案更好。
dof1985
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.