superMap3D中绘制点、线、面
new SuperMap3D.DrawHandler(viewer, mode, clampMode)
名称 | 作用 |
---|---|
viewer | 球体实例 |
mode | 绘制模式,包含点、线、面、图标 |
clampMode | 绘制风格 |
具体参数用法
mode
模式 | 写法 |
---|---|
point | SuperMap3D.DrawMode.Point |
line | SuperMap3D.DrawMode.Line |
polygon | SuperMap3D.DrawMode.Polygon |
marker | SuperMap3D.DrawMode.Marker |
box | SuperMap3D.DrawMode.Box |
clampMode
模式 | 写法 |
---|---|
贴地模式 | SuperMap3D.ClampMode.Ground |
栅格化模式 | SuperMap3D.ClampMode.Raster |
贴对象模式 | SuperMap3D.ClampMode.S3mModel |
空间模式 | SuperMap3D.ClampMode.Space |
内置方法
activeEvt激活绘制事件
handler.activeEvt.addEventListener(result=>{
console.log(result) // 返回是否激活绘制
});
movingEvt监听鼠标位置
handler.movingEvt.addEventListener(result=>{
console.log(result) // 返回鼠标位置
});
drawEvt监听是否完成绘制
handler.drawEvt.addEventListener(result=>{
console.log(result) // 返回绘制结果
});
activate()激活功能
handler.activate()
clear()清除已绘制的图形
handler.clear()
deactivate()清除功能
handler.deactivate()
具体案例写法
superMap3D中三维转二维(点、线、面)
获取点信息并转换
目前采用的二维技术是iclient8c API
利用SuperMap.Geometry.Point将获取的坐标点转为二维的点信息
handler.drawEvt.addEventListener(result=>{
console.log(result) // 返回绘制结果
const cartographic = Cesium.Cartographic.fromCartesian(pick)
const lon = Cesium.Math.toDegrees(cartographic.longitude)
const lat = Cesium.Math.toDegrees(cartographic.latitude)
const geometryParams = new SuperMap.Geometry.Point(lon, lat)
});
若是面时处理方案
先将返回的多个点的信息转成point多点,然后再将点数组,转成LinearRing环线,利用SuperMap.Geometry.Polygon将环线信息转成面。
handler.drawEvt.addEventListener(result=>{
console.log(result) // 返回绘制结果
result.positions.forEach(cartesian => {
const cartographic = new Cesium.Cartographic.fromCartesian(
cartesian
)
const longitude = Cesium.Math.toDegrees(cartographic.longitude)
const latitude = Cesium.Math.toDegrees(cartographic.latitude)
const geometryParams = new SuperMap.Geometry.Point(
longitude,
latitude
)
geojsonCoordinates.push(geometryParams)
})
const linearRings = new SuperMap.Geometry.LinearRing(
geojsonCoordinates
)
const geometry = new SuperMap.Geometry.Polygon([linearRings])
});
在SuperMap.Geometry.Polygon中有三个比较常用的方法,
方法名 | 作用 | 返回 |
---|---|---|
getArea | 获得区域面积,从区域的外部口径减去计此区域内部口径算所得的面积。 | {float}几何对象的面积 |
getGeodesicArea | 计算投影到球面上的多边形近似面积 | {float}多边形近似测地面积 |
intersects | 判断两个几何对象是否相交 | {Boolean} 两个几何对象是否相交 |
distanceTo | 计算两个几何对象间的最小距离 | {Number 、Object}返回一个几何对象到目标几何对象的距离 |
在SuperMapJavaScriptAPI中还存在一些其他的用法
superMap3D中二维转三维(geometry)
先将geometry转成GeoJson文件,在采用GeoJsonDataSource去添加数据
const geoJsonData = new SuperMap.Format.GeoJSON()
features.forEach(item=>{
const geoJsonPolygon = geoJsonData.write(item.geometry)
const polygons = JSON.parse(geoJsonPolygon)
window.viewer.dataSources.add(Cesium.GeoJsonDataSource.load(polygons, {
stroke: Cesium.Color.RED,
fill: Cesium.Color.RED,
strokeWidth: 5,
}));
})