Glittering's blog Glittering's blog
Home
  • 学习手册

    • 《TypeScript教程》
    • 《Git》
    • 《Vite》
    • 《Vue3》
    • 《React18》
    • 《CSS》
    • 《Tailwind CSS》
  • 技术文档
  • 算法
  • 工作总结
  • 实用技巧
  • collect
About
  • Classification
  • Label
GitHub (opens new window)

Glitz Ma

前端开发工程师
Home
  • 学习手册

    • 《TypeScript教程》
    • 《Git》
    • 《Vite》
    • 《Vue3》
    • 《React18》
    • 《CSS》
    • 《Tailwind CSS》
  • 技术文档
  • 算法
  • 工作总结
  • 实用技巧
  • collect
About
  • Classification
  • Label
GitHub (opens new window)
  • 技术文档

  • 算法

  • 工作总结

    • 时区校正
    • 上传下载文件方式总结
    • web异常监控和分析
    • 前端优化指南
    • http缓存机制
    • 静态资源灰度发布
    • 浏览器原理及渲染机制
    • Chrome DevTools 渲染分析实战
    • Layout Thrashing(布局抖动)
    • Composite Layer(合成层)
    • 全局设置滚动条样式好吗?
    • 虚拟列表如何避免Layout和Paint
    • 前端安全知识
    • 安全(同源策略 / CSP / CORS)
    • 浏览器安全模型
    • 从chrome v8 讲安全
    • WebAssembly(Wasm)
    • XSS → JIT → 沙箱逃逸
    • 微前端总结
    • websocket聊天
    • Uni-app基础知识
    • react16高级特性
    • react16基础知识总结
    • vue2常见原理总结
    • vue2基础知识总结
    • webpack优化实践
    • webpack基础应用知识总结
    • Agent Skills是什么?跟MCP Workflow Command Prompt的关系。
    • 从cnn到transformer全解大模型
    • 什么是 Encoder 和 Decoder 结构
    • GPT 为什么能“看懂”问题
    • GPT 是怎么学会数学的
    • GIS 基础三件套
    • GIS必会知识点
      • 1 什么是 GIS?核心组成是什么?
      • 2 矢量数据和栅格数据区别?
      • 3 GeoJSON 结构是什么?
      • 4 WGS84、GCJ02、BD09 区别?
      • 5 为什么需要坐标投影?
      • 6 WebMercator 为什么适合互联网地图?
      • 7 瓦片地图(Tile)原理是什么?
      • 8 瓦片为什么能无限缩放?
      • 9 Canvas / WebGL 地图区别?
      • 10 Mapbox GL 为什么性能好?
      • 11 Point In Polygon 怎么实现?
      • 12 如何计算两个点距离?
      • 13 如何查找最近点?
      • 14 10 万点位如何渲染?
        • 1 WebGL
        • 2 聚合
        • 3 VectorTile
      • 15 地图卡顿怎么优化?
      • 16 GIS 系统典型架构?
      • 17 VectorTile 为什么比 GeoJSON 快?
      • 18 实时轨迹如何实现?
      • 19 实时 2000 车辆如何优化?
      • 20 3D 地图如何实现?
    • 100 万点地图怎么渲染?
    • GIS空间索引的实现
    • Cesium 从入门到精通:实战指南
    • OpenLayers 从零到精通:2025-2026实战指南
    • Mapbox GL JS 从零到精通:2025-2026实战指南
    • Cesium、OpenLayers 和 Mapbox GL JS 的关系、区别
    • 容器领域必学的黄金组合
    • 小程序笔记
    • 小程序工程模板设计
    • 地图标绘--射线法来计算点在多边形内
  • 实用技巧

  • 收藏夹

  • 技术
  • 工作总结
mamingjuan
2026-03-06
目录

GIS必会知识点

涉及常见技术栈:

  • Mapbox GL JS
  • OpenLayers
  • deck.gl
  • Leaflet

# 一、GIS 基础原理

# 1 什么是 GIS?核心组成是什么?

标准回答:

GIS(Geographic Information System)是用于 采集、存储、分析和可视化空间数据的系统。

核心三部分:

空间数据
空间分析
空间可视化
1
2
3

数据结构:

Geometry + Properties
1

例如:

{
 "type":"Point",
 "coordinates":[116.39,39.90],
 "properties":{
   "city":"北京"
 }
}
1
2
3
4
5
6
7

# 2 矢量数据和栅格数据区别?

矢量数据

点
线
面
1
2
3

例如:

城市
道路
行政区
1
2
3

常见格式:

GeoJSON
Shapefile
TopoJSON
1
2
3

栅格数据

本质:

图片
1

例如:

卫星图
热力图
DEM高程
1
2
3

# 3 GeoJSON 结构是什么?

GeoJSON 是最常见 GIS 数据格式。

类型:

Point
LineString
Polygon
MultiPolygon
Feature
FeatureCollection
1
2
3
4
5
6

示例:

{
 "type": "Feature",
 "geometry": {
   "type": "Point",
   "coordinates": [116.39,39.90]
 },
 "properties": {
   "name": "Beijing"
 }
}
1
2
3
4
5
6
7
8
9
10

# 二、坐标系统(GIS 核心)

# 4 WGS84、GCJ02、BD09 区别?

三个坐标系:

坐标系 使用
WGS84 GPS
GCJ02 高德 腾讯
BD09 百度

中国地图需要:

坐标偏移
1

例如:

WGS84 → GCJ02
1

# 5 为什么需要坐标投影?

原因:

地球是球体
屏幕是平面
1
2

需要:

Projection
1

常见投影:

Web Mercator
1

坐标:

EPSG:3857
1

# 6 WebMercator 为什么适合互联网地图?

原因:

1️⃣ 计算简单 2️⃣ 瓦片地图适配好 3️⃣ 经纬度转换方便

缺点:

高纬度地区严重变形
1

# 三、地图渲染原理(高频)

# 7 瓦片地图(Tile)原理是什么?

地图不是一整张图,而是:

很多小图片
1

常见大小:

256x256
1

URL结构:

/z/x/y.png
1

例如:

/10/512/345.png
1

含义:

z = zoom
x = tileX
y = tileY
1
2
3

# 8 瓦片为什么能无限缩放?

地图使用:

金字塔模型
1

Zoom 层级:

0 → 1 张
1 → 4 张
2 → 16 张
3 → 64 张
1
2
3
4

公式:

tiles = 2^zoom
1

# 四、前端地图渲染

# 9 Canvas / WebGL 地图区别?

Canvas:

CPU 渲染
1

优点:

简单
1

缺点:

性能差
1

WebGL:

GPU 渲染
1

优点:

百万级点位
1

例如:

  • Mapbox GL JS
  • deck.gl

# 10 Mapbox GL 为什么性能好?

核心:

Vector Tile + WebGL
1

流程:

VectorTile
→ GPU
→ shader
→ 渲染
1
2
3
4

不是 DOM。


# 五、空间分析(GIS能力)

# 11 Point In Polygon 怎么实现?

问题:

点是否在多边形内
1

算法:

射线法
Ray Casting
1
2

步骤:

点向右画一条射线
统计交点数量
1
2

规则:

奇数 = 内部
偶数 = 外部
1
2

# 12 如何计算两个点距离?

常用:

Haversine
1

因为:

地球是球体
1

不是简单:

√((x1-x2)^2+(y1-y2)^2)
1

# 13 如何查找最近点?

常用空间索引:

R-Tree
KD-Tree
1
2

避免:

O(n)
1

优化到:

O(log n)
1

# 六、地图性能优化(高级必问)

# 14 10 万点位如何渲染?

方案:

# 1 WebGL

例如:

  • deck.gl

支持:

百万点
1

# 2 聚合

Cluster
1

例如:

1000点 → 1个圆
1

# 3 VectorTile

后端切片
1

# 15 地图卡顿怎么优化?

常见策略:

requestAnimationFrame
1

批量更新:

RAF 合并
1

避免:

频繁 setState
1

# 七、GIS 系统架构

# 16 GIS 系统典型架构?

标准:

数据层
服务层
前端层
1
2
3

数据层:

PostGIS
1

服务层:

GeoServer
MapServer
1
2

前端:

  • Mapbox GL JS
  • OpenLayers

# 17 VectorTile 为什么比 GeoJSON 快?

GeoJSON:

一次加载全部
1

VectorTile:

按瓦片加载
1

优点:

按需加载
1

# 八、实时地图(AI / IoT)

# 18 实时轨迹如何实现?

例如:

车辆轨迹
1

技术:

WebSocket
SSE
1
2

优化:

轨迹抽稀
1

算法:

Douglas-Peucker
1

# 19 实时 2000 车辆如何优化?

策略:

WebGL
1
空间索引
1
增量更新
1

不要:

全量重绘
1

# 九、数字孪生 / 3D 地图

# 20 3D 地图如何实现?

常见方案:

  • CesiumJS
  • Three.js
  • deck.gl

核心:

3D Tiles
1

例如:

城市模型
BIM
1
2

# 十、GIS 面试加分回答

在大型地图系统中,我通常会使用 VectorTile + WebGL 渲染来处理大规模数据,并通过空间索引和点位聚合优化性能。如果是实时数据场景,会使用 WebSocket + 增量更新,同时结合 requestAnimationFrame 控制渲染节奏。

上次更新: 2026/03/06, 03:23:20
GIS 基础三件套
100 万点地图怎么渲染?

← GIS 基础三件套 100 万点地图怎么渲染?→

Copyright © 2015-2026 Glitz Ma
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式