大部分人选 GIS 工具之所以痛苦,是因为把「项目名」当成了「路线」。
别人说 QGIS,他就装 QGIS;听说 GeoServer 能发布,就上 GeoServer——
最后发现,自己只是想在网页上放一张能点的地图。
这些年我做过好多个带地图的项目,几乎把每条路的坑都踩了一遍。
一开始需求都很小:把点画出来、能缩放、能点开看详情。但做到「离线也能看、几万条轨迹不卡、手机上也流畅」的时候,你会发现难的根本不是「画地图」——是地图该自己渲染还是交给瓦片服务、轨迹数据用 GPX 还是 GeoJSON、坐标系一对不上就偏几百米、三维到底值不值得上。
踩完之后我有个挺深的感受:大部分人选 GIS 工具之所以痛苦,是因为一开始就把「项目名」当成了「路线」。 所以这篇不按项目堆,按使用场景讲。五个场景,每个说清楚「谁在用、代表项目、什么时候不该选它」。
说明一下:文中的 star 数、版本号都是 2026 年 10 月 30 日现查的,只代表这个时间点。
00先回答三个问题,路线就出来了
问题一:你的数据在哪?
· 本地文件(Shapefile、GeoPackage、GeoJSON、GeoTIFF 一堆躺在硬盘里)→ 桌面软件
· 数据库里(PostGIS / MySQL / DuckDB)→ 桌面或服务端
· 别人的在线服务(STAC、OGC API、在线底图)→ Web 前端 + 轻客户端
问题二:谁在用?
· 只有你,或者几个懂行的人 → 桌面软件
· 要给不懂 GIS 的人看,还要能在手机上打开 → Web
· 要给团队做数据管理、带账号和权限 → 数据平台
问题三:你是要「分析」,还是要「发布」?
· 分析(缓冲区、叠加、插值、晕渲)→ 桌面
· 发布(一张能在浏览器里拖的地图)→ 服务端 + 前端
这三个问题答完,下面五个场景你基本只会剩一两个。
01场景一:自己在电脑上做分析、出图
主力项目:QGIS(+ GDAL 兜底)
这是开源 GIS 里最成熟、也被用得最多的一条路。
QGIS:14.7k star,GPL-2.0,C++。当前 LTR 分支是 3.44,最新补丁 3.44.15(2026-09-25)。
它的形态就是「GIS 里的 Photoshop」:图层树、属性表、符号系统、投影管理、处理工具箱、出版级排版、Python 插件生态,一个都不少。你能想到的地理数据格式它基本都能开,因为底层就是 GDAL。绝大多数「我要做一张正经地图」的需求,到它这里就结束了。
图QGIS 官网首页。这个项目不用多介绍——开源 GIS 里「默认答案」的位置,十几年没变过
GRASS GIS:1.2k star,8.5.0(2026-05)。强项不在界面,而在栅格运算、水文分析、地形建模这些算法库。很多专业论文里的处理流程,就是 GRASS 命令串起来的。
GDAL:6.1k star,3.13.3(2026-08)。严格说它不是 GIS,是「地理数据格式的万能翻译器」。上面这些软件、以及后面几乎所有工具,八成都在用它或者它的思路。命令行里那些 ogr2ogr、gdalwarp,是这条路上最实用的两把扳手。
什么时候别选: 你只是想在网页上放一张地图(场景三);你要给完全不懂 GIS 的家人同事用;你需要一个能嵌进自己产品的组件。
02场景二:把数据发布成地图服务
常用项目:GeoServer、MapServer、QGIS Server,以及新一代瓦片服务
这个场景解决的是「发布」:数据在服务器上,别人通过 HTTP 拿到图片瓦片或矢量数据。
GeoServer:4.5k star,当前 3.0.2(2026-10-17)。Java 生态的老牌选手,WMS / WFS / WMTS 一把抓,管理界面点点就能发布图层,是这类需求里最常见的选择,也是很多单位内网的标准件。提醒一句:GeoServer 3 是一次大版本跃迁,升级前务必看迁移说明——它不是一个补丁。
图GeoServer 官网,页面右侧同时列着 3.0.2 和 2.28.6——老牌服务端的特点就是版本线分得清楚
MapServer:1.2k star,8.6.6(2026-09)。C 写的,老、稳、轻,配置文件驱动。资源占用比 GeoServer 小一个量级,代价是没有漂亮后台,全靠写 mapfile。
QGIS Server:QGIS 自带的服务端。好处是「桌面里配好,发布出来就是那个样」——符号系统和 QGIS 完全一致,做制图发布特别省事,适合已经在用 QGIS 出图的团队。
Mapnik:4.0k star,LGPL-2.1,4.3.2(2026-09)。它本质是渲染引擎,OpenStreetMap 早期那套瓦片就是它在画。你要的是「把数据渲成好看的图」,而不是「一整套 OGC 服务」,那看它。
如果你只需要瓦片(这几年最常见的真实需求):
· Martin:4.0k star,Apache-2.0,Rust,v1.16.0(2026-09)。一个二进制文件,接 PostGIS / MBTiles / PMTiles 直接吐矢量瓦片,部署最简单、速度也快
· pg_tileserv:1.1k star,Apache-2.0,Go。PostGIS 专用,配好连接串就能出瓦片。注意它最近一次提交在 2025 年底,更新节奏明显慢下来了
· TiTiler:Python 生态的栅格瓦片服务,GeoTIFF / COG 按需切片,做遥感出图省事
· PMTiles / MBTiles:不想架服务的话,把瓦片打包成一个文件扔对象存储,前端直接读——很多小项目根本不需要瓦片服务器
什么时候别选: 只有你一个人看本地文件(纯浪费);你只是想在自己网页上显示一张地图(用在线底图 + 前端库就行);你没有运维,也不想维护一个 Java 服务。
03场景三:在网页里嵌一张地图
常用项目:Leaflet、OpenLayers、MapLibre GL JS;三维看 CesiumJS
这一层和上面是两件事:上面是「产出数据」,这里是「在浏览器里画出来」。
Leaflet:45.8k star,BSD-2。这个领域最经典的选择:体积小、API 简单、插件海量。但要注意——它的最新正式版 1.9.4 还是 2023 年 5 月发的,活跃度主要靠插件生态撑着。做个点线面标注、弹窗、几百个标记的地图,它依然是最省事的选择;但你要矢量瓦片、三维、大要素量的时候,它不是最优解。
OpenLayers:12.6k star,BSD-2,10.11.0(2026-10-04)。功能最全的开源前端地图库:投影转换、各种图层类型、矢量瓦片、交互编辑、坐标系处理都很扎实。学习曲线比 Leaflet 陡,但「什么都能做」。
图OpenLayers 官网首页就是一张能拖的实时地图,页面上写着 10.11.0——这个库的风格就是「不花哨,但什么都有」
MapLibre GL JS:12.0k star,BSD-3,6.16.0(2026-10-25)。Mapbox GL 的开源分支,GPU 渲染矢量瓦片,流畅度和样式表现力是这一档里最强的。三维地形、动态样式、海量点,它都能扛。
图MapLibre 的示例页,一屏就能看出它的定位:矢量、样式化、示例驱动
CesiumJS:15.9k star,Apache-2.0,1.146(2026-10)。三维地球,卫星轨道、倾斜摄影、BIM 融合这类需求的标准答案。代价是学习成本和数据准备成本都高。
图Cesium Sandcastle(官方示例台):左边是示例列表,右边是 3D 地球,版本号 1.146.0 也在页面上
另外两个不是「地图引擎」但很有用的: deck.gl(14.7k star,MIT)做 WebGL 大数据可视化,几百万点、热力、飞线;kepler.gl(12.1k star,MIT)拖一个文件进去就能出图,做数据探索和写报告很香,不适合做产品。
一句话版怎么选:
· 就要个能点的地图、插件多、上手快 → Leaflet
· 要投影、要编辑、要「什么都能做」 → OpenLayers
· 要矢量瓦片、要好看、要流畅 → MapLibre GL JS
· 要三维地球、倾斜摄影 → CesiumJS
· 要百万级数据可视化 → deck.gl
04场景四:数据要管起来(一个人或一个团队)
常用项目:PostGIS、DuckDB、GeoNode
PostGIS:2.3k star,GPL-2.0。PostgreSQL 的空间扩展,本质是把地理数据当正经数据库管。要多用户、权限、海量要素查询,它是标配。GeoServer、Martin、pg_tileserv 全都靠它。
DuckDB(+ Spatial 扩展):42.7k star,MIT,v2.0.0(2026-10-21)。单文件、嵌入式、列式分析库,读 GeoParquet 快得离谱。如果你的场景是「几百万条轨迹做统计」,用 DuckDB 比架 PostGIS 省事得多。
两个新格式值得记住: GeoParquet(列式,分析快,扔 S3 上就能查);PMTiles(整堆瓦片打包成一个文件,不需要瓦片服务器)。这俩是这几年最实在的进步——很多「必须架服务」的需求,现在一个文件就解决了。
GeoNode:1.7k star,5.1.1(2026-10-22)。Django + GeoServer + 元数据目录,一套装完就有一个地理数据门户:上传、配权限、在线预览、下载。政企和科研机构里很常见。
轻量一点的: MapStore(666 star,v2026.02.03)配置化搭地图页面,适合给不同部门做十个页面;uMap(1.6k star,3.8.1)五分钟做一张带标注的共享地图,给完全不碰技术的人用。
05场景五:只想快速看看数据、批量处理一下
常用项目:GDAL 命令行、Mapshaper、WhiteboxTools
这一类严格说不是「GIS 软件」,是「干活的工具」,但用起来最爽。
GDAL 命令行:转格式、切瓦片、重投影、拼图,ogr2ogr 和 gdalwarp 两个命令基本能吃下八成需求。配合 shell 脚本,处理一万个文件也只是几分钟。
Mapshaper:4.2k star,0.7.101(2026-10-29)。矢量数据整形专用:简化、合并、裁切、拓扑修复。命令行一条命令处理几十万要素,浏览器版打开网页就能用。做地图给人看的人,迟早会用到它——尤其是那句「这个 GeoJSON 太大了,帮我压到 3MB」。
WhiteboxTools:1.2k star,MIT,Rust,2.4.0。地理处理算法库,命令行调用,水文、地形、栅格分析很顺手。
这一类里这两年还冒出一批「纯 Rust、打开就快」的新项目,比如 RustGIS、GeoLibre,架构很讲究(命令化、渲染和 UI 解耦),适合愿意尝鲜的人。但工程主力,目前还是上面这几个老面孔更稳。
06一张清单
按场景直接对号入座:
· 做正经空间分析、出印刷级地图 → QGIS(GDAL 兜底)
· 地形 / 水文 / 栅格运算 → GRASS GIS、WhiteboxTools
· 给别的系统提供 WMS/WFS 标准服务 → GeoServer、MapServer
· 数据在 PostGIS、只想发矢量瓦片 → Martin
· 栅格影像按需切片 → TiTiler
· 网页上放一张能点的地图 → Leaflet(简单)/ OpenLayers(全能)
· 矢量瓦片 + 好看 + 流畅 → MapLibre GL JS
· 三维地球、倾斜摄影、模型 → CesiumJS
· 百万级数据可视化 → deck.gl / kepler.gl
· 数据门户给团队用 → GeoNode
· 批量转格式 / 简化 / 裁切 → GDAL 命令行 + Mapshaper
07三个少人提的坑
① 许可不是「开源就随便用」。 QGIS、GRASS、PostGIS、GeoServer 都在 GPL 系;MapLibre、OpenLayers、Leaflet 是 BSD 系;Cesium、Martin、deck.gl 是 Apache / MIT 系。做闭源商业产品时,GPL 系组件放在什么位置、怎么调用,需要认真看一眼法务意见,别拿「反正是开源」糊过去。具体以各仓库 LICENSE 为准。
② 瓦片和坐标系,永远是第一坑。 前端用 Web 墨卡托,你的数据可能是 CGCS2000 或者地方坐标,一叠加就偏几百米。先把坐标系对齐再谈功能,否则你会在三个软件里各调一天。
③ 更新节奏也是选型标准。 Leaflet 的正式版停在 2023 年、pg_tileserv 的提交停在 2025 年底——不是不能用,而是你出问题时,社区还在不在。选之前看一眼最后一次提交和 release 时间,比看 star 数更有用。
08深度思考:选型这件事的三条经验
第一,先定场景,再挑工具。
「QGIS 还是 ArcGIS」这种问题之所以没答案,是因为它跳过了「你到底要分析还是要发布」。工具是路线的实现,路线是需求的投影。问题问错了,答案是随机的。
第二,全功能不等于适合。
QGIS 什么都能做,所以很容易什么都想用它做——结果一个只要「把点画出来」的功能,被拖进了三层软件栈:装环境、配服务、调参数,两天没了。后来我把「轻量」当成一个独立需求来看:打开快、不配置、不装环境,本身就是功能。
第三,这套东西真正的成本不在软件,在人。
选型选错的代价,很少是「软件不好用」,而是三个月后没人接手:环境装不起来、瓦片配不出来、坐标系没人敢动。所以我现在的标准很土——挑那个你团队里最普通的人也能维护的方案,而不是星最多的那个。
最后说点题外话。
我自己还做过一个小软件,叫简序相册:把硬盘里的照片按时间、地点、轨迹整理起来,手机上也能翻。当初给它选 GIS 方案的时候,走的就是上面这套流程——先问数据在哪(全在用户自己的硬盘上)、谁在用(自己和家里人)、要不要对外发布(不用,但手机得能看),最后落到了「本地自己渲染 + 自建瓦片缓存」,没上 GeoServer,也没上 QGIS Server。
这篇不展开它,我只是想说:这套选型方法,比任何一个具体工具都值得拿走。 工具每两年换一批,问问题的方式不会变。