我有一个道路网络的形状文件和另一个包含区域边界的形状文件。有没有更好的代码可用来获取每个多边形内的道路长度? 之前有人问过这个问题,不同之处是我想使用R而不是QGIS。 我尝试过:
intersec=intersect(roads,Polygon)
road_length=tapply(intersec$length, intersec$polygon, sum)
这可行,但是问题是,相交不会将与多边形相交的道路的长度分开,而是在相交文件中将它们加倍,并将这条道路的全长分配给两个多边形。
我是如何发现该问题的:没有错误消息,但是以下证明告诉我出了点问题:
a=sum(roads$length) and b=sum(intersec$length)
a和b的长度不同-> a小于b。
答案 0 :(得分:0)
我实际上是在大约8个月前为一个项目完成的。
我一直在研究处理空间数据的sf
方法,因此我的解决方案使用了该包中的类,方法和函数。
首先,通过在其中一个上使用roads
,确保shapes
和sf::st_transform
都具有相同的坐标参考系统(CRS)。然后,我使用sf::st_intersection()
查找交点,并在结果上使用sf::st_length()
以获取长度。此时,您可能需要汇总长度,具体取决于您的道路是否合并为一条超多线,还是每条道路都是其自己的对象。以下给出了我认为应该起作用的要点:
sf::st_intersection(road, shape) %>% # Find the intersections, which should all be points or multilines
dplyr::mutate(len_m = sf::st_length(geom)) %>% # Find the length of each line
dplyr::group_by(SHAPE_COLUMNS) %>% # Here you need to insert all the columns from your shapes
dplyr::summarize(len_m = sum(len_m))