矢量数据由于包含确定的坐标信息,通常用于表达准确的空间位置实体,在cesium中,不支持对shp进行加载,而是需要对shp数据进行转换,一般cesium支持的shp格式如下:
- geojson
- topojson
- kml
- czml
通常来说,对于简单的shp数据,最常规的处理方式是通过geojson格式在cesium中进行加载,而cesium也为加载geojson及后续操作提供了丰富的api。链接
Cesium常规加载
cesium提供的api加载方式
const viewer = new Cesium.Viewer('cesiumContainer');
viewer.dataSources.add(Cesium.GeoJsonDataSource.load('../../SampleData/ne_10m_us_states.topojson', {
stroke: Cesium.Color.HOTPINK,
fill: Cesium.Color.PINK,
strokeWidth: 3,
markerSymbol: '?'
}));
- cesium的GeoJsonDataSource类提供了geojson的加载方式,并且可以在加载的同时,给数据提供自定义样式。
- 但是,在加载geojson数据过大是(上万点),场景会非常卡顿,这是什么原因 呢?
Entity图元
- 其实,翻看上述加载geojson的实现逻辑,其本质上是通过读取geojson中每个feature的属性和坐标,然后通过一个cesium的一个图元来实例化这个feature(包含坐标、样式、属性等信息),然后依次将图元加载到图层上。
- 因此,上述加载代码也可以改成:
//读取geojson中的每个feature
for (var i = 0; i < geojson.features.length; i++) {
var ifeature = boundary.features[i];
let coordinates = [];
ifeature.geometry.coordinates[0].forEach(lnglat