ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 R 中嵌入完整 GeoLibre 地图:geolibre R 包从安装、Shiny 集成到自托管部署全指南

在 R 中嵌入完整 GeoLibre 地图:geolibre R 包从安装、Shiny 集成到自托管部署全指南 在 R 中嵌入完整 GeoLibre 地图geolibre R 包从安装、Shiny 集成到自托管部署全指南【免费下载链接】GeoLibreA lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs in the web browser, on the desktop, on mobile, and inside Jupyter notebooks.项目地址: https://gitcode.com/GitHub_Trending/ge/GeoLibreGeoLibre 是一个轻量级、云原生的 GIS 平台可以在浏览器、桌面、移动端和 Jupyter 笔记本中运行而本文要介绍的geolibreR 包则把这份完整能力直接带进 R 生态——通过htmlwidgets在 RStudio Viewer、Quarto、R Markdown 和 Shiny 中渲染出完整可交互的 GeoLibre 地图。它以标准.geolibre.json项目作为与前端互通的单一数据源因此同一张地图可以在 R 与 GeoLibre Web、GeoLibre Desktop 之间无缝迁移在 R 中完成分析、加图层、设相机导出项目后交给桌面端继续编辑反之亦然。读完本文你将掌握在 R 中安装 geolibre、用一行代码叠加 GeoJSON 与sf空间对象、直接加载远程 Cloud Optimized GeoTIFFCOG、把地图状态保存/还原为可移植项目文件以及在 Shiny 应用中渲染地图并通过代理实时更新控件最后还能把整个应用指向自托管部署。geolibre R 包的工作原理geolibreR 包本身并不实现 GIS 渲染引擎而是把 GeoLibre 的完整 Web 应用装进一个 HTML 组件通过htmlwidgets生成一个承载 GeoLibre 应用的容器R 侧对图层的所有操作都被翻译成一份标准的.geolibre.json项目该格式的完整字段说明见 docs/project-format.md例如顶层version、name、mapView、basemapStyleUrl、layers、styles等字段均由 GeoLibre 前端读取并渲染。这与仓库中的 Python 对应实现python/src/geolibre/geolibre.py遵循同一套设计Python 侧Map类通过traitlets同步一个project字典到前端见 geolibre.pyR 包同样以项目 JSON 为单一事实来源。因此理解.geolibre.json的字段语义就等于理解了 R API 每个函数背后落盘的数据结构。一个需要注意的边界该组件加载的是托管在网上的 GeoLibre 应用所以查看地图需要联网如果你的部署是自托管的可以通过app_url指向自己的实例见下文自托管一节从而彻底摆脱对外部服务的依赖。安装CRAN 正式版与 GitHub 开发版正式版从 CRAN 安装install.packages(geolibre)开发版从 GitHub 安装需先安装pakinstall.packages(pak) pak::pak(opengeos/geolibre-r)依赖方面htmlwidgets是必选依赖sf是可选依赖——只在调用add_sf()时才需要。在 Linux 上安装sf时系统可能需要提前装好 GDAL、GEOS、PROJ、UDUNITS 等底层地理库否则st_read()或坐标转换可能报错。快速开始从 GeoJSON 构建第一张交互地图geolibre()创建组件add_geojson()叠加矢量数据set_view()设定初始相机。下面用内联的 GeoJSONFeatureCollection放一个华盛顿特区的点并设置红色圆形样式与缩放级别library(geolibre) places - list( type FeatureCollection, features list(list( type Feature, properties list(name Washington, DC), geometry list( type Point, coordinates c(-77.0369, 38.9072) ) )) ) geolibre(map_only TRUE) | add_geojson( places, name Places, style list(fillColor #dc2626, circleRadius 8) ) | set_view(center c(-77.0369, 38.9072), zoom 10)要点说明map_only TRUE只保留地图画布、隐藏工具栏和面板对应前端maponly布局默认布局为带界面组件的完整视图。style中的键名沿用 GeoLibre 项目的 LayerStyle 命名如fillColor、circleRadius、fillOpacity、strokeWidth等与 docs/project-format.md 中Layer object一节的style字段一一对应。GeoLibre 前端在加载时会对缺失样式字段自动回填默认值所以只需覆盖需要改动的字段即可。set_view(center, zoom)设置的是mapView的初始相机等价于写项目时mapView.center/mapView.zoom两个字段。渲染出的 widget 在 RStudio Viewer 和渲染后的 HTML 文档中都是响应式的自适应容器宽度。用sf处理空间数据add_sf()直接接受sf对象并在传入浏览器之前自动重投影到 WGS 84EPSG:4326因此你不需要手动处理坐标系差异library(sf) nc - st_read(system.file(shape/nc.shp, package sf), quiet TRUE) geolibre() | add_sf(nc, name North Carolina counties)与 Python 侧的add_gdf()/_read_local_vector()见 geolibre.py思路一致本地矢量数据在 R/Python 进程内被读为 GeoJSON 后内联进项目再由浏览器端渲染。也正因如此内联数据有体积上限——Python 实现中是 50 MB_MAX_GEOJSON_BYTES见 project.pyR 包处理超大数据集时同样建议改用瓦片或 COG 这类浏览器直接拉取的数据源避免把整个数据集塞进内存。远程栅格直接读取 Cloud Optimized GeoTIFFGeoLibre 可以在浏览器端直接读取远程 COG无需下载整份文件而是靠 HTTP Range 请求按需拉取瓦片。因此add_raster()接受一个远程 GeoTIFF/COG 的 URLgeolibre() | add_raster( https://example.org/visual.tif, name Satellite image, bands c(1, 2, 3) )前提条件托管栅格文件的服务器必须允许跨域请求CORS否则浏览器会拦截请求服务器还应支持HTTP Range 请求byte-range这是 COG 按需读取的基础。bands参数指定 1 起始的波段索引用于渲染例如c(1, 2, 3)表示 RGB 三波段合成。仓库中的 Python 对应实现 add_raster() 展示了同样的参数体系bands、colormap、rescale等并额外支持把内存中的 xarray 对象物化为会话级临时 GeoTIFF——这提示你R 包中的add_raster()同样可以配合远程 COG 工作流如先下载到对象存储、再以 URL 引用从而把 R 的光栅分析结果快速可视化。项目文件保存与还原.geolibre.json地图的完整状态图层、样式、相机、插件配置都可以保存为标准的.geolibre.json项目文件之后随时恢复map - geolibre() | add_geojson(places) save_project(map, example.geolibre.json) restored - geolibre(load_project(example.geolibre.json))这里的关键互操作点save_project()写出的文件就是 GeoLibre 生态通用的项目格式。把example.geolibre.json交给GeoLibre Web 或 GeoLibre Desktop即可原样打开桌面版还支持命令行直接传入.geolibre/.geolibre.json路径见 docs/project-format.md 的 Desktop file opening 一节。load_project()接受.geolibre.json文件路径也接受 JSON 字符串或项目字典解析后重新构造组件。Python 实现 load_project() 会校验顶层必需键version、name、mapView与layers的类型保证非法项目在进入渲染前就报错。在 Shiny 应用中浏览器端对地图所做的改动用户在界面上加图层、改样式可以通过input$outputId_project读回 R 侧从而实现用户在界面上改、R 侧同步拿到最新项目的双向同步。Shiny 集成渲染地图与代理更新在 Shiny 中使用geolibreOutput()声明输出占位、renderGeolibre()渲染地图当需要在不重建整个输出的前提下更新正在显示的 widget 时使用proxy机制library(shiny) library(geolibre) ui - fluidPage( geolibreOutput(map, height 80vh), actionButton(reset, Reset view) ) server - function(input, output, session) { map - reactiveVal(geolibre(map_only TRUE)) output$map - renderGeolibre(map()) observeEvent(input$reset, { next_map - set_view(map(), center c(0, 20), zoom 2) map(next_map) update_geolibre(geolibre_proxy(map), next_map) }) } shinyApp(ui, server)模式拆解geolibre()组件被存在reactiveVal中renderGeolibre(map())负责首屏渲染用户点击 Reset view 后先在响应式变量中构造新的地图状态set_view(map(), ...)再调用update_geolibre(geolibre_proxy(map), next_map)把新状态推送给运行中的 widget——只更新地图的视图不重建整个输出交互更流畅由于代理复用同一个组件对象map()中保存的状态与界面上显示的状态始终保持一致。这与仓库 Python 实现中的项目同步 命令桥思想同源Python 侧通过_seq序号递增触发项目 trait 重同步见 geolibre.pyR 侧则通过 proxy 完成等价的增量更新。自托管指定自己的 GeoLibre 应用地址默认情况下 widget 加载托管版的 GeoLibre 应用因此离线或内网环境需要把它指向自己的部署。可以针对单个 widget 设置也可以为整个 R 会话设置全局选项# 只对这一个 widget 生效 geolibre(app_url https://gis.example.org/) # 对整个 R 会话生效 options(geolibre.app_url https://gis.example.org/)自托管部署需要满足一个关键条件必须暴露 GeoLibre Web 应用本体并且应用要能响应?embed1项目桥。这个embed1是 GeoLibre 嵌入桥接的开关——宿主页面这里是 R 生成的 HTML通过postMessage协议把.geolibre.json项目注入 iframe 内的应用。仓库的 docs/user-guide/embedding.md 对该协议有完整说明所有消息带版本号v、应用侧消息带source: geolibre宿主等待ready事件后再发送项目。Python 侧的 render_project_html() 也是用同样的postMessage桥把内联项目注入 iframe并强制在 URL 上附加embed1参数。因此当你通过 Docker 等方式自托管 GeoLibre仓库提供了 docker/nginx.conf 与 docker-compose.yml 可作参考后把app_url指向它R 中的地图就会完全从你自己的域名加载——既满足内网隔离也避免了对外部托管服务的依赖。小结与延伸阅读geolibreR 包把 GeoLibre 的完整 GIS 能力封装进了 R 生态核心价值在于标准.geolibre.json项目格式带来的跨端可移植性R 中建好的地图可以保存为项目文件在 GeoLibre Web、Desktop 甚至 Jupyter 中继续编辑Shiny 应用中还能通过 proxy 实时驱动地图。部署时只需记住两点远程数据源要支持 CORS栅格还要支持 Range 请求自托管时要确保应用暴露?embed1桥接。想深入了解.geolibre.json的完整字段mapView、layers、styles、plugins、storymap、widgets等可阅读 docs/project-format.md想理解嵌入桥接与 URL 参数体系maponly、layout、theme等可阅读 docs/user-guide/embedding.md仓库中的 Python 实现 python/src/geolibre/geolibre.py 提供了与 R API 高度同构的参考实现适合对照学习各函数的底层行为。【免费下载链接】GeoLibreA lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs in the web browser, on the desktop, on mobile, and inside Jupyter notebooks.项目地址: https://gitcode.com/GitHub_Trending/ge/GeoLibre创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表