01国内底图上的点位偏移几百米,是什么原因?
高德、腾讯底图使用 GCJ-02,百度使用 BD-09,而 GPS 和设备输出通常是 WGS84。两套坐标之间不是固定平移:实测偏移从乌鲁木齐约 265 米到广州约 622 米,方向也随位置变化,所以不能用固定米数修正。
做法是确认数据与底图坐标系,在渲染前只转换一次,不要在每一层重复转换。
每个问题给出可以直接用的结论,再指到站内对应的教程或案例。内容覆盖坐标系偏移、免密钥底图、库选型、渲染性能与数据格式。
高德、腾讯底图使用 GCJ-02,百度使用 BD-09,而 GPS 和设备输出通常是 WGS84。两套坐标之间不是固定平移:实测偏移从乌鲁木齐约 265 米到广州约 622 米,方向也随位置变化,所以不能用固定米数修正。
做法是确认数据与底图坐标系,在渲染前只转换一次,不要在每一层重复转换。
可以。创建 Viewer 时传 baseLayer:false,或指定自己的 ImageryProvider,就不会请求 Cesium ion 的默认影像;地形同理,使用公开的 terrain provider 或关闭地形。本站示例全部不依赖 ion token。
注意 1.104 之后 Viewer 的默认影像参数有变化,旧教程里的 imageryProvider 写法需要更新。
八个技术栈的示例都不需要账号或密钥:OpenLayers 和 Leaflet 用 OpenStreetMap 栅格瓦片,MapLibre 用 demotiles 公共样式,Cesium 关闭 ion 影像,deck.gl 用 OSM 或不铺底图,Turf、three.js、luma.gl 不依赖底图。
公共瓦片有速率限制,生产环境应自建或购买服务。
Entity 是高层的对象模型,适合几十到几千个带交互、带时间属性的要素,写法直观;Primitive 直接面向渲染,把多个 GeometryInstance 合批成一次 draw call,适合几万到几十万的静态几何。
两者可以混用:底图和大批量要素用 Primitive,需要拾取和动画的少量对象用 Entity。
把 deck.gl 作为 MapLibre 的一个自定义图层,共享同一个视图状态:MapLibre 负责底图、样式和交互,deck.gl 负责大规模数据图层。关键是两边的中心、缩放、俯仰和方位角保持同步,否则图层会错位。
Leaflet 体积小、插件生态成熟,适合常规二维地图和移动端;OpenLayers 原生支持更多投影、瓦片服务(WMS/WMTS/矢量瓦片)和复杂交互,适合专业 GIS 场景。
两者都能完成基础地图,差别主要在投影体系和数据源支持。
Turf.js 在浏览器里做空间分析:缓冲区、距离、相交、简化、插值、聚合等,输入输出都是 GeoJSON。它不做地图渲染、不做瓦片服务,也不适合超大数据量;需要显示结果时交给 Leaflet、OpenLayers 或 deck.gl。
three.js 本身不是地图库,没有投影和瓦片体系。要把地理数据放进 three.js,需要自己完成坐标投影,把瓦片当作纹理贴到网格上,或与地图库联动同步相机;否则只能做与地理位置无关的三维场景。
glTF 是单个三维模型或场景的文件格式;3D Tiles 是面向大规模数据的空间索引与流式传输规范,把模型、点云、摄影测量切成带 LOD 的瓦片树。
单个建筑模型用 glTF 就够,城市级或倾斜摄影数据应使用 3D Tiles。
先减少绘制对象:聚合、热力图或按缩放级别抽样;需要保留全部点位时,用 Canvas/WebGL 图层或合批渲染(Cesium Primitive、deck.gl、three.js InstancedMesh)。
同时避免每帧重建对象、避免在 moveend 里做重计算。
用 ol/proj 的 fromLonLat 和 toLonLat 在 EPSG:4326 与地图投影之间转换;国内平面坐标需要 proj4 注册定义后再用 transform。
显示前统一到地图投影,数据存储保留原始坐标系,避免多次转换。
每个示例是一个独立 HTML 文件,通过 CDN 加载库、内联样式和脚本,不需要构建工具,也不需要账号或密钥。页面顶部是完整源码,底部是运行效果,两者读取同一个文件,所以复制下来就能改。
本页最后验证 2026-11-03。内容依据站内教程与实测案例,引用请注明:经纬志(2026)。GIS 开发常见问题。https://www.jingweizhi.com/qa/。
数据表 · 关于本站 · English Q&A