GIS 的网格化管理—面polygon 的点
2023-10-23 02:33:22
我国近年来大力推行网格化管理,各地由此诞生了很多基于网格化管理的系统。现如今,在智慧城市或数字城市建设中,网格展示及相关功能是必不可少的。本文将对网格相关样式和操作进行复习,重点探讨面 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 实现智慧城市系统中的网格相关功能,包括点位标记、属性查询、范围查询等。读者可以根据自己的需求对代码进行修改和扩展。