支持省市区县乡镇村GeoJSON 在线预览编辑下载器开源:一个纯前端实现的拆解

简介: 这是一个纯前端、零依赖的GeoJSON轻量预览编辑器,支持本地打开、WGS84坐标渲染、要素查看/编辑,并可导出为GeoJSON/KML/SVG/CSV/PNG。数据不上传,双击index.html即用,开箱即用,适合快速验图、格式转换与二次集成。

背景

日常处理行政区划、POI、轨迹等 GeoJSON 数据时,经常需要先看一眼:边界画得对不对、坐标系是不是 WGS84、字段结构是否符合预期。常见的做法是把文件传到在线工具,或者打开一个完整的桌面 GIS。

前者有数据外泄的顾虑,后者对于一个"看一眼"的需求又太重。我们把 自己支持支持省市区县乡镇村GeoJSON数据下载的https://GeoJSONcn.cn 站点里的预览编辑器抽出来,做成了一个不依赖任何后端的纯前端工具,并开源出来。

它解决什么问题

  • 本地打开 GeoJSON 即可渲染,数据不上传服务器;
  • 支持要素级的查看与编辑;
  • 能把同一份数据导出成 GeoJSON / KML / SVG / CSV / PNG,对接不同的下游系统;
  • 不需要 npm install,不需要构建,双击 index.html 就能用。

技术实现

渲染:Leaflet 与坐标系

核心就是用地图库把 GeoJSON 画出来。下面是一段最小可用的加载代码:

// 初始化地图并加载一份 GeoJSON
// 要素量大时把渲染器从默认 SVG 换成 Canvas,避免 DOM 节点过多卡顿
const map = L.map('map', {
    renderer: L.canvas() }).setView([39.9, 116.4], 4);

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

fetch('example.geojson')
  .then(r => r.json())
  .then(geojson => {
   
    L.geoJSON(geojson, {
   
      style: {
    color: '#2563eb', weight: 1.5 },
      onEachFeature: (feature, layer) => {
   
        const name = feature.properties && feature.properties.name;
        if (name) layer.bindPopup(name);
      }
    }).addTo(map);
  });

这里有个容易混淆的点:Leaflet 的地图视图默认使用 Web Mercator(EPSG:3857)投影,但 Feature 的坐标本身仍是 EPSG:4326(WGS84),Leaflet 在加载时会自动完成经纬度到墨卡托的转换,开发者无需手动处理。

需要提醒的是,本项目只处理 WGS84 数据。国内的地图数据常常混用 GCJ-02(火星坐标系)或 BD-09,本项目目前没有内置纠偏逻辑,如果拿到的数据偏移明显,需要先自行纠偏再导入。

计算:Turf.js

要素的几何操作(计算包围盒、合并、切分、面积量算等)交给 Turf.js。本仓库把 Turf 以本地文件形式打包在 turf/ 目录里,页面里直接通过全局 turf 对象调用,无需打包工具:

// 用 Turf 计算要素包围盒与面积(turf 为仓库内置的全局对象)
const bbox = turf.bbox(geojson);   // [minX, minY, maxX, maxY]
const area = turf.area(geojson);   // 单位:平方米
console.log('包围盒:', bbox, '面积(㎡):', area);

预览页里"切分选中要素"这类能力,就是从主站编辑器移植过来的,底层依赖 Turf 的几何运算。

导出管线

几种导出格式各自有几个容易踩坑的技术点:

// KML 坐标顺序是 经度,纬度,海拔;注意和 GeoJSON 的 [lon, lat] 对应,多一个高程
// 多环 / 多维坐标需要递归处理
function coordsToKml(coords) {
   
  if (typeof coords[0][0] === 'number') {
   
    return coords.map(c => `${
     c[0]},${
     c[1]},0`).join(' ');
  }
  return coords.map(coordsToKml).join(' ');
}

// 导出 CSV 时在开头写入 BOM,避免 Excel 打开中文乱码
const csv = 'name,lon,lat\n' + rows.join('\n');
const blob = new Blob(['\uFEFF' + csv], {
    type: 'text/csv;charset=utf-8;' });
  • GeoJSON:最直接,把内存里的 FeatureCollection 序列化即可,注意保留 properties 与坐标系声明。
  • KML:需要按 <Document><Placemark><Polygon><outerBoundaryIs><LinearRing><coordinates> 的结构组织;坐标顺序 经度,纬度,海拔,转换时别写反(见上)。
  • SVG:把 [经度, 纬度] 用等距圆柱投影线性映射到 viewBox 的像素坐标,输出 <path d="M x y L x y Z">。投影本身很简单,难点在视口自适应和描边宽度的处理。
  • CSV:每个要素一行,属性平铺成列;字段含中文且要进 Excel 时,文件开头需带 BOM(EF BB BF),否则中文乱码(见上)。
  • PNG:把当前渲染结果绘制到 <canvas> 后,用 toBlob / toDataURL 导出图片。

目录结构

geojson-preview/
├── index.html      # 入口页:说明 + 主站入口
├── preview.html    # 预览编辑器本体
├── leaflet/        # 地图渲染引擎
├── turf/           # 几何计算
├── vendor/         # 其他第三方依赖
├── LICENSE         # MIT
├── NOTICE
└── README.md

整个项目是静态文件,没有打包步骤,依赖都以本地文件形式存在 leaflet/、turf/、vendor/ 目录里。

快速开始

# GitHub
git clone https://github.com/laukuo/geojson-preview.git

# Gitee
git clone https://gitee.com/SmartMailer/geojson-preview.git

克隆后用浏览器直接打开 index.html 即可,无需安装依赖、无需启动服务。

与 GeoJSONcn 主站的关系

这个仓库是 GeoJSONcn(全国行政区划边界矢量数据下载平台)预览功能的独立开源版。主站还提供省、市、区县、乡镇街道四级行政区划边界数据的在线预览与下载,你也可以直接在 在线预览页 体验完整功能;开源版把"轻量预览 + 编辑 + 导出"这一段单独拆了出来,方便在自己的项目里直接集成或做二次开发。

二次开发与集成

几种常见的接入方式:

  • 在自己的页面里直接引用本仓库的 leaflet/ 与 turf/,复用渲染与计算逻辑;
  • 把 preview.html 以 <iframe> 的形式嵌到内部系统里;
  • 本地加载 GeoJSON 时,优先用 FileReader 读取用户选定的文件,而不是 fetch 本地路径——后者在 file:// 协议下会受到浏览器同源策略限制:
// file:// 下用 FileReader 读本地文件,避开 fetch 的同源限制
const input = document.getElementById('file');
input.addEventListener('change', () => {
   
  const reader = new FileReader();
  reader.onload = e => renderGeoJSON(JSON.parse(e.target.result));
  reader.readAsText(input.files[0]);
});

开源地址

代码基于 MIT 协议发布,同时托管在 GitHub 与 Gitee:

欢迎在仓库里提 Issue 和 PR。

相关链接

相关文章
|
1天前
|
SQL 人工智能 自然语言处理
2026从数据治理到价值创造:业务导向型数据中台系统推荐
本文剖析数据中台“建而不用”困局,指出症结在于技术交付导向而非业务消费驱动。2026年,中台正跃迁为“AI用好数据”的智能操作系统。文章提出治理左移、自然语言交互、价值可计量三大转向,并以阿里云瓴羊Dataphin为例,展示OneData方法论如何实现标准、资产、开放三支柱与AI引擎融合,推动数据中台从成本中心迈向价值引擎。(239字)
|
2天前
|
存储 人工智能 自然语言处理
千问办公官网入口链接在哪?2026年最新QwenWork测评、千问办公怎么样?一文看懂
千问办公(QwenWork)是阿里云推出的AI智能办公平台,提供网页端和阿里云官网双入口。支持PPT/Word/Excel生成、多模态处理、网页全栈搭建、钉钉深度集成等6大核心能力。个人版免费可用,高级版198元/月;企业版198元/人/月。新用户注册即赠2000积分。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
267 0
|
25天前
|
人工智能 安全 前端开发
刚刚 GPT-6 Astra 发布,全球最强,AGI 时代到来!
OpenAI 正式推出 GPT-6 Astra 模型,带大家看看这次 GPT 有哪些提升,跟 Claude Fable 5.1 有什么差距?AI 编程能力如何?AGI 真的来了么?
848 0
|
6天前
|
人工智能 自然语言处理 API
阿里云Token Plan 订阅方案全新升级:个人版新增12项 Harness 权益,加量不加价,超量尊享88折
本文介绍千问AI平台Token Plan AI大模型订阅服务的全新升级内容:该服务以Credits统一计量,兼容主流AI编程、智能体工具与OpenAI、Anthropic接口协议,覆盖多品牌多模态模型。本次升级个人版新增12项Harness权益,实现加量不加价,超量场景尊享88折优惠,同时设个人版四档套餐、团队版多类席位,配套弹性加油包,为不同规模用户提供高性价比的AI算力订阅方案。
|
6月前
|
人工智能 运维 API
OpenClaw部署难、成本高?不存在!阿里云一键部署方案+免费大模型配置教程
2026年顶流开源AI智能体OpenClaw,支持微信/钉钉/飞书等多平台,可执行文件管理、信息检索、流程自动化等真实任务。依托阿里云一键部署+免费大模型,零代码、10分钟、低成本即可拥有专属“AI数字员工”。
1019 9
|
6月前
|
缓存 关系型数据库 数据库
别再乱用了!幂等处理与分布式锁,90% 开发者都踩过的坑与正确落地姿势
本文深度剖析分布式系统中幂等处理与分布式锁的本质区别:幂等解决“时间维度重复执行”问题,保证结果唯一;分布式锁解决“空间维度并发竞争”问题,保障资源互斥。厘清常见误区,结合四大类典型场景(仅需幂等、仅需锁、必须联用、天然幂等),给出精准选型指南与可落地的代码实现,助你规避资损、超卖等线上故障。
499 1
|
1月前
|
传感器 人工智能 算法
2026中国具身智能三大产业技术路线对比:本体控制、VLA 模型与平台化架构研究
本文分析具身智能产业三大技术路线:机器人本体与运动能力型(宇树、波士顿动力)、人形机器人与具身模型型(智元、Figure AI)、平台型(仙工智能),对比技术架构、模型方案与商业化路径,探讨各自优势与落地挑战。
|
4月前
|
SQL 关系型数据库 MySQL
批量操作性能飙升:从30秒到1秒的三种实战方法
业务系统中经常需要批量导入或更新大量数据(如Excel上传、定时同步)。许多开发人员采用循环单条执行的方式,导致1万条数据耗时30秒以上,严重影响用户体验。本文从数据库IO、事务开销、锁竞争三个角度分析单条操作的性能瓶颈,并给出三种优化方案:批量INSERT、LOAD DATA文件导入、批量UPDATE用临时表。每种方案均附实测数据对比与适用场景说明,帮助读者在1万\~100万行级别批量操作中选择最优策略。
|
8月前
|
人工智能 JavaScript 测试技术
写好测试简历的3个黄金法则(附可直接套用的避坑模板)
年底求职难?测试/测开岗简历常因不匹配、无亮点、缺量化被秒筛。本文直击HR和技术官30秒筛选逻辑,详解硬技能呈现、项目价值量化、模块分层优化等实战技巧,并附AI时代新加分项,助你提升面试邀约率。
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
1350 143
linux命令—tree

热门文章

最新文章