经纬志
首页 / Cesium / API 文档

GeoJsonDataSource

先看结论

把 GeoJSON 转成实体的加载器。一行代码拿到 Promise,但内部是逐个要素建 Entity, 数据量上去之后开销很直白。

最后验证 2026-11-03 · CesiumJS 1.121 · 更新 2026-10-27 · 引用本文
Cesium.GeoJsonDataSource.load(data, options) → Promise<GeoJsonDataSource>

data 可以是 URL 字符串,也可以是已经解析好的 GeoJSON 对象。 传对象时不需要网络请求,适合内联数据。

参数

参数默认说明
clampToGroundfalse贴地渲染,线面跟随地形
sourceUri—相对路径资源(如图标)的基准地址
markerSize48点要素的图标像素尺寸
markerSymbol—图标符号,可传文字或图片
markerColorBLUE点要素颜色
strokeBLUE线要素颜色
strokeWidth2线宽
fillBLUE面要素填充色
credit—数据来源署名
var geojson = {
  type: 'FeatureCollection',
  features: [
    {
      type: 'Feature',
      properties: { name: '监测点 A', value: 42 },
      geometry: { type: 'Point', coordinates: [116.391263, 39.907359] }
    },
    {
      type: 'Feature',
      properties: { name: '作业区', value: 87 },
      geometry: {
        type: 'Polygon',
        coordinates: [[
          [116.30, 39.86], [116.48, 39.86],
          [116.48, 39.98], [116.30, 39.98],
          [116.30, 39.86]
        ]]
      }
    }
  ]
};

Cesium.GeoJsonDataSource.load(geojson, {
  clampToGround: true,
  stroke: Cesium.Color.fromCssColorString('#4d9bff'),
  fill: Cesium.Color.fromCssColorString('#4d9bff').withAlpha(0.3),
  strokeWidth: 2
}).then(function (ds) {
  viewer.dataSources.add(ds);
  viewer.flyTo(ds);
});

按属性改样式

默认样式一刀切。按字段分级着色要在加载完成后遍历实体,读 properties 里的值再改图形属性:

Cesium.GeoJsonDataSource.load(geojson).then(function (ds) {
  var entities = ds.entities.values;
  for (var i = 0; i < entities.length; i++) {
    var e = entities[i];
    var v = e.properties.value ? e.properties.value.getValue() : 0;

    if (e.point) {
      e.point.color = v > 60
        ? Cesium.Color.fromCssColorString('#ff5c5c')
        : Cesium.Color.fromCssColorString('#4d9bff');
      e.point.pixelSize = 8 + v / 20;
    }
    if (e.polygon) {
      e.polygon.material = Cesium.Color.fromCssColorString('#4d9bff')
        .withAlpha(0.15 + v / 300);
    }
  }
  viewer.dataSources.add(ds);
});

常用成员

成员说明
ds.entities转换后的实体集合
ds.name数据源名称,会显示在图层列表里
ds.changedEvent数据变化事件
ds.loadingEvent加载状态事件
viewer.dataSources.remove(ds, true)移除并销毁

四个常见问题

1. 坐标顺序反了

GeoJSON 的坐标是 [经度, 纬度],和常见 GIS 数据里的 纬度, 经度 顺序相反。灌错顺序的结果是数据整体跑到南极附近, 肉眼立刻可辨。

2. 三维坐标被压平

coordinates 的第三个值是高度,但只有在 clampToGround: false 且几何本身带高度时才生效。 开了贴地,高度会被地形覆盖。

3. 大数据量加载卡死

每个 Feature 都会生成 Entity,一万个要素的转换时间在秒级。 超过这个量级应该改用 Cesium3DTileset,或者自己解析 GeoJSON 并用 Primitive 批量绘制。

4. 面要素没有边线

strokeWidth 对贴地面同样受 WebGL 线宽限制,看起来只有 1 像素。 需要清晰边界时补一条 polyline,或者把面拆成多段分别渲染。

引用本文

经纬志(2026)。《GeoJsonDataSource》。https://www.jingweizhi.com/cesium/api/geojson-datasource.html(访问日期 2026-11-03)。