涉及常见技术栈:
- Mapbox GL JS
- OpenLayers
- deck.gl
- Leaflet
一、GIS 基础原理
1 什么是 GIS?核心组成是什么?
标准回答:
GIS(Geographic Information System)是用于 采集、存储、分析和可视化空间数据的系统。
核心三部分:
空间数据
空间分析
空间可视化数据结构:
Geometry + Properties例如:
json
{
"type":"Point",
"coordinates":[116.39,39.90],
"properties":{
"city":"北京"
}
}2 矢量数据和栅格数据区别?
矢量数据
点
线
面例如:
城市
道路
行政区常见格式:
GeoJSON
Shapefile
TopoJSON栅格数据
本质:
图片例如:
卫星图
热力图
DEM高程3 GeoJSON 结构是什么?
GeoJSON 是最常见 GIS 数据格式。
类型:
Point
LineString
Polygon
MultiPolygon
Feature
FeatureCollection示例:
json
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [116.39,39.90]
},
"properties": {
"name": "Beijing"
}
}二、坐标系统(GIS 核心)
4 WGS84、GCJ02、BD09 区别?
三个坐标系:
| 坐标系 | 使用 |
|---|---|
| WGS84 | GPS |
| GCJ02 | 高德 腾讯 |
| BD09 | 百度 |
中国地图需要:
坐标偏移例如:
WGS84 → GCJ025 为什么需要坐标投影?
原因:
地球是球体
屏幕是平面需要:
Projection常见投影:
Web Mercator坐标:
EPSG:38576 WebMercator 为什么适合互联网地图?
原因:
1️⃣ 计算简单 2️⃣ 瓦片地图适配好 3️⃣ 经纬度转换方便
缺点:
高纬度地区严重变形三、地图渲染原理(高频)
7 瓦片地图(Tile)原理是什么?
地图不是一整张图,而是:
很多小图片常见大小:
256x256URL结构:
/z/x/y.png例如:
/10/512/345.png含义:
z = zoom
x = tileX
y = tileY8 瓦片为什么能无限缩放?
地图使用:
金字塔模型Zoom 层级:
0 → 1 张
1 → 4 张
2 → 16 张
3 → 64 张公式:
tiles = 2^zoom四、前端地图渲染
9 Canvas / WebGL 地图区别?
Canvas:
CPU 渲染优点:
简单缺点:
性能差WebGL:
GPU 渲染优点:
百万级点位例如:
- Mapbox GL JS
- deck.gl
10 Mapbox GL 为什么性能好?
核心:
Vector Tile + WebGL流程:
VectorTile
→ GPU
→ shader
→ 渲染不是 DOM。
五、空间分析(GIS能力)
11 Point In Polygon 怎么实现?
问题:
点是否在多边形内算法:
射线法
Ray Casting步骤:
点向右画一条射线
统计交点数量规则:
奇数 = 内部
偶数 = 外部12 如何计算两个点距离?
常用:
Haversine因为:
地球是球体不是简单:
√((x1-x2)^2+(y1-y2)^2)13 如何查找最近点?
常用空间索引:
R-Tree
KD-Tree避免:
O(n)优化到:
O(log n)六、地图性能优化(高级必问)
14 10 万点位如何渲染?
方案:
1 WebGL
例如:
- deck.gl
支持:
百万点2 聚合
Cluster例如:
1000点 → 1个圆3 VectorTile
后端切片15 地图卡顿怎么优化?
常见策略:
requestAnimationFrame批量更新:
RAF 合并避免:
频繁 setState七、GIS 系统架构
16 GIS 系统典型架构?
标准:
数据层
服务层
前端层数据层:
PostGIS服务层:
GeoServer
MapServer前端:
- Mapbox GL JS
- OpenLayers
17 VectorTile 为什么比 GeoJSON 快?
GeoJSON:
一次加载全部VectorTile:
按瓦片加载优点:
按需加载八、实时地图(AI / IoT)
18 实时轨迹如何实现?
例如:
车辆轨迹技术:
WebSocket
SSE优化:
轨迹抽稀算法:
Douglas-Peucker19 实时 2000 车辆如何优化?
策略:
WebGL空间索引增量更新不要:
全量重绘九、数字孪生 / 3D 地图
20 3D 地图如何实现?
常见方案:
- CesiumJS
- Three.js
- deck.gl
核心:
3D Tiles例如:
城市模型
BIM十、GIS 面试加分回答
在大型地图系统中,我通常会使用 VectorTile + WebGL 渲染来处理大规模数据,并通过空间索引和点位聚合优化性能。如果是实时数据场景,会使用 WebSocket + 增量更新,同时结合 requestAnimationFrame 控制渲染节奏。