【发布时间】:2018-02-19 01:01:07
【问题描述】:
我目前正在尝试在传单中为 R 制作流程图,以映射某物从一个区域(多边形)到另一个区域的移动。
library(sp)
library(rgdal)
library(tidyverse)
library(leaflet)
我使用英格兰地方当局 (LA) 的 this shapefile 来制作多边形,并从中推导出线坐标。
Map <- readOGR(dsn = "Map", layer = "LEA_Boundaries")
Map <- Map[!is.na(Map$lad16cd),]
我想创建从一个多边形的中心到另一个多边形的线,所以我使用了起点和终点多边形的纬度和经度来推导我的线的起点和终点。 我通过从地图的数据槽中对 LA 名称进行采样,然后再次对其进行采样以创建我的起始和结束 LA,然后合并起始 LA 的坐标,然后是结束 LA 的坐标,如下所示:
StartingLA <- sample(Map@data$lad16nm, 100000, replace = TRUE)
NextLA <- sample(StartingLA, 100000, replace = TRUE)
Movement <- data.frame(StartingLA, NextLA)
LD <- merge(Movement, Map@data[,c("lad16nm", "long", "lat")], by.x = "StartingLA", by.y = "lad16nm") %>%
merge(Map@data[,c("lad16nm", "long", "lat")], by.x = "NextLA", by.y = "lad16nm", suffixes = c("",".y"))
在此之后,我尝试了两种不同的方法来创建空间线,一种是添加贝塞尔线的自定义函数,另一种是gcIntermediate(),我将在这里使用它,因为它更易于访问并排除了编程错误在函数中。
flow <- gcIntermediate(LD[,c("long", "lat")], LD[,c("long.y", "lat.y")], sp = TRUE, addStartEnd = TRUE)
现在是地图本身;我们将为多边形添加弹出标签,以便我们可以看到哪些 LA 是哪些。
leaflet() %>%
addProviderTiles(providers$CartoDB.PositronNoLabels) %>%
addPolygons(data = Map, weight = 1, col = "#000000", fillOpacity = 0, popup = Map@data$lad16nm) %>%
addPolylines(data = flow)
我们将看看用于创建线的数据。
LD
在我的地图上,我现在有一条将一个多边形连接到下一个多边形的蓝线。但是对于LD 中的StartingLA,我有'East Sussex',并且
NextLA 是“Hillingdon”,但线路指向/指向伯明翰和旺兹沃思。
使用我的自定义函数来拟合贝塞尔线也是如此,这让我认为这可能是以前发生过的事情,但在将线条制成 SpatialLines 之前,所有数据都是正确的,之后一切搞砸了。
有人知道我在哪里出错了吗?
谢谢。
【问题讨论】:
标签: r leaflet geospatial lines polygons