在 Web 地图上可视化遥感数据:以芜湖市为例

文章目录

  • [在 Web 地图上可视化遥感数据:以芜湖市为例](#在 Web 地图上可视化遥感数据:以芜湖市为例)
    • 一、整体技术方案
    • 二、数据准备
      • [1. 获取芜湖市行政区划(GeoJSON)](#1. 获取芜湖市行政区划(GeoJSON))
      • [2. 准备遥感影像(PNG 格式)](#2. 准备遥感影像(PNG 格式))
    • 三、前端页面开发
      • [1. 项目结构](#1. 项目结构)
      • [2. HTML 结构(`index.html`)](#2. HTML 结构(index.html))
      • [3. 样式(`style.css`)](#3. 样式(style.css))
      • [4. 地图逻辑(`script.js`)](#4. 地图逻辑(script.js))
    • [四、部署到 GitHub Pages](#四、部署到 GitHub Pages)
      • [步骤 1:创建 GitHub 仓库](#步骤 1:创建 GitHub 仓库)
      • [步骤 2:推送代码](#步骤 2:推送代码)
      • [步骤 3:启用 GitHub Pages](#步骤 3:启用 GitHub Pages)
    • 五、效果展示
    • 六、进阶扩展建议
    • 七、资源推荐

在 Web 地图上可视化遥感数据:以芜湖市为例

关键词 :遥感可视化、Leaflet、GeoJSON、WebGIS、GitHub Pages
适用场景:科研展示、智慧城市、环境监测、教学演示

在地理信息科学与遥感应用中,将遥感影像叠加到城市地图上进行可视化,是分析土地利用、植被覆盖、城市热岛等现象的重要手段。本文将以安徽省芜湖市 为例,手把手教你如何使用开源技术栈,在网页上实现遥感数据的标绘与交互展示,并通过 GitHub Pages 免费部署上线


一、整体技术方案

我们采用纯前端、零后端的轻量级方案:

组件 技术选型 说明
地图引擎 Leaflet.js 轻量、易用、社区活跃
底图服务 OpenStreetMap 免费、全球覆盖
遥感数据格式 PNG + 地理边界(Bounding Box) 由 GeoTIFF 预处理而来
行政区划 GeoJSON 从公开数据源获取
部署平台 GitHub Pages 免费、自动 HTTPS、一键发布

✅ 无需服务器、无需数据库、适合快速原型开发


二、数据准备

1. 获取芜湖市行政区划(GeoJSON)

推荐来源:

  • GADM → 搜索 "Wuhu, Anhui, China" → 下载 Level 2(区县)
  • 或使用国家统计局数据自行构建

保存为 wuhu_boundary.geojson,结构示例:

json 复制代码
{
  "type": "FeatureCollection",
  "features": [{
    "type": "Feature",
    "properties": { "name": "芜湖市" },
    "geometry": {
      "type": "MultiPolygon",
      "coordinates": [[[ [117.9,29.8], [118.8,29.8], ... ]]]
    }
  }]
}

2. 准备遥感影像(PNG 格式)

假设你已通过 ENVI、QGIS 或 Google Earth Engine 生成了一幅芜湖市的遥感产品(如 NDVI、假彩色合成图),并裁剪为芜湖范围。

关键步骤:

  1. 导出为 PNG 图像 (如 wuhu_ndvi.png
  2. 记录其地理范围(Bounding Box),单位为经纬度(WGS84):
js 复制代码
const bounds = [
  [29.8, 117.9], // 西南角 [纬度, 经度]
  [31.5, 118.8]  // 东北角 [纬度, 经度]
];

💡 提示:在 QGIS 中可通过"图层属性 → 信息"查看范围;在 GDAL 中可用 gdalinfo your.tif 查看。


三、前端页面开发

1. 项目结构

复制代码
wuhu-rs-visualization/
├── index.html          # 主页面
├── style.css           # 样式
├── script.js           # 地图逻辑
├── wuhu_ndvi.png       # 遥感影像
└── wuhu_boundary.geojson  # 行政区划

2. HTML 结构(index.html

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>芜湖市遥感数据可视化</title>
  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
  <link rel="stylesheet" href="style.css" />
</head>
<body>
  <div id="map"></div>
  <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
  <script src="script.js"></script>
</body>
</html>

3. 样式(style.css

css 复制代码
body, html {
  margin: 0;
  padding: 0;
  height: 100%;
}
#map {
  width: 100%;
  height: 100vh;
}

4. 地图逻辑(script.js

javascript 复制代码
// 1. 初始化地图(中心定位芜湖)
const map = L.map('map').setView([31.3, 118.4], 10);

// 2. 添加底图
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  attribution: '© OpenStreetMap contributors'
}).addTo(map);

// 3. 叠加遥感影像
const imageBounds = [[29.8, 117.9], [31.5, 118.8]];
L.imageOverlay('./wuhu_ndvi.png', imageBounds, {
  opacity: 0.8,
  alt: '芜湖市遥感影像'
}).addTo(map);

// 4. 叠加行政区划边界
fetch('./wuhu_boundary.geojson')
  .then(res => res.json())
  .then(data => {
    L.geoJSON(data, {
      style: { color: '#ff0000', weight: 2, fillOpacity: 0 },
      onEachFeature: (feature, layer) => {
        layer.bindPopup(`<b>${feature.properties.name}</b>`);
      }
    }).addTo(map);
  });

四、部署到 GitHub Pages

步骤 1:创建 GitHub 仓库

  • 仓库名建议:wuhu-rs-visualization
  • 初始化时可勾选 README

步骤 2:推送代码

bash 复制代码
git init
git add .
git commit -m "Add遥感可视化页面"
git branch -M main
git remote add origin https://github.com/你的用户名/wuhu-rs-visualization.git
git push -u origin main

步骤 3:启用 GitHub Pages

  1. 进入仓库 → Settings → Pages
  2. Source 选择 Deploy from a branch
  3. Branch 选择 main,路径选 / (root)
  4. 点击 Save

✅ 几秒后,你会看到类似地址:

👉 https://你的用户名.github.io/wuhu-rs-visualization/


五、效果展示

打开部署后的链接,你将看到:

  • 底图为 OpenStreetMap 的芜湖市区
  • 上层半透明叠加遥感影像(如 NDVI 热力图)
  • 红色轮廓线标出芜湖市行政边界
  • 点击边界可弹出城市名称

📌 实际效果取决于你的遥感图像质量与地理配准精度


六、进阶扩展建议

需求 实现方式
多时相动画 加载多个 PNG,用控件切换或自动轮播
像素值查询 引入 GeoTIFF.js 解析原始 GeoTIFF
自定义着色 对 NDVI 使用色带(Color Ramp)渲染
移动端优化 添加响应式设计、触摸缩放支持
替换底图 使用天地图、高德、Google Maps(需 API Key)

七、资源推荐


相关推荐
代码搬运媛5 小时前
Jest 测试框架详解与实现指南
前端
counterxing6 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
wangqiaowq6 小时前
windows下nginx的安装
linux·服务器·前端
之歆7 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
发现一只大呆瓜7 小时前
Vite凭什么这么快?3分钟带你彻底搞懂 Vite 热更新的幕后黑手
前端·面试·vite
Maimai108087 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
kyriewen9 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
humcomm9 小时前
元框架的工作原理详解
前端·前端框架
canonical_entropy9 小时前
Attractor Before Harness: AI 大规模开发的方法论
前端·aigc·ai编程
zhangxingchao10 小时前
多 Agent 架构到底怎么选?从 Claude Agent Teams、Cognition/Devin 到工程落地原则
前端·人工智能·后端