在R中,我试图创建一个合唱图。我建立了一个企业数据库,其中一些是连锁企业(如McDonalds)的一部分,另一些则是独立的。我想计算出地图上每点30公里内有多少家企业,但把不同的连锁店位置当作一个企业。
例如,如果您的要点是:
Chick-Fil-A
F 213颜色显示在30公里内有4个快餐店。
我很高兴使用任何R包,但我大多熟悉tmap和ggplot2地图。
在这个阶段,我能想到的最好的方法是为每个链创建多边形,并将它们叠加成透明的相同颜色的层。我不认为这将是非常有效的,也不会创造一个非常漂亮的合唱。
我能找到的其他答案要么是点数(例如https://gis.stackexchange.com/questions/229066/counting-how-many-times-a-point-is-inside-a-set-of-intersecting-polygons-in-r),要么是地理信息系统软件。
编辑:,我已经设法从每个链的每个位置创建了一个30公里的半径(使用rgeos gIntersection)。我现在有了一系列的多边形。
为了解决我的问题,我需要做的另一件事是创建多边形,用于:
为了直观起见,我使用了https://gis.stackexchange.com/questions/229066/counting-how-many-times-a-point-is-inside-a-set-of-intersecting-polygons-in-r的答案吗?

在链接的问题中,他们试图计算有多少多边形覆盖了编号的点(右边的图像)。我要做的是在左边创建图像,在那里没有重叠的多边形(1),两个重叠的多边形(2)等等。
发布于 2020-12-08 19:58:56
我认为你想要达到的目标最好是用光栅法,而不是氯仿法。要制作合唱图,您需要定义一组(通常是不规则的)多边形,在每个多边形中总结一些内容,然后根据属性对多边形进行着色。如果你想知道每个州或县有多少家快餐店,或者每个州平均有多少家快餐店,这将是一个很好的方法。
然而,从你的描述,你正在寻找有多少个快餐店在一套半径内的所有点。这更像是一个栅格问题,因为您可以在常规网格上表示数据。
raster包是处理光栅数据的良好开端,并且可以很好地处理sf包。
您需要确定完成目标所需的密度,然后使用它来确定光栅的分辨率。一旦获得了这些数据,就可以使用raster::rasterize()来总结(我假设)点数据。
我假设你有一个有每一家餐厅的位置的物体,我称之为“点”。
library(raster)
library(sf)
# create raster template with 30km resolution (I'm assuming your projection is in meters)
raster_template = raster((extent(points),
resolution = 30000,
crs = st_crs(points)
)
# rasterize your point data
r = rasterize(points, raster_template, fun = "count")这将创建一个网格,其中每个单元格都有每个30公里单元格内的点数。然后,你应该能够绘制光栅,但可能想要剪辑或掩蔽它,只显示在新西兰境内的部分。
https://stackoverflow.com/questions/65175809
复制相似问题