CMSR 1.0.13

cmsr-map sdk 文档

如何使用

script 标签引入

  • zysy 目录和 cmsr-map.bundle.js 文件放到项目根目录
  • index.html 引入两个文件 zysy\lib\include-lib.jscmsr-map-bundle.js,并且放在你的js代码前面
<script
        type="text/javascript"
        src="zysy/lib/include-lib.js?time=20200710"
        libpath="zysy/lib/"
        include="jquery,jquery.range,bootstrap,,bootstrap-table,bootstrap-checkbox,font-awesome,web-icons,layer,haoutil,nprogress,toastr,admui,turf,mapV,kjwt3d,echarts,echarts-gl,kjwt3d-visual,cesium-navigation"
></script>
<script type="text/javascript" src="cmsr-map.bundle.js?time=20200710"></script>
  • sdk的接口都在CMSRMap对象下
  • sdk会占用 CMSRMapviewer 两个全局变量,请不要覆盖

node_modules 引入

  • 将整个仓库的代码(有package.jsondist文件夹和index.js文件即可),放到 /node_modules/@cmsr/cmsr-map
  • 在webpack.config.js中做如下配置,将 zysy 文件夹拷贝到你的打包目录根目录
const CopyWebpackPlugin = require('copy-webpack-plugin');
const config = {
  plugins: [
    new CopyWebpackPlugin([{ from: path.join('./node_modules', '@cmsr/cmsr-map/dist/zysy'), to: 'zysy' }]),
  ],
}
  • index.html 引入 zysy\lib\include-lib.js 文件并且放在你的js代码前面
<script
        type="text/javascript"
        src="zysy/lib/include-lib.js?time=20200710"
        libpath="zysy/lib/"
        include="jquery,jquery.range,bootstrap,,bootstrap-table,bootstrap-checkbox,font-awesome,web-icons,layer,haoutil,nprogress,toastr,admui,turf,mapV,kjwt3d,echarts,echarts-gl,kjwt3d-visual,cesium-navigation"
></script>
  • 引入具体API时通过 import { xxx } from '@cmsr/cmsr-map'; 语句引入即可
  • 初始化viewer后会占用 CMSRMapviewer 两个全局变量,请不要覆盖

提供的API

地图加载

  • initViewer(id, options)

代码示例

注意容器的class要有kjwt3d-container,否则样式会出错

<div  id="mapContainer" class="kjwt3d-container"></div>
// script标签引入
var viewer = CMSRMap.initViewer('mapContainer', {
    config: {
        navigation: true,
    },
    viewerConfig: {
        center: {
            y: 31.214098, x: 121.591228, z: 5045.51, heading: 359.6, pitch: -55.1, roll: 360,
        },
        location: false,
        basemaps: [
            {
                name: '高德',
                type: 'www_gaode',
                crs: 'gcj',
                layer: 'img_d',
                visible: true,
            }, {
                name: '高德',
                type: 'www_gaode',
                crs: 'gcj',
                layer: 'img_z',
                visible: true,
            },
        ],
    },
});
// 使用es6语法
import { initViewer } from '@cmsr/cmsr-map';
const viewer = initViewer('mapContainer');

初始化地图

参数名 类型 必填 默认值 说明
id string 地图容器id
options Object 初始化viewer时接受的参数
options.config Object sdk的特殊参数
options.config.serverURL string '' 替换图层配置url地址中的$serverURL$参数
options.config.widgetBasePath string 'zysy/' 配置代码仓库目录,使用history路由时需设定为绝对路径,如'http://localhost:3000/zysy/'
options.config.navigation boolean true 是否启用放大缩小按钮
options.config.zeroDumpingInertia boolean false 是否启用零阻尼的惯性保持
options.config.enableKeyboard boolean false 是否启用键盘支持
options.viewerConfig.center object '' 初始化时的地图显示中心点,具体参数见下方示例
options.viewerConfig.minzoom number 1 地球可以放大的最小比例,单位米
options.viewerConfig.maxzoom number 50000000 地球可以缩小的最大比例,单位米
options.viewerConfig.contextmenu boolean false 是否显示右键菜单
options.viewerConfig.location object 是否显示下方视角信息,设为false不显示
options.viewerConfig.navigation object 是否显示指北针设为false不显示
options.viewerConfig.sceneMode number 3 使用3维地图还是2维地图,使用2维地图时设置为2
options.viewerConfig.mapMode2D number 1 2D 地图是可旋转的还是可以在水平方向上无限滚动,0是可旋转的,1是水平无限滚动
options.viewerConfig.basemaps Array 数组,地球基础底图配置,详情见下方说明

示例 options.viewerConfig.center

const center = {  
    // 纬度
    y: 31.214098,
    // 纬度
    x: 121.591228,
    // 高度
    z: 5045.51,
    // 偏航角
    heading: 359.6,
    // 俯仰角
    pitch: -55.1,
    // 翻滚角
    roll: 360,
}

地图图层配置(basemaps)

basemaps 底图配置

名称 含义 说明
name 名称 字符串
visible 显示状态 boolean 单选(是、否)
type 类型
pid 上级唯一标识 int,主要是图层树的上下级控制
center 显示图层时定位处 配置同options.viewerConfig.center
flyTo 是否自动定位到center boolean
layer 图层名称
crs 坐标系

目前支持的 basemaps type 类型

分类 type值 说明
分组 group
天地图地图 www_tdt
必应地图 www_bing
高德地图 www_gaode
谷歌地图 www_google
百度地图 www_baidu
XYZ 瓦片数据 tile 具有 xyz 格式地址的瓦片图层
WMTS 服务 wmts
WMS 服务 wms
3dtiles 模型 3dtiles
gltf 模型 gltf
GeoJSON 格式数据 geojson
KML 格式数据 kml
CZML 格式数据 czml

basemaps各type的可选项

分类 参数 含义 说明
www_tdt layer 图层名称 单选:vec_d(电子底图)、vec_z(电子注记)、img_d(卫星底图)、img_z(卫星注记)、ter_d(地形底图)、ter_z(地形注记)
www_tdt crs 坐标系 单选:标准坐标系(4326)、墨卡托投影(3857)
www_bing layer 图层名称 单 选 : Aerial ( 无 注 记 影 像 ) 、AerialWithLabels(有英文标记影像)、 Road(矢量道路)
www_gaode layer 图层名称 单选:vec 电子地图(含底图和注记)、 img_d(卫星底图单图层)、img_z(卫星注记单图层)、time(高德实时路况信息)
www_gaode crs 坐标系 单选:gcj(国测局偏移坐标系)
www_google layer 图层名称 单选:vec 电子地图(含底图和注记)、 img_d(卫星底图单图层)、img_z(卫星注记单图层)、ter(地形地图(含底图和注记)
www_google crs 坐标系 单选:标准坐标系(wgs84)、偏移坐标系(空)
www_baidu layer 图层名称 单选:vec 电子(含底图和注记)、img_d(卫星底图)、img_z(卫星注记)、custom
www_baidu customid 样式名称 custom 时有效,可选值:dark,midnight,grayscale,hardedge,light,redalert,googlelite ,grassgreen,pink,darkgreen,bluish

xyz 格式地址的瓦片图层使用方式

当瓦片地图 url 地址具有 xyz 规则的标准图层时使用,其参数支持Cesium.UrlTemplateImageryProvider 所有 options

const demo = {
    pid: 10,
    name: 'OSM地图',
    type: 'xyz',
    icon: 'zysy/img/basemaps/osm.png',
    url: 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
    subdomains: 'abc',
}
名称 含义 说明
url 服务地址 string 字符串
opacity 透明度 0到1的小数值
rectangle 瓦片边界 string 字符串
subdomains 占位符集 string 字符串
minimumLevel 最小层级 number
maximumLevel 最大层级 number
minimumTerrainLevel 显示的最小层级 number
maximumTerrainLevel 显示的最大层级 number
tileWidth 切片宽度 number
tileHeight 切片高度 number
enablePickFeatures 请求服务查询 boolean 单选(是、否)
hasAlphaChannel 调节透明度通道 boolean 单选(是、否)
crs 坐标系 墨卡托投影(3857)或 WGS84(4326)

OGC 标准 wms 服务图层使用方式

OGC 标准WMS瓦片图层,参数支持Cesium.WebMapServiceImageryProvider 所有 options

名称 含义 说明
url 服务地址 string 字符串
opacity 透明度 0到1的小数值
rectangle 瓦片边界 string 字符串
subdomains 占位符集 string 字符串
layers 图层名称 string 字符串
parameters 请求服务时携带的参数 string 字符串
minimumLevel 最小层级 number
maximumLevel 最大层级 number
minimumTerrainLevel 显示的最小层级 number
maximumTerrainLevel 显示的最大层级 number
tileWidth 切片宽度 number
tileHeight 切片高度 number
enablePickFeatures 请求服务查询 boolean 单选(是、否)
showClickFeature 是否单击高亮对象 boolean 单选(是、否)
popup 气泡窗内容 string 字符串
crs 坐标系 墨卡托投影(3857)或 WGS84(4326)

倾斜摄影 3dtiles 模型

3dtiles 模型 ,支持 Cesium.Cesium3DTileset 类所有的属性参,另外支持 offset 参数 xyz 为修正模型数据的原始经纬位置和高度

名称 含义 说明
url 模型的地址 string 字符串
maximumScreenSpaceError 清晰度 1-16,框架默认为 1,最清晰
maximumMemoryUsage 最大内存 number
dynamicScreenSpaceError 优化选项,减少切片错误 boolean 单选(是、否)
cullWithChildrenBounds 优化选项 boolean 单选(是、否)
luminanceAtZenith 亮度 number
offset 偏移 xyz 对象
eidtOffset 模型压平裁剪偏移 xyz 对象
eidtOffset 模型压平裁剪偏移 xyz 对象
opacity 透明度 0到1的小数值
showClickFeature 是否显示单体构件 boolean 单选(是、否)
clickFeatureColor 构件选中的颜色 颜色字符串 "#00FF00"
style 样式 对应 Cesium3DTileStyle 类的参数,比如城市白膜时

basemaps示例

const maps = [
   {
     id: 10,
     name: '地图底图',
     type: 'group',
   },
   {
     pid: 10,
     name: '高德',
     type: 'www_gaode',
     crs: 'gcj',
     layer: 'vec',
     visible: false,
   },
   {
     pid: 10,
     name: '谷歌卫星',
     icon: 'zysy/img/basemaps/google_img.png',
     type: 'www_google',
     crs: 'wgs84',
     layer: 'img_d',
     visible: true,
   },
   {
     pid: 10,
     name: 'ArcGIS卫星',
     icon: 'zysy/img/basemaps/esriWorldImagery.png',
     type: 'arcgis',
     url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer',
     enablePickFeatures: false,
   },
    {
        pid: 10,
        type: 'terrain',
        name: 'ArcGIS地形',
        terrain: {
          type: 'arcgis',
          url: 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',
        },
        radio: true,
      },
   {
     pid: 10,
     name: '微软卫星',
     icon: 'zysy/img/basemaps/bingAerial.png',
     type: 'www_bing',
     layer: 'Aerial',
   },
   {
     pid: 10,
     name: '天地图卫星',
     icon: 'zysy/img/basemaps/tdt_img.png',
     type: 'www_tdt',
     layer: 'img_d',
     key: [
       '313cd4b28ed520472e8b43de00b2de56',
       '83b36ded6b43b9bc81fbf617c40b83b5',
       '0ebd57f93a114d146a954da4ecae1e67',
       '6c99c7793f41fccc4bd595b03711913e',
       '56b81006f361f6406d0e940d2f89a39c',
     ],
   },
   {
     pid: 10,
     name: '天地图电子',
     icon: 'zysy/img/basemaps/tdt_vec.png',
     type: 'group',
     layers: [
       {
         name: '底图', type: 'www_tdt', layer: 'vec_d', key: ['313cd4b28ed520472e8b43de00b2de56'],
       },
       {
         name: '注记', type: 'www_tdt', layer: 'vec_z', key: ['83b36ded6b43b9bc81fbf617c40b83b5'],
       },
     ],
   },
   {
     pid: 10,
     name: '天地图地形',
     icon: 'zysy/img/basemaps/tdt_ter.png',
     type: 'group',
     layers: [
       {
         name: '底图', type: 'www_tdt', layer: 'ter_d', key: ['313cd4b28ed520472e8b43de00b2de56'],
       },
       {
         name: '注记', type: 'www_tdt', layer: 'ter_z', key: ['83b36ded6b43b9bc81fbf617c40b83b5'],
       },
     ],
   },
   {
     pid: 10,
     name: 'OSM地图',
     type: 'xyz',
     icon: 'zysy/img/basemaps/osm.png',
     url: 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
     subdomains: 'abc',
   },
   {
     pid: 10,
     name: '蓝色底图',
     icon: 'zysy/img/basemaps/bd-c-midnight.png',
     type: 'arcgis',
     url: 'http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer',
     enablePickFeatures: false,
   },
   {
     pid: 10,
     name: '单张图片',
     icon: 'zysy/img/basemaps/offline.png',
     type: 'image',
     url: 'zysy/img/world/world.jpg',
   },
 ];

标绘编辑

标绘的命名空间放在draw下

draw.DrawControl

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值

标绘类,使用标绘时要实例化一个标绘类

import {draw} from '@cmsr/cmsr-map';
const drawControl = new draw.DrawControl(window.viewer);

标绘工具使用完时要记得执行destroy方法

drawControl.destroy();

设置标绘对象的popup弹窗

  • draw.setEntityPopup(entity, popupString)
参数名 类型 必填 默认值 说明
entity object 标绘实例
popupString string 标绘弹窗内容,可以是html

该方法不属于DrawControl类,而是放在命名空间draw下

// 使用popup挂载vue组件
import Counter from './Counter.vue';
import Vue from 'vue';
viewer = CMSRMap.initViewer('mapContainer');
setTimeout(()=>{
  window.drawControl = new CMSRMap.draw.DrawControl(viewer);
  var entity = drawControl.addMarkerByGeoJson({"type":"FeatureCollection","features":[{"type":"Feature","properties":{"name":"图标点2","type":"point","edittype":"point"},"geometry":{"type":"Point","coordinates":[121.60156,31.241837,-0.02]}}]})[0];
  viewer.flyTo(entity);
  CMSRMap.draw.setEntityPopup(entity, '<div id="container"></div>');
  viewer.kjwt.popup.show(entity);
  setTimeout(() => {
    const CounterComponent = Vue.extend(Counter);
    new CounterComponent().$mount('#container');
  }, 60);
}, 60);

// Counter.vue
<template>
  <div class="counter-con">
    <div>{{num}}</div>
    <el-button class="button" @click="incr">自增加一</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      num: 0,
    };
  },
  methods: {
    incr() {
      this.num++;
    },
  },
};
</script>

设置标绘对象的水波纹

  • draw.setEntityWaveCircle(entity, options)

注意:水波纹占用了entity的ellipse对象。

参数名 类型 必填 默认值 说明
entity object 需要设置的entity
options object |null 配置项,设置为null时删除水波纹
options.width number 100 水波纹宽度,单位米
options.height number 0 水波纹距地面高度,单位米
options.duration number 3000 水波纹一次时间
options.gradient number 0.5 水波纹宽度比例
options.count number 1 水波纹一次水波个数
options.color cssColorString #ff0000 水波纹颜色

获取图形顶点经纬度集合

  • draw.getCoordinates(entity) -> [[经度,纬度,高度]]
参数名 类型 必填 默认值 说明
entity object 需要设置的entity

手动绘制图形

  • draw.startDraw(viewer, options)
参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
options object 配置项
options.type string 绘制图形类型,有rectanglepolygonellipse
options.style object 配置图形样式,style的配置项参考下面drawControl.updateMarkerAttribute接口的style
options.success function 回调函数,入参为绘制的entity
CMSRMap.draw.startDraw(viewer,{type:'rectangle',success:(entity)=>{
  // 获取entity图形的顶点经纬度集合
  var coordinates = CMSRMap.draw.getCoordinates(entity);
  console.log('entity', entity);
  console.log('coordinates', coordinates);
}});

注意

  • 下面文档中的drawControl指的是DrawControl类的实例

启动标绘窗口

  • drawControl.initDrawPanel(drawList, geojson)

启动标绘窗口,同时使所有标绘处于可编辑状态

参数名 类型 必填 默认值 说明
drawList Array panel的标绘列表
geojson string 初始化时的数据,格式为geojson格式,可参考下面添加标注接口的示例

drawList示例:

const drawList = {
  点及文字: [
    {
      name: '文字',
      image: '$plot$/img/label.jpg',
      type: 'label',
      edittype: 'label',
      iconClass: 'fa fa-text-width',
    },
    {
      name: '点',
      image: '$plot$/img/point.jpg',
      type: 'point',
      edittype: 'point',
    },
    {
      name: '图标点1',
      type: 'billboard',
      edittype: 'billboard',
      style: {
        image: 'http://localhost:3000/zysy/img/marker/mark1.png',
      },
    },
    {
      name: '图标点2',
      type: 'billboard',
      edittype: 'billboard',
      style: {
        image: '$serverURL$/zysy/img/marker/mark2.png',
      },
    },
    {
      name: '图标点2',
      type: 'billboard',
      edittype: 'billboard',
      style: {
        image: '$serverURL$/zysy/img/marker/mark3.png',
      },
    },
    {
      name: '图标点4',
      type: 'billboard',
      edittype: 'billboard',
      style: {
        image: '$serverURL$/zysy/img/marker/mark4.png',
      },
    },
  ],
  小模型: [
    {
      name: '飞机',
      image: '$serverURL$/zysy/data/img/feiji.jpg',
      type: 'model',
      style: {
        modelUrl: '$serverURL$/zysy/data/gltf/feiji.glb',
      },
    },
    {
      name: '战机',
      scale: 0.1,
      image: '$serverURL$/zysy/data/img/zhanji.jpg',
      type: 'model',
      style: {
        modelUrl: '$serverURL$/zysy/data/gltf/zhanji.glb',
      },
    },
    {
      name: '木楼',
      image: '$serverURL$/zysy/data/img/WoodTower.jpg',
      type: 'model',
      style: {
        modelUrl: '$serverURL$/zysy/data/gltf/Wood_Tower.gltf',
      },
    },
  ],
  二维平面类: [
    {
      name: '线',
      image: '$plot$/img/polyline.jpg',
      type: 'polyline',
      edittype: 'polyline',
      style: {
        clampToGround: false,
      },
    },
    {
      name: '贴地线',
      image: '$plot$/img/polyline_clampToGround.jpg',
      type: 'polyline',
      edittype: 'polyline',
      style: {
        clampToGround: true,
        color: '#ffff00',
      },
    },
    {
      name: '面',
      image: '$plot$/img/polygon.jpg',
      type: 'polygon',
      edittype: 'polygon',
    },
    {
      name: '贴地面',
      image: '$plot$/img/polygon_clampToGround.jpg',
      type: 'polygon',
      edittype: 'polygon_clampToGround',
    },
    {
      name: '矩形',
      image: '$plot$/img/rectangle.jpg',
      type: 'rectangle',
      edittype: 'rectangle',
    },
    {
      name: '贴地矩形',
      image: '$plot$/img/rectangle_clampToGround.jpg',
      type: 'rectangle',
      edittype: 'rectangle',
      style: {
        clampToGround: true,
        color: '#ffff00',
      },
    },
    {
      name: '圆',
      image: '$plot$/img/circle.jpg',
      type: 'circle',
      edittype: 'circle',
    },
    {
      name: '贴地圆',
      image: '$plot$/img/circle_clampToGround.jpg',
      type: 'circle',
      edittype: 'circle_clampToGround',
    },
  ],
  三维立体类: [

    {
      name: '管道',
      image: '$plot$/img/polylineVolume.jpg',
      type: 'polylineVolume',
      edittype: 'polylineVolume',
      hide: true,
    },
    {
      name: '多边立体',
      image: '$plot$/img/extrudedPolygon.jpg',
      type: 'polygon',
      edittype: 'extrudedPolygon',
      style: {
        extrudedHeight: 100,
      },
    },
    {
      name: '立方体',
      image: '$plot$/img/extrudedRectangle.jpg',
      type: 'rectangle',
      edittype: 'extrudedRectangle',
    },

    {
      name: '盒子',
      image: '$plot$/img/box.jpg',
      type: 'box',
      edittype: 'box',
    },

    {
      name: '圆柱体',
      image: '$plot$/img/extrudedCircle.jpg',
      type: 'circle',
      edittype: 'extrudedCircle',
    },
    {
      name: '球体',
      image: '$plot$/img/ellipsoid.jpg',
      type: 'ellipsoid',
      edittype: 'ellipsoid',
    },
  ],
};

从geojson加载标绘

  • drawControl.addMarkerByGeoJson(geoJson)

示例

drawControl.addMarkerByGeoJson({
    "type": "FeatureCollection",
    "features": [
    {
     "type": "Feature",
     "properties": {
       "name": "文字",
       "type": "label",
       "edittype": "label",
       "iconClass": "fa fa-text-width",
       "style": {
         "text": "文字hhhhhhhhhhhhhhhh",
         "color": "#ffffff",
         "opacity": 1,
         "font_family": "楷体",
         "font_size": 30,
         "border": true,
         "border_color": "#000000",
         "border_width": 3,
         "background": false,
         "background_color": "#000000",
         "background_opacity": 0.5,
         "font_weight": "normal",
         "font_style": "normal",
         "scaleByDistance": false,
         "scaleByDistance_far": 1000000,
         "scaleByDistance_farValue": 0.1,
         "scaleByDistance_near": 1000,
         "scaleByDistance_nearValue": 1,
         "distanceDisplayCondition": false,
         "distanceDisplayCondition_far": 10000,
         "distanceDisplayCondition_near": 0,
         "clampToGround": false,
         "visibleDepth": true
       },
       "attr": {
         "id": "", // drawControl.getEntityById 所查找的id
         "name": "",
         "remark": ""
       }
     },
     "geometry": {
       "type": "Point",
       "coordinates": [
         121.587937,
         31.247518,
         9.81
       ]
     }
    }
    ]
    });

更新标绘属性

  • drawControl.updateMarkerAttribute(attributes, entity)

entity是标绘对象可从drawControl.getEntities() 获得

attributes 示例如下

// 文字
const text = {
  type: 'label',
  style: {
    text: '文字', // 内容
    color: '#ffffff', // 颜色
    opacity: 1, // 透明度
    font_family: '楷体', // 字体
    font_size: 30, // 字体大小
    border: true, // 是否衬色
    border_color: '#000000', // 衬色颜色
    border_width: 3, // 衬色宽度
    background: false, // 是否背景
    background_color: '#000000', // 背景颜色
    background_opacity: 0.5, // 背景透明度
    font_weight: 'normal', // 是否加粗
    font_style: 'normal', // 是否斜体
    scaleByDistance: false, // 是否按视距缩放
    scaleByDistance_far: 1000000, // 上限
    scaleByDistance_farValue: 0.1, // 比例值
    scaleByDistance_near: 1000, // 下限
    scaleByDistance_nearValue: 1, // 比例值
    distanceDisplayCondition: false, // 是否按视距显示
    distanceDisplayCondition_far: 10000, // 最大距离
    distanceDisplayCondition_near: 0, // 最小距离
    clampToGround: false, // 是否贴地
    visibleDepth: true, // 是否被遮挡
  },
};
// 点
const point = {
  type: 'point',
  style: {
    pixelSize: 10, // 像素大小
    color: '#3388ff', // 颜色
    opacity: 1, // 透明度
    outline: true, // 是否边框
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
    outlineWidth: 2, // 边框宽度
    scaleByDistance: false, // 是否按视距缩放
    scaleByDistance_far: 1000000, // 上限
    scaleByDistance_farValue: 0.1, // 比例值
    scaleByDistance_near: 1000, // 下限
    scaleByDistance_nearValue: 1, // 比例值
    distanceDisplayCondition: false, // 是否按视距显示
    distanceDisplayCondition_far: 10000, // 最大距离
    distanceDisplayCondition_near: 0, // 最小距离
    clampToGround: false, // 是否贴地
    visibleDepth: true, // 是否被遮挡
  },
};
// 图标点标记
const billboard = {
  type: 'billboard',
  style: {
    image: 'img/marker.png', // 图标
    opacity: 1, // 透明度
    scale: 1, // 大小比例
    rotation: 0, // 旋转角度
    horizontalOrigin: 'CENTER', // 横向对齐
    verticalOrigin: 'BOTTOM', // 垂直对齐
    scaleByDistance: false, // 是否按视距缩放
    scaleByDistance_far: 1000000, // 上限
    scaleByDistance_farValue: 0.1, // 比例值
    scaleByDistance_near: 1000, // 下限
    scaleByDistance_nearValue: 1, // 比例值
    distanceDisplayCondition: false, // 是否按视距显示
    distanceDisplayCondition_far: 10000, // 最大距离
    distanceDisplayCondition_near: 0, // 最小距离
    clampToGround: false, // 是否贴地
    visibleDepth: true, // 是否被遮挡

  },
};
// 模型
const model = {
  type: 'model',
  style: {
    modelUrl: '', // 路径
    scale: 1, // 比例
    heading: 0, // 方向角
    pitch: 0, // 俯仰角
    roll: 0, // 翻滚角
    fill: false, // 是否填充
    color: '#3388ff', // 颜色
    opacity: 1, // 透明度
    silhouette: false, // 是否轮廓
    silhouetteColor: '#ffffff', // 轮廓颜色
    silhouetteSize: 2, // 轮廓宽度
    silhouetteAlpha: 0.8, // 轮廓透明度
    clampToGround: false, // 是否贴地

  },
};
// 线
const polyline = {
  type: 'polyline',
  style: {
    lineType: 'solid', // 线型
    animationDuration: 1000, // 速度
    animationImage: 'img/textures/lineClr.png', // 图片
    color: '#3388ff', // 颜色
    width: 4, // 线宽
    clampToGround: false, // 是否贴地
    outline: false, // 是否衬色
    outlineColor: '#ffffff', // 衬色颜色
    outlineWidth: 2, // 衬色宽度
    opacity: 1, // 透明度
    zIndex: 0, // 层级顺序

  },
};
// 管道线
const polylineVolume = {
  type: 'polylineVolume',
  style: {
    color: '#00FF00', // 颜色
    radius: 10, // 半径
    shape: 'pipeline', // 形状
    outline: false, // 是否衬色
    outlineColor: '#ffffff', // 衬色颜色
    opacity: 1, // 透明度

  },
};
// 面
const polygon = {
  type: 'polygon',
  style: {
    fill: true, // 是否填充
    fillType: 'color', // 填充类型
    grid_lineCount: 8, // 网格数量
    grid_lineThickness: 2, // 网格宽度
    grid_cellAlpha: 0.1, // 填充透明度
    stripe_oddcolor: '#ffffff', // 条纹衬色
    stripe_repeat: 6, // 条纹数量
    checkerboard_oddcolor: '#ffffff', // 棋盘衬色
    checkerboard_repeat: 4, // 棋盘格数
    color: '#3388ff', // 颜色
    opacity: 0.6, // 透明度
    stRotation: 0, // 填充方向
    outline: true, // 是否边框
    outlineWidth: 1, // 边框宽度
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
    clampToGround: false, // 是否贴地
    zIndex: 0, // 层级顺序
    extrudedHeight: 100, // 拉伸高度
  },
};
// 矩形
const rectangle = {
  type: 'rectangle',
  style: {
    height: 0, // 高程
    fill: true, // 是否填充
    fillType: 'color', // 填充类型
    grid_lineCount: 8, // 网格数量
    grid_lineThickness: 2, // 网格宽度
    grid_cellAlpha: 0.1, // 填充透明度
    stripe_oddcolor: '#ffffff', // 条纹衬色
    stripe_repeat: 6, // 条纹数量
    checkerboard_oddcolor: '#ffffff', // 棋盘衬色
    checkerboard_repeat: 4, // 棋盘格数
    color: '#3388ff', // 颜色
    opacity: 0.6, // 透明度
    outline: true, // 是否边框
    outlineWidth: 1, // 边框宽度
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
    rotation: 0, // 旋转角度
    stRotation: 0, // 材质角度
    clampToGround: false, // 是否贴地
    zIndex: 0, // 层级顺序
    extrudedHeight: 100, // 高度
  },
};
// 圆
const circle = {
  type: 'circle',
  style: {
    radius: 100, // 半径
    height: 0, // 高程
    fill: true, // 是否填充
    fillType: 'color', // 填充类型
    animationDuration: 1000, // 速度
    animationCount: 1, // 圈数
    animationGradient: 0.1, // 圈间系数
    grid_lineCount: 8, // 网格数量
    grid_lineThickness: 2, // 网格宽度
    grid_cellAlpha: 0.1, // 填充透明度
    stripe_oddcolor: '#ffffff', // 条纹衬色
    stripe_repeat: 6, // 条纹数量
    checkerboard_oddcolor: '#ffffff', // 棋盘衬色
    checkerboard_repeat: 4, // 棋盘格数
    color: '#3388ff', // 填充颜色
    opacity: 0.6, // 透明度
    stRotation: 0, // 填充方向
    outline: true, // 是否边框
    outlineWidth: 1, // 边框宽度
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
    rotation: 0, // 旋转角度
    clampToGround: false, // 是否贴地
    zIndex: 0, // 层级顺序
    extrudedHeight: 100, // 拉伸高度
  },
};
// 椭圆
const ellipse = {
  type: 'ellipse',
  style: {
    semiMinorAxis: 100, // 短半径
    semiMajorAxis: 100, // 长半径
    height: 0, // 高程
    fill: true, // 是否填充
    fillType: 'color', // 填充类型
    animationDuration: 1000, // 速度
    animationCount: 1, // 圈数
    animationGradient: 0.1, // 圈间系数
    grid_lineCount: 8, // 网格数量
    grid_lineThickness: 2, // 网格宽度
    grid_cellAlpha: 0.1, // 填充透明度
    stripe_oddcolor: '#ffffff', // 条纹衬色
    stripe_repeat: 6, // 条纹数量
    checkerboard_oddcolor: '#ffffff', // 棋盘衬色
    checkerboard_repeat: 4, // 棋盘格数
    color: '#3388ff', // 填充颜色
    opacity: 0.6, // 透明度
    stRotation: 0, // 填充方向
    outline: true, // 是否边框
    outlineWidth: 1, // 边框宽度
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
    rotation: 0, // 旋转角度
    clampToGround: false, // 是否贴地
    zIndex: 0, // 层级顺序
    extrudedHeight: 100, // 拉伸高度
  },
};
// 圆锥体
const cylinder = {
  type: 'cylinder',
  style: {
    topRadius: 0, // 顶部半径
    bottomRadius: 100, // 底部半径
    length: 100, // 高度
    fill: true, // 是否填充
    fillType: 'color', // 填充类型
    animationDuration: 1000, // 速度
    animationCount: 1, // 圈数
    animationGradient: 0.1, // 圈间系数
    color: '#00FF00', // 填充颜色
    opacity: 0.6, // 透明度
    outline: false, // 是否边框
    outlineWidth: 1, // 边框宽度
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
  },
};
// 球体
const ellipsoid = {
  type: 'ellipsoid',
  style: {
    extentRadii: 100, // 长半径
    widthRadii: 100, // 宽半径
    heightRadii: 100, // 高半径
    fill: true, // 是否填充
    fillType: 'color', // 填充类型
    grid_lineCount: 8, // 网格数量
    grid_lineThickness: 2, // 网格宽度
    grid_cellAlpha: 0.1, // 填充透明度
    stripe_oddcolor: '#ffffff', // 条纹衬色
    stripe_repeat: 6, // 条纹数量
    checkerboard_oddcolor: '#ffffff', // 棋盘衬色
    checkerboard_repeat: 4, // 棋盘格数
    color: '#00FF00', // 颜色
    opacity: 0.6, // 透明度
    outline: true, // 是否边框
    outlineWidth: 1, // 边框宽度
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
  },
};
// 平面
const plane = {
  type: 'plane',
  style: {
    dimensionsX: 100, // 长度
    dimensionsY: 100, // 宽度
    plane_normal: 'z', // 方向
    plane_distance: 0, // 偏移距离
    fill: true, // 是否填充
    fillType: 'color', // 填充类型
    grid_lineCount: 8, // 网格数量
    grid_lineThickness: 2, // 网格宽度
    grid_cellAlpha: 0.1, // 填充透明度
    stripe_oddcolor: '#ffffff', // 条纹衬色
    stripe_repeat: 6, // 条纹数量
    checkerboard_oddcolor: '#ffffff', // 棋盘衬色
    checkerboard_repeat: 4, // 棋盘格数
    color: '#00FF00', // 颜色
    opacity: 0.6, // 透明度
    outline: true, // 是否边框
    outlineWidth: 1, // 边框宽度
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
    distanceDisplayCondition: false, // 是否按视距显示
    distanceDisplayCondition_far: 10000, // 最大距离
    distanceDisplayCondition_near: 0, // 最小距离
  },
};
// 盒子
const box = {
  type: 'box',
  style: {
    dimensionsX: 100, // 盒子长度
    dimensionsY: 100, // 盒子宽度
    dimensionsZ: 100, // 盒子高度
    fill: true, // 是否填充
    fillType: 'color', // 填充类型
    grid_lineCount: 8, // 网格数量
    grid_lineThickness: 2, // 网格宽度
    grid_cellAlpha: 0.1, // 填充透明度
    stripe_oddcolor: '#ffffff', // 条纹衬色
    stripe_repeat: 6, // 条纹数量
    checkerboard_oddcolor: '#ffffff', // 棋盘衬色
    checkerboard_repeat: 4, // 棋盘格数
    color: '#00FF00', // 颜色
    opacity: 0.6, // 透明度
    outline: true, // 是否边框
    outlineWidth: 1, // 边框宽度
    outlineColor: '#ffffff', // 边框颜色
    outlineOpacity: 0.6, // 边框透明度
    distanceDisplayCondition: false, // 是否按视距显示
    distanceDisplayCondition_far: 10000, // 最大距离
    distanceDisplayCondition_near: 0, // 最小距离
    clampToGround: false, // 是否贴地
  },
};

更新标绘地理坐标

  • drawControl.updateMarkerPosition(position, entity)
    position是一个数组 [经度, 纬度, 高程]

删除标绘

  • drawControl.deleteMarker(entity)

获取所有标绘对象

  • drawControl.getEntities()
    获得标绘实例(entity)列表,entity上有该标绘的属性

根据id获取标绘对象

  • drawControl.getEntityById()
    根据id获得标绘实例(entity)entity上有该标绘的属性,该id是传入geojson的properties的attr属性中的id,
    当多个id相同时,返回第一个匹配的entity

将标绘移到视野中心

  • drawControl.flyTo(entity)

获取所有标绘的geojson

  • drawControl.getGeoJson()

增加entity的事件监听器

  • drawControl.addEntityEventListener(type, action)

已废弃,请使用EntityEventHandler

参数名 类型 必填 默认值 说明
type BaseMap.ScreenSpaceEventType 从BaseMap.ScreenSpaceEventType中取值
action fucntion 回调函数

删除entity的事件监听器

  • drawControl.removeEntityEventListener(type, action)

已废弃,请使用EntityEventHandler

参数名 类型 必填 默认值 说明
type BaseMap.ScreenSpaceEventType 从BaseMap.ScreenSpaceEventType中取值
action fucntion 回调函数

删除全部的entity事件监听器

  • drawControl.removeAllEventHandler()

已废弃,请使用EntityEventHandler

删除全部的标绘

  • drawControl.removeAll()

drawControl 支持的编辑事件

  • draw.event
参数名 说明
EditStart 编辑模式下点击标绘触发
EditMovePoint 编辑模式下移动标绘触发
EditStop 编辑模式下点击其他地方,标绘失去编辑中状态时触发
EditRemovePoint 删除标绘时触发

drawControl 注册编辑事件

  • drawControl.on(EditEventType, fn)
参数名 类型 必填 默认值 说明
EditEventType draw.event所列的类型 从draw.event中取值
fn fucntion 回调函数

drawControl 注销编辑事件

  • drawControl.off(EditEventType, fn)
参数名 类型 必填 默认值 说明
EditEventType draw.event所列的类型 从draw.event中取值
fn fucntion 回调函数

drawControl 开启位置编辑模式

  • drawControl.startPositionEdit()

代码示例

地图上显示一个图标,并且监听开始编辑、移动结束、结束编辑事件

var drawControl = new CMSRMap.draw.DrawControl(viewer);
//drawControl.initDrawPanel();
var entity = drawControl.addMarkerByGeoJson({"type":"FeatureCollection","features":[{"type":"Feature","properties":{"name":"图标点2","type":"billboard","edittype":"billboard","style":{"image":"http://localhost:3000/zysy/img/marker/mark3.png"},"attr":{"id":"xiaomo","name":"","remark":""}},"geometry":{"type":"Point","coordinates":[121.60156,31.241837,-0.02]}}]});
viewer.flyTo(entity);
function fn(...rest){console.log(rest)};
drawControl.on(CMSRMap.draw.event.EditStart, fn);
drawControl.on(CMSRMap.draw.event.EditMovePoint, fn);
drawControl.on(CMSRMap.draw.event.EditStop, fn);
drawControl.startPositionEdit();

drawControl 关闭位置编辑模式

  • drawControl.stopPositionEdit()

drawControl 平滑移动标绘

  • updateMarkerPositionWithAnimation(entity, positionDict, options)

通过viewer内部时钟平滑移动标绘

实例化参数

参数名 类型 必填 默认值 说明
entity object 需要移动的entity
positionDict object 坐标位置描述
positionDict.longitude number 经度
positionDict.latitude number 纬度
positionDict.bearing number 目标与正北方向的角度差,顺时针为正
positionDict.height number 海拔高度
options object 配置项
options.duration number 1 动画时间,单位秒,默认1秒

drawControl 设置可保留的尾迹

  • drawControl.usePath(entity, options)

设置标绘在updateMarkerPositionWithAnimation方法的动画中的尾迹,注意该方法是类方法

参数名 类型 必填 默认值 说明
entity object 需要移动的entity
options object 配置项
options.trailTime number undefined 尾迹显示的时间,单位秒
options.width number undefined 尾迹显示的宽度,单位像素
options.material object undefined 尾迹显示材质类型
options.material.type string undefined 尾迹显示材质类型,有glow和stripe
  • options.material.typeglow-remain
参数名 类型 必填 默认值 说明
options.material.glowPower number 0.25 指定发光强度,以总线宽的百分比表示
options.material.taperPower string 1 指定渐缩效果的强度,以占总线长的百分比表示。
如果为1.0或更高,则不使用锥度效果。
options.material.color CMSRMap.BaseMap.Color Color.WHITE 边缘颜色

示例

var drawControl = new CMSRMap.draw.DrawControl(viewer);
var entity = drawControl.addMarkerByGeoJson({"type":"FeatureCollection","features":[{"type":"Feature","properties":{"name":"图标点2","type":"billboard","edittype":"billboard","style":{"image":"https://webapi.amap.com/images/car.png"},"attr":{"id":"xiaomo","name":"","remark":""}},"geometry":{"type":"Point","coordinates":[121.593178,31.246319,0]}}]})[0];
drawControl.useRemainPath(entity, {trailTime:2,material:{type:'glow-remain'}});
drawControl.updateMarkerPositionWithAnimation(entity, {longitude: 121.793178, latitude: 31.446319, bearing: 0},{duration:10});

drawControl 是否有设置可保留尾迹

  • drawControl.hasPath(entity) -> boolean

drawControl 移除可保留尾迹

  • drawControl.removePath(entity) -> void

DrawControl 设置尾迹

  • DrawControl.usePath(entity, options)

设置标绘在updateMarkerPositionWithAnimation方法的动画中的尾迹,注意该方法是类的静态方法

参数名 类型 必填 默认值 说明
entity object 需要移动的entity
options object 配置项
options.trailTime number undefined 尾迹显示的时间,单位秒
options.width number undefined 尾迹显示的宽度,单位像素
options.material object undefined 尾迹显示材质类型
options.material.type string undefined 尾迹显示材质类型,有glow和stripe
  • options.material.typeglow
参数名 类型 必填 默认值 说明
options.material.glowPower number 0.25 指定发光强度,以总线宽的百分比表示
options.material.taperPower string 1 指定渐缩效果的强度,以占总线长的百分比表示。
如果为1.0或更高,则不使用锥度效果。
options.material.color CMSRMap.BaseMap.Color Color.WHITE 边缘颜色

示例

import { draw, BaseMap } from '@cmsr/cmsr-map';
draw.DrawControl.usePath(entity, {
  trailTime: 7,
  width: 10,
  material: {
    type: 'glow',
    glowPower: 0.3,
    taperPower: 0.3,
    color: BaseMap.Color.fromCssColorString('#EEE8AA'),
  },
});
  • options.material.typestripe
参数名 类型 必填 默认值 说明
options.material.orientation CMSRMap.BaseMap.StripeOrientation StripeOrientation.HORIZONTAL 指定条纹方向
options.material.evenColor CMSRMap.BaseMap.Color Color.WHITE 第一颜色
options.material.oddColor CMSRMap.BaseMap.Color Color.BLACK 第二颜色
options.material.offset number 0 指定起始材料到图案的距离
options.material.repeat number 1 条纹重复的次数

示例

import { draw, BaseMap } from '@cmsr/cmsr-map';
draw.DrawControl.usePath(entity, {
  resolution: 1,
  trailTime: 60 * 2,
  width: 10,
  material: {
    type: 'stripe',
    evenColor: BaseMap.Color.fromCssColorString('#ffff00'),
    oddColor: BaseMap.Color.fromCssColorString('rgba(255,255,0,0.1)'),
    repeat: 1,
    offset: 0.25,
    orientation: BaseMap.StripeOrientation.VERTICAL,
  },
});

示例2

var drawControl = new CMSRMap.draw.DrawControl(viewer);
var entity = drawControl.addMarkerByGeoJson({"type":"FeatureCollection","features":[{"type":"Feature","properties":{"name":"图标点2","type":"billboard","edittype":"billboard","style":{"image":"https://webapi.amap.com/images/car.png"},"attr":{"id":"xiaomo","name":"","remark":""}},"geometry":{"type":"Point","coordinates":[121.593178,31.246319,0]}}]})[0];
drawControl.usePathRemain(entity, {trailTime:2,material:{type:'glow-remain'}});
drawControl.updateMarkerPositionWithAnimation(entity, {longitude: 121.793178, latitude: 31.446319, bearing: 0},{duration:10});

DrawControl 是否有设置尾迹

  • DrawControl.hasPath(entity) -> boolean

DrawControl 移除尾迹

  • DrawControl.removePath(entity) -> void

销毁方法

  • drawControl.destroy()

相机控制

CameraControl类

CameraControl类

相机控制类,下面接口说明中cameraControl代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
cameraControl.trackEntity(entity, options) -> void
参数名 类型 必填 默认值 说明
entity object 要视角追踪的entity
options object 配置项
options.keepHeight boolean false 是否在初始化追踪时保持相机高度
options.height boolean undefined 设置初始化追踪时相机高度

追踪一个entity,相机视角将随entity位置变化而变化

示例

import {CameraControl} from '@cmsr/cmsr-map';
const cameraControl = new CameraControl(window.viewer);
cameraControl.trackEntity(carEntity, {keepHeight: true});
cameraControl.stopTrackEntity() -> void

停止追踪

cameraControl.getTrackedEntity() -> void

获取当前正在追踪的entity

cameraControl.getCameraPosition() -> {longitude,latitude,height}

获取相机位置

cameraControl.getHeight() -> number

获取相机高度

cameraControl.setHeight(height) -> void

设置相机高度

实例化参数

参数名 类型 必填 默认值 说明
height number 高度(米)
cameraControl.getCenter() -> {longitude,latitude}

获取地图中心点

cameraControl.setCenter(longitude, latitude) -> void

设置地图中心点

cameraControl.getZoomLevel() -> number

获取地图层级

cameraControl.setZoom(zoomLevel) -> void

设置地图层级

参数名 类型 必填 默认值 说明
zoomLevel number 地图层级
cameraControl.getViewRect() -> ViewRect

获取地图显示范围

ViewRect

属性名 类型 必填 默认值 说明
west number 最小经度
south number 最小纬度
east number 最大经度
north number 最大纬度
cameraControl.setViewRect(viewRect) -> void

设置地图显示范围

属性名 类型 必填 默认值 说明
viewRect ViewRect 地图范围
viewRect.west number 最小经度
viewRect.south number 最小纬度
viewRect.east number 最大经度
viewRect.north number 最大纬度

示例

var cc = new CMSRMap.CameraControl(viewer);
var rect = {west: 121.56856570625415, south: 31.20275811669924, east: 121.61389029374591, north: 31.225437883300746};
cc.setViewByRect(rect);
cameraControl.getOrientation() -> {heading,pitch,roll}

获取相机视角

cameraControl.setOrientation({heading,pitch,roll}) -> void

设置相机视角

wms/wmts/wfs 加载

  • fileLoadControl.loadFile(fileUrl, fileType, viewer, needFlyTo = true, options)

加载文件

参数名 类型 必填 默认值 说明
fileUrl string 文件url
fileType string 文件类型 ["wms", "wmts", "wfs"]
viewer object map viewer
needFlyTo boolean true 是否加载后立刻显示到地图中心
options boolean 额外可配置的图层属性
options.alpha number 40 图层不透明度
options.rectangle object 全球 图层范围
  • fileLoadControl.unloadFile(file, fileType, viewer)

移除文件

参数名 类型 必填 默认值 说明
file object loadFile后得到的file对象
fileType string 文件类型 ["wms", "wmts", "wfs"]
viewer object map viewer

文件加载

  • fileLoadControl.loadFile(fileUrl, fileType, viewer, needFlyTo = true, options)

加载文件

参数名 类型 必填 默认值 说明
fileUrl string 文件url
fileType string 文件类型 ["json", "geojson", "topojson", "gltf", "glb", "3dtiles"]
viewer object map viewer
needFlyTo boolean true 是否加载后立刻显示到地图中心
options boolean 额外可配置的图层属性
options.alpha number 40 图层不透明度
options.fillColor string 图层底色
options.strokeAlpha number 100 符号不透明度
options.strokeColor string 符号颜色
options.strokeWidth number 2 符号粗细 px
options.clampToGround boolean false 是否贴地
  • fileLoadControl.unloadFile(file, fileType, viewer)

移除文件

参数名 类型 必填 默认值 说明
file object loadFile后得到的file对象
fileType string 文件类型 ["json", "geojson", "topojson", "gltf", "glb", "3dtiles"]
viewer object map viewer

图层样式编辑

  • fileEditControl.editFile(file, fileType, options)

编辑文件

参数名 类型 必填 默认值 说明
file object loadFile后得到的file对象
fileType string 文件类型 ["wms", "wmts", "wfs", "json", "geojson", "topojson", "gltf", "glb"]
options boolean 额外可配置的图层属性
options.alpha number 40 图层不透明度
options.fillColor string 图层底色
options.strokeAlpha number 100 符号不透明度
options.strokeColor string 符号颜色
options.strokeWidth number 2 符号粗细 px
  • fileLoadControl.flyToFile(file, fileType, viewer, options)

定位至文件

参数名 类型 必填 默认值 说明
file object
fileType string
viewer object map viewer
options.pitch number 俯角 为负数 取值为 0到-90
options.range number 相机到图层中心点的距离

空间量测

测量开启后,左键加点,右键完成

  • measureControl.measurePoint()
    开启坐标测量

  • measureControl.measureDistance()
    开启距离测量

  • measureControl.measure3dTiles(options)
    开启3d tiles上的测量,大范围测量地形时可能数值不准

参数名 类型 必填 默认值 说明
options object
options.showSpaceDistance boolean true 是否显示空间距离
options.showHorizontalDistance boolean true 是否显示水平距离
options.showVerticalDistance boolean true 是否显示垂直距离
  • measureControl.measureAltitudeDiff()
    开启高差测量

  • measureControl.measureArea()
    开启面积测量

  • measureControl.clearMeasure()
    删除地图上的测量标绘

3dtiles

3dtiles平移

  • tilesEditor.moveTo(tileLayer, longitude, latitude, height) static
  • @parm: tileLayer: 3dtiles 图层 (loadFile返回值)
  • @parm:longitude:经度
  • @parm:latitude: 纬度
  • @parm: height: 高度 defult 地形高度

3dtiles缩放

  • tilesEditor.scale(tileLayer, scaleFac) static
  • @parm: tileLayer: 3dtiles 图层
  • @parm:scaleFac:缩放比例

3dtiles旋转工具

  • tileEditorControl.enableTileRotate(tilelayer)

启用旋转工具,使用鼠标编辑旋转模型

@parm: tileLayer: 3dtiles 图层 (loadFile返回值)

  • tileEditorControl.disableTileRotate()

关闭旋转工具,结束鼠标编辑

3dtiles平移工具

  • tileEditorControl.enableTileTranslate(tilelayer)

启用旋转工具,使用鼠标编辑平移模型

@parm: tileLayer: 3dtiles 图层 (loadFile返回值)

  • tileEditorControl.disableTileTranslate()

关闭平移工具,结束鼠标编辑

layer 图层管理

LayerControl类

layer.LayerControl

飞行漫游控制类,下面接口说明中layerControl代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
options object 配置项
options.autoCenter object false 是否在从不可见切换到可见时自动定位到图层*

实例化示例

var layerControl = new CMSRMap.layer.LayerControl(viewer);
layerControl.addOperationalLayer(layerConfig) -> layer
参数名 类型 必填 默认值 说明
layerConfig object 图层配置

添加图层,返回单个图层实例,返回的layer.config 中含有该图层的id

示例

layers.addOperationalLayer( {
    pid: 3050, // 图层的文件夹id,如无可不填
    type: 'kml', // 图层类型
    name: '省界线2', // 图层名称
    url: 'http://localhost:3000/zysy/data/kml/province.kml', // 图层链接
    symbol: { // 图层样式配置
            styleOptions: {
            color: '#00FF00',
            width: 2,
        },
    },
    visible: true, // 图层加载时是否显示
    flyTo: true // 图层加载后定位到图层
});
layerControl.removeOperationalLayer(id) -> void
参数名 类型 必填 默认值 说明
id number 图层id

根据移除图层

layerControl.getLayerById(id) -> layer
参数名 类型 必填 默认值 说明
id number 图层id

根据id返回图层

layerControl.getLayers() -> layerDict

获得所有图层

layerControl.centerAtById(id) -> void
参数名 类型 必填 默认值 说明
id number 图层id

定位到图层

layerControl.getLayerVisible(id) -> boolean
参数名 类型 必填 默认值 说明
id number 图层id

根据id返回图层是否设置为显示

layerControl.updateLayerVisibleById(id,visible) -> void
参数名 类型 必填 默认值 说明
id number 图层id
visible visible 是否可见

根据id设置图层是否显示

layerControl.getBasemap() -> layer

获取当前底图

layerControl.changeBaseMap(name) -> void
参数名 类型 必填 默认值 说明
name string initviewer basemaps 中图层配置项里的name

切换当前底图

定位

  • layer.coordLocation(viewer, locationInfo)

已废弃,经纬度定位(异步)

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
locationInfo array 经纬度数组,单个经纬度形如 [ 经度, 纬度]

示例

CMSRMap.layerControl.coordLocation(viewer,[[116.3905,39.92195],[116.3505,39.917],[116.403,39.88]]);
  • viewer.flyTo(target)

图层对象定位

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
target object fileLoadControl.loadFile 的返回参数,或者自定义标绘的entity
  • layer.locateByFeature(viewer, feature, options)

要素定位

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
feature geojson geojson格式的对象,需要第一层type为FeatureCollection
options object 配置项
options.needFlyTo boolean false 是否需要飞行动画
options.height number 5000 相机高度,注意仅在坐标只有一个时可用
options.orientation object {heading: 360,pitch: -90,roll: 0} 相机角度

示例

CMSRMap.layerControl.locateByFeature(viewer,{"type":"FeatureCollection","features":[
            {"type":"Feature","properties":{},"geometry":{"type":"Point","coordinates":[116.39070510864258,39.9027571616608]}},
            {"type":"Feature","properties":{},"geometry":{"type":"LineString","coordinates":[[116.4605712890625,40.01367962745832],[116.47653579711913,40.013153729849954],           [116.49387359619142,39.99737491734879],[116.51052474975586,40.01210192247637],[116.52975082397461,40.02091030864033],[116.54794692993164,40.026825750639496]]}},    {"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[116.27792358398436,39.845449231287226],[116.28135681152342,39.83068633533497],            [116.33010864257814,39.832268225979355],[116.31088256835936,39.854937988531276],[116.27792358398436,39.845449231287226]]]}},
            {"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[116.20634078979491,39.92277071156262],[116.20548248291016,39.91579296675271],[116.22264862060547,39.91789953067524],[116.2217903137207,39.92303400876581],[116.20634078979491,39.92277071156262]]]}},
            {"type":"Feature","properties":{},"geometry":{"type":"LineString","coordinates":[[116.44821166992188,39.86099956341943],[116.47602081298827,39.836486422931394],[116.4997100830078,39.816975090490004],[116.52099609375,39.83253187087836],[116.54056549072267,39.847294370139394]]}}
        ]})
  • layer.locateByCoordinates(viewer, positionArray, options)

坐标定位

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
positionArray object 经纬度数组,形如[[120,30],[110,20]]
options object 配置项
options.needFlyTo boolean false 是否需要飞行动画
options.height number 5000 相机高度,注意仅在坐标只有一个时可用
options.orientation object {heading: 360,pitch: -90,roll: 0} 相机角度

示例

CMSRMap.layer.locateByCoordinates(viewer, [[120,30],[110,20]],{orientation:{heading: 45, pitch: -70}, needFlyTo: true})

roam 飞行漫游

使用方法

该模块包含UI和代码逻辑,主要依靠RoamControl类实现主要功能逻辑,zysy/widgets/roamLine包含飞行路线列表弹窗样式代码,zysy/widgets/roamFly包含飞行信息弹窗样式代码,如有修改样式的需求,可以直接修改上述两个文件夹中的文件。

RoamControl类

roam.RoamControl

飞行漫游控制类,下面接口说明中roamControl代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
lineList Array 飞行路线列表
modelDefine object 默认有model_car和model_air 模型定义

实例化示例

var modelDefine = {
    "model_car": {
        "show": true, // 是否显示
        "uri": "http://localhost:3000/zysy/data/gltf/qiche.gltf", // 模型位置
        "scale": 0.2, // 模型缩放比例
        "minimumPixelSize": 50 // 模型最小像素大小
    },
    "model_air": {
        "show": true,
        "uri": "http://localhost:3000/zysy/data/gltf/feiji.glb",
        "scale": 0.1,
        "minimumPixelSize": 50
    }
};
var lineList = [
    {
        "id": "0911150734",// 唯一标记飞行路线的id
        "name": "贴地路线",// 飞行路线名称
        "geometry": { // 地理信息
            "type": "LineString", // 固定为 LineString
            // coordinates为坐标点集,单个点为数组,值分别为 [经度, 纬度, 高程]
            "coordinates": [[116.043233, 30.845286, 392.48], [116.046833, 30.846863, 411.33], [116.052137, 30.848801, 439.45], [116.060838, 30.850918, 442.91], [116.069013, 30.852035, 435.14], [116.18739, 30.854441, 244.53], [116.205214, 30.859332, 300.96]]
        },
        "properties": {
            "edittype": "polyline", // 固定为polyline
            "name": "线", // 固定为线
            "position": {
                "height": true,  // 是否显示高程
                "minCount": 2, // 最少需几个点
            },
            "style": {"color": "#ffff00", "width": 3, "show": true}, // 路线样式
            "attr": {
                "id": "0911150734",// 唯一标记飞行路线的id
                "name": "贴地路线", // 飞行路线名称
                "model": "model_car", // 模型类型
                "clampToGround": true, // 是否贴地
                "showGroundHeight": false, // 离地高度
                "showLabel": false, // 是否显示轨迹名
                "showLine": true, // 是否显示轨迹
                "showShadow": false, // 是否显示投影
                "shadowType": "wall", // 投影类型,cylinder圆锥,wall线下轨迹
                "cameraType": "gs", // 飞行时相机视角配置,gs跟随视角,sd锁定视角,dy第一视角
                "followedX": 50, // 锁定视角时距离
                "followedZ": 10, // 锁定视角时高度
                "clockLoop": false, // 是否循环播放
                "remark": "备注"
            },
            "type": "polyline", // 固定为polyline
            "speed": 160 // 飞行速度 ,km/h
        }
    },
    {
        "id": "0629161546",
        "name": "城市飞行",
        "geometry": {
            "type": "LineString",
            "coordinates": [[117.128256, 31.852721, 600], [117.163191, 31.853176, 600], [117.181754, 31.854023, 600]]
        },
        "properties": {
            "edittype": "polyline",
            "name": "线",
            "position": {"height": true, "minCount": 2},
            "style": {
                "color": "#ffff00",
                "width": 3,
                "show": false,
                "opacity": 0.5,
                "lineType": "solid",
                "outline": false,
                "outlineColor": "#ffffff",
                "outlineWidth": 2,
                "clampToGround": false,
                "zIndex": 0
            },
            "attr": {
                "id": "0629161546",
                "name": "城市飞行2",
                "model": "model_air",
                "showGroundHeight": true,
                "showLabel": false,
                "showLine": true,
                "showShadow": true,
                "shadowType": "cylinder",
                "cameraType": "gs",
                "followedX": 50,
                "followedZ": 10,
                "clockLoop": false,
                "remark": ""
            },
            "type": "polyline"
        }
    },
    {
        "id": "0617105731",
        "name": "山区漫游",
        "geometry": {
            "type": "LineString",
            "coordinates": [[116.025851, 30.848967, 1311.6], [116.098851, 30.833606, 1916.2], [116.154079, 30.86119, 1693.3], [116.171732, 30.927008, 1588.6], [116.142015, 30.980604, 1963.6], [116.080821, 31.001745, 2078.7], [116.022691, 30.965067, 1756.5], [116.016616, 30.904896, 1573.4]]
        },
        "properties": {
            "edittype": "polyline",
            "name": "线",
            "position": {"height": true, "minCount": 2},
            "style": {
                "color": "#ffff00",
                "show": false,
                "lineType": "solid",
                "width": 4,
                "clampToGround": false,
                "outline": false,
                "outlineColor": "#ffffff",
                "outlineWidth": 2,
                "opacity": 1,
                "zIndex": 0
            },
            "attr": {
                "id": "0617105731",
                "name": "山区漫游",
                "point": "",
                "showLabel": false,
                "showLine": false,
                "showShadow": false,
                "showHeightWarn": false,
                "warnHeight": 500,
                "cameraType": "dy",
                "followedX": 50,
                "followedZ": 10,
                "remark": ""
            },
            "type": "polyline",
            "speed": 300
        }
    },
    {
        "id": "0617110137",
        "name": "工业区",
        "geometry": {
            "type": "LineString",
            "coordinates": [[106.714474, 26.838533, 1303.3], [106.714448, 26.839618, 1309.4], [106.714389, 26.840687, 1310.8], [106.714685, 26.842783, 1295], [106.715975, 26.846232, 1279.7], [106.718505, 26.852513, 1278.6]]
        },
        "properties": {
            "edittype": "polyline",
            "name": "线",
            "position": {"height": true, "minCount": 2},
            "style": {
                "color": "#ffff00",
                "show": false,
                "lineType": "solid",
                "width": 4,
                "clampToGround": false,
                "outline": false,
                "outlineColor": "#ffffff",
                "outlineWidth": 2,
                "opacity": 1,
                "zIndex": 0
            },
            "attr": {
                "id": "0617110137",
                "name": "工业区",
                "point": "point",
                "showLabel": false,
                "showLine": false,
                "showShadow": false,
                "showHeightWarn": false,
                "warnHeight": 500,
                "cameraType": "dy",
                "followedX": 200,
                "followedZ": 50,
                "model": "",
                "remark": ""
            },
            "type": "polyline"
        }
    },
];
var roamControl = new CMSRMap.roam.RoamControl(viewer, {
    lineList,
    modelDefine,
});
roamControl.start();
roamControl.viewer

传入的viewer

roamControl.lastEditEntity

正在编辑的entity

roamControl.isOnDraw

是否正在编辑

roamControl.arrFlyTable

传入的lineList,路线列表

roamControl.modelDefine

传入的modelDefine,模型定义

roamControl.roamLineWindow

路线列表弹窗window实例

roamControl.roamLineWidget

路线列表弹窗widget实例

roamControl.roamFlyWindow

飞行路线信息弹窗window实例

roamControl.roamFlyWidget

飞行路线信息弹窗widget实例

roamControl.start() -> void

初始化飞行路线列表弹窗

roamControl.toRoamFly(lineData) -> void

传入路线数据进入路线漫游

参数名 类型 必填 默认值 说明
lineData object lineList中的一项
roamControl.destroy() -> void

销毁roamControl

roamControl.updateAttr2map(attr) -> void

更新图上信息

参数名 类型 必填 默认值 说明
attr object lineData的properties部分

传入路线数据进入路线漫游

roamControl.updateGeo2map(coords, withHeight) -> void
参数名 类型 必填 默认值 说明
coords Array 坐标列表
withHeight Array coords列表是否包含高程信息

更新图上的几何形状、坐标等

roamControl.getGeoJson(id) -> geojson
参数名 类型 必填 默认值 说明
id string 路线id

返回路线的geojson

roamControl.jsonToLayer(json, isClear, isFly) -> entity

加载geojson,返回路线entity实例

roamControl.deleteAll() -> void

删除地图上所有路线及模型

roamControl.deleteEntity(id) -> void
参数名 类型 必填 默认值 说明
id string 路线id

根据id在地图上删除对应路线

roamControl.deleteCurrentEntity() -> void

在地图上删除当前编辑路线

roamControl.hasEdit(value) -> void
参数名 类型 必填 默认值 说明
value boolean 路线是否可编辑

路线是否可编辑

roamControl.saveForGeoJson(lineData) -> file
参数名 类型 必填 默认值 说明
lineData Array lineList中的一项

导出geojson格式的路线列表

roamControl.toRoamLine() -> void

打开路线列表弹窗

轨迹

TrackPlayControl类

track.TrackPlayControl

轨迹回放控制类,下面接口说明中trackPlayControl代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
options object 配置项
options.trackStyle object DefaultTrackStyle 轨迹默认样式
options.showTimeLine boolean false 是否显示默认时间轴
options.clock.multiplier number 10 轨迹播放倍数

参数 DefaultTrackStyle

const DefaultTrackStyle = {
  billboard: {
    show: false,
    image: 'zysy/data/img/car.png', // 图片地址
    scale: 1, // 缩放比例
    rotation: 0,
    width: undefined, // 图片宽(像素)
    height: undefined, // 图片高(像素)
  },
  model: {
    show: true,
    uri: 'zysy/data/gltf/qiche.gltf', // 模型地址
    scale: 1, // 缩放比例
    minimumPixelSize: 24, // 最小像素大小
  },
  path: {
    // lineType: 'dash',
    color: 'rgba(255,255,0, 0.5)', // 尾迹颜色
    width: 8, // 尾迹宽度
    show: true,
  },
  line: {
    show: true,
    width: 8, // 轨迹宽度
    material: 'rgba(8,112,247, 0.25)', // 轨迹颜色
    loop: false, // 是否循环播放
  },
  label: {
    font: 'bold small-caps normal 18px 楷体', // 标注字体
    style: BaseMap.LabelStyle.FILL, // 标注字体
    fillColor: BaseMap.Color.fromCssColorString('rgba(255,255,0, 1)'), // 标注颜色
    horizontalOrigin: BaseMap.HorizontalOrigin.CENTER, // 标注水平位置
    verticalOrigin: BaseMap.VerticalOrigin.TOP, // 标注垂直位置
    pixelOffset: new BaseMap.Cartesian2(0, 0), // 标注位移
    eyeOffset: new BaseMap.Cartesian3(0, 0, -50), // 标注视觉位移
  },
};
trackPlayControl.play() -> void

播放轨迹回放

trackPlayControl.pause() -> void

暂停轨迹回放

trackPlayControl.setMultiplier(value) -> void

设置轨迹回放速率

参数名 类型 必填 默认值 说明
value number 1 轨迹回放速率
trackPlayControl.setCurrentTime(date) -> void

设置当前时间

参数名 类型 必填 默认值 说明
date Date 当前时间
trackPlayControl.addTrack() -> void

添加轨迹

trackPlayControl.addTrack({
    id: id, // 轨迹id
    name: '加班呢啊', // 轨迹名称
    autoHeading: false,
    trackStyle: { // 同初始化时设置DefaultTrackStyle
        model: {
            show: true,
            uri: 'zysy/data/gltf/qiche.gltf',
            scale: 1,
            minimumPixelSize: 64,
        },
        path: {
            // lineType: 'dash',
            color: 'rgba(255,255,0, 1)',
            width: 12,
            show: true,
        },
        label: {
            // text: '加班呢啊',
        },
    },
    popup: {
        anchor: [0, -20], // 左右、上下的偏移像素值。
        timeRender: true, // 是否实时更新html
        html: (entity, currentTime) => {
        const html = '<div>加班呢</div>';
        return html;
        },
    },
    data: playPoints,
});
// playPoints 是由 newPoint 组成的数组
const newPoint = {
    id: modifiedPoint.gpsid,
    longitude: modifiedPoint.modi_longitude,
    latitude: modifiedPoint.modi_latitude,
    createTime: point.collect_time,
    bearing: point.azimuth,
    speed: point.speed,
    altitude: point.height,
};

轨迹回放示例

var playPoints = [
    {
        "id": "29477",
        "longitude": 121.598349999999996,
        "latitude": 31.255749999999999,
        "createTime": "2020-05-29 10:21:01",
        "bearing": 180.599999999999994,
        "speed": 52.039999999999999,
        "altitude": 8.039999999999999
    },
    {
        "id": "29513",
        "longitude": 121.598083000000003,
        "latitude": 31.252967000000002,
        "createTime": "2020-05-29 10:21:37",
        "bearing": 186.199999999999989,
        "speed": 17.350000000000001,
        "altitude": 7.990000000000000
    },
    {
        "id": "29531",
        "longitude": 121.599249999999998,
        "latitude": 31.253050000000002,
        "createTime": "2020-05-29 10:21:56",
        "bearing": 70.120000000000005,
        "speed": 39.079999999999998,
        "altitude": 7.450000000000000
    },
    {
        "id": "29567",
        "longitude": 121.600166999999999,
        "latitude": 31.253333000000001,
        "createTime": "2020-05-29 10:22:32",
        "bearing": 70.849999999999994,
        "speed": 11.390000000000001,
        "altitude": 7.420000000000000
    }
];
var trackPlayControl = new CMSRMap.track.TrackPlayControl(window.viewer);
trackPlayControl.addTrack({
    id: 'id',
    name: '加班呢啊',
    autoHeading: false,
    data: playPoints,
});
trackPlayControl.play();
trackPlayControl.getTrackItemById(id) -> TrackItem

获取轨迹

参数名 类型 必填 默认值 说明
id string | number addTrack时设置的id
trackPlayControl.removeTrackById(id) -> TrackItem

移除轨迹

参数名 类型 必填 默认值 说明
id string | number addTrack时设置的id
trackPlayControl.hideAllPopup() -> void

隐藏全部popup

trackPlayControl.removeAllTrack() -> void

删除所有轨迹

trackPlayControl.removeTimeLine() -> void

删除事件轴

trackPlayControl.destroy() -> void

销毁对象

鹰眼地图

OverflowControl类

OverflowControl类

鹰眼控制类,下面接口说明中ovflowControl代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
options object 鹰眼初始化配置
options.container string|HTMLElement 鹰眼地图的容器
options.outline boolean true 是否显示边框
options.outlineColor cssColorString rgba(68,68,187,0.25) 视野框边框颜色
options.outlineWidth number 5 视野框边框宽度,单位像素
options.fillColor cssColorString rgba(145,163,216,0.25) 视野框填充颜色
options.basemaps Array initViewer时配置的basemaps 鹰眼地图显示的地图,配置同initViewer的basemaps

示例

var overviewControl = new CMSRMap.OverviewControl(viewer, {
    container: document.getElementById('eye'),
    outline: true,
    outlineColor: '#66ccff',
    outlineWidth: 2,
    fillColor: 'rgba(145,163,216,0.25)',
    basemaps: [
        {
            name: '高德',
            type: 'www_gaode',
            crs: 'gcj',
            layer: 'vec',
            visible: true,
        }
    ]
});
ovflowControl.destroy() -> void

销毁ovflowControl

地图搜索

SpatialPropertyQuerier类

SpatialPropertyQuerier类

地图搜索类,下面接口说明中spatialPropertyQuerier代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
spatialPropertyQuerier.initSpatialPropertyQuerier(queryConfig) -> void

启动地图搜索弹窗

示例


const layerList = [{
  name: '样例数据',
  // wfs服务地址
  url: 'http://localhost:8080/geoserver/wfs',
  // wfs服务配置
  parameters: {
    service: 'WFS',
    request: 'GetFeature',
    typeName: 'zysy3d:t_data_querytest',
    version: '1.0.0',
    outputFormat: 'application/json',
    maxFeatures: 200,
  },
  // 搜索结果点击时是否显示弹窗
  popup: 'all',
  label: {},
}];

const queryConfig = {
  layerList,
  // 搜索结果列表配置
  tableColumns: [
    {
      title: '序号',
      sortable: false,
      align: 'center',
      width: 50,
      formatter(value, row, index) {
        return index + 1;
      },
    },
  ],
  // 搜索哪些字段,不填则搜索全部字段
  queryField: {
    // namefield: ['lane_id', 'road_id'],
    // 指定时间字段
    // timefield: 'time',
  },
  success: console.log,
};
// console.log('queryConfig', queryConfig);
const querier = new SpatialPropertyQuerier(window.viewer);
querier.initSpatialPropertyQuerier(queryConfig);
spatialPropertyQuerier.destroy() -> void

销毁spatialPropertyQuerier

html控件

DivPoint

html控件类,下面接口说明中divPoint代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
options object 初始化配置
options.html string|HTMLElement 显示在地图上的内容
options.position Cartesian3 显示的坐标地址

示例

// 初始化
var divPoint = new CMSRMap.DivPoint(
    viewer,
    {
        html:'<div id="container">html标记</div>',
        // (经度, 纬度, 海拔)
        position: CMSRMap.BaseMap.Cartesian3.fromDegrees(120, 31.5)
    }
);
// 挂载vue组件
// 注意div-point的div容器设置了 css属性 pointer-events: none; 会使点击事件无效,如需点击事件可自行覆盖该属性
import Counter from './Counter.vue';
import Vue from 'vue';

var divPoint = new CMSRMap.DivPoint(viewer,{html:'<div id="container">文字</div>',  position: Cesium.Cartesian3.fromDegrees(
    120, // 经度
    31.5, // 纬度
  )});
setTimeout(() => {
  const CounterComponent = Vue.extend(Counter);
  new CounterComponent().$mount('#container');
}, 60);

// Counter.vue
<template>
  <div class="counter-con">
    <div>{{num}}</div>
    <el-button class="button" @click="incr">自增加一</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      num: 0,
    };
  },
  methods: {
    incr() {
      this.num++;
    },
  },
};
</script>
divPoint.setVisible(visible) -> void
参数名 类型 必填 默认值 说明
visible boolean 显示还是隐藏html

显示隐藏html

divPoint.destroy() -> void

销毁divPoint

LabelDivPoint

html控件类,下面接口说明中labelDivPoint代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
options object 初始化配置
options.labelDivUrl string 文字标注GeoJson数据
options.polygonShowBool boolean false 文字标注外部矩形显示
options.labelId string ID 文字标注属性中的ID取值,需为唯一值
options.labelContent string NAME 文字标注内容取值
options.direction string DIRECTION 文字标注方向取值,1表示自西向东,2表示自东向西
options.heightToScale Array [ { height: 20, scale: 1 }, { height: 40, scale: 0.8 },{ height: 60, scale: 0.6 },{ height: 80, scale: 0.4 },{ height: 160, scale: 0.2 }, ]; 对不同高度控制显示文字框的缩放级别,height表示高度,scale表示显示文字标注缩放级别
options.labelColor string 'RGB(204,204,204)' 文字颜色
options.labelBkgColor string 'RGBA(0,0,0,0)' 文字背景颜色
options.labelFontFamily string 'Microsoft YaHei' 文字字体
options.labelFontSize string '14px' 文字默认原始字体大小

示例

// 初始化
      var labelDivPoint = new CMSRMap.LabelDivPoint(viewer, {
        labelDivUrl: labelJson,
        polygonShowBool :false,
        labelContent:"VALUE",
        labelId:"ID",
      });

labelDivPoint.show()

显示labelDivPoint

labelDivPoint.destroy() -> void

销毁labelDivPoint

Entity事件

EntityEventHandler

Entity事件类,下面接口说明中entityEventHandler代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
options object 初始化配置
options.handleScreen boolean false 是否在未捕捉到entity时触发事件,即触发地图的单击、双击等等,并非所有事件都可用于地图,例如拖拽事件不能用于地图

示例

// 初始化
var entityEventHandler = new CMSRMap.EntityEventHandler(viewer, { handleScreen: true });
entityEventHandler.addEntityEventListener(CMSRMap.EntityEventHandler.EventTypes.LEFT_CLICK, (entity, screenPosition, coordinates) => console.log(entity, screenPosition, coordinates));
var ee = new CMSRMap.EntityEventHandler(viewer);
ee.addEntityEventListener('MOUSE_LEAVE',(...rest)=>{console.log('MOUSE_LEAVE',rest)});
entityEventHandler.addEntityEventListener(type, action)

增加entity的事件监听器,注意需要entity所在drawControl开启positionEdit,才可以拖拽。
事件类型包括单击、双击、右击、鼠标移入、鼠标移出、鼠标在标绘上移动、拖拽开始、拖拽结束、拖拽中等等。

参数名 类型 必填 默认值 说明
type EntityEventHandler.EventTypes 从EntityEventHandler.EventTypes中取值
action fucntion 回调函数
// 拖拽示例
var drawControl = new CMSRMap.draw.DrawControl(viewer);
var entity = drawControl.addMarkerByGeoJson({"type":"FeatureCollection","features":[{"type":"Feature","properties":{"name":"图标点2","type":"billboard","edittype":"billboard","style":{"image":"https://webapi.amap.com/images/car.png"},"attr":{"id":"xiaomo","name":"","remark":""}},"geometry":{"type":"Point","coordinates":[121.60156,31.241837,-0.02]}}]})[0];
viewer.flyTo(entity);
drawControl.startPositionEdit();
var ee = new CMSRMap.EntityEventHandler(viewer);
ee.addEntityEventListener('DRAG',(...rest)=>{console.log('DRAG',rest)});
entityEventHandler.removeEntityEventListener(type, action)

删除entity的事件监听器

参数名 类型 必填 默认值 说明
type EntityEventHandler.EventTypes 从EntityEventHandler.EventTypes中取值
action fucntion 回调函数
entityEventHandler.removeAllEventHandler()

删除全部的entity事件监听器

entityEventHandler.destroy() -> void

销毁entityEventHandler

Camera事件

CameraEventHandler

相机事件控件类,下面接口说明中cameraEventHandler代表类实例。

实例化参数

参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值

示例

// 初始化
var ce = new CMSRMap.CameraEventHandler(viewer);
function callback(...rest){
  console.log('coco', rest);
}
ce.addEventListener('CHANGE_HEIGHT',callback);
cameraEventHandler.addEventListener(type, action)

增加事件监听。

参数名 类型 必填 默认值 说明
type CameraEventHandler.EventTypes CameraEventHandler.EventTypes中取值
action fucntion 回调函数
CameraEventHandler.EventTypes = {
  CHANGE: 'CHANGE', // 相机变化即地图的高度或者可视区域变化
  CHANGE_HEIGHT: 'CHANGE_HEIGHT', // 高度变化
  CHANGE_ZOOM_LEVEL: 'CHANGE_ZOOM_LEVEL', // 层级变化
  MOVE_START: 'MOVE_START', // 相机开始移动
  MOVE_END: 'MOVE_END', // 相机停止移动
};
cameraEventHandler.removeEventListener(type, action)

删除事件监听器。

参数名 类型 必填 默认值 说明
type CameraEventHandler.EventTypes CameraEventHandler.EventTypes中取值
action fucntion 回调函数
cameraEventHandler.destroy() -> void

销毁cameraEventHandler

工具方法

canvas坐标系转经纬度

  • CMSRMap.utils.canvasPositionToCoordinates(viewer,position)
参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
position object {x:600,y:240} canvas上鼠标点击的位置

示例

CMSRMap.utils.canvasPositionToCoordinates(viewer,{x:551,y:260});

经纬度转canvas坐标系

  • CMSRMap.utils.coordinatesToCanvasPosition(viewer,position)
参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
position object [经度, 纬度]

示例

CMSRMap.utils.coordinatesToCanvasPosition(viewer,[120,30]);

内部cartesian3坐标系转经纬度

  • CMSRMap.utils.cartesian3ToCoordinates(viewer, position)
参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
cartesian3 object 内部3维坐标系 BaseMap.Cartesian3

示例

CMSRMap.utils.cartesian3ToCoordinates(viewer, cartesian3);

获取entity经纬度

  • CMSRMap.utils.getEntityCoordinate(viewer, entity)
参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值
entity object entity

示例

CMSRMap.utils.getEntityCoordinate(viewer, entity);

是否有地形

  • CMSRMap.utils.hasTerrain(viewer)
参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值

示例

CMSRMap.utils.hasTerrain(viewer);

刷新popup位置

  • CMSRMap.utils.refreshPopupPosition(viewer)
参数名 类型 必填 默认值 说明
viewer object initViewer函数的返回值

示例

CMSRMap.utils.refreshPopupPosition(viewer);

注意事项

  • 不要把viewer设置到vue的data或者compute之类的属性中,不要让vue监听viewer的数据变化,否则可能导致性能问题

  • 尽量重复利用viewer,多次生成销毁viewer而不刷新页面可能造成内存溢出

  • cesium 是3维引擎,2维模式下容易出现问题,请尽量使用3维模式,可以在3维模式下禁止旋转来模仿2维,定位类接口因为flyTo接口可能会改变视角,如果要保持俯仰角为90度,可以使用经纬度定位。

    // 模仿2维常用代码
    viewer.scene.mode = 3; //使用3维地图
    viewer.scene.screenSpaceCameraController.enableTilt = false; //禁止旋转
    // viewer.scene.screenSpaceCameraController.enableRotate = false; //禁止拖动
    
上一篇:input()


下一篇:从零写CRNN文字识别 —— (3)数据加载器