如何基于驾车距离绘制地图范围?替代直线距离圆,求免费方案
实现驾车30英里等时范围(替代直线距离圆)
R语言方案(基于免费开源OSRM服务)
用osrm包调用OSRM路由服务生成驾车等时多边形,再结合leaflet完成可视化:
- 安装依赖包并加载:
install.packages(c("osrm", "leaflet", "sf")) library(osrm) library(leaflet) library(sf)
- 定义起点并生成30英里等时多边形(30英里≈48280米,OSRM默认单位为米):
# 构建起点的空间对象 start_point <- st_sfc(st_point(c(-95.33663, 29.99067)), crs = 4326) start_sf <- st_sf(name = "George Bush International Airport", geometry = start_point) # 生成驾车等时多边形 isochrone_poly <- osrmIsochrone( loc = start_point, max_dist = 48280, profile = "car", breaks = c(0, 48280) )
- 绘制地图:
leaflet(height = 1000, width = 1000) %>% addTiles() %>% # 添加等时多边形 addPolygons( data = isochrone_poly, fillColor = "rgba(0,0,255,0.2)", color = "#00008B", weight = 2 ) %>% # 添加起点标记 addMarkers( data = start_sf, lng = ~st_coordinates(geometry)[,1], lat = ~st_coordinates(geometry)[,2], popup = ~name ) %>% leaflet.extras::addSearchOSM(options = searchOptions(collapsed = FALSE))
注:若公共OSRM服务访问不稳定,可自行基于OpenStreetMap数据搭建本地OSRM服务。
免费桌面工具方案(QGIS)
QGIS是开源免费的桌面GIS软件,操作步骤如下:
- 下载安装QGIS后,打开顶部菜单栏的
Processing > Toolbox - 在工具箱中搜索
OSRM > Generate Isochrones工具并打开 - 输入起点坐标:经度
-95.33663,纬度29.99067 - 设置参数:
Profile选择Car,Maximum distance设为48280(单位米),指定输出文件保存路径 - 点击
Run生成等时多边形,将其添加到地图窗口后,可自定义填充色、透明度等样式 - 如需添加底图,通过
Layer > Add Layer > Add XYZ Tile Layer添加OpenStreetMap等免费底图即可
内容的提问来源于stack exchange,提问作者Jacob Nordstrom
相关产品推荐
相关产品推荐

