地图软件的修炼之道
轻记账要加「地图账单」功能——每笔账记在哪个地点、月底看消费热力图;公司还想做配送调度系统。老板说:地图这块,我们自己做!周师傅说:地图开发 = GIS 基础(坐标)+ 地图引擎(渲染)+ 位置服务(POI/路径/定位)+ 合规资质。这一本,从「一个坐标」讲到「一个地图产品」。
LBS 世界的入场
地图开发全景:坐标 → 数据 → 引擎 → 服务 → 合规师傅!老板要让轻记账加「地图账单」——每笔账记地点、月底出消费地图;还说要搞配送调度系统。地图不就是「调个 SDK 放个地图」吗?还能有啥?
「调 SDK 放地图」只是最后一公里。地图软件的知识栈很深:
- GIS 基础:坐标系(GPS 坐标 ≠ 国内地图坐标!)、投影——地基中的地基。
- 地图数据:瓦片、路网、POI——地图不是画出来的,是「拼」出来的。
- 位置服务:搜索、路径规划、定位、地理围栏——地图的「灵魂」。
- 合规:地图资质、位置权限——国内地图的红线特别多。
来,十站路线——
记住一句话:地图软件 = 坐标系(数学)+ 瓦片数据(内容)+ 引擎(渲染)+ 位置服务(灵魂)+ 资质合规(门票)。走,第一站,从「一个坐标」开始——它没你想的那么简单。
坐标系:数学地基
经纬度 · 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 是地图开发的第一个基本功。
地图数据:瓦片金字塔
矢量/栅格 · 瓦片 · 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 瓦片:每块小图尺寸——加载性能关键。
本站收获:地图数据 = 瓦片金字塔(分级切块按需加载)+ 图层叠加(洋葱结构)+ 矢量优先(现代)。数据源选商用合规、开源省钱、自有定制——「地图是拼出来的,不是画出来的」。
地图引擎:渲染与交互
高德/百度 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 渲染。核心操作就三件:放底图、加标记、叠图层——地图的「画布」到手了。
POI 与地理编码:找地方
POI · 地理编码/逆编码 · 周边搜索 · 类别体系地图的灵魂功能是「找地方」——搜「附近的餐厅」、点坐标看地址。POI 数据 + 地理编码,就是地图的「黄页」。
找地方三件套:
- POI(兴趣点):地图上的「点」——餐厅/商场/加油站,带名称、类别、坐标、地址。高德/百度有千万级 POI 库(商用付费)。
- 地理编码:「地址 → 坐标」——输入「北京市朝阳区XX路1号」→ 输出经纬度;逆地理编码:「坐标 → 地址」——定位后显示「你当前在…」。
- 周边搜索:「我附近的餐厅」——以坐标为中心按半径搜 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)。
路径规划:怎么去
驾车/步行/公交 · 路网 · 实时路况 · 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* 寻路 + 实时路况 + 地图匹配。从「最短路径」到「预测到达」,从导航到配送调度——路径算法是地图的「大脑」,也是物流/外卖的命脉。
定位与轨迹:我在哪
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 一切的起点。
空间分析:地图智慧
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 树做索引 + 热力图可视化 + 时空分析做调度。地图从「看」到「算」——这是地图应用值钱的地方。
LBS 架构:业务落地
定位→搜索→规划→导航 · 高并发位置服务 · 缓存地图功能怎么集成进你的 App?LBS 业务架构长什么样?这一站,把前面七站串成一个「能跑的地图产品」。
LBS 业务四层架构:
- 客户端层:App 集成地图 SDK(第 3 站)——地图显示 + 定位 + 交互。
- 业务服务层:你们的业务逻辑——地图账单(位置+金额)、配送调度(派单)。
- 位置服务层:第三方地图服务(高德/百度 API)——POI 搜索、路径规划、逆编码(商用付费,别自己造)。
- 数据层:业务位置数据(订单坐标/轨迹/POI 缓存)——PostGIS 存储 + Redis 缓存。
高并发要点:位置查询缓存(附近搜索的 qps 高)、Geohash 索引(第 7 站)、异步上报(轨迹批量写)。
┌─ 客户端(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 数据层。别自己造地图服务(合规+成本),集成高德/百度两周起步——架构设计的重点是缓存和批量。
合规安全:地图的规矩
测绘资质 · 位置权限 · 隐私合规 · 数据安全地图是「强监管」行业——国内做地图服务要资质,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(坐标合法)+ 权限(用途说明)+ 个保法(告知/最小/可删/不出境)。地图是强监管行业——「功能越强,越要守规矩」。
产品职业:地图人的路
导航/外卖/出行/物流 · 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、转换、投影、GeoJSON | GPS 坐标要转火星 |
| 地图数据 | 瓦片金字塔、矢量/栅格、图层、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。
- 位置数据合规要点?→ 告知-同意、最小收集、可删除、不出境(个保法)。
一张地图,是几千亿块瓦片的拼图;
一条路线,是 A* 在路网上的舞蹈——
地图开发教的不是「调 SDK」,
是「在坐标与规矩之间,画出真实的世界」。