返回

GIS 的网格化管理—面polygon 的点

前端

我国近年来大力推行网格化管理,各地由此诞生了很多基于网格化管理的系统。现如今,在智慧城市或数字城市建设中,网格展示及相关功能是必不可少的。本文将对网格相关样式和操作进行复习,重点探讨面 polygon 的点。

一、点位标记

1.基本概念

点位标记是 GIS 中常用的可视化表达方式,用于在地图上标记特定位置。它通常以点符号的形式呈现,可以表示不同的属性信息,如位置、名称、类型等。

2.实现方法

在基于 Vue+Cesium+Supermap 实现的智慧城市系统中,我们可以使用 Cesium 中的 BillboardCollection 对象来创建点位标记。BillboardCollection 是一个集合对象,可以容纳多个 Billboard 实体,每个 Billboard 实体代表一个点位标记。

3.属性设置

我们可以通过设置 Billboard 实体的属性来控制点位标记的外观和行为。例如,我们可以设置点位标记的位置、大小、颜色、透明度、文本内容等。

二、属性查询

1.基本概念

属性查询是 GIS 中常用的查询方式之一,用于根据要素的属性值来查询要素。属性查询可以用于查找特定要素、统计要素数量、分析要素分布等。

2.实现方法

在基于 Vue+Cesium+Supermap 实现的智慧城市系统中,我们可以使用 Cesium 中的 FeatureLayerQuery 对象来进行属性查询。FeatureLayerQuery 对象可以查询 FeatureLayer 中的要素,并返回查询结果。

3.查询参数

我们可以通过设置 FeatureLayerQuery 对象的查询参数来控制查询范围和查询条件。例如,我们可以设置查询范围、查询条件、排序方式等。

三、范围查询

1.基本概念

范围查询是 GIS 中常用的查询方式之一,用于根据要素的空间范围来查询要素。范围查询可以用于查找特定范围内的要素、统计要素数量、分析要素分布等。

2.实现方法

在基于 Vue+Cesium+Supermap 实现的智慧城市系统中,我们可以使用 Cesium 中的 Scene.queryObjects 方法来进行范围查询。Scene.queryObjects 方法可以查询场景中的所有对象,包括要素、模型、贴图等。

3.查询参数

我们可以通过设置 Scene.queryObjects 方法的查询参数来控制查询范围和查询条件。例如,我们可以设置查询范围、查询条件、排序方式等。

四、示例代码

以下是一段基于 Vue+Cesium+Supermap 实现的智慧城市系统中网格相关功能的示例代码:

// 创建 Cesium 实例
const viewer = new Cesium.Viewer('cesiumContainer', {
  // 其他设置
});

// 加载网格数据
const gridLayer = viewer.dataSources.add(Cesium.KmlDataSource.load('./grid.kml'));

// 添加点位标记
const billboardCollection = viewer.scene.primitives.add(new Cesium.BillboardCollection());
for (let i = 0; i < gridLayer.entities.values.length; i++) {
  const entity = gridLayer.entities.values[i];
  const billboard = viewer.scene.primitives.add(new Cesium.Billboard({
    position: entity.position,
    image: './point.png',
    scale: 1.0,
    color: Cesium.Color.RED,
    translucencyByDistance: new Cesium.NearFarScalar(1.0, 0.0, 10000.0, 50000.0),
  }));
  billboardCollection.add(billboard);
}

// 添加属性查询
const queryOptions = {
  layer: gridLayer,
  attributeFilter: "TYPE = '学校'",
};
const queryResults = viewer.scene.queryFeatures(queryOptions);
queryResults.then((results) => {
  console.log(results);
});

// 添加范围查询
const boundingSphere = Cesium.BoundingSphere.fromRectangle(Cesium.Rectangle.fromDegrees(120.0, 30.0, 121.0, 31.0));
const queryOptions = {
  scene: viewer.scene,
  boundingSphere: boundingSphere,
};
const queryResults = viewer.scene.queryObjects(queryOptions);
queryResults.then((results) => {
  console.log(results);
});

以上示例代码演示了如何使用 Vue+Cesium+Supermap 实现智慧城市系统中的网格相关功能,包括点位标记、属性查询、范围查询等。读者可以根据自己的需求对代码进行修改和扩展。