—— 地图软件(GIS/LBS)开发知识培训 · 从坐标到地图应用 ——

地图软件的修炼之道

轻记账要加「地图账单」功能——每笔账记在哪个地点、月底看消费热力图;公司还想做配送调度系统。老板说:地图这块,我们自己做!周师傅说:地图开发 = GIS 基础(坐标)+ 地图引擎(渲染)+ 位置服务(POI/路径/定位)+ 合规资质。这一本,从「一个坐标」讲到「一个地图产品」。

🗺️ 📐 🧱 ⚙️ 🔍 🛣️ 📍 🧠 🏗️ ⚖️ 🚀
序 章

LBS 世界的入场

地图开发全景:坐标 → 数据 → 引擎 → 服务 → 合规
🧑‍💻
小哲

师傅!老板要让轻记账加「地图账单」——每笔账记地点、月底出消费地图;还说要搞配送调度系统。地图不就是「调个 SDK 放个地图」吗?还能有啥?

🧙
周师傅

「调 SDK 放地图」只是最后一公里。地图软件的知识栈很深:

  • GIS 基础:坐标系(GPS 坐标 ≠ 国内地图坐标!)、投影——地基中的地基。
  • 地图数据:瓦片、路网、POI——地图不是画出来的,是「拼」出来的。
  • 位置服务:搜索、路径规划、定位、地理围栏——地图的「灵魂」。
  • 合规:地图资质、位置权限——国内地图的红线特别多。

来,十站路线——

1
坐标系经纬度、WGS84/GCJ-02/BD-09、投影、火星坐标
2
地图数据矢量/栅格、瓦片金字塔、图层、OGC 标准
3
地图引擎高德/百度 SDK、Leaflet/OpenLayers/MapLibre、WebGL
4
POI 与编码兴趣点、地理编码/逆编码、周边搜索、类别体系
5
路径规划驾车/步行/公交、实时路况、ETA、导航引导
6
定位与轨迹GPS/Wi-Fi/基站、融合定位、轨迹、地理围栏
7
空间分析PostGIS、Geohash、R 树、热力图、时空分析
8
LBS 架构定位→搜索→规划→导航、高并发位置服务
9
合规安全测绘资质、位置权限、隐私合规、数据安全
10
产品职业导航/外卖/出行/物流、GIS 工程师、学习路线
🧙
周师傅

记住一句话:地图软件 = 坐标系(数学)+ 瓦片数据(内容)+ 引擎(渲染)+ 位置服务(灵魂)+ 资质合规(门票)。走,第一站,从「一个坐标」开始——它没你想的那么简单。

第 1 站

坐标系:数学地基

经纬度 · WGS84/GCJ-02/BD-09 · 投影 · 火星坐标

地图开发第一课不是画地图,而是「坐标」——GPS 给的是全球坐标,国内地图用的是「加密坐标」——搞错坐标系,你的标记点会漂移几百米!

🧙
周师傅

坐标系三兄弟(中国地图开发必懂):

  • WGS84:GPS 原始坐标——卫星直接给的「全球标准」。
  • GCJ-02(火星坐标):中国官方加密坐标——所有国内地图服务用的都是它(国测局加密偏移)。
  • BD-09:百度专用坐标——在 GCJ-02 上再偏移一层。

核心坑:GPS 的 WGS84 坐标直接打到国内地图上会偏移 100~600 米——必须先转换。还有投影:地球是球,屏幕是平面——把经纬度画到平面上要投影(Web 墨卡托是 Web 地图标准)。

坐标转换(开发必备)
【坐标系速记】
  WGS84 :GPS 原始坐标(全球)
  GCJ-02:火星坐标(国内地图标准——高德/腾讯)
  BD-09 :百度坐标(百度的再加密)

【转换关系】
  WGS84 ──加密──→ GCJ-02 ──再加密──→ BD-09
  (偏移 100~600 米,方向随地区变化)

【实战:App 拿到的 GPS 坐标怎么用】
  拿到 WGS84 坐标 → 转成 GCJ-02 → 打到高德地图上
  (不转 = 标记点漂移几百米!)

【投影(球 → 平面)】
  Web 墨卡托投影:Web 地图标准(Google/高德/百度都是)
  经纬度 → 平面坐标 → 屏幕像素
  → 开发者一般不用自己算(引擎封装了),但要懂原理

【开发建议】
  统一用地图 SDK 的坐标转换工具(别自己写数学)
  存储统一坐标系(推荐 GCJ-02,国内)——避免混乱
  GeoJSON 标准格式:{ "type": "Point", "coordinates": [116.4, 39.9] }
应用场景:「地图账单」的坐标大坑

轻记账加地图账单:用户手机 GPS 给的是 WGS84,直接打到高德地图上——所有账单地点偏了 200 米!整改:定位后统一转 GCJ-02 再存再显示——地点终于精准。「坐标系」是地图开发的第一道门槛,绕不过去的。

坐标术语

  • 经纬度:地理坐标——地球的「门牌号」。
  • WGS84:GPS 原始坐标(全球标准)。
  • GCJ-02(火星坐标):国内加密坐标——国内地图标配。
  • BD-09:百度再加密坐标。
  • 坐标转换:WGS84→GCJ-02→BD-09——必做步骤。
  • 投影:球面→平面——Web 墨卡托。
  • GeoJSON:地理数据标准格式。

本站收获:坐标系 = WGS84(GPS)→ GCJ-02(国内)→ BD-09(百度)三层。GPS 坐标直接打国内地图会漂移几百米——统一转 GCJ-02 是地图开发的第一个基本功。

第 2 站

地图数据:瓦片金字塔

矢量/栅格 · 瓦片 · LOD · 图层 · OGC 标准

你缩放地图时为什么瞬间加载?因为地图不是「一张大图」,而是「几千张小瓦片拼的」——按级别预生成、按需加载。这一站,地图的内容从哪来。

🧙
周师傅

地图数据三件事:

  • 数据形态栅格(图片)——预渲染成图片瓦片,简单通用;矢量(数据)——存几何数据,客户端渲染(更清晰、可交互、体积小——现代主流)。
  • 瓦片金字塔(LOD):全球按级别切成网格——级别 1 是 4 块,级别 18 是几百亿块;缩放时加载对应级别的瓦片(「多级细节」的经典实现,第十五本爬虫里也提过)。
  • 图层(Layer):路网、水系、建筑、POI、卫星影像——地图是「图层叠加」的结果。OGC 标准(WMS/WFS/GeoJSON)是地理数据交换的「普通话」。
瓦片金字塔与图层
【瓦片金字塔(LOD 多级细节)】
  级别 0:1 块(全球)
  级别 1:4 块(2×2)
  级别 18:约 274 亿块
  → 每块 256×256 像素的小图
  → 显示哪级加载哪级:缩放瞬间出图的原因

【栅格 vs 矢量瓦片】
  栅格:预渲染图片——简单、通用(卫星图必需)
  矢量:几何数据客户端画——清晰/可交互/体积小(现代主流)
  MapLibre/Mapbox 的矢量瓦片:手机端丝滑

【图层叠加(地图的「洋葱」)】
  底图(道路/地形) → POI 层 → 用户标记层 → 热力图层
  → 每层独立开关/透明度(产品设计的自由)

【数据来源】
  商用:高德/百度/四维图新(收费,国内合规首选)
  开源:OpenStreetMap(免费,海外数据全)
  自有:自采数据(门店/配送点——公司自己的 POI)

【OGC 标准(地理数据普通话)】
  GeoJSON:JSON 格式地理数据(点/线/面)
  WMS/WMTS:地图图片服务标准
  WFS:矢量要素服务标准
  → 不同系统交换地理数据的「协议」

数据术语

  • 栅格 vs 矢量:图片瓦片 vs 几何数据——现代用矢量。
  • 瓦片金字塔(LOD):分级切块——按需加载。
  • 图层叠加:底图+POI+标记+热力——洋葱结构。
  • 数据源:高德/百度(商用)/OSM(开源)/自有。
  • GeoJSON:地理数据标准格式。
  • OGC 标准:WMS/WFS——地理数据交换协议。
  • 256 瓦片:每块小图尺寸——加载性能关键。

本站收获:地图数据 = 瓦片金字塔(分级切块按需加载)+ 图层叠加(洋葱结构)+ 矢量优先(现代)。数据源选商用合规、开源省钱、自有定制——「地图是拼出来的,不是画出来的」。

第 3 站

地图引擎:渲染与交互

高德/百度 SDK · Leaflet/OpenLayers/MapLibre · WebGL · 图层叠加

地图的「画布」由引擎提供——手机用高德/百度 SDK,Web 用开源引擎(Leaflet/OpenLayers/MapLibre)。这一站,选引擎 + 加标记点 + 交互。

🧙
周师傅

引擎选型:

  • 手机端 SDK:高德/百度/腾讯地图 SDK——国内 App 标配(坐标系/POI/导航都内置,省事)。
  • Web 开源引擎Leaflet(轻量简单)、OpenLayers(功能全,GIS 正统)、MapLibre GL(矢量瓦片 + WebGL,现代最强)。
  • 渲染技术:WebGL(GPU 加速渲染,现代地图流畅的秘密——第二十一本渲染管线的老朋友)。

核心操作:加标记点(Marker)、加弹窗图层叠加(第 2 站)、监听交互(点击/拖拽/缩放)。

地图引擎实战
【Web:MapLibre GL(现代矢量地图)】
import maplibregl from "maplibre-gl";

const map = new maplibregl.Map({
    container: "map",
    style: "https://demotiles.maplibre.org/style.json",
    center: [116.4, 39.9],     // 北京(注意:经纬度顺序)
    zoom: 12,
});

// 加标记点 + 弹窗
new maplibregl.Marker()
    .setLngLat([116.4, 39.9])
    .setPopup(new maplibregl.Popup().setHTML("<b>轻记账总部</b>"))
    .addTo(map);

// 图层叠加(热力图/路径线/自定义图层)
map.addLayer({ id: "route", type: "line", source: routeSource, paint: {...} });

【手机端:高德 SDK(国内 App 标配)】
  Android/iOS 集成 SDK → 初始化地图 → 显示
  内置:坐标系处理、POI 搜索、路径规划、导航
  → 国内 App 做地图,首选高德/百度(合规又省事)

【引擎选型口诀】
  App 地图    → 高德/百度 SDK(国内合规首选)
  Web 简单   → Leaflet(轻量,几行代码)
  Web 强交互 → MapLibre GL(矢量 + WebGL)
  Web GIS 正统 → OpenLayers(功能全面)

【交互与性能】
  交互:点击/拖拽/缩放/旋转(引擎内置)
  性能:瓦片预加载 + 视口外不渲染 + 标记聚合(第7站)
  → 地图「流畅」的关键在瓦片缓存和渲染优化

引擎术语

  • 高德/百度 SDK:手机端地图引擎——国内 App 标配。
  • Leaflet / OpenLayers:Web 轻量 / GIS 正统。
  • MapLibre GL:矢量瓦片 + WebGL——现代最强。
  • WebGL:GPU 渲染——地图流畅的秘密。
  • Marker / Popup:标记点 / 弹窗——地图标注。
  • 图层叠加:自定义图层——热力/路径/标注。
  • 瓦片缓存:预加载 + 视口优化——性能关键。

本站收获:引擎 = 手机用高德/百度(省事合规)+ Web 用 MapLibre/Leaflet(开源灵活)+ WebGL 渲染。核心操作就三件:放底图、加标记、叠图层——地图的「画布」到手了。

第 4 站

POI 与地理编码:找地方

POI · 地理编码/逆编码 · 周边搜索 · 类别体系

地图的灵魂功能是「找地方」——搜「附近的餐厅」、点坐标看地址。POI 数据 + 地理编码,就是地图的「黄页」。

🧙
周师傅

找地方三件套:

  • POI(兴趣点):地图上的「点」——餐厅/商场/加油站,带名称、类别、坐标、地址。高德/百度有千万级 POI 库(商用付费)。
  • 地理编码:「地址 → 坐标」——输入「北京市朝阳区XX路1号」→ 输出经纬度;逆地理编码:「坐标 → 地址」——定位后显示「你当前在…」。
  • 周边搜索:「我附近的餐厅」——以坐标为中心按半径搜 POI——外卖/本地生活的核心功能。

POI 类别体系:餐饮/购物/交通/娱乐……分层分类——搜索和展示的组织方式。

POI 与地理编码实战
【POI 数据(一行)】
{
  "name": "老王牛肉面",
  "category": "餐饮/快餐",
  "address": "北京市海淀区中关村大街1号",
  "location": { "lng": 116.31, "lat": 39.98 }   // GCJ-02!
}

【三类搜索(高德 Web API 示例)】
① 关键词搜索:搜「星巴克」→ 返回相关 POI 列表
② 周边搜索:getLat = 116.4, getLng = 39.9, radius = 2000
   → 「我 2 公里内的咖啡店」
③ 地理编码:address="北京市朝阳区望京SOHO" → 经纬度
   逆编码:getRegeo(lng, lat) → "北京市朝阳区望京SOHO T1"

【POI 数据建设(自有数据)】
  公司自己的点(门店/配送点/充电桩)→ 自建 POI 库
  字段:名称/类别/坐标/营业时间/联系方式
  → 叠加到地图图层(第3站)——「地图上的自家店铺」

【搜索质量】
  相关性排序(距离 + 热度 + 评分)
  拼音/模糊匹配(用户输入不准确要容忍)
  结果去重 + 展示优化(列表 + 地图同步)

【坐标系提醒】
  POI 存储和展示统一 GCJ-02(第1站的老规矩)

POI 术语

  • POI(兴趣点):地图上的点——名称/类别/坐标/地址。
  • 地理编码:地址 → 坐标。
  • 逆地理编码:坐标 → 地址——「我在哪」的翻译。
  • 周边搜索:以点为中心按半径搜——本地生活核心。
  • 类别体系:分层分类——POI 的组织方式。
  • 自有 POI:自建数据——地图上的自家店铺。
  • 搜索质量:相关排序 + 模糊容忍 + 去重。

本站收获:找地方 = POI 数据(商用/自有)+ 地理编码(地址⇄坐标)+ 周边搜索(附近的人)。地图的「黄页」——搜索是入口,坐标是真相(统一 GCJ-02)。

第 5 站

路径规划:怎么去

驾车/步行/公交 · 路网 · 实时路况 · ETA · 导航

「从 A 到 B 怎么走」——路径规划是地图最「硬核」的功能:路网模型 + 寻路算法 + 实时路况。这一站,导航的数学。

🧙
周师傅

路径规划三件事:

  • 路网模型:道路 = 图(节点 + 边,边带长度/速度/方向)——第 3 站向量、第二十一本 A* 的老朋友(路网版的 A*/Dijkstra)。
  • 规划模式:驾车(高速优先/躲避拥堵)、步行(人行道/天桥)、骑行、公交(换乘/步行接驳)——不同模式不同路网成本。
  • 实时路况 + ETA:交通大数据(浮动车轨迹)→ 路况图层(红黄绿)→ 预测到达时间(ETA)。

导航引导:路线确定后逐段引导——「前方 500 米右转」+ 偏航检测重算(定位+路径的结合)。

路径规划原理与实战
【路网 = 图(数据结构)】
  交叉路口 = 节点,道路段 = 边
  边属性:长度 / 限速 / 方向 / 拥堵系数
  → 最短路径 = 图上的最短路问题

【寻路算法(第二十一本 A* 老朋友)】
  Dijkstra:朴素最短路(慢)
  A*:启发式(已走 + 预估距离)——路网寻路标准
  大规模:分层路网(高速层 + 城市层分开搜——快 100 倍)

【实战:高德路径规划 API】
  GET /v3/direction/driving
  origin=116.4,39.9&destination=116.5,40.0
  strategy=10(避开拥堵)
  → 返回:路径折线 + 距离 + 预计时间 + 分步指引

【导航引导流程】
  定位(第6站)→ 匹配到路网(地图匹配:把漂移点吸附到路上)
  → 判断是否偏航 → 偏航重算新路线
  → 语音/视觉引导("前方 300 米右转")

【配送调度的路径(第7站延伸)】
  多目的地优化(TSP 旅行商问题——配送路径优化)
  骑手接单派单:位置 + 路径 + ETA 的组合调度
  → 物流/外卖的「大脑」就是路径算法

路径术语

  • 路网模型:道路 = 图(节点+边)——寻路的地基。
  • A* / Dijkstra:寻路算法——启发式 vs 朴素。
  • 分层路网:高速+城市分层搜——大规模加速。
  • 实时路况:浮动车数据 → 红黄绿图层。
  • ETA:预测到达时间——路况+历史的推算。
  • 地图匹配:漂移点吸附路网——定位的校正。
  • TSP 配送优化:多目的地路径——物流大脑。

本站收获:路径 = 路网建图 + A* 寻路 + 实时路况 + 地图匹配。从「最短路径」到「预测到达」,从导航到配送调度——路径算法是地图的「大脑」,也是物流/外卖的命脉。

第 6 站

定位与轨迹:我在哪

GPS/Wi-Fi/基站 · 融合定位 · 轨迹 · 地理围栏

「我在哪」——定位是 LBS 的心脏。手机怎么知道你在哪?GPS 在室内为什么不灵?外卖骑手的实时位置怎么来的?这一站,定位的原理与工程。

🧙
周师傅

定位三兄弟:

  • GPS(卫星定位):室外精准(5~10 米)——卫星几何定位(第 1 站 WGS84 的来源)。
  • Wi-Fi / 基站定位:室内/城市峡谷补充——按已知热点/基站位置估算(百米级)。
  • 融合定位:GPS + Wi-Fi + 基站 + 传感器(加速度/陀螺仪)加权融合——手机系统的标准做法(又快又准)。

工程进阶:轨迹采集(连续定位串成路径——配送到家轨迹)、地理围栏(Geofence)(进/出某个区域触发事件——「到家提醒」)、位置上报(App 周期上报位置——骑手实时位置)。

定位与轨迹实战
【定位原理对比】
  GPS     :卫星几何定位——室外 5-10 米(开天窗才行)
  Wi-Fi   :按已知热点位置估算——室内能用(百米级)
  基站    :按信号塔估算——最粗(几百米)
  融合    :三者 + 传感器加权——手机默认方案

【Android 定位(第十七本老朋友)】
  FusedLocationProviderClient(Google 融合定位)
  权限:ACCESS_FINE_LOCATION(精度)+ COARSE(粗略)
  → 拿到 WGS84 → 转 GCJ-02(第1站!)

【iOS 定位(第十九本老朋友)】
  CoreLocation:CLLocationManager
  权限:WhenInUse(使用时)/ Always(后台——要特殊理由)
  → 系统自动融合定位

【地理围栏(Geofence)】
  画个圈(中心+半径)→ 用户进入/离开 → 触发事件
  应用:「到达公司提醒打卡」「离开配送范围告警」

【轨迹工程】
  采集:定期定位(3~5 秒)→ 压缩(抽稀:直线上的点删掉)
  存储:轨迹表(时间+坐标序列)→ 回放(订单配送轨迹)
  匹配:轨迹吸附路网(第5站地图匹配)——显示在路上

【定位坑】
  室内/地下:GPS 失效 → 靠 Wi-Fi 基站(精度差)
  省电:频繁定位耗电大 → 按场景调频率
  隐私:位置是敏感数据(第9站合规)

定位术语

  • GPS / Wi-Fi / 基站:卫星 / 热点 / 信号塔——精度递减。
  • 融合定位:多源 + 传感器加权——手机默认。
  • 轨迹采集:连续定位串路径——抽稀压缩。
  • 地理围栏(Geofence):进出区域触发事件。
  • 位置上报:周期上报——骑手实时位置。
  • 地图匹配:轨迹吸附路网——显示在路上。
  • 省电与隐私:定位频率调优 + 敏感数据合规。

本站收获:定位 = GPS(室外)+ Wi-Fi/基站(室内)+ 融合加权;工程 = 轨迹采集 + 地理围栏 + 上报。拿到坐标记得转 GCJ-02——「我在哪」是 LBS 一切的起点。

第 7 站

空间分析:地图智慧

PostGIS · Geohash · R 树 · 热力图 · 时空分析

地图不只是「看」的,还能「算」——距离、面积、聚合、热力图、配送优化。空间分析是地图应用从「展示」走向「智能」的关键。

🧙
周师傅

空间分析四件套:

  • 空间数据库(PostGIS):数据库支持空间类型和计算——「查 3 公里内的订单」一条 SQL(第八本数据库 + 空间扩展)。
  • 空间索引Geohash(经纬度编码成字符串——前缀相同的格子相邻,附近查询/聚合利器)、R 树(空间对象索引——PostGIS 内置)。
  • 热力图 / 聚合:海量点(订单/人流)聚合显示——「消费热力图」(第二十一本对象池 + 第十五本瓦片的思想)。
  • 时空分析:位置 + 时间一起分析——「哪个时段哪个区域订单多」——配送调度的优化依据。
空间分析实战
【PostGIS:SQL 里的空间计算】
-- 查 3 公里内的所有门店
SELECT name, ST_Distance(location, ST_MakePoint(116.4, 39.9))
FROM stores
WHERE ST_DWithin(location, ST_MakePoint(116.4, 39.9), 3000);

-- 按区域聚合订单数
SELECT region, COUNT(*)
FROM orders JOIN regions ON ST_Contains(regions.geom, orders.location)
GROUP BY region;

【Geohash(附近查询的利器)】
  经纬度 → 字符串(如 wx4g0ec1)
  前缀相同 = 空间相邻(就近查询/聚合的哈希)
  → 「附近的骑手」= 按 geohash 前缀查,秒回

【R 树(空间索引)】
  空间对象的「包围盒树」——数据库/引擎内置
  → 空间查询从全表扫变成索引查(快 100 倍)

【热力图实现】
  海量点 → 网格聚合(每个格子计数)→ 颜色映射
  移动端用聚合 Marker(第3站标记聚合——点多了不卡)

【配送调度(时空分析的落地)】
  骑手位置(定位)+ 订单位置(POI)+ 路径(第5站)
  + 时段预测(时空分析)→ 智能派单 / 运力调度
  → 这就是「物流大脑」的组成
应用场景:轻记账的「消费热力图」

地图账单上线:用户月消费记录 → 按 geohash 聚合 → 地图叠加热力图层——「这个月钱都花在 CBD 了!」老板要求加「商圈洞察」:PostGIS 按商圈聚合消费额,输出商圈报告。空间分析让地图从「展示」变成「商业洞察」。

空间分析术语

  • PostGIS:空间数据库——SQL 里算距离/包含。
  • Geohash:经纬度编码字符串——附近查询利器。
  • R 树:空间索引——查询快 100 倍。
  • 热力图 / 聚合:海量点聚合显示。
  • 时空分析:位置+时间——配送调度依据。
  • ST_DWithin:距离查询函数——PostGIS 常用。
  • 物流大脑:定位+POI+路径+预测=智能派单。

本站收获:空间分析 = PostGIS 算距离 + Geohash/R 树做索引 + 热力图可视化 + 时空分析做调度。地图从「看」到「算」——这是地图应用值钱的地方。

第 8 站

LBS 架构:业务落地

定位→搜索→规划→导航 · 高并发位置服务 · 缓存

地图功能怎么集成进你的 App?LBS 业务架构长什么样?这一站,把前面七站串成一个「能跑的地图产品」。

🧙
周师傅

LBS 业务四层架构:

  • 客户端层:App 集成地图 SDK(第 3 站)——地图显示 + 定位 + 交互。
  • 业务服务层:你们的业务逻辑——地图账单(位置+金额)、配送调度(派单)。
  • 位置服务层:第三方地图服务(高德/百度 API)——POI 搜索、路径规划、逆编码(商用付费,别自己造)。
  • 数据层:业务位置数据(订单坐标/轨迹/POI 缓存)——PostGIS 存储 + Redis 缓存。

高并发要点:位置查询缓存(附近搜索的 qps 高)、Geohash 索引(第 7 站)、异步上报(轨迹批量写)。

LBS 业务架构图
┌─ 客户端(App/Web)────────────────┐
│  地图 SDK:显示 + 定位 + 交互        │
│  业务 UI:账单地图 / 配送看板        │
└──────────────┬─────────────────────┘
               ↓ HTTP
┌─ 业务服务(你们的后端)─────────────┐
│  地图账单服务 / 派单调度服务         │
│  位置管理(上报/围栏/轨迹)          │
└──────┬──────────────────┬─────────┘
       ↓ 调用              ↓ 读写
┌─ 位置服务(第三方 API)─┐ ┌─ 数据层 ──────┐
│ 高德/百度:POI/路径/编码 │ │ PostGIS:空间库│
│ (商用付费,别自建)    │ │ Redis:缓存    │
└──────────────────────┘ └──────────────┘

【集成三步(快速起步)】
  ① 申请高德/百度开放平台 key(免费额度起步)
  ② App 集成 SDK(地图显示 + 定位一行搞定)
  ③ 后端调 Web API(POI/路径/逆编码)
  → 两周能出一个「地图版轻记账」

【高并发位置服务】
  附近搜索:Geohash 索引 + Redis 缓存(热点区域)
  轨迹上报:批量异步写(别每条都同步)
  围栏触发:异步任务批量扫描(每 30 秒一轮)

【成本控制】
  第三方 API 按量付费 → 缓存 + 批量 + 客户端预取
  → 地图服务是「流量成本」——设计要省

【缓存策略】
  热点 POI 缓存(商圈常搜)
  路径结果缓存(相同起终点 5 分钟有效)
  瓦片缓存(客户端自动,第3站)

LBS 术语

  • LBS:基于位置的服务——地图应用的总称。
  • 四层架构:客户端 + 业务 + 位置服务 + 数据。
  • 第三方 API:高德/百度——商用付费别自建。
  • PostGIS + Redis:空间存储 + 位置缓存。
  • 位置服务:POI/路径/编码的组合服务。
  • 批量异步:轨迹/上报的高并发姿势。
  • 成本控制:缓存 + 预取——省 API 费。

本站收获:LBS 架构 = 客户端 SDK + 业务服务 + 第三方位置 API + PostGIS 数据层。别自己造地图服务(合规+成本),集成高德/百度两周起步——架构设计的重点是缓存和批量。

第 9 站

合规安全:地图的规矩

测绘资质 · 位置权限 · 隐私合规 · 数据安全

地图是「强监管」行业——国内做地图服务要资质,App 用位置要权限,收集位置要合规。这一站,地图开发的「红线」。

🧙
周师傅

合规四道线:

  • 地图服务资质:国内提供「互联网地图服务」需要测绘资质(甲级:导航电子地图制作;乙级:互联网地图服务)——没有资质不能自建地图服务/自绘地图!所以大家都用高德/百度(他们持证)。
  • 坐标系合规:国内公开发布的地图必须用 GCJ-02(加密坐标)——不能用原始 WGS84 直接上图(第 1 站的合规含义)。
  • 位置权限:App 定位要申请权限 + 说明用途(第十七/十九本老朋友)——iOS/Android 都要。
  • 位置数据合规个保法(第八本老朋友)——位置是敏感个人信息:告知-同意、最小收集、可删除、不出境。
地图合规要点
【测绘资质(国内做地图的前提)】
  甲级测绘:可制作导航电子地图(高德/四维图新级)
  乙级测绘:可提供互联网地图服务(自建地图服务需要)
  → 没有资质:别自绘地图!用持证厂商的 SDK/API

【坐标系合规】
  公开发布地图 → 必须 GCJ-02(加密)——法律规定
  用原始 WGS84 上图 → 违规(第1站顺带合规)

【位置权限(App)】
  iOS:WhenInUse / Always(后台需特殊理由)
  Android:ACCESS_FINE/COARSE_LOCATION
  → 用途说明写清楚("用于账单地点记录")——否则拒审

【位置数据合规(个保法)】
  告知-同意:收集前弹窗说明
  最小收集:只收业务需要的(别偷偷常驻定位!)
  可删除:用户可删除位置记录("清空足迹")
  不出境:位置数据不能随便传境外服务器

【常见违规(血泪)】
  ✗ 偷偷后台定位收集用户轨迹(顶格处罚)
  ✗ 位置数据不加密传输
  ✗ 没有"删除足迹"入口
  ✗ 用原始坐标直接展示(违规)
  → 地图 App 的合规 = 生死线(第八本个保法 + 第七本安全的合体)
应用场景:地图账单的合规设计

轻记账地图账单:① 不自己画地图——用高德 SDK(他们有资质)→ ② 坐标统一转 GCJ-02 展示 → ③ 定位权限用途写「记录账单地点」→ ④ 位置数据加密存储 + 「清空位置记录」按钮 → ⑤ 位置不出境。审核一次通过——「地图功能越强,合规越要细」。

合规术语

  • 测绘资质:甲级/乙级——自建地图服务的前提。
  • GCJ-02 强制:公开发布必须加密坐标——法律。
  • 位置权限:iOS/Android 动态申请 + 用途说明。
  • 位置数据合规:个保法——告知/最小/可删/不出境。
  • 轨迹即敏感数据:偷偷采集 = 顶格处罚。
  • 合规生死线:地图功能越强,合规越要细。
  • 持证厂商:高德/百度——别自己无证干。

本站收获:合规 = 资质(别自绘地图)+ GCJ-02(坐标合法)+ 权限(用途说明)+ 个保法(告知/最小/可删/不出境)。地图是强监管行业——「功能越强,越要守规矩」。

第 10 站

产品职业:地图人的路

导航/外卖/出行/物流 · GIS 工程师 · 学习路线

地图不只是「导航 App」——外卖、出行、物流、游戏、城市大脑都是地图的天下。这一站,看看地图产品的世界和地图工程师的路。

🧙
周师傅

地图产品形态:

  • 导航地图:高德/百度——地图的「正统」(路况/导航/街景)。
  • 生活服务:美团/饿了么——POI + 配送(附近搜索 + 路径是命脉)。
  • 出行:滴滴/高德打车——定位 + 派单 + 路线(LBS 重场景)。
  • 物流:顺丰/菜鸟——轨迹 + 调度 + 路径优化。
  • 城市大脑 / 游戏:智慧城市(人流分析)、游戏大地图(第二十一本)。

岗位方向:地图引擎工程师(渲染/SDK——最硬核)、GIS 工程师(空间数据处理/分析)、LBS 后端(位置服务/调度——业务后端的近亲!)、数据工程师(POI/轨迹数据)。

地图职业与学习路线
【岗位地图(你适合哪个)】
  地图引擎工程师:渲染/瓦片/性能——C++/图形学(硬核)
  GIS 工程师     :空间数据/PostGIS/分析——GIS 科班
  LBS 后端       :位置服务/派单/调度——业务后端近亲 ✅
  地图数据       :POI/轨迹/路况数据处理——数据工程

【学习路线(3 个月)】
  第1月:坐标系 + 地图 SDK 集成(高德)→ 放地图+标记
  第2月:POI 搜索 + 路径规划 + 定位(App 地图功能)
  第3月:PostGIS + Geohash + 一个 LBS 项目
  → 项目推荐:「地图账单」/「附近店铺」/「配送调度 demo」

【练手项目梯度】
  Lv1:地图显示 + 标记点(SDK 集成)
  Lv2:地图账单(定位 + 逆编码 + 标记)
  Lv3:附近搜索(PostGIS + Geohash)
  Lv4:配送调度 demo(定位 + 路径 + 派单)

【厂商与生态】
  高德/百度/腾讯地图(国内三巨头,开放平台有免费额度)
  四维图新(图商——卖地图数据的)
  Mapbox/MapLibre(海外/矢量引擎)
  OSM(开源数据——学习与研究)

【给新人的话】
  LBS 后端是「业务后端 → 地图」的最近通道
  地图不是「调 SDK」——坐标系/空间数据才是护城河
  位置数据是金矿也是雷区——合规第一课
  先集成、再自研、最后才谈算法——别一上来啃引擎

职业术语

  • 地图产品五形态:导航/生活/出行/物流/城市大脑。
  • 引擎/GIS/LBS 后端/数据:四大岗位方向。
  • LBS 后端:业务后端的近亲——最近通道。
  • 三巨头 + 图商:高德/百度/腾讯 + 四维图新。
  • MapLibre/OSM:开源引擎/数据。
  • 护城河:坐标系 + 空间数据——不是调 SDK。
  • 学习梯度:集成→自研→算法——循序渐进。

本站收获:地图世界 = 导航/生活/出行/物流/城市大脑;岗位四线(引擎/GIS/LBS 后端/数据)。LBS 后端是业务后端转行的最近通道——先集成、再自研、最后才谈算法。

附录

知识点速查 + 面试高频题

面试/开发前最后一页

地图开发知识全景表

领域核心知识点一句话人话
坐标系WGS84/GCJ-02/BD-09、转换、投影、GeoJSONGPS 坐标要转火星
地图数据瓦片金字塔、矢量/栅格、图层、OGC地图是拼出来的
地图引擎高德/百度 SDK、Leaflet/MapLibre、WebGL画布与交互
POI 编码POI、地理编码/逆编码、周边搜索地图的黄页
路径规划路网、A*、实时路况、ETA、地图匹配怎么去 + 多久到
定位轨迹GPS/Wi-Fi/基站、融合、轨迹、围栏我在哪 + 去过哪
空间分析PostGIS、Geohash、R 树、热力图地图的智慧
LBS 架构四层架构、第三方 API、缓存批量地图业务落地
合规安全测绘资质、GCJ-02、位置权限、个保法地图的规矩
产品职业导航/外卖/出行/物流、GIS/LBS 工程师地图人的路

面试高频题速记

  • GCJ-02 是什么?→ 火星坐标——国内地图加密坐标,GPS 的 WGS84 必须转换。
  • 为什么 GPS 坐标直接上图会偏?→ 坐标系不同——WGS84 vs GCJ-02 偏移 100-600 米。
  • 地图缩放为什么快?→ 瓦片金字塔——按级别预生成、按需加载。
  • 矢量瓦片 vs 栅格瓦片?→ 几何数据客户端画 vs 预渲染图片——矢量更现代。
  • 路径规划用什么算法?→ 路网建图 + A*(启发式)+ 分层加速。
  • Geohash 有什么用?→ 经纬度编码字符串——附近查询/聚合(前缀相邻)。
  • PostGIS 能干嘛?→ 数据库空间计算——距离/包含/聚合一条 SQL。
  • 地理围栏是什么?→ 画圈触发进出事件——到家提醒/范围告警。
  • 国内做地图要什么资质?→ 测绘资质(甲/乙级)——没资质用持证厂商 SDK。
  • 位置数据合规要点?→ 告知-同意、最小收集、可删除、不出境(个保法)。
坐标 火星转换
数据 瓦片/图层
引擎 SDK/渲染
搜索 POI/编码
路径 规划/ETA
定位 融合/轨迹
分析 PostGIS/热力
合规 资质权限 🚀
地图软件 = 坐标系(数学)+ 瓦片数据(内容)+ 引擎(渲染)+ 位置服务(灵魂)+ 资质合规(门票)。
一个坐标,藏着 GPS 与火星坐标的秘密;
一张地图,是几千亿块瓦片的拼图;
一条路线,是 A* 在路网上的舞蹈——
地图开发教的不是「调 SDK」,
是「在坐标与规矩之间,画出真实的世界」。
🗺️ 📐 🧱 ⚙️ 🔍 🛣️ 📍 🧠 🏗️ ⚖️ 🚀 🌳
✌ 语言