Atlaslog
Q&A · common questions

Twelve questions GIS developers ask most

Each answer gives the conclusion you can act on, then points to the tutorial or field note that shows it in practice. Coverage: datum shifts, token-free basemaps, library choice, rendering performance and data formats.

01Why do points land hundreds of metres off on Chinese basemaps?

Amap and Tencent basemaps use GCJ-02, Baidu uses BD-09, while GPS and device output are normally WGS84. The shift is not a fixed translation: measured offsets range from about 265 m in Urumqi to 622 m in Guangzhou and change direction with location, so a constant metre offset cannot correct it.

Confirm the datum of both the data and the basemap, then convert exactly once before rendering.

02Can CesiumJS run without an ion token?

Yes. Pass baseLayer:false when constructing the Viewer, or supply your own ImageryProvider, and no Cesium ion imagery is requested. Terrain works the same way: use a public terrain provider or disable terrain. Every example on this site runs without an ion token.

Note that Viewer defaults changed after 1.104, so older imageryProvider snippets need updating.

03Which examples need no API key?

All eight libraries run without an account or key: OpenLayers and Leaflet use OpenStreetMap raster tiles, MapLibre uses the demotiles style, Cesium disables ion imagery, deck.gl uses OSM or no basemap, and Turf.js, three.js and luma.gl need no basemap at all.

Public tiles still have rate limits, so production should self-host or buy a service.

04When should I use Cesium Entity versus Primitive?

Entity is the high-level object model: convenient for dozens to a few thousand features that need picking or time-varying properties. Primitive talks to the renderer and batches many GeometryInstance objects into one draw call, which suits tens of thousands of static geometries.

Mix them: Primitive for bulk and basemap layers, Entity for the handful of objects that need interaction or animation.

05How do deck.gl and MapLibre work together?

Mount deck.gl as a custom layer on top of MapLibre and share one view state: MapLibre handles the basemap, style and input, while deck.gl draws the large data layers. The critical part is keeping centre, zoom, pitch and bearing in sync, otherwise the layers drift apart.

06Leaflet or OpenLayers?

Leaflet is small with a mature plugin ecosystem, a good fit for conventional 2D maps and mobile. OpenLayers natively supports more projections, OGC tile services such as WMS, WMTS and vector tiles, and complex interactions, which suits professional GIS work.

Both can build a basic map; the difference is projection support and data sources.

07What can Turf.js do, and what can it not do?

Turf.js performs spatial analysis in the browser: buffers, distances, intersections, simplification, interpolation and aggregation, all with GeoJSON in and out. It does not render maps, does not serve tiles and is not suited to very large datasets; hand the results to Leaflet, OpenLayers or deck.gl for display.

08Can three.js display a GIS basemap directly?

three.js is not a mapping library: it has no projection or tile system. To place geographic data in three.js you must project coordinates yourself, use tiles as textures on a mesh, or synchronise the camera with a map library. Otherwise you get a 3D scene with no geographic meaning.

09What is the difference between 3D Tiles and glTF?

glTF is the file format for a single 3D model or scene. 3D Tiles is a spatial index and streaming specification for large datasets, splitting models, point clouds and photogrammetry into a level-of-detail tile tree.

A single building can be plain glTF; city-scale or photogrammetry data belongs in 3D Tiles.

10How do I stop a map from lagging with too many points?

Draw fewer objects first: cluster, use a heatmap or sample by zoom level. If every point must stay visible, move to a Canvas or WebGL layer and batch rendering, such as Cesium Primitive, deck.gl or three.js InstancedMesh.

Also avoid rebuilding objects every frame and avoid heavy work inside moveend handlers.

11How does OpenLayers handle projection changes?

Use fromLonLat and toLonLat from ol/proj to convert between EPSG:4326 and the map projection. Chinese projected systems need a proj4 definition registered before calling transform.

Normalise to the map projection only at render time and keep the source data in its original CRS to avoid repeated conversions.

12Why do the examples run by opening a single file?

Every example is one standalone HTML file that loads its library from a CDN and keeps styles and scripts inline, so it needs no build step, account or key. The complete source sits above the live result and both read the same file, so a copy is immediately editable.

Last verified 2026-11-03. Based on the tutorials and tested field notes on this site. Cite as: Atlaslog (2026). GIS questions and answers. https://www.jingweizhi.com/en/qa/.

Data tables · English home · 中文问答