diff --git a/README.md b/README.md index 25af6f129..fad92b38d 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ MapGIS Client for JavaScript:是增强的MapGIS Web开发平台,集成Openla ## 一、开始 ### 1、司马云 -[MapGIS Client for JavaScript](http://develop.smaryun.com:8899/) +[MapGIS Client for JavaScript](http://develop.smaryun.com/) > 本脚本所有的示例都在对应的演示站点有详细的说明教程 diff --git a/docs/jsdoc-config/leaflet/index.md b/docs/jsdoc-config/leaflet/index.md index e1dab62c5..beea464f4 100644 --- a/docs/jsdoc-config/leaflet/index.md +++ b/docs/jsdoc-config/leaflet/index.md @@ -16,7 +16,7 @@ 1. `移动设备`的支持-内部代码框架设计的时候考虑到移动设备的支持.针对移动设备天然支持. -* 官网(website):[http://client.snanyun.com:8899/ui/index.html](http://client.snanyun.com:8899/ui/index.html) +* 官网(website):[http://develop.smaryun.com/#/index](http://develop.smaryun.com/#/index) * 源码(source code):[https://github.com/ParnDeedlit/WebClient-Leaflet](https://github.com/ParnDeedlit/WebClient-Leaflet) diff --git a/docs/jsdoc-config/mapboxgl/docs.json b/docs/jsdoc-config/mapboxgl/docs.json index adca77895..e6c4e8e05 100644 --- a/docs/jsdoc-config/mapboxgl/docs.json +++ b/docs/jsdoc-config/mapboxgl/docs.json @@ -21,7 +21,9 @@ "src/service/node_modules/turf-jsts", "src/service/node_modules/@turf", "src/service/node_modules/polygon-clipping", - "src/service/node_modules/splaytree" + "src/service/node_modules/splaytree", + "src/mapboxgl/node_modules", + "src/mapboxgl/theme" ] }, "plugins": ["plugins/markdown"], diff --git a/docs/jsdoc-config/mapboxgl/index.md b/docs/jsdoc-config/mapboxgl/index.md index 9e0de3b96..7e187abbf 100644 --- a/docs/jsdoc-config/mapboxgl/index.md +++ b/docs/jsdoc-config/mapboxgl/index.md @@ -6,16 +6,14 @@ #### MapboxGL 优点 -> leaflet是常规的的最适合常规gis开发的地图,因此核心功能就是`传统GIS`功能. +> MapboxGL是最适合常规gis开发的地图,因此核心功能就是`传统GIS`功能. 1. `高效矢量瓦片`-真正高效实用的矢量瓦片 1. 顶级可视化-真正`顶级的可视化渲染`,mapboxGL,echartGL,KeplerGl等。 1. `高清矢量图形`- 真正顶级的高清矢量图形绘制SVG,Canvas. 1. Top级互联网技术加持 - 国内Baidu,国外Uber,Mapbox等顶级可视化巨头技术加持. - - -* 官网(website):[http://client.snanyun.com:8899/ui/index.html](http://client.snanyun.com:8899/ui/index.html) +* 官网(website):[http://develop.smaryun.com/#/index](http://develop.smaryun.com/#/index) * 源码(source code):[https://github.com/ParnDeedlit/WebClient-MapboxGL](https://github.com/ParnDeedlit/WebClient-mapboxgl) diff --git a/docs/jsdoc-config/openlayers/index.md b/docs/jsdoc-config/openlayers/index.md index c61789ce8..429c0cf0b 100644 --- a/docs/jsdoc-config/openlayers/index.md +++ b/docs/jsdoc-config/openlayers/index.md @@ -14,7 +14,7 @@ 1. 兼容性 - 兼容老的ie6789等疑难浏览器问题. -* 官网(website):[http://client.snanyun.com:8899/ui/index.html](http://client.snanyun.com:8899/ui/index.html) +* 官网(website):[http://develop.smaryun.com/#/index](http://develop.smaryun.com/#/index) * 源码(source code):[https://github.com/ParnDeedlit/WebClient-openlayers](https://github.com/ParnDeedlit/WebClient-openlayers) diff --git "a/docs/jsdoc-config/service/tutorials/1.\345\277\253\351\200\237\345\205\245\351\227\250.md" "b/docs/jsdoc-config/service/tutorials/1.\345\277\253\351\200\237\345\205\245\351\227\250.md" new file mode 100644 index 000000000..e69de29bb diff --git a/package.json b/package.json index 591715135..7585777bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mapgis/webclient", - "version": "10.5.4", + "version": "10.5.6", "description": "", "main": "index.js", "scripts": { @@ -35,7 +35,7 @@ "test-init": "node ./node_modules/karma/bin/karma init karma.conf.js" }, "author": "mapgis", - "license": "Apache2", + "license": "Apache-2.0", "devDependencies": { "babel-core": "^6.26.3", "babel-eslint": "^10.1.0", @@ -86,16 +86,19 @@ "@mapgis/mapbox-gl": "^1.9.0", "@turf/turf": "^6.3.0", "axios": "^0.18.0", - "cesium": "^1.70.1", + "cesium": "1.84.0", "d3": "^5.16.0", "echarts": "^4.4.0", "fast-xml-parser": "^3.17.6", + "fetch-ie8": "^1.5.0", "jsdoc": "^3.6.3", "leaflet": "^1.7.1", "mapv": "^2.0.40", "ol": "5.3.3", "proj4": "2.3.15", + "promise-polyfill": "^8.2.3", "qs": "^6.9.4", - "webfont-matcher": "^1.1.0" + "webfont-matcher": "^1.1.0", + "svg-pathdata": "^6.0.0" } } diff --git a/src/cesiumjs/index.js b/src/cesiumjs/index.js index 48c051637..313ba64c1 100644 --- a/src/cesiumjs/index.js +++ b/src/cesiumjs/index.js @@ -453,4 +453,4 @@ export { WMTSCapabilities, OGCWMTSInfo, OGCWMSInfo -}; +}; \ No newline at end of file diff --git a/src/cesiumjs/layer/M3DLayer.js b/src/cesiumjs/layer/M3DLayer.js index 57e22c515..64a88d5cc 100644 --- a/src/cesiumjs/layer/M3DLayer.js +++ b/src/cesiumjs/layer/M3DLayer.js @@ -188,7 +188,7 @@ export default class M3DLayer extends BaseLayer { for (let i = 0; i < layers.length; i++) { const layer = layers[i]; const type = parseInt(layer.layerType, 10); - if (type === LayerType.M3DLAYER) { + if (type === LayerType.M3DLAYER || type === LayerType.MODELLAYER) { const { layerRenderIndex, layerIndex, gdbpUrl, isVisible } = layer; let isShow = true; diff --git a/src/cesiumjs/layer/ThirdPartyLayer.js b/src/cesiumjs/layer/ThirdPartyLayer.js index 2c38514a6..d7d4d34dc 100644 --- a/src/cesiumjs/layer/ThirdPartyLayer.js +++ b/src/cesiumjs/layer/ThirdPartyLayer.js @@ -140,7 +140,7 @@ export default class ThirdPartyLayer extends BaseLayer { * let tilelayer = thirdLayer.appendBaiduMap({ptype:'sate'}); */ appendBaiduMap(optionsParam) { - const baiduProvider = this.viewer.imageryLayers.addImageryProvider(new Cesium.BaiduMapProvider(optionsParam)); + const baiduProvider = this.viewer.imageryLayers.addImageryProvider(new Cesium.BaiduMapImagerProvider(optionsParam)); return baiduProvider; } diff --git a/src/cesiumjs/overlay/MapvLayer.js b/src/cesiumjs/overlay/MapvLayer.js index d180714e4..9a08ec0ff 100644 --- a/src/cesiumjs/overlay/MapvLayer.js +++ b/src/cesiumjs/overlay/MapvLayer.js @@ -15,7 +15,7 @@ var idIndex = 0; * @param {Boolean} [mapVOptions.cesium.postRender=false] 是否实时渲染 * @param {Boolean} [mapVOptionscesium.cesium.postRenderFrame=30] 每间隔多少帧渲染一次 * @param container - {Element} 外部传入的div;外接的方式使用mapv - * @example + * @example * // 构建对应的dataset var dataSet = new mapv.DataSet(data); @@ -140,7 +140,7 @@ export default class MapvLayer { this.scene.camera.moveStart.removeEventListener(this.postStartEvent, this); this.scene.camera.moveEnd.removeEventListener(this.postEndEvent, this); } else { - let handler = this.handler; + let handler = this.handler; if (handler) { handler.removeInputAction(this.innerMoveEnd, Cesium.ScreenSpaceEventType.WHEEL); handler.removeInputAction(this.innerMoveStart, Cesium.ScreenSpaceEventType.LEFT_DOWN); @@ -274,10 +274,19 @@ export default class MapvLayer { canvas.style.pointerEvents = 'none'; canvas.style.zIndex = this.mapVOptions.zIndex || 100; - canvas.width = parseInt(this.map.canvas.width); - canvas.height = parseInt(this.map.canvas.height); - canvas.style.width = this.map.canvas.style.width; - canvas.style.height = this.map.canvas.style.height; + // canvas.width = parseInt(this.map.canvas.width); + // canvas.height = parseInt(this.map.canvas.height); + // canvas.style.width = this.map.canvas.style.width; + // canvas.style.height = this.map.canvas.style.height; + canvas.width = + parseInt(this.map.canvas.width) || + parseInt(this.map.container.offsetWidth); + canvas.height = + parseInt(this.map.canvas.height) || + parseInt(this.map.container.offsetHeight); + canvas.style.width = parseInt(this.map.container.offsetWidth) + "px"; + canvas.style.height = parseInt(this.map.container.offsetHeight) + "px"; + var devicePixelRatio = this.devicePixelRatio; if (this.mapVOptions.context == '2d') { canvas.getContext(this.mapVOptions.context).scale(devicePixelRatio, devicePixelRatio); @@ -296,10 +305,18 @@ export default class MapvLayer { canvas.style.pointerEvents = 'none'; canvas.style.zIndex = this.mapVOptions.zIndex || 100; - canvas.width = parseInt(this.map.canvas.width); - canvas.height = parseInt(this.map.canvas.height); - canvas.style.width = this.map.canvas.style.width; - canvas.style.height = this.map.canvas.style.height; + // canvas.width = parseInt(this.map.canvas.width); + // canvas.height = parseInt(this.map.canvas.height); + // canvas.style.width = this.map.canvas.style.width; + // canvas.style.height = this.map.canvas.style.height; + canvas.width = + parseInt(this.map.canvas.width) || + parseInt(this.map.container.offsetWidth); + canvas.height = + parseInt(this.map.canvas.height) || + parseInt(this.map.container.offsetHeight); + canvas.style.width = parseInt(this.map.container.offsetWidth) + "px"; + canvas.style.height = parseInt(this.map.container.offsetHeight) + "px"; var devicePixelRatio = this.devicePixelRatio; if (this.mapVOptions.context == '2d') { canvas.getContext('2d').scale(devicePixelRatio, devicePixelRatio); @@ -378,10 +395,18 @@ export default class MapvLayer { canvas.style.position = 'absolute'; canvas.style.top = '0px'; canvas.style.left = '0px'; - canvas.width = parseInt(this.map.canvas.width); - canvas.height = parseInt(this.map.canvas.height); + // canvas.width = parseInt(this.map.canvas.width); + // canvas.height = parseInt(this.map.canvas.height); //canvas.style.width = this.map.canvas.style.width; //canvas.style.height = this.map.canvas.style.height; + canvas.width = + parseInt(this.map.canvas.width) || + parseInt(this.map.container.offsetWidth) * this.devicePixelRatio; + canvas.height = + parseInt(this.map.canvas.height) || + parseInt(this.map.container.offsetHeight) * this.devicePixelRatio; + canvas.style.width = parseInt(this.map.container.offsetWidth) + 'px'; + canvas.style.height = parseInt(this.map.container.offsetHeight) + 'px'; var devicePixelRatio = this.devicePixelRatio; if (this.mapVOptions.context == '2d') { canvas.getContext('2d').scale(devicePixelRatio, devicePixelRatio); diff --git a/src/cesiumjs/overlay/PopupLayer.js b/src/cesiumjs/overlay/PopupLayer.js index a23f48242..e8c34f718 100644 --- a/src/cesiumjs/overlay/PopupLayer.js +++ b/src/cesiumjs/overlay/PopupLayer.js @@ -1,7 +1,6 @@ import { CesiumZondy } from '../core/Base'; import { updataPopupPosition } from './popup/popup'; -import Cesium from '../../../node_modules/cesium/Source/Cesium'; var popupsIdIndex = 0; @@ -72,6 +71,7 @@ export default class PopupLayer { this.popupContentId = options.popupContentId || 'cesium-popup-content-id-' + popupsIdIndex++; this.options.postRender = this.options.postRender === undefined ? true : this.options.postRender; + this.Cesium = options.Cesium || window['Cesium']; this.scene = map.scene; this.camera = map.camera; @@ -83,7 +83,7 @@ export default class PopupLayer { this.onHide = onHide; } - let ScreenSpaceEventHandler = Cesium.ScreenSpaceEventHandler || window['Cesium'].ScreenSpaceEventHandler; + let ScreenSpaceEventHandler = this.Cesium.ScreenSpaceEventHandler || window['Cesium'].ScreenSpaceEventHandler; this.handler = new ScreenSpaceEventHandler(this.scene.canvas); @@ -96,7 +96,7 @@ export default class PopupLayer { this.cartesian = this.cartesian || this.position.cartesian || - Cesium.Cartesian3.fromDegrees(this.position.longitude, this.position.latitude, this.position.height); + this.Cesium.Cartesian3.fromDegrees(this.position.longitude, this.position.latitude, this.position.height); let vc = this.map.container; let cesumWidgetContainer = undefined; @@ -138,30 +138,27 @@ export default class PopupLayer { infoDiv.style.display = 'none'; if (typeof this.container === 'string') { infoDiv.innerHTML = - '
' + - // '×' + - '
' + - this.container + - '
' + - '
' + - '
' + - '
' + + '
' + + '
' + + this.container + + '
' + + '
' + + '
' + + '
' + '
'; } else { let popupContentDiv = window.document.createElement('div'); popupContentDiv.id = this.popupContentId; - popupContentDiv.className = "cesium-popup"; + popupContentDiv.className = 'cesium-popup'; let popupContentWrapperDiv = window.document.createElement('div'); - popupContentWrapperDiv.className = "cesium-popup-content-wrapper"; + popupContentWrapperDiv.className = 'cesium-popup-content-wrapper'; popupContentWrapperDiv.appendChild(this.container); popupContentDiv.appendChild(popupContentWrapperDiv); - + let tipContainerDiv = window.document.createElement('div'); - tipContainerDiv.className = "cesium-popup-tip-container"; + tipContainerDiv.className = 'cesium-popup-tip-container'; let tipDiv = window.document.createElement('div'); - tipDiv.className = "cesium-popup-tip"; + tipDiv.className = 'cesium-popup-tip'; tipContainerDiv.appendChild(tipDiv); popupContentDiv.appendChild(tipContainerDiv); infoDiv.appendChild(popupContentDiv); @@ -182,7 +179,7 @@ export default class PopupLayer { bindEvent() { let self = this; - this.handler.setInputAction(this.movement, Cesium.ScreenSpaceEventType.LEFT_CLICK); + this.handler.setInputAction(this.movement, this.Cesium.ScreenSpaceEventType.LEFT_CLICK); if (!this.map) { return; } @@ -191,8 +188,8 @@ export default class PopupLayer { this.map.scene.postRender.addEventListener(() => self.update()); } else { this.map.camera.changed.addEventListener(() => self.update()); - this.handler.setInputAction(this.moveStart, Cesium.ScreenSpaceEventType.LEFT_DOWN); - this.handler.setInputAction(this.moveEnd, Cesium.ScreenSpaceEventType.LEFT_UP); + this.handler.setInputAction(this.moveStart, this.Cesium.ScreenSpaceEventType.LEFT_DOWN); + this.handler.setInputAction(this.moveEnd, this.Cesium.ScreenSpaceEventType.LEFT_UP); this.map.scene.camera.moveEnd.addEventListener(() => self.update()); } } @@ -214,8 +211,8 @@ export default class PopupLayer { movement(movement) { var pickedPrimitive = this.map.scene.pick(movement.position); - var pickedEntity = Cesium.defined(pickedPrimitive) ? pickedPrimitive.id : undefined; - if (Cesium.defined(pickedEntity) /* && Cesium.defined(pickedEntity.billboard) */) { + var pickedEntity = this.Cesium.defined(pickedPrimitive) ? pickedPrimitive.id : undefined; + if (this.Cesium.defined(pickedEntity) /* && Cesium.defined(pickedEntity.billboard) */) { if (this.position && this.position.entity) { pickedPrimitive.id === this.position.entity.id; this.show(); diff --git a/src/cesiumjs/overlay/popup/popup.js b/src/cesiumjs/overlay/popup/popup.js index a95127408..0fc8388fa 100644 --- a/src/cesiumjs/overlay/popup/popup.js +++ b/src/cesiumjs/overlay/popup/popup.js @@ -1,5 +1,3 @@ -import Cesium from '../../../../node_modules/cesium/Source/Cesium'; - /** * @description 用来调整相机视角的时候设置对应的 * @param {Viewer} viewer Cesium的viewer对象 @@ -10,56 +8,57 @@ import Cesium from '../../../../node_modules/cesium/Source/Cesium'; * @param {Object} [options.latitude] 传入的纬度,内部换算笛卡尔积 */ export function updataPopupPosition(viewer, cartesian, popupId, popupContentId, options) { - if(!cartesian) return ; + if (!cartesian) return; let scene = viewer.scene; let camera = viewer.camera; let rect = camera.computeViewRectangle(); - const south = Cesium.Math.toDegrees(rect.south) - const north = Cesium.Math.toDegrees(rect.north) - const east = Cesium.Math.toDegrees(rect.east) - const west = Cesium.Math.toDegrees(rect.west) + let Cesium = options.Cesium || window['Cesium']; + const south = Cesium.Math.toDegrees(rect.south); + const north = Cesium.Math.toDegrees(rect.north); + const east = Cesium.Math.toDegrees(rect.east); + const west = Cesium.Math.toDegrees(rect.west); let carto, longitude, latitude; - if(options && options.longitude && options.latitude){ + if (options && options.longitude && options.latitude) { longitude = options.position.longitude; latitude = options.position.latitude; if (longitude < west || longitude > east || latitude > north || latitude < south) { - popup.style.display = "none"; + popup.style.display = 'none'; return; } } else { - carto = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian); + carto = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian); longitude = Cesium.Math.toDegrees(carto.longitude); latitude = Cesium.Math.toDegrees(carto.latitude); } - + var px_position = Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, cartesian); - - if(!px_position) return; + + if (!px_position) return; var res = false; var e = cartesian, i = camera.position, n = scene.globe.ellipsoid.cartesianToCartographic(i).height; - if (!(n += 1 * scene.globe.ellipsoid.maximumRadius, Cesium.Cartesian3.distance(i, e) > n)) { + if (!((n += 1 * scene.globe.ellipsoid.maximumRadius), Cesium.Cartesian3.distance(i, e) > n)) { res = true; } if (longitude < west || longitude > east || latitude > north || latitude < south) { res = false; } - + let popup = window.document.getElementById(popupId); - if(!popup) return; + if (!popup) return; if (res) { - popup.style.display = "block"; + popup.style.display = 'block'; var trackPopUpContent = window.document.getElementById(popupContentId); var popw = document.getElementById(popupContentId).offsetWidth; var poph = document.getElementById(popupContentId).offsetHeight; - trackPopUpContent.style.left = px_position.x - (popw / 2) + "px"; - trackPopUpContent.style.top = px_position.y - (poph - 10) + "px"; + trackPopUpContent.style.left = px_position.x - popw / 2 + 'px'; + trackPopUpContent.style.top = px_position.y - (poph - 10) + 'px'; } else { - popup.style.display = "none"; + popup.style.display = 'none'; } -} \ No newline at end of file +} diff --git a/src/cesiumjs/render/VectorTileLayer.js b/src/cesiumjs/render/VectorTileLayer.js index 4e9779922..627539e07 100644 --- a/src/cesiumjs/render/VectorTileLayer.js +++ b/src/cesiumjs/render/VectorTileLayer.js @@ -4,7 +4,6 @@ import { getLayers, getFonts, getVectorTileSource, getSpritePng } from './vector import VectorTileProvider from './vectortile/VectorTileProvider'; import VectorTileStyle from './vectortile/MapgisVectorTileStyle'; import axios from 'axios'; -import { find } from 'ol/array'; /** * @author 基础平台/创新中心 潘卓然 ParnDeedlit @@ -138,6 +137,10 @@ export class VectorTileLayer { ); } + getLayer() { + return self.provider ? self.provider : undefined; + } + /** * 首先构造矢量瓦片样式,再添加图层 * @function module:客户端渲染.VectorTileLayer.prototype.addLayer diff --git a/src/leaflet/core/Base.js b/src/leaflet/core/Base.js index 4eb0b10ea..a5df7f68e 100644 --- a/src/leaflet/core/Base.js +++ b/src/leaflet/core/Base.js @@ -8,9 +8,13 @@ import L from "leaflet"; L.zondy = L.zondy || {}; L.zondy.control = L.zondy.control || {}; +L.mapgis = L.mapgis || {}; + /** * @module 客户端可视化 */ L.zondy.Clientview = L.zondy.Clientview || {}; L.CRS = L.CRS || {}; + +export {L}; diff --git a/src/leaflet/layer/MapLayer.js b/src/leaflet/layer/MapLayer.js new file mode 100644 index 000000000..ebd85ba4e --- /dev/null +++ b/src/leaflet/layer/MapLayer.js @@ -0,0 +1,148 @@ +import { newGuid } from '../../service/common/Util'; +import { L } from '../core/Base.js'; + +/** + * @class L.mapgis.MapLayer + * @classdesc 新版igserver地图服务加载类 + * @extends L.TileLayer + * @example + //地图容器 + var map = L.map('leaf_map', { + //添加缩放控件 + zoomControl: true, + //投影坐标系 + crs: L.CRS.EPSG4326, + //中心点[y,x] + center: [(30.86431739220 + 30.3383275329) / 2, (114.57307983700002 + 113.97889584400014)/ 2],//武汉建筑 + //最大级数 + maxZoom: 10, + //最小级数 + minZoom: 7, + //显示级数 + zoom: 8 + }); + + //创建地图图层 + var mapLayer = new L.mapgis.MapLayer("http://192.168.199.71:8089/igs/rest/services/layertest/武汉建筑/MapServer", { + layers:'show:0', + imageFormat: 'jpg', + filters:{"0":{"where":"Floor>10"}}, + styles: {"0":{"displayRegionBorder":true}}, + imageTransparent:false, + //只显示一个图层,不平铺显示 + noWrap: true + }).addTo(map); + */ + +var MapLayer = L.TileLayer.extend({ + options: { + imageFormat: null, + imageHeight: 512, + imageWidth: 512, + guid: null, + imageTransparent: null, + filters: null, + styles: null, + layers: null, + crs: null, + isAntialiasing: null + }, + /** + * + * @param url - {String} 必选,地图服务的基地址。例如"http://192.168.199.71:8089/igs/rest/services/layertest/武汉建筑/MapServer". + * @param options - {Object} 属性键值对,地图属性字段。 + * @param {String} [options.imageFormat = 'png'] 可选,图片的格式,支持png|jpg|gif。 + * @param {Object} [options.filters = null] 可选,图层的过滤信息。例如,{"0":{"where":"Floor>10"}}。 + * @param {Object} [options.styles = null] 可选,图层的样式。例如,{"0":{"displayRegionBorder":true}}。 + * @param {String} [options.layers = null] 可选,指定需要被取图的图层序列号。格式:show/hide/include/exclude: layerid1,layerid2。 + 1 show:仅仅显示指定了图层序号的图层 + 2 hide :显示除hide参数指定图层外所有的图层 + 3 include:除显示默认图层(地图文档内图层状态为可见的图层)外,另追加这些被指定的图 层显示,追加的这些图层必须为地图中包含的图层。 + 4 exclude: 从默认图层列表里删除这些被指定的图层后,进行显示 + * @param {String} [options.crs = null] 可选,投影空间参照系,支持mapgis参照系名称和epsg编号。 + * @param {Number} [options.imageHeight = 512] 可选,图片的高度。 + * @param {Number} [options.imageWidth = 512] 可选,图片的宽度。 + * @param {Boolean} [options.isAntialiasing = false] 可选,返回的图片是否抗锯齿。 + * @param {Boolean} [options.imageTransparent = true] 可选,返回的图片是否透明。 + * @param {String} [options.guid = newGuid()] 可选。唯一ID,用户标识地图文档。 + * + */ + initialize: function (url, options) { + this.url = encodeURI(url + '/image'); + var imageHeight = options.imageHeight || 512; + var imageWidth = options.imageWidth || 512; + options.tileSize = window.L.point(imageWidth, imageHeight); + // console.log('maplayer_initialize', options); + L.TileLayer.prototype.initialize.apply(this, arguments); + L.setOptions(this, options); + L.stamp(this); + }, + + onAdd: function (map) { + this._crs = map.options.crs; + this._initLayerUrl(); + L.TileLayer.prototype.onAdd.call(this, map); + }, + + getTileUrl: function (coords) { + var tileBounds = this._tileCoordsToBounds(coords); + var nw = this._crs.project(tileBounds.getNorthWest()); + var se = this._crs.project(tileBounds.getSouthEast()); + var params = '&bbox=' + nw.x + ',' + se.y + ',' + se.x + ',' + nw.y; + return this._layerUrl + encodeURI(params); + }, + + _initLayerUrl: function () { + var vm = this; + var layerUrl = vm.url + '?'; + layerUrl += encodeURI(vm._initAllRequestParams().join('&')); + this._layerUrl = layerUrl; + // console.log('maplayer__initLayerUrl', layerUrl); + }, + + _initAllRequestParams: function () { + var vm = this, + options = vm.options || {}, + params = []; + + // console.log('maplayer_initAllRequestParams', options); + var imageHeight = options.imageHeight || 512; + var imageWidth = options.imageWidth || 512; + params.push('size=' + imageWidth + ',' + imageHeight); + + var guid = options.guid || newGuid(); + params.push('clientId=' + guid); + + if (options.imageFormat) { + params.push('format=' + options.imageFormat); + } + if (options.layers) { + params.push('layers=' + options.layers); + } + if (options.filters) { + params.push('layerFilters=' + JSON.stringify(options.filters)); + } + if (options.styles) { + params.push('layerStyles=' + JSON.stringify(options.styles)); + } + if (options.imageTransparent !== undefined && options.imageTransparent !== null) { + params.push('transparent=' + options.imageTransparent); + } + + if (options.crs) { + params.push('projectionSrs=' + options.crs); + } + + if (options.isAntialiasing !== undefined && options.isAntialiasing !== null) { + params.push('isAntialiasing=' + options.isAntialiasing); + } + + params.push('f=image'); + + return params; + } +}); + +export { MapLayer }; +L.mapgis.MapLayer = MapLayer; +export { L }; diff --git a/src/leaflet/layer/TileLayer.js b/src/leaflet/layer/TileLayer.js new file mode 100644 index 000000000..d30f0ad20 --- /dev/null +++ b/src/leaflet/layer/TileLayer.js @@ -0,0 +1,62 @@ +import {L} from '../core/Base.js'; + +/** + * @class L.mapgis.TileLayer + * @classdesc 新版igserver瓦片服务加载类 + * @extends L.TileLayer + * @example + //地图容器 + var map = L.map("leaf_map", { + //添加缩放控件 + zoomControl: true, + //投影坐标系 + crs: L.CRS.EPSG4326, + center: [(29.969811000000004 + 31.363327503204342) / 2, (113.69534616 + 115.07704496383667) / 2], + //最大级数 + maxZoom: 17, + //最小级数 + minZoom: 7, + //显示级数 + zoom: 8, + }); + + //瓦片地图 + var layer = new L.mapgis.TileLayer( + "http://192.168.199.71:8089/igs/rest/services/layertest/栅格瓦片/TileServer", + { + noWrap: true + } + ).addTo(map); + */ + +var TileLayer = L.TileLayer.extend({ + options: { + // blankTile:null + }, + + initialize: function(url,options){ + this.url = encodeURI(url + "/tileImage"); + L.TileLayer.prototype.initialize.apply(this, arguments); + L.setOptions(this,options); + L.stamp(this); + }, + + onAdd:function(map) { + L.TileLayer.prototype.onAdd.call(this,map); + }, + + getTileUrl: function (coords) { + // var vm = this, + // options = vm.options || {}; + var tileUrl = this.url + '/{z}/{y}/{x}?f=image'; + // if(options.blankTile !== undefined && options.blankTile !== null){ + // tileUrl = tileUrl + '&blankTile=' + options.blankTile; + // } + tileUrl = tileUrl.replace('{x}', coords.x.toString()).replace('{y}', coords.y.toString()).replace('{z}', coords.z.toString()); + return tileUrl; + } +}); + +export {TileLayer}; +L.mapgis.TileLayer = TileLayer; +export {L}; diff --git a/src/leaflet/layer/index.js b/src/leaflet/layer/index.js index ddab5ac91..3ed60a57f 100644 --- a/src/leaflet/layer/index.js +++ b/src/leaflet/layer/index.js @@ -1,5 +1,7 @@ import {MapDocLayer} from './mapDocLayer'; import {MapTileLayer} from './mapTileLayer'; +import {MapLayer} from './MapLayer'; +import {TileLayer} from './TileLayer'; import {MapWMTSLayer} from './mapWmtsLayer'; import {GeneralWMTSLayer} from './generalWmtsLayer'; import {MapVectorLayer} from './mapVectorLayer'; @@ -20,6 +22,8 @@ import { export {MapDocLayer}; export {MapTileLayer}; +export {MapLayer}; +export {TileLayer}; export {MapWMTSLayer}; export {GeneralWMTSLayer}; export {MapVectorLayer}; diff --git a/src/leaflet/layer/mapWmtsLayer.js b/src/leaflet/layer/mapWmtsLayer.js index b2d0b0135..752b99d4f 100644 --- a/src/leaflet/layer/mapWmtsLayer.js +++ b/src/leaflet/layer/mapWmtsLayer.js @@ -1,5 +1,5 @@ -import {Zondy} from '../../service/common/Base'; -import {L} from 'leaflet'; +import { Zondy } from '../../service/common/Base'; +import { L } from 'leaflet'; /** * @author 基础平台/产品2部 龚跃健 @@ -19,6 +19,8 @@ import {L} from 'leaflet'; * @param {String} [option.format = image/png ] 可选。图块输出格式。image/png或image/jpeg * @param {String} [option.tileSize = 256] 可选。瓦片大小 * @param {String} [option.version = 1.0.0] 可选。WMTS版本 + * @param {String} [option.tokenKey = ""] 可选。token的key值(token/tk) + * @param {String} [option.token = ""] 可选。token值 * @example new Zondy.Map.MapWMTSLayer({ //IGServer所在ip地址 @@ -34,116 +36,123 @@ import {L} from 'leaflet'; }) */ var MapWMTSLayer = window.L.TileLayer.extend({ - options: { - version: '1.0.0', - style: '', - serverName: '',//服务名 - tilematrixSet: '', //矩阵集名称 - layer: '', //图层名 - format: 'image/png', - tileSize: 256, - attribution: "Zondy WMTS Data", - noWrap: true - }, - //var layer3 = new ZondyMapWMTSLayer("http://localhost:6163/igs/rest/ogc/WMTSServer", { tilematrixSet: "EPSG:4326_世界地图经纬度LEVEL7_028mm_GB", layer: 'World_level7_WMTS' }).addTo(mymap); - // - initialize: function (options) { // (String, Object) - if (options.url) { - if (options.url.indexOf("?") > -1) { - this._url = options.url.split("?")[0] - } else { - this._url = options.url - } - } else { - var partUrl = '/igs/rest/ogc/WMTSServer' - if (options.serverName && options.serverName !== '') { - partUrl = '/igs/rest/ogc/' + options.serverName + '/WMTSServer' - } - var domain = options && options.domain ? options.domain : ''; - if (domain === '') { - this.networkProtocol = options.networkProtocol !== undefined ? options.networkProtocol : location.protocol.split(":")[0] || "http"; - var ip = options && options.ip ? options.ip : 'localhost'; - var port = options && options.port ? options.port : '6163'; - this._url = encodeURI(this.networkProtocol + '://' + ip + ':' + port + partUrl); - } else { - this._url = encodeURI(domain + partUrl); - } - } - if (this._url.toLowerCase().indexOf("ime-cloud") > -1) {//吉威的数据 - this._url += '?service=WMTS&REQUEST=GetTile' - } else { - this._url += '?service=WMTS&request=GetTile' - } - this.options.origin = options.origin ? options.origin : null; - window.L.setOptions(this, options); - }, - onAdd: function (map) { - this._crs = this.options.crs || map.options.crs; - let bounds = this._crs.projection.bounds; - let northWest = [bounds.min.x, bounds.max.y] - this._origin = this.options.origin ? this.options.origin : northWest - window.L.TileLayer.prototype.onAdd.call(this, map); - }, - /** - * @private - * @function Zondy.Map.MapWMTSLayer.prototype.getTileUrl - * @description 根据行列号获取瓦片地址。考虑发布的wmts的瓦片不按左上角为原点的情况,需另外处理 - * @param coords - {Object} 行列号 - * @return {string} 瓦片地址 - */ - getTileUrl: function (coords) { // (Point, Number) -> String - // var tileBounds = this._tileCoordsToBounds(coords); - // var ne = this._crs.project(tileBounds.getNorthEast()); - // var sw = this._crs.project(tileBounds.getSouthWest()); - // var tileSize = this.options.tileSize; - // var resolution = Math.max(Math.abs(ne.x - sw.x) / tileSize, Math.abs(ne.y - sw.y) / tileSize); - // - // var centerPnt = [(ne.x + sw.x) / 2, (ne.y + sw.y) / 2]; - // var dx = centerPnt[0] - (this._origin)[0]; - // var dy = centerPnt[1] - (this._origin)[1]; - // - // var xGrid = -1e8; - // var yGrid = -1e8; - // - // xGrid = Math.floor(dx / (tileSize * resolution)); - // if (this.options.yAxis === 'down') { - // yGrid = Math.floor(-dy / (tileSize * resolution)); - // } else { - // yGrid = Math.floor(dy / (tileSize * resolution)); - // } + options: { + version: '1.0.0', + style: '', + serverName: '', //服务名 + tilematrixSet: '', //矩阵集名称 + layer: '', //图层名 + format: 'image/png', + tileSize: 256, + attribution: 'Zondy WMTS Data', + noWrap: true + }, + //var layer3 = new ZondyMapWMTSLayer("http://localhost:6163/igs/rest/ogc/WMTSServer", { tilematrixSet: "EPSG:4326_世界地图经纬度LEVEL7_028mm_GB", layer: 'World_level7_WMTS' }).addTo(mymap); + // + initialize: function (options) { + // (String, Object) + if (options.url) { + if (options.url.indexOf('?') > -1) { + this._url = options.url.split('?')[0]; + } else { + this._url = options.url; + } + } else { + var partUrl = '/igs/rest/ogc/WMTSServer'; + if (options.serverName && options.serverName !== '') { + partUrl = '/igs/rest/ogc/' + options.serverName + '/WMTSServer'; + } + var domain = options && options.domain ? options.domain : ''; + if (domain === '') { + this.networkProtocol = options.networkProtocol !== undefined ? options.networkProtocol : location.protocol.split(':')[0] || 'http'; + var ip = options && options.ip ? options.ip : 'localhost'; + var port = options && options.port ? options.port : '6163'; + this._url = encodeURI(this.networkProtocol + '://' + ip + ':' + port + partUrl); + } else { + this._url = encodeURI(domain + partUrl); + } + } + if (this._url.toLowerCase().indexOf('ime-cloud') > -1) { + //吉威的数据 + this._url += '?service=WMTS&REQUEST=GetTile'; + } else { + this._url += '?service=WMTS&request=GetTile'; + } + this.options.origin = options.origin ? options.origin : null; + window.L.setOptions(this, options); + }, + onAdd: function (map) { + this._crs = this.options.crs || map.options.crs; + let bounds = this._crs.projection.bounds; + let northWest = [bounds.min.x, bounds.max.y]; + this._origin = this.options.origin ? this.options.origin : northWest; + window.L.TileLayer.prototype.onAdd.call(this, map); + }, + /** + * @private + * @function Zondy.Map.MapWMTSLayer.prototype.getTileUrl + * @description 根据行列号获取瓦片地址。考虑发布的wmts的瓦片不按左上角为原点的情况,需另外处理 + * @param coords - {Object} 行列号 + * @return {string} 瓦片地址 + */ + getTileUrl: function (coords) { + // (Point, Number) -> String + // var tileBounds = this._tileCoordsToBounds(coords); + // var ne = this._crs.project(tileBounds.getNorthEast()); + // var sw = this._crs.project(tileBounds.getSouthWest()); + // var tileSize = this.options.tileSize; + // var resolution = Math.max(Math.abs(ne.x - sw.x) / tileSize, Math.abs(ne.y - sw.y) / tileSize); + // + // var centerPnt = [(ne.x + sw.x) / 2, (ne.y + sw.y) / 2]; + // var dx = centerPnt[0] - (this._origin)[0]; + // var dy = centerPnt[1] - (this._origin)[1]; + // + // var xGrid = -1e8; + // var yGrid = -1e8; + // + // xGrid = Math.floor(dx / (tileSize * resolution)); + // if (this.options.yAxis === 'down') { + // yGrid = Math.floor(-dy / (tileSize * resolution)); + // } else { + // yGrid = Math.floor(dy / (tileSize * resolution)); + // } - var zoom = this._getZoomForUrl(); - var url = window.L.Util.template(this._url, {s: this._getSubdomain(coords)}); + var zoom = this._getZoomForUrl(); + var url = window.L.Util.template(this._url, { s: this._getSubdomain(coords) }); - var obj = { - version: this.options.version, - style: this.options.style, - tilematrixSet: this.options.tilematrixSet, - format: this.options.format, - layer: this.options.layer, - tilematrix: zoom, - tilerow: coords.y, - tilecol: coords.x - }; + var obj = { + version: this.options.version, + style: this.options.style, + tilematrixSet: this.options.tilematrixSet, + format: this.options.format, + layer: this.options.layer, + tilematrix: zoom, + tilerow: coords.y, + tilecol: coords.x + }; - //根据地图的不同,拼装不同的url参数 - if(url.indexOf('tianditu') > -1){ - obj.tilematrixSet = 'c'; - }else if(url.indexOf('geoserver') > -1){ - obj.tilematrix = this.options.tilematrixSet+ ':'+zoom; - } + //根据地图的不同,拼装不同的url参数 + if (url.indexOf('tianditu') > -1) { + obj.tilematrixSet = 'c'; + } else if (url.indexOf('geoserver') > -1) { + obj.tilematrix = this.options.tilematrixSet + ':' + zoom; + } - if (this.options.token) { - if(url.indexOf('tianditu') > -1){ - obj.tk = this.options.token - }else { - obj.token = this.options.token - } - } + if (this.options.token) { + if (this.options.tokenKey) { + obj[this.options.tokenKey] = this.options.token; + } else { + if (url.indexOf('tianditu') > -1) { + obj.tk = this.options.token; + } else { + obj.token = this.options.token; + } + } + } - return url + window.L.Util.getParamString(obj, url); - } + return url + window.L.Util.getParamString(obj, url); + } }); -export {MapWMTSLayer}; +export { MapWMTSLayer }; Zondy.Map.MapWMTSLayer = MapWMTSLayer; diff --git a/src/leaflet/overlay/stream/MapvStreamLayer.js b/src/leaflet/overlay/stream/MapvStreamLayer.js index e74d6b434..97c6f6925 100644 --- a/src/leaflet/overlay/stream/MapvStreamLayer.js +++ b/src/leaflet/overlay/stream/MapvStreamLayer.js @@ -1,5 +1,5 @@ -import L from "leaflet"; -import { MapvLayer } from "../MapvLayer"; +import L from 'leaflet'; +import { MapvLayer } from '../MapvLayer'; /** * @class MapvStreamLayer @@ -12,70 +12,69 @@ import { MapvLayer } from "../MapvLayer"; * @param {Object} options.field - geojson的唯一标识字段,请确保该字段的唯一性。 */ export var MapvStreamLayer = MapvLayer.extend({ - initialize: function(map, url, options) { - options = options || {}; + initialize: function (map, url, options) { + options = options || {}; - L.Util.setOptions(this, options); - - this.mapvOption = options.mapvOption || {}; - this.data = []; - this.lastDate = new Date(); - this.url = url; - this.fieldHash = {}; + L.Util.setOptions(this, options); - this.fieldDeg = options.fieldDeg; - this.iconUrl = options.iconUrl; - this.timeSpeed = options.timeSpeed || 100; - this.createIcon(); - - MapvLayer.prototype.initialize.call(this, map, new window.mapv.DataSet([]), this.mapvOption, options) - }, + this.mapvOption = options.mapvOption || {}; + this.data = []; + this.lastDate = new Date(); + this.url = url; + this.fieldHash = {}; - onMessage: function(msg) { - const feature = msg.feature; - const field = msg.feature.properties[this.options.field]; + this.fieldDeg = options.fieldDeg; + this.iconUrl = options.iconUrl; + this.timeSpeed = options.timeSpeed || 100; + this.createIcon(); - let layer = this.parasIcon(feature); + MapvLayer.prototype.initialize.call(this, map, new window.mapv.DataSet([]), this.mapvOption, options); + }, - if (field !== undefined && this.fieldHash[field]) { - this.data[this.fieldHash[field]] = layer; - } else { - if (field !== undefined) { - this.data.push(layer); - this.fieldHash[field] = this.data.length - 1; - } - } + onMessage: function (msg) { + const feature = msg.feature; + const field = msg.feature.properties[this.options.field]; + + let layer = this.parasIcon(feature); - this.updateLayer(); - }, + if (field !== undefined && this.fieldHash[field]) { + this.data[this.fieldHash[field]] = layer; + } else { + if (field !== undefined) { + this.data.push(layer); + this.fieldHash[field] = this.data.length - 1; + } + } - createIcon: function() { - var iconUrl = - this.iconUrl || "http://client.snanyun.com:8899/img/leaflet/marker/bike.png"; - this.icon = new Image(); - this.icon.src = iconUrl; - }, + this.updateLayer(); + }, - parasIcon: function(feature) { - this.mapvOption = { - draw: "icon" - }; - var deg = feature.properties[this.fieldDeg] || 0; - var icon = { - geometry: { - type: "Point", - coordinates: feature.geometry.coordinates - }, - deg: deg, - icon: this.icon - }; - return icon; - }, + createIcon: function () { + var iconUrl = this.iconUrl || 'http://client.snanyun.com:8899/img/leaflet/marker/bike.png'; + this.icon = new Image(); + this.icon.src = iconUrl; + }, - updateLayer: function() { - var currentDate = new Date(); - if (currentDate - this.lastDate < this.timeSpeed) return; - this.updateData(this.data, this.mapvOption); - this.lastDate = currentDate; - } + parasIcon: function (feature) { + this.mapvOption = { + draw: 'icon' + }; + var deg = feature.properties[this.fieldDeg] || 0; + var icon = { + geometry: { + type: 'Point', + coordinates: feature.geometry.coordinates + }, + deg: deg, + icon: this.icon + }; + return icon; + }, + + updateLayer: function () { + var currentDate = new Date(); + if (currentDate - this.lastDate < this.timeSpeed) return; + this.updateData(this.data, this.mapvOption); + this.lastDate = currentDate; + } }); diff --git a/src/leaflet/overlay/view/MarkerClusterLayer.js b/src/leaflet/overlay/view/MarkerClusterLayer.js index 321d0ce9f..86fe3429f 100644 --- a/src/leaflet/overlay/view/MarkerClusterLayer.js +++ b/src/leaflet/overlay/view/MarkerClusterLayer.js @@ -11,7 +11,7 @@ import '../../core/Base'; * @param options - {Object} mapv.options * @param options.zoom - {Number} 最大的`聚类级别` * @param options.title - {Number} 单个聚类点的`标题` 内容 - * @param options.field - {String} 选择对应的字段,该字段必须是`数字型`的字段,用来计算大小和颜色 + * @param options.field - {String} 选择对应的字段,该字段必须是`数字型`的字段,用来计算大小和颜色 * * @example * $.get('./static/data/geojson/point.json', function (json) { @@ -38,7 +38,7 @@ export var MarkerClusterLayer = L.Layer.extend({ initialize: function (map, geojson, options) { this.map = map; - let { field } = options; + let {field} = options; this.field = field; this.options = options; @@ -95,9 +95,9 @@ export var MarkerClusterLayer = L.Layer.extend({ var label = point.properties[title]; var marker = L.marker( L.latLng(point.geometry.coordinates[1], point.geometry.coordinates[0]), - { title: label } + {title: label} ); - marker.bindPopup(count); + marker.bindPopup(String(count)).openPopup(); this.layer.addLayer(marker); } map.addLayer(this.layer) diff --git a/src/mapboxgl/core/Base.js b/src/mapboxgl/core/Base.js index d490a985e..6f80ed36c 100644 --- a/src/mapboxgl/core/Base.js +++ b/src/mapboxgl/core/Base.js @@ -4,12 +4,14 @@ */ import mapboxgl from '@mapgis/mapbox-gl'; -export var Zondy = (window.Zondy = window.Zondy || {}) +window.mapboxgl = mapboxgl; +mapboxgl.zondy = window.mapboxgl.zondy || {}; +var Zondy = window.mapboxgl.zondy || {}; +Zondy.Map = Zondy.Map || {}; +Zondy.Util = Zondy.Util || {}; +Zondy.Network = Zondy.Network || {}; +Zondy.Event = Zondy.Event || {}; +Zondy.Socket = Zondy.Socket || {}; -Zondy.Util = Zondy.Util || {} -Zondy.Network = Zondy.Network || {} - -Zondy.Event = Zondy.Event || {} -Zondy.Socket = Zondy.Socket || {} - -mapboxgl.zondy = mapboxgl.zondy || {} +export { Zondy }; +export { mapboxgl }; diff --git a/src/mapboxgl/index.js b/src/mapboxgl/index.js index a1fa10603..2dc6fe0a1 100644 --- a/src/mapboxgl/index.js +++ b/src/mapboxgl/index.js @@ -36,13 +36,15 @@ export { import { EchartsLayer, MapvLayer, - DeckglLayer + DeckglLayer, + FabricLayer /* StreamLayer */ } from './overlay/index.js'; export { EchartsLayer, MapvLayer, - DeckglLayer + DeckglLayer, + FabricLayer /* StreamLayer */ }; diff --git a/src/mapboxgl/layer/ArcGISLayer.js b/src/mapboxgl/layer/ArcGISLayer.js index 45004f9a1..087adb024 100644 --- a/src/mapboxgl/layer/ArcGISLayer.js +++ b/src/mapboxgl/layer/ArcGISLayer.js @@ -1,9 +1,6 @@ import {Zondy} from './mapboxBase'; //import {Zondy} from '../../service/common/Base'; -import { - newGuid, - extend -} from '../../service/common/Util'; +import { newGuid, extend } from '../util/Util'; /** * @author 基础平台/产品2部 龚跃健 diff --git a/src/mapboxgl/layer/TDTLayer.js b/src/mapboxgl/layer/TDTLayer.js index 4ecd6e8ef..f2dfb54f3 100644 --- a/src/mapboxgl/layer/TDTLayer.js +++ b/src/mapboxgl/layer/TDTLayer.js @@ -1,9 +1,6 @@ import {Zondy} from './mapboxBase'; //import {Zondy} from '../../service/common/Base'; -import { - newGuid, - extend -} from '../../service/common/Util'; +import { newGuid, extend } from '../util/Util'; /** * @author 基础平台/产品2部 龚跃健 @@ -102,8 +99,7 @@ var TDTLayer = function (option) { }; -TDTLayer.prototype.initialize = function (options) { - options = options || {}; +TDTLayer.prototype.initialize = function () { if (this.options.baseURL) { var str = this.options.baseURL.split("gov.cn/")[1]; if (this.options.baseURL.indexOf("?") > 0) { @@ -172,7 +168,7 @@ TDTLayer.prototype.addToMap = function (map) { }; TDTLayer.prototype._initLayerUrl = function () { - this._crs = this.options.crs || map.crs.epsgCode; + this._crs = this.options.crs || this.map.crs.epsgCode; this.options.tilematrixSet = this._crs === "EPSG:4326" ? "c" : "w"; let params = []; if (this.options.layerType.indexOf("igs") > 0) { diff --git a/src/mapboxgl/layer/mapDocLayer.js b/src/mapboxgl/layer/mapDocLayer.js index 9c8d1f0f9..84768815d 100644 --- a/src/mapboxgl/layer/mapDocLayer.js +++ b/src/mapboxgl/layer/mapDocLayer.js @@ -1,9 +1,6 @@ import {Zondy} from './mapboxBase'; //import {Zondy} from '../../service/common/Base'; -import { - newGuid, - extend -} from '../../service/common/Util'; +import { newGuid, extend } from '../util/Util'; /** * @author 基础平台/产品2部 龚跃健 diff --git a/src/mapboxgl/layer/mapTileLayer.js b/src/mapboxgl/layer/mapTileLayer.js index a951d8c72..b7f983d52 100644 --- a/src/mapboxgl/layer/mapTileLayer.js +++ b/src/mapboxgl/layer/mapTileLayer.js @@ -3,10 +3,7 @@ //那么在0级的时候就有4张瓦片,不能一一对应 import {Zondy} from './mapboxBase'; //import {Zondy} from '../../service/common/Base'; -import { - newGuid, - extend -} from '../../service/common/Util'; +import { newGuid, extend } from '../util/Util'; /** * @author 基础平台/产品2部 龚跃健 diff --git a/src/mapboxgl/layer/mapVectorLayer.js b/src/mapboxgl/layer/mapVectorLayer.js index a75737340..b7a6946b2 100644 --- a/src/mapboxgl/layer/mapVectorLayer.js +++ b/src/mapboxgl/layer/mapVectorLayer.js @@ -1,9 +1,6 @@ import {Zondy} from './mapboxBase'; //import {Zondy} from '../../service/common/Base'; -import { - newGuid, - extend -} from '../../service/common/Util'; +import { newGuid, extend } from '../util/Util'; /** * @author 基础平台/产品2部 龚跃健 diff --git a/src/mapboxgl/layer/mapWmsLayer.js b/src/mapboxgl/layer/mapWmsLayer.js index 7a0f21866..93e765800 100644 --- a/src/mapboxgl/layer/mapWmsLayer.js +++ b/src/mapboxgl/layer/mapWmsLayer.js @@ -1,9 +1,6 @@ import {Zondy} from './mapboxBase'; //import {Zondy} from '../../service/common/Base'; -import { - newGuid, - extend -} from '../../service/common/Util'; +import { newGuid, extend } from '../util/Util'; /** * @author 基础平台/产品2部 龚跃健 diff --git a/src/mapboxgl/layer/mapWmtsLayer.js b/src/mapboxgl/layer/mapWmtsLayer.js index 8dfdb8fe2..7b684b18e 100644 --- a/src/mapboxgl/layer/mapWmtsLayer.js +++ b/src/mapboxgl/layer/mapWmtsLayer.js @@ -1,9 +1,6 @@ import {Zondy} from './mapboxBase'; //import {Zondy} from '../../service/common/Base'; -import { - newGuid, - extend -} from '../../service/common/Util'; +import { newGuid, extend } from '../util/Util'; /** * @author 基础平台/产品2部 龚跃健 diff --git a/src/mapboxgl/layer/mapboxBase.js b/src/mapboxgl/layer/mapboxBase.js index b0fd94ffc..b76500e04 100644 --- a/src/mapboxgl/layer/mapboxBase.js +++ b/src/mapboxgl/layer/mapboxBase.js @@ -1,6 +1,14 @@ -var mapboxgl = window.mapboxgl = window.mapboxgl || {}; +/* var mapboxgl = window.mapboxgl = window.mapboxgl || {}; mapboxgl.Zondy = mapboxgl.Zondy || {}; var Zondy = mapboxgl.Zondy || {}; Zondy.Map = Zondy.Map || {}; export {Zondy}; -export {mapboxgl} +export {mapboxgl} */ + +import mapboxgl from '@mapgis/mapbox-gl'; +window.mapboxgl = mapboxgl; +mapboxgl.Zondy = window.mapboxgl.Zondy || {}; +var Zondy = window.mapboxgl.Zondy || {}; +Zondy.Map = Zondy.Map || {}; +export { Zondy }; +export { mapboxgl }; diff --git a/src/mapboxgl/overlay/index.js b/src/mapboxgl/overlay/index.js index 36f40a198..35bbd31b5 100644 --- a/src/mapboxgl/overlay/index.js +++ b/src/mapboxgl/overlay/index.js @@ -1,3 +1,10 @@ +/* + * @Description: + * @Author: zk + * @Date: 2022-04-25 11:32:23 + * @LastEditors: Do not edit + * @LastEditTime: 2022-04-25 20:11:41 + */ /** * @module 客户端可视化 */ diff --git a/src/mapboxgl/package.json b/src/mapboxgl/package.json index 7c329c235..de9083102 100644 --- a/src/mapboxgl/package.json +++ b/src/mapboxgl/package.json @@ -1,24 +1,39 @@ { - "name": "@mapgis/webclient-mapboxgl", - "version": "10.5.5", - "description": "", - "main": "dist-libs/webclient-mapboxgl-plugin.min.js", - "module": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [ - "zondy", - "service", - "&", - "mapboxgl" - ], - "author": "Wuhan Zondy Cyber Science&Technology Co.Ltd.", - "license": "Apache2", - "dependencies": { - "@mapgis/webclient-es6-service": "^10.5.5", - "@mapgis/mapbox-gl": "^1.9.9", - "echarts": "^4.8.0", - "mapv": "^2.0.56" - } + "name": "@mapgis/webclient-es6-mapboxgl", + "version": "15.6.1", + "description": "", + "main1": "dist-libs/webclient-mapboxgl-plugin.min.js", + "module": "index.js", + "scripts": { + "build": "npm run build-debug && npm run build-release", + "build-debug": "webpack --config webpack/mapbox-es6-debug-config.js", + "build-release": "webpack --config webpack/mapbox-es6-release-config.js" + }, + "keywords": [ + "zondy", + "service", + "&", + "mapboxgl" + ], + "author": "Wuhan Zondy Cyber Science&Technology Co.Ltd.", + "license": "Apache-2.0", + "dependencies": { + "@mapgis/mapbox-gl": "^1.9.9", + "@mapgis/webclient-es6-service": "^10.5.7", + "core-js": "^3.21.1", + "echarts": "^4.8.0", + "mapv": "^2.0.56" + }, + "devDependencies": { + "@babel/core": "^7.16.0", + "@babel/preset-env": "^7.16.4", + "babel-loader": "^8.2.3", + "babel-plugin-add-module-exports": "^1.0.4", + "css-loader": "^6.5.1", + "html-webpack-plugin": "^5.5.0", + "sass-loader": "^12.4.0", + "style-loader": "^3.3.1", + "ts-loader": "^9.2.6", + "webpack": "^5.65.0" + } } diff --git a/src/mapboxgl/theme/common/overlay/levelRender/Matrix.js b/src/mapboxgl/theme/common/overlay/levelRender/Matrix.js index a9356649f..ec3d0a127 100644 --- a/src/mapboxgl/theme/common/overlay/levelRender/Matrix.js +++ b/src/mapboxgl/theme/common/overlay/levelRender/Matrix.js @@ -31,7 +31,6 @@ class Matrix { */ create() { var ArrayCtor = this.ArrayCtor; - var out = new ArrayCtor(6); this.identity(out); @@ -207,4 +206,4 @@ class Matrix { } export {Matrix}; -Zondy.LevelRenderer.Tool.Matrix = Matrix; \ No newline at end of file +Zondy.LevelRenderer.Tool.Matrix = Matrix; diff --git a/src/mapboxgl/util/Util.js b/src/mapboxgl/util/Util.js index a7590e712..635dc0b45 100644 --- a/src/mapboxgl/util/Util.js +++ b/src/mapboxgl/util/Util.js @@ -13,8 +13,8 @@ export var Util = (Zondy.Util = Zondy.Util || {}) * @param source - {Object} 源对象,其属性将被设置到目标对象上。 * @return {Object} 目标对象。 */ -export var extend = function(destination, source) { - destination = destination || {} +export var extend = function(dest, source) { + var destination = dest || {} if (source) { for (var property in source) { var value = source[property] @@ -49,6 +49,18 @@ export var extend = function(destination, source) { return destination } +export var newGuid = function () { + /// 生成一个guid + var guid = ""; + for (var i = 1; i <= 32; i++) { + var n = Math.floor(Math.random() * 16.0).toString(16); + guid += n; + if ((i == 8) || (i == 12) || (i == 16) || (i == 20)) + guid += "-"; + } + return guid; +}; + /** * @description 给url追加参数。 * @param url - {string} 待追加参数的url字符串。 @@ -77,7 +89,8 @@ export var appendUrl = function(url, paramStr) { * @param sources -{Array} 源对象数据,每个对象都会给目的对象设置对应的属性值 * @private */ -export var extendFromArray = function(dest, sources) { +export var extendFromArray = function(des, sources) { + var dest = des; for (const src of sources) { for (const k in src) { dest[k] = src[k] @@ -214,7 +227,8 @@ export function splitWords(str) { // @function setOptions(obj: Object, options: Object): Object // Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut. -export function setOptions(obj, options) { +export function setOptions(o, options) { + var obj = o; if (!obj.hasOwnProperty('options')) { obj.options = obj.options ? create(obj.options) : {} } diff --git a/src/mapboxgl/webpack/mapbox-es6-debug-config.js b/src/mapboxgl/webpack/mapbox-es6-debug-config.js new file mode 100644 index 000000000..1fd848a3e --- /dev/null +++ b/src/mapboxgl/webpack/mapbox-es6-debug-config.js @@ -0,0 +1,48 @@ +var webpack = require('webpack'); +var path = require('path'); +var os = require('os'); + +module.exports = { + mode: 'development', + entry: path.join(__dirname, '..', 'index.js'), + output: { + path: path.join(__dirname, '..', 'dist-libs'), //打包后的文件存放的地方 + filename: 'webclient-es6-mapboxgl.js' //打包后输出文件的文件名 + }, + externals: { + '@mapgis/mapbox-gl': 'mapboxgl', + mapv: 'function(){try{return mapv}catch(e){return {}}}()', + echarts: 'function(){try{return echarts}catch(e){return {}}}()' + }, + module: { + rules: [ + { + test: /\.m?js$/, + exclude: /(node_modules|bower_components)/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'] + } + } + }, + { + test: /\.css$/, + use: [ + { loader: 'style-loader' }, + { + loader: 'css-loader', + options: { + modules: true + } + }, + { loader: 'sass-loader' } + ] + }, + { test: /\.ts$/, use: 'ts-loader' }, + ] + }, + plugins: [ + + ] +}; diff --git a/src/mapboxgl/webpack/mapbox-es6-release-config.js b/src/mapboxgl/webpack/mapbox-es6-release-config.js new file mode 100644 index 000000000..e97ed6db6 --- /dev/null +++ b/src/mapboxgl/webpack/mapbox-es6-release-config.js @@ -0,0 +1,47 @@ +var webpack = require('webpack'); +var path = require('path'); +var os = require('os'); + +module.exports = { + mode: 'production', + entry: path.join(__dirname, '..', 'index.js'), + output: { + path: path.join(__dirname, '..', 'dist-libs'), //打包后的文件存放的地方 + filename: 'webclient-es6-mapboxgl.min.js' //打包后输出文件的文件名 + }, + externals: { + '@mapgis/mapbox-gl': 'mapboxgl', + mapv: 'function(){try{return mapv}catch(e){return {}}}()', + echarts: 'function(){try{return echarts}catch(e){return {}}}()' + }, + module: { + rules: [ + { + test: /\.m?js$/, + exclude: /(node_modules|bower_components)/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'] + } + } + }, + { + test: /\.css$/, + use: [ + { loader: 'style-loader' }, + { + loader: 'css-loader', + options: { + modules: true + } + }, + { loader: 'sass-loader' } + ] + }, + { test: /\.ts$/, use: 'ts-loader' }, + ] + }, + plugins: [ + ] +}; diff --git a/src/mapboxgl/webpack/mapbox-plugin-debug-config.js b/src/mapboxgl/webpack/mapbox-plugin-debug-config.js deleted file mode 100644 index be9842d1f..000000000 --- a/src/mapboxgl/webpack/mapbox-plugin-debug-config.js +++ /dev/null @@ -1,61 +0,0 @@ -var webpack = require('webpack'); -var path = require('path'); -var HappyPack = require('happypack');//多线程loader 加快编译速度 -var os = require('os'); -var happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }); -var HtmlWebpackPlugin = require('html-webpack-plugin'); -const BuildInfo = require('./version/version.js') - -module.exports = { - mode:'development', - devtool: 'eval-source-map', - entry: path.join(__dirname, '.', 'index.js'), - output: { - path: path.join(__dirname, '.', 'output'),//打包后的文件存放的地方 - filename: "webclient-mapboxgl-plugin.js"//打包后输出文件的文件名 - }, - externals: { - '@mapgis/mapbox-gl': 'mapboxgl', - 'mapv': "function(){try{return mapv}catch(e){return {}}}()", - 'echarts': 'function(){try{return echarts}catch(e){return {}}}()' - }, - module: { - // noParse: /[\/\\]mapbox-gl\.js$/, - // noParse: /3rdLib[^.*mapbox]\.js$/, - - //script-loader - rules: [ - { - test: /(\.js)$/, - use: 'happypack/loader?id=js', - exclude: [/node_modules/,/leaflet/,/openlayers/] - } - ] - }, - plugins: [ - new HappyPack({ - id: 'js', - // threads: 4, - threadPool: happyThreadPool, - loaders: [{ - loader: 'babel-loader', - options: { - presets: ['es2015'], - cacheDirectory: true, - plugins: ['transform-runtime', 'transform-decorators-legacy', 'transform-class-properties'] - } - }] - }), - new HtmlWebpackPlugin({ - filename: 'webclient-mapboxgl-plugin.html', - template: 'src/config/opensource/version/version.html', - inject: false,//不插入生成的js 仅用于版本声明 - minify: { - removeComments: false, - collapseWhitespace: true, - removeAttributeQuotes: true - }, - buildInfo: BuildInfo - }) - ] -} \ No newline at end of file diff --git a/src/mapboxgl/webpack/mapbox-plugin-release-config.js b/src/mapboxgl/webpack/mapbox-plugin-release-config.js deleted file mode 100644 index 76dae1e27..000000000 --- a/src/mapboxgl/webpack/mapbox-plugin-release-config.js +++ /dev/null @@ -1,82 +0,0 @@ -var webpack = require('webpack'); -var path = require('path'); -const uglify = require('uglifyjs-webpack-plugin'); -var HappyPack = require('happypack');//多线程loader 加快编译速度 -var os = require('os'); -var happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }); -var HtmlWebpackPlugin = require('html-webpack-plugin'); -const BuildInfo = require('./version/version.js') - -module.exports = { - mode: 'production', - entry: path.join(__dirname, '.', 'index.js'),//已多次提及的唯一入口文件 - output: { - path: path.join(__dirname, '..', 'dist'),//打包后的文件存放的地方 - filename: "webclient-mapboxgl-plugin.min.js" //打包后输出文件的文件名 - }, - module: { - rules: [{ - test: /(\.js)$/, - use: 'happypack/loader?id=js', - exclude: [/node_modules/, /leaflet/, /openlayers/, /cesium/] - }] - // rules: [ - // { - // test: /(\.js)$/, - // use: { - // loader: "babel-loader", - // options: { - // presets: ['es2015'], - // plugins: ['transform-runtime'] - // } - // }, - // exclude: [/node_modules/,/mapgislayerForLeaf/,/clientThemeLeaf/] - // } - // ] - }, - externals: { - '@mapgis/mapbox-gl': 'mapboxgl', - 'mapv': "function(){try{return mapv}catch(e){return {}}}()", - 'echarts': 'function(){try{return echarts}catch(e){return {}}}()' - }, - // devtool: 'cheap-module-source-map', - plugins: [ - new HappyPack({ - id: 'js', - // threads: 4, - threadPool: happyThreadPool, - loaders: [{ - loader: 'babel-loader', - options: { - presets: ['env'], - cacheDirectory: true, - plugins: ['transform-runtime', 'transform-decorators-legacy', 'transform-class-properties'] - } - }] - }), - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify(process.env.NODE_ENV) - //NODE_ENV: JSON.stringify("production") - } - }), - new webpack.NoEmitOnErrorsPlugin(), - new webpack.optimize.OccurrenceOrderPlugin(), - new webpack.optimize.AggressiveMergingPlugin(), - new HtmlWebpackPlugin({ - filename: 'webclient-mapboxgl-plugin.min.html', - template: 'src/config/opensource/version/version.html', - inject: false,//不插入生成的js 仅用于版本声明 - minify: { - removeComments: false, - collapseWhitespace: true, - removeAttributeQuotes: true - }, - buildInfo: BuildInfo - }) - - ], - optimization: { - minimizer: [new uglify({ uglifyOptions: { compress: false } })] - } -} \ No newline at end of file diff --git a/src/mapboxgl/webpack/version/version.css b/src/mapboxgl/webpack/version/version.css new file mode 100644 index 000000000..a1368b2ba --- /dev/null +++ b/src/mapboxgl/webpack/version/version.css @@ -0,0 +1,14 @@ +.mapgis-header .mapgis-webclient-header .mapgis-webclient-text { + width : -webkit-fit-content; + width : -moz-fit-content; + width : fit-content; + height : 24px; + margin-left : 13px; + color : #fff; + line-height : 24px; + font-size : 22px; + font-weight : 700; + font-style : italic; + font-stretch : normal; + letter-spacing: 1.5px; +} \ No newline at end of file diff --git a/src/mapboxgl/webpack/version/version.html b/src/mapboxgl/webpack/version/version.html new file mode 100644 index 000000000..22e70bae7 --- /dev/null +++ b/src/mapboxgl/webpack/version/version.html @@ -0,0 +1,36 @@ + + + + + + + 版本声明 + + + + +

提交记录:<%= htmlWebpackPlugin.options.buildInfo.commit %>

+

提交用户:<%= htmlWebpackPlugin.options.buildInfo.commitUserName %>

+

提交日期: <%= htmlWebpackPlugin.options.buildInfo.commitDate %>

+

编译用户: <%= htmlWebpackPlugin.options.buildInfo.buildUserName %>

+

编译邮箱: <%= htmlWebpackPlugin.options.buildInfo.buildUserMail %>

+

编译日期: <%= htmlWebpackPlugin.options.buildInfo.buildDate %>

+ + + + \ No newline at end of file diff --git a/src/mapboxgl/webpack/version/version.js b/src/mapboxgl/webpack/version/version.js new file mode 100644 index 000000000..903820c36 --- /dev/null +++ b/src/mapboxgl/webpack/version/version.js @@ -0,0 +1,26 @@ +const child_process = require('child_process'); + +// git 最后一次提交的 Head +const commit = child_process.execSync('git show -s --format=%H').toString().trim(); +const commitUserName = child_process.execSync('git show -s --format=%cn').toString().trim(); +const commitUserMail = child_process.execSync('git show -s --format=%ce').toString().trim(); +const commitDateObj = new Date(child_process.execSync(`git show -s --format=%cd`).toString()); +const commitDate = `${ + commitDateObj.getFullYear() + + '-' + + (commitDateObj.getMonth() + 1) + + '-' + + commitDateObj.getDate() + + ' ' + + commitDateObj.getHours() + + ':' + + commitDateObj.getMinutes() +}`; +const buildUserName = child_process.execSync('git config user.name').toString().trim(); +const buildUserMail = child_process.execSync('git config user.email').toString().trim(); +const nowDate = new Date(); +const buildDate = `${ + nowDate.getFullYear() + '-' + (nowDate.getMonth() + 1) + '-' + nowDate.getDate() + ' ' + nowDate.getHours() + ':' + nowDate.getMinutes() +}`; + +module.exports = { commit, commitUserName, commitUserMail, commitDate, buildUserName, buildUserMail, buildDate }; diff --git a/src/openlayers/layer/tileMapLayer.js b/src/openlayers/layer/tileMapLayer.js index 112d28d57..b5b28ca77 100644 --- a/src/openlayers/layer/tileMapLayer.js +++ b/src/openlayers/layer/tileMapLayer.js @@ -215,19 +215,19 @@ Zondy.Source.TileLayerSource = TileLayerSource; * @param {String} [opt_options.ip = ''] 服务器ip地址,本地为“127.0.0.1”或“localhost”。 * @param {String} [opt_options.port = ''] 服务器端口号,默认为6163 * @param {String} [opt_options.domain = ''] 服务器域名,注意:传入ip、port和传入domain两种方式二选一,代理服务器不提供端口号时可采用传入domain的方式。例如:domain:`http://www.sgic.net.cn/CoCloud3`。 - * @param {ol.ProjectionLike} [opt_options.projection = ''] 必选项,瓦片地图投影信息,通过如下方法获得 + * @param {ol.ProjectionLike} [opt_options.projection = ''] 可选项,瓦片地图投影信息,通过如下方法获得 * //projectionExtent为图层左下角到右上角坐标范围 * var projectionExtent = [114.12567815477894, 30.457571584721734, 114.47583026053915, 30.708389893334449]; * var projection = new ol.proj.Projection({ units: ol.proj.Units.DEGREES, extent: projectionExtent }); - * @param {Boolean} [opt_options.isAutoConfig = 'true'] 可选项,是否自动配置,默认为true + * @param {Boolean} [opt_options.isAutoConfig = 'true'] 可选项,是否自动配置瓦片服务参数,默认为true,注意:该参数为true时调用GetMapInfoService,获取瓦片的范围、分辨率等参数,为false时需要手动添加这些参数,且参数列表中必须指定projection,否则瓦片无法正常显示 * @param {Boolean} [opt_options.cache = 'false'] 可选项,瓦片地图是否为地图文档发布动态裁图方式,默认为false * @param {String} [opt_options.token = ''] 可选项,服务访问控制,如果在 MapGIS Server Manager 服务管理中开启token,须设置此项,其key值可在设置处获取。 * @param {Number} [opt_options.maxResolution = ''] 可选项,最大分辨率 - * @param {Number} [opt_options.minZoom = ''] 可选项,最小分辨率 - * @param {Number} [opt_options.maxZoom = ''] 可选项,最大分辨率 + * @param {Number} [opt_options.minZoom = ''] 可选项,最小缩放级别 + * @param {Number} [opt_options.maxZoom = ''] 可选项,最大缩放级别 * @param {String} [opt_options.tileOriginType = 'leftTop'] 可选项,瓦片裁剪方式,是左上还是左下的方式,即是新瓦片裁剪的方式还是旧瓦片。一般无需设置此参数,直接由原点和中心点进行判断,只有在某些特殊的裁剪的瓦片中需要用到。例如若裁剪瓦片时以左下角为原点,方式却是新瓦片的方式则需要设置此参数为leftTop。 * @param {Number} [opt_options.tileSize = '256'] 可选项,地图图片大小 * @example1 diff --git a/src/service/.eslintrc.js b/src/service/.eslintrc.js new file mode 100644 index 000000000..2c44087ca --- /dev/null +++ b/src/service/.eslintrc.js @@ -0,0 +1,14 @@ +module.exports = { + root: true, + env: { + node: true + }, + extends: ["plugin:vue/essential"], + rules: { + "no-console": process.env.NODE_ENV === "production" ? "error" : "off", + "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off" + }, + parserOptions: { + parser: "babel-eslint" + } +}; diff --git a/src/service/.yarnrc b/src/service/.yarnrc new file mode 100644 index 000000000..96fe37344 --- /dev/null +++ b/src/service/.yarnrc @@ -0,0 +1 @@ +registry "http://192.168.82.89:4873" \ No newline at end of file diff --git a/src/service/ArcGis/Circle.js b/src/service/ArcGis/Circle.js new file mode 100644 index 000000000..69c945c9e --- /dev/null +++ b/src/service/ArcGis/Circle.js @@ -0,0 +1,38 @@ +import { + Zondy, extend +} from "../common"; +import {ArcGisGeometry} from "./Geometry"; +import * as T from '@turf/turf' +import * as H from '@turf/helpers' + +/** + * @class module:ArcGis.ArcGisCircle + * @description ArcGis服务 + * @author 基础平台-杨琨 + * @param options - {Object} 必选项,构造圆对象参数。 + * @param {String} [options.center] 可选项。圆的中心点坐标,默认[0, 0]。 + * @param {String} [options.radius] 可选项。圆的半径,默认1000。 + * @param {String} [options.radiusUnit] 可选项。圆的半径单位,默认米,可选值["feet"|"kilometers"|"meters"|"miles"|"nautical-miles"|"yards"]。 + * @param {String} [options.numberOfPoints] 可选项。构成圆弧的插值数量,默认60。 + * @param {String} [options.geodesic] 可选项。启用自定义坐标系,默认false。 + * @param {ArcGisSpatialReference} [options.spatialReference] 可选项。多边形的空间坐标系,默认4326。 + */ +class ArcGisCircle extends ArcGisGeometry{ + constructor(options) { + super(options); + this.center = [0, 0]; + this.radius = 1000; + this.radiusUnit = "meters"; + this.numberOfPoints = 60; + this.geodesic = false; + this.type = "circle"; + + extend(this,options); + let opts = {steps: this.numberOfPoints, units: this.radiusUnit}; + let circle = T.circle(this.center, this.radius, opts); + this.rings = circle.geometry.coordinates; + } +} + +export {ArcGisCircle}; +Zondy.Service.ArcGisCircle = ArcGisCircle; \ No newline at end of file diff --git a/src/service/ArcGis/QueryTask.js b/src/service/ArcGis/QueryTask.js index 6a7db4785..acdc5df61 100644 --- a/src/service/ArcGis/QueryTask.js +++ b/src/service/ArcGis/QueryTask.js @@ -1,19 +1,25 @@ -import {Zondy} from '../common/Base'; +import {Zondy} from '../common'; import { - getPromise,getPromiseP,formatQuery,formatEdits,extend + formatQuery,extend } from '../common'; +import {ArcGisServiceBase} from "./ServiceBase"; class ArcGisQueryTask { constructor(options) { - this.options = { - url: null, - gdbVersion: null - } - extend(this.options,options); + this.url = null; + this.gdbVersion = null; + extend(this,options); } } -ArcGisQueryTask.prototype.execute = function (query, requestOptions) {} +ArcGisQueryTask.prototype.execute = function () {} +ArcGisQueryTask.prototype.queryByLayer = function (layerId, queryParams) { + queryParams.outFields = queryParams.outFields || "*"; + let url = this.url + "/" + layerId + "/query?f=json"; + let service = new ArcGisServiceBase(); + url = formatQuery(queryParams,url,["geometry"],null); + return service.getPromise(url); +} ArcGisQueryTask.prototype.executeAttachmentQuery = function () {} ArcGisQueryTask.prototype.executeForCount = function () {} ArcGisQueryTask.prototype.executeForExtent = function () {} diff --git a/src/service/ArcGis/index.js b/src/service/ArcGis/index.js index d7a633335..36f060686 100644 --- a/src/service/ArcGis/index.js +++ b/src/service/ArcGis/index.js @@ -16,6 +16,7 @@ import { ArcGisMultipoint } from './Multipoint'; import { ArcGisPolyline } from './Polyline'; import { ArcGisGraphic } from './Graphic'; import { ArcGisExtent } from './Extent'; +import {ArcGisCircle} from "./Circle"; export { ArcGisFeatureLayer, @@ -30,6 +31,7 @@ export { ArcGisMultipoint, ArcGisPolyline, ArcGisPolygon, + ArcGisCircle, ArcGisGraphic, ArcGisExtent }; @@ -47,6 +49,7 @@ const ArcGis = { ArcGisMultipoint, ArcGisPolyline, ArcGisPolygon, + ArcGisCircle, ArcGisGraphic, ArcGisExtent }; diff --git a/src/service/Igserver/G3D/G3DMapDoc.js b/src/service/Igserver/G3D/G3DMapDoc.js index 3fd8c1416..d976c9cec 100644 --- a/src/service/Igserver/G3D/G3DMapDoc.js +++ b/src/service/Igserver/G3D/G3DMapDoc.js @@ -1,7 +1,7 @@ -import {Zondy} from "../../common/Base"; -import {newGuid} from "../../common/Util"; -import {G3DService} from "./G3DService"; -import {IgsServiceBase} from "../../baseserver/IServiceBase"; +import { Zondy } from '../../common/Base'; +import { newGuid } from '../../common/Util'; +import { G3DService } from './G3DService'; +import { IgsServiceBase } from '../../baseserver/IServiceBase'; /** * @author 基础平台/产品2部 龚跃健 @@ -29,6 +29,7 @@ import {IgsServiceBase} from "../../baseserver/IServiceBase"; * @param {String} [option.format=json] 回结果的格式,缺省xml(json / xml) * @param {String} [option.systemLib=null] 系统库名称或者guid * @param {String} [option.layerRenderIndex=0] 图层layerRenderIndex + * @param {String} [option.extendedPropKeys=null] 扩展属性的key列表,多个用","分隔,"*"为获取所有,缺省为null */ class G3DMapDoc extends G3DService { constructor(option) { @@ -218,6 +219,15 @@ class G3DMapDoc extends G3DService { * @default null */ this.layerRenderIndex = options.layerRenderIndex || 0; + + /** + * @private + * @member Zondy.Catalog.G3DMapDoc.prototype.extendedPropKeys + * @type {String} + * @description 扩展属性的key列表,多个用","分隔,"*"为获取所有,缺省为"" + * @default null + */ + this.extendedKeys = option.extendedPropKeys || null; } /** @@ -239,7 +249,7 @@ class G3DMapDoc extends G3DService { */ GetDocList(onSuccess, onError) { var me = this; - me.partUrl = "GetDocList"; + me.partUrl = 'GetDocList'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -256,6 +266,7 @@ class G3DMapDoc extends G3DService { * @function Zondy.Catalog.G3DMapDoc.prototype.GetDocInfo * @param option - {Object} 属性键值对,地图属性字段。
* @param {String} [option.docName = null] 【必选】三维服务名称 + * @param {String} [option.extendedPropKeys=""] 扩展属性的key列表,多个用","分隔,"*"为获取所有,缺省为"" * @param onSuccess - {Function} 成功回调函数。 * @param onError - {Function} 失败回调函数。 * @example @@ -273,7 +284,11 @@ class G3DMapDoc extends G3DService { */ GetDocInfo(onSuccess, onError) { var me = this; - me.partUrl = me.docName + "/GetDocInfo?&f=json"; + me.partUrl = me.docName + '/GetDocInfo?&f=json'; + + if (me.extendedKeys) { + me.partUrl += '&extendedKeys=' + me.extendedKeys; + } var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -311,18 +326,18 @@ class G3DMapDoc extends G3DService { */ GetLayerInfo(onSuccess, onError) { var me = this; - var str = "layerinfo?gdbp=" + this.gdbp; + var str = 'layerinfo?gdbp=' + this.gdbp; if (me.proj) { - str += "&proj=" + me.proj; + str += '&proj=' + me.proj; } if (me.f) { - str += "&f=" + me.f; + str += '&f=' + me.f; } if (me.guid) { - str += "&guid=" + me.guid; + str += '&guid=' + me.guid; } if (me.encryptPassword) { - str += "&encryptPassword=" + me.encryptPassword; + str += '&encryptPassword=' + me.encryptPassword; } me.partUrl = str; var url = me.getFullUrl(); @@ -372,64 +387,63 @@ class G3DMapDoc extends G3DService { */ GetFeature(onSuccess, onError) { var me = this; - var str = "getFeature?"; + var str = 'getFeature?'; if (me.gdbp && me.gdbp !== '') { - str += "gdbp=" + me.gdbp; + str += 'gdbp=' + me.gdbp; } else if (me.docName) { - str += "docName=" + me.docName + "&layerindex=" + me.layerindex; + str += 'docName=' + me.docName + '&layerindex=' + me.layerindex; } - if (me.geometryType) { - str += "&geometryType=" + me.geometryType; + str += '&geometryType=' + me.geometryType; } if (me.geometry) { - str += "&geometry=" + me.geometry; + str += '&geometry=' + me.geometry; } if (me.where) { - str += "&where=" + me.where; + str += '&where=' + me.where; } if (me.structs) { - str += "&structs=" + JSON.stringify(me.structs); + str += '&structs=' + JSON.stringify(me.structs); } if (me.page) { - str += "&page=" + me.page; + str += '&page=' + me.page; } if (me.pageCount) { - str += "&pageCount=" + me.pageCount; + str += '&pageCount=' + me.pageCount; } if (me.objectIds) { - str += "&objectIds=" + me.objectIds; + str += '&objectIds=' + me.objectIds; } if (me.orderField) { - str += "&orderField=" + me.orderField; + str += '&orderField=' + me.orderField; } if (me.rtnLabel) { - str += "&rtnLabel=" + me.rtnLabel; + str += '&rtnLabel=' + me.rtnLabel; } if (me.isAsc) { - str += "&isAsc=" + me.isAsc; + str += '&isAsc=' + me.isAsc; } if (me.guid) { - str += "&guid=" + me.guid; + str += '&guid=' + me.guid; } if (me.format) { - str += "&format=" + me.format; + str += '&format=' + me.format; } if (me.f) { - str += "&f=" + me.f; + str += '&f=' + me.f; } me.partUrl = str; @@ -445,7 +459,6 @@ class G3DMapDoc extends G3DService { service.processAsync(); } - /** * @function Zondy.Catalog.G3DMapDoc.prototype.SetSystemLibraryByDoc * @description 设置三维文档下图层系统库接口 @@ -472,13 +485,13 @@ class G3DMapDoc extends G3DService { */ SetSystemLibraryByDoc(onSuccess, onError) { var me = this; - var str = me.docName + "/setSystemLibrary?systemLib=" + me.systemLib + "&layerRenderIndex=" + me.layerRenderIndex; + var str = me.docName + '/setSystemLibrary?systemLib=' + me.systemLib + '&layerRenderIndex=' + me.layerRenderIndex; if (me.f) { - str += "&f=" + me.f; + str += '&f=' + me.f; } if (me.guid) { - str += "&guid=" + me.guid; + str += '&guid=' + me.guid; } me.partUrl = str; var url = me.getFullUrl(); @@ -493,5 +506,5 @@ class G3DMapDoc extends G3DService { } } -export {G3DMapDoc}; -Zondy.Catalog.G3DMapDoc = G3DMapDoc; \ No newline at end of file +export { G3DMapDoc }; +Zondy.Catalog.G3DMapDoc = G3DMapDoc; diff --git a/src/service/Igserver/G3D/G3dEnum.js b/src/service/Igserver/G3D/G3dEnum.js new file mode 100644 index 000000000..5e259d8be --- /dev/null +++ b/src/service/Igserver/G3D/G3dEnum.js @@ -0,0 +1,181 @@ +/** + * @class G3DLayerType + * @author 基础平台-潘卓然 + * @description G3D-图层类型枚举 + * @example + * let g3dLayer = viewer.scene.layers.getLayer(g3dLayerIndex); + let indexes = g3dLayer.getTerrainLayerIndexes(); + indexes.forEach(i => { + let terrain = g3dLayer.getLayer(i); + let info = g3dLayer.getLayerInfo(i); + const { layerType } = info; // 此时的layerType是字符串类型,后续需要处理成数值型 + let type = parseInt(layerType); + }); + */ +export const G3DLayerType = { + g3dNone: 0, + /** + * @description 三维矢量数据图层 + */ + g3dVectorLayer: 1, + /** + * @description 三维模型图层 + */ + g3dModelLayer: 2, + /** + * @description 三维地形图层 + */ + g3dTerrainLayer: 3, + /** + * @description 三维注记图层 + */ + g3dLabelLayer: 4, + /** + * @description 三维云图层 + */ + g3dCloudLayer: 5, + /** + * @description 三维街景图层 + */ + g3dPanoramaLayer: 6, + /** + * @description 二维Map引用图层 + */ + type2DMapRefLayer: 7, + /** + * @description 三维服务图层 + */ + g3dServerLayer: 8, + /** + * @description 三维组图层 + */ + g3dGroupLayer: 9, + /** + * @description 三维缓存图层 + */ + g3dCacheLayer: 10, + /** + * @description 三维点云图层 + */ + g3dPointCloudLayer: 11, + /** + * @description 三维的网格模型图层 + */ + g3dGridModelLayer: 12 +}; + +/** + * @class M3DTileDataInfo + * @author 基础平台-潘卓然 + * @description M3D-图层类型枚举,该枚举是针对的G3DLayerType.g3dCacheLayer的二级分类 + * @link G3DLayerType.g3dCacheLayer + * @example + * let tilset = scene.primitives.add(new Cesium.MapGISM3DSet({ + url : 'http://localhost:6163/M3D/layer/文件格式.mcj' + })); + * let type = tileset._content._dataType; + // 如果是树形结构,并且只在后面的节点又对应的数据,则需要遍历节点才能获取对应的的类型 + export function loopM3ds(m3ds, callback) { + const vm = this; + let dataCallback = cbtype => { + if (loop) { + window.clearInterval(loop); + loop = undefined; + let types = []; + m3ds.forEach(m3d => { + let type = checkType(m3d); + m3d.type = type || cbtype; + types.push(m3d.type); + if (callback) { + callback(types); + } + }); + } + }; + let loop = window.setInterval(() => { + m3ds.forEach(m3d => { + checkType(m3d, dataCallback); + }); + }, 100); + } + + export function checkType(tileset, callback) { + const vm = this; + let m3dType = M3dType.UnKnow; + const { root } = tileset; + if (!root) return m3dType; + const version = root.tileset._version; + let { children } = root; + if (version == "0.0" || version == "1.0") { + // m3d 0.x 1.x版本逻辑判断 type =0是模型 =1是示例化数据 =2是点云 + if (!children || children.length <= 0) return m3dType; + children.forEach(child => { + let tempType = checkTypeNode(child, version, callback); + m3dType = tempType || m3dType; + }); + } else if (version == "2.0") { + if (!children || children.length <= 0) return m3dType; + children.forEach(child => { + let tempType = checkTypeNode(child, version, callback); + m3dType = tempType ? tempType : m3dType; + }); + } + + return m3dType; + } + export function checkTypeNode(tileset, version, callback) { + let m3dType; + const vm = this; + if (!tileset) return m3dType; + if (tileset._content) { + m3dType = tileset._content._dataType; + } + if (callback) { + callback(m3dType); + } + return m3dType; + } + */ +export const M3DTileDataInfo = { + UnKnow: 'UnKnow', + /** + * @description 矢量数据 + */ + Vector: 'Vector', + /** + * @description 倾斜摄影 + */ + TiltPhotography: 'TiltPhotography', + /** + * @description 模型 + */ + Model: 'Model', + /** + * @description 城市建筑模型 + */ + BIM: 'BIM', + /** + * @description 点云 + */ + PointCloud: 'PointCloud', + /** + * @description 管线 + */ + PipeLine: 'PipeLine', + /** + * @description 地质模型 + */ + GeoModel: 'GeoModel', + /** + * @description 地质网格 + */ + GeoGrid: 'GeoGrid', + /** + * @description 地质钻孔 + */ + GeoDrill: 'GeoDrill', + /** + * @description 地质切片 + */ + GeoSection: 'GeoSection' +}; diff --git a/src/service/Igserver/G3D/index.js b/src/service/Igserver/G3D/index.js index ba0d6c3d8..9fae67924 100644 --- a/src/service/Igserver/G3D/index.js +++ b/src/service/Igserver/G3D/index.js @@ -1,6 +1,7 @@ -import {G3DMapDoc} from './G3DMapDoc'; -import {G3DService} from './G3DService'; - -export {G3DMapDoc}; -export {G3DService}; +import { G3DLayerType, M3DTileDataInfo } from './G3dEnum'; +import { G3DMapDoc } from './G3DMapDoc'; +import { G3DService } from './G3DService'; +export { G3DLayerType, M3DTileDataInfo }; +export { G3DMapDoc }; +export { G3DService }; diff --git a/src/service/Igserver/MRCS/CatalogMapDoc.js b/src/service/Igserver/MRCS/CatalogMapDoc.js index 0c3728d96..22c1c1026 100644 --- a/src/service/Igserver/MRCS/CatalogMapDoc.js +++ b/src/service/Igserver/MRCS/CatalogMapDoc.js @@ -1,8 +1,8 @@ -import {Zondy} from "../../common/Base"; -import {toJSON} from "../../common/Util"; -import {newGuid} from "../../common/Util"; -import {CatalogService} from "./CatalogService"; -import {IgsServiceBase} from "../../baseserver/IServiceBase"; +import { Zondy } from '../../common/Base'; +import { toJSON } from '../../common/Util'; +import { newGuid } from '../../common/Util'; +import { CatalogService } from './CatalogService'; +import { IgsServiceBase } from '../../baseserver/IServiceBase'; /** * @author 基础平台/产品2部 龚跃健 @@ -66,7 +66,7 @@ class MapDoc extends CatalogService { * @description 指定地图文档相关信息的结构,默认includeDetails为true ,includeSubs为false * @default {includeDetails:true,includeSubs:false} */ - this.include = options.include !== undefined ? options.include : "{includeDetails:true,includeSubs:false}"; + this.include = options.include !== undefined ? options.include : '{includeDetails:true,includeSubs:false}'; /** * @private @@ -108,7 +108,7 @@ class MapDoc extends CatalogService { */ getMapDocList(onSuccess, onError) { var me = this; - me.partUrl = "docs?v=" + this.version + "&f=json"; + me.partUrl = 'docs?v=' + this.version + '&f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -142,17 +142,17 @@ class MapDoc extends CatalogService { */ getMapDocInfo(onSuccess, details, subs, onError, returnFullStyle) { var me = this; - if (typeof (returnFullStyle) === "boolean") { + if (typeof returnFullStyle === 'boolean') { me.returnFullStyle = returnFullStyle; } - if (typeof (details) === "boolean" || typeof (subs) === "boolean") { + if (typeof details === 'boolean' || typeof subs === 'boolean') { var includeObj = { - includeDetails: (typeof (details) === "boolean") ? details : true, - includeSubs: (typeof (subs) === "boolean") ? subs : false + includeDetails: typeof details === 'boolean' ? details : true, + includeSubs: typeof subs === 'boolean' ? subs : false }; me.include = toJSON(includeObj); } - me.partUrl = "docs/" + me.docName + "?include=" + me.include + "&returnFullStyle=" + me.returnFullStyle + "&guid=" + me.guid + "&f=json"; + me.partUrl = 'docs/' + me.docName + '?include=' + me.include + '&returnFullStyle=' + me.returnFullStyle + '&guid=' + me.guid + '&f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -178,16 +178,16 @@ class MapDoc extends CatalogService { }); mapdoc.getMapInfo(function(res){ console.log(res) - },false,false,function (error) { + },false,function (error) { console.log(error) }); */ getMapInfo(onSuccess, returnFullStyle, onError) { var me = this; - if (typeof (returnFullStyle) === "boolean") { + if (typeof returnFullStyle === 'boolean') { me.returnFullStyle = returnFullStyle; } - me.partUrl = "docs/" + me.docName + "/" + me.mapIndex + "?returnFullStyle=" + me.returnFullStyle + "&guid=" + me.guid + "&f=json"; + me.partUrl = 'docs/' + me.docName + '/' + me.mapIndex + '?returnFullStyle=' + me.returnFullStyle + '&guid=' + me.guid + '&f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -218,7 +218,7 @@ class MapDoc extends CatalogService { */ getMapDocTree(onSuccess, onError) { var me = this; - me.partUrl = "docs/" + me.docName + "?tree=true&guid=" + me.guid + "&f=json"; + me.partUrl = 'docs/' + me.docName + '?tree=true&guid=' + me.guid + '&f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -230,7 +230,6 @@ class MapDoc extends CatalogService { service.processAsync(); } - /** * 获取指定地图下指定图层的相关信息 * @function Zondy.Catalog.MapDoc.prototype.getLayerInfo @@ -251,7 +250,8 @@ class MapDoc extends CatalogService { */ getLayerInfo(onSuccess, onError) { var me = this; - me.partUrl = "docs/" + me.docName + "/" + me.mapIndex + "/" + me.layerID + "?returnFullStyle=" + me.returnFullStyle + "&guid=" + me.guid + "&f=json"; + me.partUrl = + 'docs/' + me.docName + '/' + me.mapIndex + '/' + me.layerID + '?returnFullStyle=' + me.returnFullStyle + '&guid=' + me.guid + '&f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -282,7 +282,7 @@ class MapDoc extends CatalogService { */ getLayersInfo(onSuccess, onError) { var me = this; - me.partUrl = "docs/" + me.docName + "/" + me.mapIndex + "/layers?f=json"; + me.partUrl = 'docs/' + me.docName + '/' + me.mapIndex + '/layers?f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -315,7 +315,7 @@ class MapDoc extends CatalogService { */ deleteLayer(onSuccess, onError) { var me = this; - me.partUrl = "docs/" + me.docName + "/" + me.mapIndex + "/layers/delete?layerIDs=" + me.layerID + "&guid=" + me.guid + "&f=json"; + me.partUrl = 'docs/' + me.docName + '/' + me.mapIndex + '/layers/delete?layerIDs=' + me.layerID + '&guid=' + me.guid + '&f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -356,7 +356,7 @@ class MapDoc extends CatalogService { */ addLayer(addLayerInfos, onSuccess, onError) { var me = this; - me.partUrl = "docs/" + me.docName + "/" + me.mapIndex + "/layers/add?guid=" + me.guid + "&f=json"; + me.partUrl = 'docs/' + me.docName + '/' + me.mapIndex + '/layers/add?guid=' + me.guid + '&f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -368,7 +368,7 @@ class MapDoc extends CatalogService { service.processAsync({ method: 'POST', data: JSON.stringify(addLayerInfos), - headers: {'Content-Type': 'text/plain;charset=UTF-8'} + headers: { 'Content-Type': 'text/plain;charset=UTF-8' } }); } @@ -393,7 +393,7 @@ class MapDoc extends CatalogService { */ changeIndex(newIndexArray, onSuccess, onError) { var me = this; - me.partUrl = "docs/" + me.docName + "/" + me.mapIndex + "/layers/index?guid=" + me.guid + "&f=json"; + me.partUrl = 'docs/' + me.docName + '/' + me.mapIndex + '/layers/index?guid=' + me.guid + '&f=json'; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -405,7 +405,7 @@ class MapDoc extends CatalogService { service.processAsync({ method: 'POST', data: JSON.stringify(newIndexArray), - header: {'Content-Type': 'text/plain;charset=UTF-8'} + header: { 'Content-Type': 'text/plain;charset=UTF-8' } }); } @@ -431,7 +431,7 @@ class MapDoc extends CatalogService { */ getLegendInfo(layerIDs, fields, onSuccess, onError) { var me = this; - me.partUrl = "legendInfo/" + me.docName + "?f=json&layerIndexes=" + layerIDs + "&fields=" + fields; + me.partUrl = 'legendInfo/' + me.docName + '?f=json&layerIndexes=' + layerIDs + '&fields=' + fields; var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { @@ -443,5 +443,5 @@ class MapDoc extends CatalogService { service.processAsync(); } } -export {MapDoc}; -Zondy.Catalog.MapDoc = MapDoc; \ No newline at end of file +export { MapDoc }; +Zondy.Catalog.MapDoc = MapDoc; diff --git a/src/service/Igserver/MRCS/CatalogVectorLayer.js b/src/service/Igserver/MRCS/CatalogVectorLayer.js index 8a87c2465..17cf96bbe 100644 --- a/src/service/Igserver/MRCS/CatalogVectorLayer.js +++ b/src/service/Igserver/MRCS/CatalogVectorLayer.js @@ -620,7 +620,13 @@ class VectorLayer extends GDBInfo { */ getLayerInfo(gdbpUrl, onSuccess, onError, encryptPassword) { var me = this; - me.partUrl = 'layerinfo?gdbpUrl=' + gdbpUrl + '&f=json' + '&encryptPassword=' + encryptPassword + '&proj=' + this.proj; + me.partUrl = 'layerinfo?gdbpUrl=' + gdbpUrl + '&f=json'; + if (encryptPassword) { + me.partUrl += '&encryptPassword=' + encryptPassword; + } + if (this.proj) { + me.partUrl += '&proj=' + this.proj; + } var url = me.getFullUrl(); var service = new IgsServiceBase(url, { eventListeners: { diff --git a/src/service/Igserver/MRFS/Feature.js b/src/service/Igserver/MRFS/Feature.js index 573ef9492..14c5afcb8 100644 --- a/src/service/Igserver/MRFS/Feature.js +++ b/src/service/Igserver/MRFS/Feature.js @@ -1,224 +1,324 @@ -import {extend, Zondy} from "../../common"; -import {VPoint} from "./Point"; -import {VPolyline} from "./Polyline"; -import {VPolygon} from "./Polygon"; +import { extend, Zondy } from '../../common'; +import { VPoint } from './Point'; +import { VPolyline } from './Polyline'; +import { VPolygon } from './Polygon'; class VFeature { - static fromQueryResult(result) { - if ( - !result.hasOwnProperty("SFEleArray") || - !result.hasOwnProperty("AttStruct") || - (result.hasOwnProperty("SFEleArray") && !result.SFEleArray) || - (result.hasOwnProperty("AttStruct") && !result.AttStruct) - ) { - return []; - } - let SFEleArray = result.SFEleArray; - let AttStruct = result.AttStruct; - let features = [], - feature; - for (let i = 0; i < SFEleArray.length; i++) { - let attributes = {}, - geometry = [], - geometryType; - for (let j = 0; j < SFEleArray[i].AttValue.length; j++) { - if (SFEleArray[i].AttValue[j] !== "") { - attributes[AttStruct.FldName[j]] = SFEleArray[i].AttValue[j]; + static fromQueryResult(result) { + if ( + !result.hasOwnProperty('SFEleArray') || + !result.hasOwnProperty('AttStruct') || + (result.hasOwnProperty('SFEleArray') && !result.SFEleArray) || + (result.hasOwnProperty('AttStruct') && !result.AttStruct) + ) { + return []; } - } - if (SFEleArray[i].fGeom) { - switch (SFEleArray[i].ftype) { - case 1: - let PntGeom = SFEleArray[i].fGeom.PntGeom; - for (let k = 0; k < PntGeom.length; k++) { - let point = new VPoint({ - coordinates: [PntGeom[k].Dot.x, PntGeom[k].Dot.y] - }); - geometry.push(point); - geometryType = "Point"; + let SFEleArray = result.SFEleArray; + let AttStruct = result.AttStruct; + let features = [], + feature; + for (let i = 0; i < SFEleArray.length; i++) { + let attributes = {}, + geometry = [], + geometryType; + for (let j = 0; j < SFEleArray[i].AttValue.length; j++) { + if (SFEleArray[i].AttValue[j] !== '') { + attributes[AttStruct.FldName[j]] = SFEleArray[i].AttValue[j]; + } } - break; - case 2: - let LinGeom = SFEleArray[i].fGeom.LinGeom; - for (let k = 0; k < LinGeom.length; k++) { - let polyline = new VPolyline({ - coordinates: LinGeom[k].Line.Arcs[0].Dots - }); - geometry.push(polyline); - geometryType = "LineString"; + if (SFEleArray[i].fGeom) { + switch (SFEleArray[i].ftype) { + case 1: + let PntGeom = SFEleArray[i].fGeom.PntGeom; + for (let k = 0; k < PntGeom.length; k++) { + let point = new VPoint({ + coordinates: [PntGeom[k].Dot.x, PntGeom[k].Dot.y] + }); + geometry.push(point); + geometryType = 'Point'; + } + break; + case 2: + let LinGeom = SFEleArray[i].fGeom.LinGeom; + for (let k = 0; k < LinGeom.length; k++) { + let polyline = new VPolyline({ + coordinates: LinGeom[k].Line.Arcs[0].Dots + }); + geometry.push(polyline); + geometryType = 'LineString'; + } + break; + case 3: + let RegGeom = SFEleArray[i].fGeom.RegGeom; + for (let k = 0; k < RegGeom.length; k++) { + let polygon = new VPolygon(); + polygon.exterior = RegGeom[k].Rings[0].Arcs[0].Dots; + for (let m = 1; m < RegGeom[k].Rings.length; m++) { + polygon.interior.push(RegGeom[k].Rings[m].Arcs[0].Dots); + } + geometry.push(polygon); + geometryType = 'Polygon'; + } + break; + } } - break; - case 3: - let RegGeom = SFEleArray[i].fGeom.RegGeom; - for (let k = 0; k < RegGeom.length; k++) { - let polygon = new VPolygon(); - polygon.exterior = RegGeom[k].Rings[0].Arcs[0].Dots; - for (let m = 1; m < RegGeom[k].Rings.length; m++) { - polygon.interior.push(RegGeom[k].Rings[m].Arcs[0].Dots); - } - geometry.push(polygon); - geometryType = "Polygon"; + let style; + if (SFEleArray[i].GraphicInfo) { + let GraphicInfo = SFEleArray[i].GraphicInfo; + switch (GraphicInfo.InfoType) { + case 1: + style = GraphicInfo.PntInfo; + break; + case 2: + style = GraphicInfo.LinInfo; + break; + case 3: + style = GraphicInfo.RegInfo; + break; + } } - break; + + feature = new VFeature({ + attributes: attributes, + FID: SFEleArray[i].FID, + geometry: geometry, + geometryType: geometryType, + style: style + }); + features.push(feature); } - } - let style; - if (SFEleArray[i].GraphicInfo) { - let GraphicInfo = SFEleArray[i].GraphicInfo; - switch (GraphicInfo.InfoType) { - case 1: - style = GraphicInfo.PntInfo; - break; - case 2: - style = GraphicInfo.LinInfo; - break; - case 3: - style = GraphicInfo.RegInfo; - break; + return features; + } + static fromGeoJSON(geoJSON) { + let feature, + features = []; + if (!geoJSON.hasOwnProperty('type')) { + throw new Error('请输入正确的geoJSON'); } - } - - feature = new VFeature({ - attributes: attributes, - FID: SFEleArray[i].FID, - geometry: geometry, - geometryType: geometryType, - style: style - }); - features.push(feature); + if (geoJSON.type === 'Feature') { + feature = new VFeature({ + geometry: VFeature.geometry, + attributes: geoJSON.properties + }); + return feature; + } else if (geoJSON.type === 'FeatureCollection') { + let featureCollection = geoJSON.features, + geometry, + coordinates, + fCoordinates; + for (let i = 0; i < featureCollection.length; i++) { + geometry = []; + fCoordinates = featureCollection[i].geometry.coordinates; + switch (featureCollection[i].geometry.type) { + case 'Point': + geometry.push(featureCollection[i].geometry); + break; + case 'LineString': + coordinates = []; + for (let j = 0; j < fCoordinates.length; j++) { + coordinates.push({ + x: Number(fCoordinates[j][0]), + y: Number(fCoordinates[j][1]) + }); + } + featureCollection[i].geometry.coordinates = coordinates; + geometry.push(featureCollection[i].geometry); + break; + case 'Polygon': + let polygon = new VPolygon(); + for (let j = 0; j < fCoordinates[0].length; j++) { + polygon.exterior.push({ + x: Number(fCoordinates[0][j][0]), + y: Number(fCoordinates[0][j][1]) + }); + } + for (let j = 1; j < fCoordinates.length; j++) { + let ext = []; + for (let k = 0; k < fCoordinates[j].length; k++) { + ext.push({ + x: Number(fCoordinates[j][k][0]), + y: Number(fCoordinates[j][k][1]) + }); + } + polygon.exterior.push(ext); + } + geometry.push(polygon); + break; + } + feature = new VFeature({ + geometry: geometry, + attributes: featureCollection[i].properties, + geometryType: featureCollection[i].geometry.type + }); + features.push(feature); + } + return features; + } else { + throw new Error('不支持的geoJSON类型'); + } + } + static toAntTableData(result) { + let data = []; + let featureSet = VFeature.fromQueryResult(result); + for (let i = 0; i < featureSet.length; i++) { + data.push( + Object.assign(featureSet[i].attributes, { + key: featureSet[i].FID ? featureSet[i].FID : i + }) + ); + } + return data; } - return features; - }; - static fromGeoJSON(geoJSON) { - let feature, - features = []; - if (!geoJSON.hasOwnProperty("type")) { - throw new Error("请输入正确的geoJSON"); + static resultToGeojson(result) { + let geo = VFeature.fromQueryResult(result); + let featureSet = []; + geo = JSON.parse( + JSON.stringify(geo) + .replace(/attributes/g, 'properties') + .replace(/geometryType/g, 'type') + ); + let feature; + for (let i = 0; i < geo.length; i++) { + feature = VFeature.polygonToGeojson(geo[i]); + featureSet = featureSet.concat(feature); + } + let geojson = { + type: 'FeatureCollection', + features: featureSet + }; + return geojson; } - if (geoJSON.type === "Feature") { - feature = new VFeature({ - geometry: VFeature.geometry, - attributes: geoJSON.properties - }); - return feature; - } else if (geoJSON.type === "FeatureCollection") { - let featureCollection = geoJSON.features, - geometry, - coordinates, - fCoordinates; - for (let i = 0; i < featureCollection.length; i++) { - geometry = []; - fCoordinates = featureCollection[i].geometry.coordinates; - switch (featureCollection[i].geometry.type) { - case "Point": - geometry.push(featureCollection[i].geometry); - break; - case "LineString": - coordinates = []; - for (let j = 0; j < fCoordinates.length; j++) { - coordinates.push({ - x: Number(fCoordinates[j][0]), - y: Number(fCoordinates[j][1]) - }); - } - featureCollection[i].geometry.coordinates = coordinates; - geometry.push(featureCollection[i].geometry); - break; - case "Polygon": - let polygon = new VPolygon(); - for (let j = 0; j < fCoordinates[0].length; j++) { - polygon.exterior.push({ - x: Number(fCoordinates[0][j][0]), - y: Number(fCoordinates[0][j][1]) - }); - } - for (let j = 1; j < fCoordinates.length; j++) { - let ext = []; - for (let k = 0; k < fCoordinates[j].length; k++) { - ext.push({ - x: Number(fCoordinates[j][k][0]), - y: Number(fCoordinates[j][k][1]) - }); - } - polygon.exterior.push(ext); + + static polygonToGeojson(vfeature) { + let feature, + features = []; + let geomArr = vfeature.geometry; + let properties = vfeature.properties; + + for (let i = 0; i < geomArr.length; i++) { + feature = {}; + //处理数据coordinates + if (geomArr[i].type === 'Polygon') { + geomArr[i].coordinates = [geomArr[i].coordinates.concat(geomArr[i].exterior, geomArr[i].interior)]; } - geometry.push(polygon); - break; + feature.geometry = geomArr[i]; + feature.properties = properties; + feature.type = 'Feature'; + features.push(feature); } - feature = new VFeature({ - geometry: geometry, - attributes: featureCollection[i].properties, - geometryType: featureCollection[i].geometry.type - }); - features.push(feature); - } - return features; - } else { - throw new Error("不支持的geoJSON类型"); + return features; } - }; - static toAntTableData(result) { - let data = []; - let featureSet = VFeature.fromQueryResult(result); - for (let i = 0; i < featureSet.length; i++) { - data.push( - Object.assign(featureSet[i].attributes, { - key: featureSet[i].FID ? featureSet[i].FID : i - }) - ); + + /** + * @description 将传入得要素类转换成对应的GeoJSON格式对象 + * @param {VFeature} feature 要素类 + * @returns 对应的GeoJSON格式的要素 + */ + static featureToGeojson(feature) { + let json = { + type: 'FeatureCollection', + features: [] + }; + let features = []; + const { geometryType } = feature; + if (geometryType == 'Polygon') { + features = this.polyToGeojson(feature); + } else if (geometryType == 'LineString') { + features = this.lineToGeojson(feature); + } else if (geometryType == 'Point') { + features = this.pointToGeojson(feature); + } + json.features = features; + return json; } - return data; - }; - static resultToGeojson(result) { - let geo = VFeature.fromQueryResult(result); - let featureSet = []; - geo = JSON.parse( - JSON.stringify(geo) - .replace(/attributes/g, "properties") - .replace(/geometryType/g, "type") - ); - let feature; - for (let i = 0; i < geo.length; i++) { - feature = VFeature.polygonToGeojson(geo[i]); - featureSet = featureSet.concat(feature); + + /** + * @description 将区要素转换成GeoJSON格式的要素 + * @param {*} vfeature + * @returns GeoJSON格式的区要素 + */ + static polyToGeojson(vfeature) { + let feature, + features = []; + let geomArr = vfeature.geometry; + let properties = vfeature.properties; + + for (let i = 0; i < geomArr.length; i++) { + feature = {}; + if (geomArr[i].type === 'Polygon') { + let exterior = geomArr[i].exterior.map((i) => [i.x, i.y]); + let interior = geomArr[i].interior.map((i) => [i.x, i.y]); + geomArr[i].coordinates = [geomArr[i].coordinates.concat(exterior, interior)]; + } + feature.geometry = geomArr[i]; + feature.properties = properties; + feature.type = 'Feature'; + delete feature.geometry.exterior; + delete feature.geometry.interior; + features.push(feature); + } + return features; } - let geojson = { - type: "feature", - features: featureSet - }; - return geojson; - }; - static polygonToGeojson(VFeature) { - let feature, - features = []; - let geomArr = VFeature.geometry; - let properties = VFeature.properties; - for (let i = 0; i < geomArr.length; i++) { - feature = {}; - //处理数据coordinates - if (geomArr[i].type === "Polygon") { - geomArr[i].coordinates = geomArr[i].coordinates.concat( - geomArr[i].exterior, - geomArr[i].interior - ); - } - feature.geometry = geomArr[i]; - feature.properties = properties; - features.push(feature); + /** + * @description 将线要素转换成GeoJSON格式的要素 + * @param {*} vfeature + * @returns GeoJSON格式的线要素 + */ + static lineToGeojson(vfeature) { + let feature, + features = []; + let geomArr = vfeature.geometry; + let properties = vfeature.properties; + + for (let i = 0; i < geomArr.length; i++) { + feature = {}; + if (geomArr[i].type === 'LineString') { + let coords = geomArr[i].coordinates.map((i) => [i.x, i.y]); + geomArr[i].coordinates = coords; + } + feature.geometry = geomArr[i]; + feature.properties = properties; + feature.type = 'Feature'; + features.push(feature); + } + return features; + } + + /** + * @description 将点要素转换成GeoJSON格式的要素 + * @param {*} vfeature + * @returns GeoJSON格式的点要素 + */ + static pointToGeojson(vfeature) { + let feature, + features = []; + let geomArr = vfeature.geometry; + let properties = vfeature.properties; + + for (let i = 0; i < geomArr.length; i++) { + feature = {}; + //处理数据coordinates + if (geomArr[i].type === 'Point') { + geomArr[i].coordinates = geomArr[i].coordinates; + } + feature.geometry = geomArr[i]; + feature.properties = properties; + feature.type = 'Feature'; + features.push(feature); + } + return features; } - return features; - }; - constructor(options) { - this.geometry = undefined; - this.geometryType = undefined; - this.attributes = undefined; - this.style = undefined; - this.FID = undefined; + constructor(options) { + this.geometry = undefined; + this.geometryType = undefined; + this.attributes = undefined; + this.style = undefined; + this.FID = undefined; - extend(this, options); - } + extend(this, options); + } } export { VFeature }; diff --git a/src/service/Igserver/MRFS/FeatureService.js b/src/service/Igserver/MRFS/FeatureService.js index f38d83415..7b7e36b51 100644 --- a/src/service/Igserver/MRFS/FeatureService.js +++ b/src/service/Igserver/MRFS/FeatureService.js @@ -22,7 +22,7 @@ import { } from "../../common"; class FeatureService { - static get(url, fn, error) { + static get(url, fn, error, option) { // XMLHttpRequest对象用于在后台与服务器交换数据 let xhr = new XMLHttpRequest(); xhr.open("GET", url, true); @@ -30,13 +30,13 @@ class FeatureService { // readyState == 4说明请求已完成 if ((xhr.readyState == 4 && xhr.status == 200) || xhr.status == 304) { // 从服务器获得数据 - fn.call(this, xhr.responseText); + fn.call(this, xhr.responseText, option); } else if ( xhr.readyState === 4 && xhr.status !== 200 && xhr.status !== 304 ) { - error.call(this, xhr.responseText); + error.call(this, xhr.responseText, option); } }; xhr.send(); diff --git a/src/service/Igserver/MRFS/QueryDocFeature.js b/src/service/Igserver/MRFS/QueryDocFeature.js index 004525c51..18ae9dfdf 100644 --- a/src/service/Igserver/MRFS/QueryDocFeature.js +++ b/src/service/Igserver/MRFS/QueryDocFeature.js @@ -53,6 +53,8 @@ import {QueryServiceBase} from "./QueryServiceBase"; ip: "develop.smaryun.com", //端口号 port: "6163" + //请求方式 GET|POST + requestType:"GET" }); //执行查询操作,querySuccess为成功回调,queryError为失败回调 queryService.query(function (res) { diff --git a/src/service/Igserver/MRFS/QueryServiceBase.js b/src/service/Igserver/MRFS/QueryServiceBase.js index 0aeb47e85..87ab4fab3 100644 --- a/src/service/Igserver/MRFS/QueryServiceBase.js +++ b/src/service/Igserver/MRFS/QueryServiceBase.js @@ -74,7 +74,7 @@ class QueryServiceBase extends ServiceBase { * @param restUrl - {String} 查询路径。 * @param dataObject - {Object} 数据对象。
* @param onSuccess - {Function} 查询成功回调函数。
- * @param way - {String} 请求方式。
+ * @param way - {String} 请求方式 GET|POST
* @param onError - {Function} 查询失败回调函数。
* @param resultFormat - {String} 结果返回格式。 */ @@ -104,7 +104,7 @@ class QueryServiceBase extends ServiceBase { * @function Zondy.Service.QueryServiceBase.prototype.query * @param onSuccess - {Function} 查询成功回调函数。 * @param onError - {Function} 查询失败回调函数。 - * @param requestType - {Boolean} 响应类型。 + * @param requestType - {Boolean} 请求类型,根据Boolean判断走GET还是POST请求。 */ query(onSuccess, onError, requestType) { if (this.queryParam === null) { diff --git a/src/service/Igserver/MRGS/ProjectRang.js b/src/service/Igserver/MRGS/ProjectRang.js index e2c3d4b03..adc6f5a83 100644 --- a/src/service/Igserver/MRGS/ProjectRang.js +++ b/src/service/Igserver/MRGS/ProjectRang.js @@ -1,12 +1,6 @@ -import { - Zondy -} from '../../common/Base'; -import { - GeometryAnalysisBase -} from "./GeometryAnalysisBase"; -import { - IgsServiceBase -} from "../../baseserver/IServiceBase"; +import { Zondy } from '../../common/Base'; +import { GeometryAnalysisBase } from './GeometryAnalysisBase'; +import { IgsServiceBase } from '../../baseserver/IServiceBase'; /** * 对矩形范围坐标点进行投影转换 @@ -18,7 +12,9 @@ import { * @param {String} [option.gdbsvrName = "MapGISLocal"] 数据源名称 * @param {String} [option.gdbName = null] 数据库名称 * @param {Number} [option.srefID = 0] 源投影参考系ID + * @param {Number} [option.srefName = null] 源投影参考系名 * @param {Number} [option.desfID = 0] 目的投影参考系ID + * @param {Number} [option.desfName = null] 目的投影参考系名 * @param {String} [option.userName = null] 地理数据源/地理数据库账户名 * @param {String} [option.password = null] 地理数据源/地理数据库密码 * @example @@ -30,10 +26,10 @@ import { gdbsvrName: "MapGISLocal", //数据库名称 gdbName: "OpenLayerVecterMap", - //源投影参考系ID - srefID: 10, - //目的投影参考系ID - desfID: 601, + //源投影参考系名 + srefName: "地理坐标系(北京)_度", + //目的投影参考系名 + desfName: "地理坐标系(西安)_度", //服务器地址 ip: "develop.smaryun.com", //服务器端口 @@ -57,7 +53,7 @@ class ProjectRang extends GeometryAnalysisBase { * @description 数据源名称 * @default MapGISLocal */ - this.gdbsvrName = options.gdbsvrName !== undefined ? options.gdbsvrName : "MapGISLocal"; + this.gdbsvrName = options.gdbsvrName !== undefined ? options.gdbsvrName : 'MapGISLocal'; /** * @private @@ -77,6 +73,15 @@ class ProjectRang extends GeometryAnalysisBase { */ this.srefID = options.srefID !== undefined ? options.srefID : 0; + /** + * @private + * @member Zondy.Service.ProjectRang.prototype.srefName + * @type {Number} + * @description 源投影参考系名 + * @default null + */ + this.srefName = options.srefName !== undefined ? options.srefName : null; + /** * @private * @member Zondy.Service.ProjectRang.prototype.desfID @@ -86,6 +91,15 @@ class ProjectRang extends GeometryAnalysisBase { */ this.desfID = options.desfID !== undefined ? options.desfID : 0; + /** + * @private + * @member Zondy.Service.ProjectRang.prototype.desfName + * @type {Number} + * @description 目的投影参考系名 + * @default null + */ + this.desfName = options.desfName !== undefined ? options.desfName : null; + /** * @private * @member Zondy.Service.ProjectRang.prototype.userName @@ -113,14 +127,20 @@ class ProjectRang extends GeometryAnalysisBase { * @param {callback} onError 执行失败后的回调函数 */ execute(rectangle, onSuccess, onError) { - var rang = ""; + var rang = ''; if (rectangle) { - rang = rectangle.xmin + "$" + rectangle.ymin + "$" + rectangle.xmax + "$" + rectangle.ymax; + rang = rectangle.xmin + '$' + rectangle.ymin + '$' + rectangle.xmax + '$' + rectangle.ymax; + } + this.partUrl = `geomservice/${this.gdbsvrName}/${this.gdbName}`; + if (this.desfName && this.srefName) { + this.partUrl += `?f=json&rang=${rang}`; + this.partUrl += `&srefName=${this.srefName}&desfName=${this.desfName}`; + } else if (this.desfID && this.srefID) { + this.partUrl += `/${this.srefID}/${this.desfID}`; + this.partUrl += `?f=json&rang=${rang}`; } - if (this.userName === null || this.password === null) { - this.partUrl = "geomservice/" + this.gdbsvrName + "/" + this.gdbName + "/" + this.srefID + "/" + this.desfID + "?f=json&rang=" + rang; - } else { - this.partUrl = "geomservice/" + this.gdbsvrName + "/" + this.gdbName + "/" + this.srefID + "/" + this.desfID + "?f=json&rang=" + rang + "&userName=" + this.userName + "&password=" + this.password; + if (this.userName && this.password) { + this.partUrl += `&userName=${this.userName}&password=${this.password}`; } var url = this.getFullUrl(); var me = this; @@ -133,9 +153,6 @@ class ProjectRang extends GeometryAnalysisBase { }); service.processAsync(); } - } -export { - ProjectRang -}; -Zondy.Service.ProjectRang = ProjectRang; \ No newline at end of file +export { ProjectRang }; +Zondy.Service.ProjectRang = ProjectRang; diff --git a/src/service/Igserver/common/IgsServiceParse.js b/src/service/Igserver/common/IgsServiceParse.js new file mode 100644 index 000000000..0aecc4c50 --- /dev/null +++ b/src/service/Igserver/common/IgsServiceParse.js @@ -0,0 +1,124 @@ +import IgsServiceType from './IgsServiceType'; + +/** + * @private + * @description 内部引擎切换,不对外暴露 + */ +const MapRules = [ + { + type: 'mapboxgl', + rule: '{z}/{y}/{x}' + }, + { + type: 'cesium', + rule: '{z}/{y}/{x}' + } +]; + +/** + * @author 基础平台 潘卓然 + * @class module:IGServer基类.IgsServiceParse + * @classdesc MapGIS IGServer服务解析器 + * @description Zondy.Service.IgsServiceParse + * @example + * // es 6 + * import IgsServiceParse from '@mapgis/webclient-es6-service'; + * let parse = new IgsServiceParse(); + * let url = parse.GetMapboxUrl(10, 'localhost', '6163', '世界地图'); + * // 浏览器 + * let parse = new Zondy.Service.IgsServiceParse(); + * let url = parse.GetMapboxUrl(10, 'localhost', '6163', '世界地图'); + */ +export class IgsServiceParse { + /** + * @private + * @function module:IGServer基类.IgsServiceParse.prototype.get + * @param {String | Number} id 服务名称或者对应的Number型枚举值 + * @param {String} ip 服务的IP地址 + * @param {String} port 服务的端口地址 + * @param {String} serverName 服务的名称 + * @param {String } [baseUrl] urlType 服务的地址类型 + * @param {String } [GetMap] type 服务的类型 + * @example + * let parse = new IgsServiceParse(); + * let url = parse.get(10, 'localhost', '6163', '世界地图'); + */ + get(id, ip, port, serverName, urlType = 'baseUrl', type = 'GetMap', map = 'mapboxgl') { + let find = undefined; + if (typeof id === 'number') { + find = IgsServiceType.find((r) => { + return r.id === id; + }); + } else if (typeof id === 'string') { + find = IgsServiceType.find((r) => { + return r.id == id || r.title == id || r.type == id; + }); + } + if (!find) return undefined; + let url = find[urlType][type]; + url = url.replace('{ip}', ip); + url = url.replace('{port}', port); + while (url.indexOf('{serverName}') >= 0) { + url = url.replace('{serverName}', serverName); + } + let rule; + switch (map) { + case 'mapboxgl': + rule = MapRules.filter((item) => item.type === 'mapboxgl'); + url = url.replace('{level}/{row}/{col}', rule[0].rule); + url = url.replace('tilematrix={tilematrix}&tilerow={tilerow}&tilecol={tilecol}', 'tilematrix={z}&tilerow={y}&tilecol={x}'); + url = url.replace('w={w}&h={h}&f={f}', 'w=512&h=512&f=png'); + case 'cesium': + rule = MapRules.filter((item) => item.type === 'cesium'); + url = url.replace('{level}/{row}/{col}', rule[0].rule); + } + return url; + } + + /** + * @function module:IGServer基类.IgsServiceParse.prototype.GetCapabilities + * @param {String | Number} id 服务名称或者对应的Number型枚举值 + * @param {String} ip 服务的IP地址 + * @param {String} port 服务的端口地址 + * @param {String} serverName 服务的名称 + * @param {String } [baseUrl] urlType 服务的地址类型 + * @example + * let parse = new IgsServiceParse(); + * let url = parse.GetCapabilities(10, 'localhost', '6163', '世界地图'); + */ + GetCapabilities(id, ip, port, serverName, urlType = 'baseUrl') { + return this.get(id, ip, port, serverName, urlType, 'GetCapabilities'); + } + + /** + * @function module:IGServer基类.IgsServiceParse.prototype.GetMap + * @param {String | Number} id 服务名称或者对应的Number型枚举值 + * @param {String} ip 服务的IP地址 + * @param {String} port 服务的端口地址 + * @param {String} serverName 服务的名称 + * @param {String } [baseUrl] urlType 服务的地址类型 + * @example + * let parse = new IgsServiceParse(); + * let url = parse.GetMap(10, 'localhost', '6163', '世界地图'); + */ + GetMap(id, ip, port, serverName, urlType = 'baseUrl', map = 'mapboxgl') { + return this.get(id, ip, port, serverName, urlType, 'GetMap', map); + } + + /** + * @function module:IGServer基类.IgsServiceParse.prototype.GetFeatureInfo + * @param {String | Number} id 服务名称或者对应的Number型枚举值 + * @param {String} ip 服务的IP地址 + * @param {String} port 服务的端口地址 + * @param {String} serverName 服务的名称 + * @param {String } [baseUrl] urlType 服务的地址类型 + * @example + * let parse = new IgsServiceParse(); + * let url = parse.GetFeatureInfo(10, 'localhost', '6163', '世界地图'); + */ + GetFeatureInfo(id, ip, port, serverName, urlType = 'baseUrl') { + return this.get(id, ip, port, serverName, urlType, 'GetFeatureInfo'); + } +} + +export default IgsServiceParse; diff --git a/src/service/Igserver/common/IgsServiceType.js b/src/service/Igserver/common/IgsServiceType.js new file mode 100644 index 000000000..c98a616fd --- /dev/null +++ b/src/service/Igserver/common/IgsServiceType.js @@ -0,0 +1,239 @@ +export const IgsServiceEnum = { + IGSRestMap2D: 'IGSRestMap2D', + IGSRestMap3D: 'IGSRestMap3D', + IGSRestTile: 'IGSRestTile', + ArcGISRestMapServer: 'ArcGISRestMapServer', + ArcGISRestFeatureServer: 'ArcGISRestFeatureServer', + IGSRestMap3DCache: 'IGSRestMap3DCache', + IGSRestMap3DModel: 'IGSRestMap3DModel', + IGSRestMap3DTerrain: 'IGSRestMap3DTerrain', + WMS: 'WMS', + WFS: 'WFS', + WMTS: 'WMTS', + WCS: 'WCS', + ArcGISRestVectorTileServer: 'ArcGISRestVectorTileServer' +} + +/** + * @description 服务协议类别,保证稳定性,注意不要重构枚举名和枚举值 + */ +export const IgsServiceType = [ + { + type: 'IGSRestMap2D', + id: 1, + title: 'IGServer二维地图服务', + description: 'IGServer自定义二维文档REST,包括地图服务、要素服务、目录服务', + url: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/mrcs/docs/{serverName}/0/layers?f=json', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/docs/{serverName}?bbox={bbox}&w={w}&h={h}&f={f}', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/mrcs/docs/{serverName}/0/layers?f=json', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/docs/{serverName}?bbox={bbox}', + GetFeatureInfo: '' + } + }, + { + type: 'IGSRestMap3D', + id: 2, + title: 'IGServer三维地图服务', + description: 'IGServer自定义三维文档REST', + url: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetDocInfo', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}/{level}/{row}/{col}', + GetFeatureInfo: '', + GetCovering: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetCovering?sceneIndex={sceneIndex}&layerIndex={layerIndex}&level={level}&row={row}&col={col}&xDensity={xDensity}&yDensity={yDensity}', + GetLabels: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetLabels?sceneIndex={sceneIndex}&layerIndex={layerIndex}&level={level}&row={row}&col={col}&xDensity={xDensity}&yDensity={yDensity}', + GetModels: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetModels?sceneIndex={sceneIndex}&layerIndex={layerIndex}&level={level}&row={row}&col={col}&xDensity={xDensity}&yDensity={yDensity}', + GetTerrain: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetTerrain?sceneIndex={sceneIndex}&layerIndex={layerIndex}&level={level}&row={row}&col={col}&xDensity={xDensity}&yDensity={yDensity}', + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '', + GetCovering: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetCovering?sceneIndex={sceneIndex}&layerIndex={layerIndex}&level={level}&row={row}&col={col}&xDensity={xDensity}&yDensity={yDensity}', + GetLabels: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetLabels?sceneIndex={sceneIndex}&layerIndex={layerIndex}&level={level}&row={row}&col={col}&xDensity={xDensity}&yDensity={yDensity}', + GetModels: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetModels?sceneIndex={sceneIndex}&layerIndex={layerIndex}&level={level}&row={row}&col={col}&xDensity={xDensity}&yDensity={yDensity}', + GetTerrain: 'http://{ip}:{port}/igs/rest/g3d/{serverName}/GetTerrain?sceneIndex={sceneIndex}&layerIndex={layerIndex}&level={level}&row={row}&col={col}&xDensity={xDensity}&yDensity={yDensity}', + } + }, + { + type: 'IGSRestTile', + id: 3, + title: 'IGServer瓦片服务', + description: 'IGServer自定义瓦片REST', + url: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/mrcs/tiles/{serverName}?f=json&v=2.0', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}/{level}/{row}/{col}', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/mrcs/tiles/{serverName}?f=json&v=2.0', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}', + GetFeatureInfo: '' + } + }, + { + type: 'ArcGISRestMapServer', + id: 4, + title: 'ArcGIS Rest地图服务', + description: 'ArcGIS Rest地图服务协议', + url: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + } + }, + { + type: 'ArcGISRestFeatureServer', + id: 5, + title: 'ArcGIS Rest要素服务', + description: 'ArcGIS Rest要素服务协议', + url: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + } + }, + { + type: 'IGSRestMap3DCache', + id: 6, + title: 'IGServer三维缓存服务', + description: 'IGServer三维缓存服务', + url: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + } + }, + { + type: 'IGSRestMap3DModel', + id: 7, + title: 'IGServer三维模型服务', + description: 'IGServer三维模型服务', + url: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + } + }, + { + type: 'IGSRestMap3DTerrain', + id: 8, + title: 'IGServer三维地形服务', + description: 'IGServer三维地形服务', + url: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + } + }, + { + type: 'WMS', + id: 17, + title: 'OGC-WMS', + description: 'OGC-WMS服务', + url: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', + GetMap: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', + GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMSServer', + GetFeatureInfo: '' + } + }, + { + type: 'WFS', + id: 18, + title: 'OGC WFS', + description: 'OGC WFS服务', + url: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + } + }, + { + type: 'WMTS', + id: 19, + title: 'OGC WMTS', + description: 'OGC WMTS服务', + url: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer/1.0.0/WMTSCapabilities.xml', + GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer?service=WMTS&request=GetTile&version=1.0.0&style=default&format=image/png&layer={serverName}&tilematrix={tilematrix}&tilerow={tilerow}&tilecol={tilecol}', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer/1.0.0/WMTSCapabilities.xml', + GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServerr', + GetFeatureInfo: '' + } + }, + { + type: 'WCS', + id: 20, + title: 'OGC WCS', + description: 'OGC WCS服务', + url: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + } + }, + { + type: 'ArcGISRestVectorTileServer', + id: 32, + title: 'ArcGIS Rest矢量瓦片服务', + description: 'ArcGIS Rest矢量瓦片服务', + url: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: '', + GetFeatureInfo: '' + } + }, +]; + +export default IgsServiceType; \ No newline at end of file diff --git a/src/service/Igserver/common/inde.js b/src/service/Igserver/common/inde.js new file mode 100644 index 000000000..1ce5ded36 --- /dev/null +++ b/src/service/Igserver/common/inde.js @@ -0,0 +1,6 @@ +/** + * @module IGServer基类 + */ +import { IgsServiceEnum, IgsServiceType } from './IgsServiceType'; +import { IgsServiceParse } from './IgsServiceParse'; +export { IgsServiceEnum, IgsServiceType, IgsServiceParse }; diff --git a/src/service/Igserver/extend/RuleParas.js b/src/service/Igserver/extend/RuleParas.js deleted file mode 100644 index 485f3d220..000000000 --- a/src/service/Igserver/extend/RuleParas.js +++ /dev/null @@ -1,201 +0,0 @@ -export const MapRules = [ - { - type: 'mapboxgl', - rule: '{z}/{y}/{x}' - }, - { - type: 'cesium', - rule: '{z}/{y}/{x}' - } -]; - -export const IgserverRules = [ - { - type: 'DynamicTile', - id: 2, - title: '动态裁图', - description: '动态裁图为IGSMap2D的额外特性,为服务的功能', - url: { - GetCapabilities: '', - GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}/{level}/{row}/{col}', - GetFeatureInfo: '' - }, - baseUrl: { - GetCapabilities: '', - GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}', - GetFeatureInfo: '' - } - }, - { - type: 'IGSMap2D', - id: 3, - title: '二维文档服务', - description: 'IGServer自定义的二维文档REST服务', - url: { - GetCapabilities: '', - GetMap: 'http://{ip}:{port}/igs/rest/mrms/docs/{serverName}?bbox={bbox}&w={w}&h={h}&f={f}', - GetFeatureInfo: '' - }, - baseUrl: { - GetCapabilities: '', - GetMap: 'http://{ip}:{port}/igs/rest/mrms/docs/{serverName}?bbox={bbox}', - GetFeatureInfo: '' - } - }, - { - type: 'IGSTile', - id: 5, - title: '瓦片服务', - description: 'IGServer自定义的瓦片REST服务', - url: { - GetCapabilities: 'http://{ip}:{port}/igs/rest/mrcs/tiles/{serverName}?f=json&v=2.0', - GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}/{level}/{row}/{col}', - GetFeatureInfo: '' - }, - baseUrl: { - GetCapabilities: 'http://{ip}:{port}/igs/rest/mrcs/tiles/{serverName}?f=json&v=2.0', - GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}', - GetFeatureInfo: '' - } - }, - { - type: 'WMS', - id: 8, - title: 'WMS', - description: 'OGC-WMS服务', - url: { - GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', - GetMap: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', - GetFeatureInfo: '' - }, - baseUrl: { - GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', - GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMSServer', - GetFeatureInfo: '' - } - }, - { - type: 'WMTS', - id: 10, - title: 'WMTS', - description: 'OGC-WMTS服务', - url: { - GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer/1.0.0/WMTSCapabilities.xml', - GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer?service=WMTS&request=GetTile&version=1.0.0&style=default&format=image/png&layer={serverName}&tilematrix={tilematrix}&tilerow={tilerow}&tilecol={tilecol}', - GetFeatureInfo: '' - }, - baseUrl: { - GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer/1.0.0/WMTSCapabilities.xml', - GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServerr', - GetFeatureInfo: '' - } - } -]; - -/** - * @author 基础平台 潘卓然 - * @class module:拓展服务.RuleParse - * @classdesc MapGIS IGServer服务解析器 - * @description Zondy.Service.RuleParse - * @example - * // es 6 - * import RuleParse from '@mapgis/webclient-es6-service'; - * let parse = new RuleParse(); - * let url = parse.GetMapboxUrl(10, 'localhost', '6163', '世界地图'); - * // 浏览器 - * let parse = new Zondy.Service.RuleParse(); - * let url = parse.GetMapboxUrl(10, 'localhost', '6163', '世界地图'); - */ -export class RuleParse { - /** - * @private - * @function module:拓展服务.RuleParse.prototype.get - * @param {String | Number} id 服务名称或者对应的Number型枚举值 - * @param {String} ip 服务的IP地址 - * @param {String} port 服务的端口地址 - * @param {String} serverName 服务的名称 - * @param {String } [baseUrl] urlType 服务的地址类型 - * @param {String } [GetMap] type 服务的类型 - * @example - * let parse = new RuleParse(); - * let url = parse.get(10, 'localhost', '6163', '世界地图'); - */ - get(id, ip, port, serverName, urlType = 'baseUrl', type = 'GetMap', map = 'mapboxgl') { - let find = undefined; - if (typeof id === 'number') { - find = IgserverRules.find((r) => { - return r.id === id; - }); - } else if (typeof id === 'string') { - find = IgserverRules.find((r) => { - return r.title == id; - }); - } - if (!find) return undefined; - let url = find[urlType][type]; - url = url.replace('{ip}', ip); - url = url.replace('{port}', port); - while (url.indexOf('{serverName}') >= 0) { - url = url.replace('{serverName}', serverName); - } - let rule; - switch (map) { - case 'mapboxgl': - rule = MapRules.filter((item) => item.type === 'mapboxgl'); - url = url.replace('{level}/{row}/{col}', rule[0].rule); - url = url.replace('tilematrix={tilematrix}&tilerow={tilerow}&tilecol={tilecol}', 'tilematrix={z}&tilerow={y}&tilecol={x}'); - url = url.replace('w={w}&h={h}&f={f}', 'w=512&h=512&f=png'); - case 'cesium': - rule = MapRules.filter((item) => item.type === 'cesium'); - url = url.replace('{level}/{row}/{col}', rule[0].rule); - } - return url; - } - - /** - * @function module:拓展服务.RuleParse.prototype.GetCapabilities - * @param {String | Number} id 服务名称或者对应的Number型枚举值 - * @param {String} ip 服务的IP地址 - * @param {String} port 服务的端口地址 - * @param {String} serverName 服务的名称 - * @param {String } [baseUrl] urlType 服务的地址类型 - * @example - * let parse = new RuleParse(); - * let url = parse.GetCapabilities(10, 'localhost', '6163', '世界地图'); - */ - GetCapabilities(id, ip, port, serverName, urlType = 'baseUrl') { - return this.get(id, ip, port, serverName, urlType, 'GetCapabilities'); - } - - /** - * @function module:拓展服务.RuleParse.prototype.GetMap - * @param {String | Number} id 服务名称或者对应的Number型枚举值 - * @param {String} ip 服务的IP地址 - * @param {String} port 服务的端口地址 - * @param {String} serverName 服务的名称 - * @param {String } [baseUrl] urlType 服务的地址类型 - * @example - * let parse = new RuleParse(); - * let url = parse.GetMap(10, 'localhost', '6163', '世界地图'); - */ - GetMap(id, ip, port, serverName, urlType = 'baseUrl', map = 'mapboxgl') { - return this.get(id, ip, port, serverName, urlType, 'GetMap', map); - } - - /** - * @function module:拓展服务.RuleParse.prototype.GetFeatureInfo - * @param {String | Number} id 服务名称或者对应的Number型枚举值 - * @param {String} ip 服务的IP地址 - * @param {String} port 服务的端口地址 - * @param {String} serverName 服务的名称 - * @param {String } [baseUrl] urlType 服务的地址类型 - * @example - * let parse = new RuleParse(); - * let url = parse.GetFeatureInfo(10, 'localhost', '6163', '世界地图'); - */ - GetFeatureInfo(id, ip, port, serverName, urlType = 'baseUrl') { - return this.get(id, ip, port, serverName, urlType, 'GetFeatureInfo'); - } -} - -export default RuleParse; diff --git a/src/service/Igserver/extend/index.js b/src/service/Igserver/extend/index.js index b3f4787de..7fe84cd06 100644 --- a/src/service/Igserver/extend/index.js +++ b/src/service/Igserver/extend/index.js @@ -9,7 +9,6 @@ import { MeshingParam } from './MeshingParam'; import { NetAnalyse } from './NetAnalyse'; import { NetAnalysisExtent } from './NetAnalysisExtent'; import { SlopLineParam } from './SlopLineParam'; -import { RuleParse } from './RuleParas'; export { ContourNoteParam }; export { ContourParam }; @@ -19,4 +18,3 @@ export { MeshingParam }; export { NetAnalyse }; export { NetAnalysisExtent }; export { SlopLineParam }; -export { RuleParse }; diff --git a/src/service/Portal/PortalServiceParse.js b/src/service/Portal/PortalServiceParse.js new file mode 100644 index 000000000..c545954b7 --- /dev/null +++ b/src/service/Portal/PortalServiceParse.js @@ -0,0 +1,124 @@ +import PortalServiceType from './PortalServiceType'; + +/** + * @private + * @description 内部引擎切换,不对外暴露 + */ +const MapRules = [ + { + type: 'mapboxgl', + rule: '{z}/{y}/{x}' + }, + { + type: 'cesium', + rule: '{z}/{y}/{x}' + } +]; + +/** + * @author 基础平台 潘卓然 + * @class module:门户.PortalServiceParse + * @classdesc MapGIS IGServer服务解析器 + * @description Zondy.Service.PortalServiceParse + * @example + * // es 6 + * import PortalServiceParse from '@mapgis/webclient-es6-service'; + * let parse = new PortalServiceParse(); + * let url = parse.GetMapboxUrl(10, 'localhost', '6163', '世界地图'); + * // 浏览器 + * let parse = new Zondy.Service.PortalServiceParse(); + * let url = parse.GetMapboxUrl(10, 'localhost', '6163', '世界地图'); + */ +export class PortalServiceParse { + /** + * @private + * @function module:门户.PortalServiceParse.prototype.get + * @param {String | Number} id 服务名称或者对应的Number型枚举值 + * @param {String} ip 服务的IP地址 + * @param {String} port 服务的端口地址 + * @param {String} serverName 服务的名称 + * @param {String } [baseUrl] urlType 服务的地址类型 + * @param {String } [GetMap] type 服务的类型 + * @example + * let parse = new PortalServiceParse(); + * let url = parse.get(10, 'localhost', '6163', '世界地图'); + */ + get(id, ip, port, serverName, urlType = 'baseUrl', type = 'GetMap', map = 'mapboxgl') { + let find = undefined; + if (typeof id === 'number') { + find = PortalServiceType.find((r) => { + return r.id === id; + }); + } else if (typeof id === 'string') { + find = PortalServiceType.find((r) => { + return r.title == id; + }); + } + if (!find) return undefined; + let url = find[urlType][type]; + url = url.replace('{ip}', ip); + url = url.replace('{port}', port); + while (url.indexOf('{serverName}') >= 0) { + url = url.replace('{serverName}', serverName); + } + let rule; + switch (map) { + case 'mapboxgl': + rule = MapRules.filter((item) => item.type === 'mapboxgl'); + url = url.replace('{level}/{row}/{col}', rule[0].rule); + url = url.replace('tilematrix={tilematrix}&tilerow={tilerow}&tilecol={tilecol}', 'tilematrix={z}&tilerow={y}&tilecol={x}'); + url = url.replace('w={w}&h={h}&f={f}', 'w=512&h=512&f=png'); + case 'cesium': + rule = MapRules.filter((item) => item.type === 'cesium'); + url = url.replace('{level}/{row}/{col}', rule[0].rule); + } + return url; + } + + /** + * @function module:门户.PortalServiceParse.prototype.GetCapabilities + * @param {String | Number} id 服务名称或者对应的Number型枚举值 + * @param {String} ip 服务的IP地址 + * @param {String} port 服务的端口地址 + * @param {String} serverName 服务的名称 + * @param {String } [baseUrl] urlType 服务的地址类型 + * @example + * let parse = new PortalServiceParse(); + * let url = parse.GetCapabilities(10, 'localhost', '6163', '世界地图'); + */ + GetCapabilities(id, ip, port, serverName, urlType = 'baseUrl') { + return this.get(id, ip, port, serverName, urlType, 'GetCapabilities'); + } + + /** + * @function module:门户.PortalServiceParse.prototype.GetMap + * @param {String | Number} id 服务名称或者对应的Number型枚举值 + * @param {String} ip 服务的IP地址 + * @param {String} port 服务的端口地址 + * @param {String} serverName 服务的名称 + * @param {String } [baseUrl] urlType 服务的地址类型 + * @example + * let parse = new PortalServiceParse(); + * let url = parse.GetMap(10, 'localhost', '6163', '世界地图'); + */ + GetMap(id, ip, port, serverName, urlType = 'baseUrl', map = 'mapboxgl') { + return this.get(id, ip, port, serverName, urlType, 'GetMap', map); + } + + /** + * @function module:门户.PortalServiceParse.prototype.GetFeatureInfo + * @param {String | Number} id 服务名称或者对应的Number型枚举值 + * @param {String} ip 服务的IP地址 + * @param {String} port 服务的端口地址 + * @param {String} serverName 服务的名称 + * @param {String } [baseUrl] urlType 服务的地址类型 + * @example + * let parse = new PortalServiceParse(); + * let url = parse.GetFeatureInfo(10, 'localhost', '6163', '世界地图'); + */ + GetFeatureInfo(id, ip, port, serverName, urlType = 'baseUrl') { + return this.get(id, ip, port, serverName, urlType, 'GetFeatureInfo'); + } +} + +export default PortalServiceParse; diff --git a/src/service/Portal/PortalServiceType.js b/src/service/Portal/PortalServiceType.js new file mode 100644 index 000000000..01e0b1788 --- /dev/null +++ b/src/service/Portal/PortalServiceType.js @@ -0,0 +1,96 @@ +export const PortalServiceEnum = { + DynamicTile: 'DynamicTile', + IGSMap2D: 'IGSMap2D', + IGSTile: 'IGSTile', + WMS: 'WMS', + WMTS: 'WMTS' +}; + +/** + * @class module:门户.PortalServiceType + * @description 门户类型枚举类 + */ +export const PortalServiceType = [ + { + type: 'DynamicTile', + id: 2, + title: '动态裁图', + description: '动态裁图为IGSMap2D的额外特性,为服务的功能', + url: { + GetCapabilities: '', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}/{level}/{row}/{col}', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}', + GetFeatureInfo: '' + } + }, + { + type: 'IGSMap2D', + id: 3, + title: '二维文档服务', + description: 'IGServer自定义的二维文档REST服务', + url: { + GetCapabilities: '', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/docs/{serverName}?bbox={bbox}&w={w}&h={h}&f={f}', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: '', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/docs/{serverName}?bbox={bbox}', + GetFeatureInfo: '' + } + }, + { + type: 'IGSTile', + id: 5, + title: '瓦片服务', + description: 'IGServer自定义的瓦片REST服务', + url: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/mrcs/tiles/{serverName}?f=json&v=2.0', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}/{level}/{row}/{col}', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/mrcs/tiles/{serverName}?f=json&v=2.0', + GetMap: 'http://{ip}:{port}/igs/rest/mrms/tile/{serverName}', + GetFeatureInfo: '' + } + }, + { + type: 'WMS', + id: 8, + title: 'WMS', + description: 'OGC-WMS服务', + url: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', + GetMap: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/doc/{serverName}/WMSServer', + GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMSServer', + GetFeatureInfo: '' + } + }, + { + type: 'WMTS', + id: 10, + title: 'WMTS', + description: 'OGC-WMTS服务', + url: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer/1.0.0/WMTSCapabilities.xml', + GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer?service=WMTS&request=GetTile&version=1.0.0&style=default&format=image/png&layer={serverName}&tilematrix={tilematrix}&tilerow={tilerow}&tilecol={tilecol}', + GetFeatureInfo: '' + }, + baseUrl: { + GetCapabilities: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServer/1.0.0/WMTSCapabilities.xml', + GetMap: 'http://{ip}:{port}/igs/rest/ogc/{serverName}/WMTSServerr', + GetFeatureInfo: '' + } + } +]; + +export default PortalServiceType; diff --git a/src/service/Portal/index.js b/src/service/Portal/index.js new file mode 100644 index 000000000..4bd10f188 --- /dev/null +++ b/src/service/Portal/index.js @@ -0,0 +1,7 @@ +/** + * @module 门户 + */ +import { PortalServiceEnum, PortalServiceType } from './PortalServiceType'; +import { PortalServiceParse } from './PortalServiceParse'; + +export { PortalServiceEnum, PortalServiceType, PortalServiceParse }; diff --git a/src/service/README.md b/src/service/README.md new file mode 100644 index 000000000..bd713da65 --- /dev/null +++ b/src/service/README.md @@ -0,0 +1,79 @@ +# MapGIS Client for JavaScript - Service + +[![npm version][npm-img]][npm-url] +[![apache licensed](https://img.shields.io/badge/license-Apache%202.0-orange.svg?style=flat-square)](https://github.com/MapGIS/WebClient-JavaScript/blob/master/LICENSE) + +[npm-img]: https://img.shields.io/badge/npm-10.5.5-brightgreen +[npm-url]: https://www.npmjs.com/package/@mapgis/webclient + +MapGIS Client for JavaScript - Service:是增强的MapGIS Web开发平台,集成Fetch、ES6、Promise等现代特性,在传统WebGIS开发基础之上,增强大数据、实时流数据的高效可视化表达和分析,为用户带来全新开发体验。 + +![框架](assets/logo/framework.png) + +[在线文档](http://develop.smaryun.com/docs/mapboxgl/index.html) + +## 环境 +> 由于core-js2和core-js3的在vue-cli4的不同的前置依赖导致了在vue2的环境下core-js不能把对应的依赖版本加入到package.json中,但是实际上package.json中引用的是core-js3的版本,一旦显示的描述会导致所有引用webclient-vue-ui的库的库都会强行自动升级core-js3,导致整个环境冲突问题。这个问题只能通过升级vue3来解决。 +## 目录 +针对MapGIS提供的IGServer/IGServer-X/IGServer-S/DataStore/ArcGIS等多种服务进行封装 +``` js +{ + Style, + Crs, + Common, + BaseServer, + // igserver + Extend, + G3D, + MRCS, + MRFS, + MRFWS, + MRGS, + MRMS, + Info, + OGC, + // datastore + ElasticSearch, + PostGIS, + CloudDisk, + // arcgis + ArcGis +}; +``` + +## 使用 +``` js +import { Style } from "@mapgis/webclient-es6-service"; +const { MarkerStyle, LineStyle, PointStyle, FillStyle } = Style; + +let layerStyle = new PointStyle({ + radius: 12, + color: "#ffffff", + opacity: 0.8, + outlineWidth: 5, + outlineColor: "#52B883", +}); +``` + +## 调试 +> 默认的引入方式是main +``` json +{ + "main": "dist-libs/webclient-es6-service.min.js", + "module1": "index.js", +} +``` +> 如果需要试试调试请修改成如下: +``` json +{ + "main1": "dist-libs/webclient-es6-service.min.js", + "module": "index.js", +} +``` +> 同时安装对应的所需依赖 +``` sh +# 使用yarn +yarn +# 或者使用npm +npm install +``` \ No newline at end of file diff --git a/src/service/assets/logo/framework.png b/src/service/assets/logo/framework.png new file mode 100644 index 000000000..4ed3b64a5 Binary files /dev/null and b/src/service/assets/logo/framework.png differ diff --git a/src/service/base/common/base.js b/src/service/base/common/base.js new file mode 100644 index 000000000..1b0d01855 --- /dev/null +++ b/src/service/base/common/base.js @@ -0,0 +1,11 @@ +// 新版本的设计框架 +var mapgis = (window.mapgis = window.mapgis || {}); + + +mapgis.style = mapgis.style || {}; +mapgis.symbols = mapgis.symbols || {}; +mapgis.renderer = mapgis.renderer || {}; + + + +export { mapgis }; diff --git a/src/service/base/crs/epsg/EPSG.js b/src/service/base/crs/epsg/EPSG.js new file mode 100644 index 000000000..1c4c01b14 --- /dev/null +++ b/src/service/base/crs/epsg/EPSG.js @@ -0,0 +1,183 @@ +export const EPSG = { + WGS84: [ + { id: 4326, name: "WGS1984_度", type: 0, strProject: "+proj=longlat +datum=WGS84 +no_defs" } + ], + Web墨卡托: [ + { id: 3857, name: "Web墨卡托_WGS1984", type: 1, strProject: "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs" } + ], + 经纬度西安80: [ + { id: 4610, name: "地理坐标系(西安)_度", type: 0, strProject: "+proj=longlat +a=6378140 +b=6356755.288157528 +units=degrees +no_defs" } + ], + 经纬度北京54: [ + { id: 4214, name: "地理坐标系(北京)_度", type: 0, strProject: "+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs" } + ], + 经纬度中国2000: [ + { id: 4490, name: "中国2000国家大地坐标系_度", type: 0, strProject: "+proj=longlat +ellps=GRS80 +units=degrees +no_defs" } + ], + 高斯西安80: [ + { id: 2348, name: "高斯大地坐标系_西安80_23带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2347, name: "高斯大地坐标系_西安80_22带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2346, name: "高斯大地坐标系_西安80_21带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2345, name: "高斯大地坐标系_西安80_20带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2344, name: "高斯大地坐标系_西安80_19带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2343, name: "高斯大地坐标系_西安80_18带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2342, name: "高斯大地坐标系_西安80_17带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2341, name: "高斯大地坐标系_西安80_16带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2340, name: "高斯大地坐标系_西安80_15带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2339, name: "高斯大地坐标系_西安80_14带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2338, name: "高斯大地坐标系_西安80_13带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2390, name: "高斯大地坐标系_西安80_45带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2389, name: "高斯大地坐标系_西安80_44带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2388, name: "高斯大地坐标系_西安80_43带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2387, name: "高斯大地坐标系_西安80_42带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2386, name: "高斯大地坐标系_西安80_41带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2385, name: "高斯大地坐标系_西安80_40带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2384, name: "高斯大地坐标系_西安80_39带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2383, name: "高斯大地坐标系_西安80_38带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2382, name: "高斯大地坐标系_西安80_37带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2381, name: "高斯大地坐标系_西安80_36带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2380, name: "高斯大地坐标系_西安80_35带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2379, name: "高斯大地坐标系_西安80_34带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2378, name: "高斯大地坐标系_西安80_33带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2377, name: "高斯大地坐标系_西安80_32带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2376, name: "高斯大地坐标系_西安80_31带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2375, name: "高斯大地坐标系_西安80_30带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2374, name: "高斯大地坐标系_西安80_29带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2373, name: "高斯大地坐标系_西安80_28带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2372, name: "高斯大地坐标系_西安80_27带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2371, name: "高斯大地坐标系_西安80_26带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2370, name: "高斯大地坐标系_西安80_25带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2327, name: "高斯大地坐标系_西安80_13带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2328, name: "高斯大地坐标系_西安80_14带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2329, name: "高斯大地坐标系_西安80_15带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2330, name: "高斯大地坐标系_西安80_16带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2331, name: "高斯大地坐标系_西安80_17带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2332, name: "高斯大地坐标系_西安80_18带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2333, name: "高斯大地坐标系_西安80_19带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2334, name: "高斯大地坐标系_西安80_20带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2335, name: "高斯大地坐标系_西安80_21带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2336, name: "高斯大地坐标系_西安80_22带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2337, name: "高斯大地坐标系_西安80_23带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2403, name: "高斯大地坐标系_西安80_27带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2404, name: "高斯大地坐标系_西安80_28带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2405, name: "高斯大地坐标系_西安80_29带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2406, name: "高斯大地坐标系_西安80_30带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2407, name: "高斯大地坐标系_西安80_31带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2408, name: "高斯大地坐标系_西安80_32带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2409, name: "高斯大地坐标系_西安80_33带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2410, name: "高斯大地坐标系_西安80_34带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2411, name: "高斯大地坐标系_西安80_35带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2412, name: "高斯大地坐标系_西安80_36带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2413, name: "高斯大地坐标系_西安80_37带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2414, name: "高斯大地坐标系_西安80_38带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2415, name: "高斯大地坐标系_西安80_39带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2416, name: "高斯大地坐标系_西安80_40带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2417, name: "高斯大地坐标系_西安80_41带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2418, name: "高斯大地坐标系_西安80_42带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2419, name: "高斯大地坐标系_西安80_43带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2420, name: "高斯大地坐标系_西安80_44带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2421, name: "高斯大地坐标系_西安80_45带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2349, name: "高斯大地坐标系_西安80_25带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2350, name: "高斯大地坐标系_西安80_26带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2351, name: "高斯大地坐标系_西安80_27带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2352, name: "高斯大地坐标系_西安80_28带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2353, name: "高斯大地坐标系_西安80_29带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2354, name: "高斯大地坐标系_西安80_30带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2355, name: "高斯大地坐标系_西安80_31带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2356, name: "高斯大地坐标系_西安80_32带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2357, name: "高斯大地坐标系_西安80_33带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2358, name: "高斯大地坐标系_西安80_34带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2359, name: "高斯大地坐标系_西安80_35带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2360, name: "高斯大地坐标系_西安80_36带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2361, name: "高斯大地坐标系_西安80_37带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2362, name: "高斯大地坐标系_西安80_38带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2363, name: "高斯大地坐标系_西安80_39带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2364, name: "高斯大地坐标系_西安80_40带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2365, name: "高斯大地坐标系_西安80_41带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2366, name: "高斯大地坐标系_西安80_42带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2367, name: "高斯大地坐标系_西安80_43带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2368, name: "高斯大地坐标系_西安80_44带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2369, name: "高斯大地坐标系_西安80_45带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" } + ], + 高斯北京54: [ + { id: 21413, name: "高斯大地坐标系_北京54_13带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21414, name: "高斯大地坐标系_北京54_14带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21415, name: "高斯大地坐标系_北京54_15带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21416, name: "高斯大地坐标系_北京54_16带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21417, name: "高斯大地坐标系_北京54_17带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21418, name: "高斯大地坐标系_北京54_18带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21419, name: "高斯大地坐标系_北京54_19带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21420, name: "高斯大地坐标系_北京54_20带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21421, name: "高斯大地坐标系_北京54_21带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21422, name: "高斯大地坐标系_北京54_22带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21423, name: "高斯大地坐标系_北京54_23带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2431, name: "高斯大地坐标系_北京54_34带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2401, name: "高斯大地坐标系_北京54_25带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2402, name: "高斯大地坐标系_北京54_26带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 32646, name: "Beijing 1954 / 3-degree Gauss-Kruger CM 102E", type: 1, strProject: "+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs" } + ], + 高斯中国2000: [ + { id: 4502, name: "高斯大地坐标系_中国2000_13带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4503, name: "高斯大地坐标系_中国2000_14带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4504, name: "高斯大地坐标系_中国2000_15带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4505, name: "高斯大地坐标系_中国2000_16带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4506, name: "高斯大地坐标系_中国2000_17带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4507, name: "高斯大地坐标系_中国2000_18带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4508, name: "高斯大地坐标系_中国2000_19带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4509, name: "高斯大地坐标系_中国2000_20带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4510, name: "高斯大地坐标系_中国2000_21带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4511, name: "高斯大地坐标系_中国2000_22带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4512, name: "高斯大地坐标系_中国2000_23带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4513, name: "高斯大地坐标系_中国2000_25带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4514, name: "高斯大地坐标系_中国2000_26带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4515, name: "高斯大地坐标系_中国2000_27带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4516, name: "高斯大地坐标系_中国2000_28带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4517, name: "高斯大地坐标系_中国2000_29带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4518, name: "高斯大地坐标系_中国2000_30带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4519, name: "高斯大地坐标系_中国2000_31带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4520, name: "高斯大地坐标系_中国2000_32带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4521, name: "高斯大地坐标系_中国2000_33带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4522, name: "高斯大地坐标系_中国2000_34带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4523, name: "高斯大地坐标系_中国2000_35带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4524, name: "高斯大地坐标系_中国2000_36带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4525, name: "高斯大地坐标系_中国2000_37带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4526, name: "高斯大地坐标系_中国2000_38带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4527, name: "高斯大地坐标系_中国2000_39带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4528, name: "高斯大地坐标系_中国2000_40带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4529, name: "高斯大地坐标系_中国2000_41带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4530, name: "高斯大地坐标系_中国2000_42带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4531, name: "高斯大地坐标系_中国2000_43带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4532, name: "高斯大地坐标系_中国2000_44带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4533, name: "高斯大地坐标系_中国2000_45带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4546, name: "高斯大地坐标系_中国2000_37带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4547, name: "高斯大地坐标系_中国2000_38带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4545, name: "高斯大地坐标系_中国2000_36带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" } + ] +}; + + +export function epsgId(epsg) { + if (typeof epsg === 'string') { + const str = epsg.toUpperCase() + let result; + + if (str.indexOf('EPSG:') >= 0) { + result = str.split('EPSG:') + } else if (str.indexOf('EPSG_') >= 0) { + result = str.split('EPSG_') + } else if (str.indexOf('EPSG') >= 0) { + result = str.split('EPSG') + } else { + return parseInt(epsg, 10) + } + if (result.length >= 2) { + return parseInt(result[1], 10) + } else { + return 4326 + } + } else { + return epsg; + } +} + +export default EPSG; diff --git a/src/service/base/crs/epsg/index.js b/src/service/base/crs/epsg/index.js new file mode 100644 index 000000000..9f87220d9 --- /dev/null +++ b/src/service/base/crs/epsg/index.js @@ -0,0 +1,2 @@ +import { EPSG, epsgId } from './EPSG'; +export { EPSG, epsgId }; diff --git a/src/service/base/crs/index.js b/src/service/base/crs/index.js new file mode 100644 index 000000000..be3955e23 --- /dev/null +++ b/src/service/base/crs/index.js @@ -0,0 +1,4 @@ +import { EPSG } from './epsg'; +import { ProjectTool } from './proj'; + +export { EPSG, ProjectTool }; diff --git a/src/service/base/crs/proj/index.js b/src/service/base/crs/proj/index.js new file mode 100644 index 000000000..01ee3b3e1 --- /dev/null +++ b/src/service/base/crs/proj/index.js @@ -0,0 +1,2 @@ +import { ProjectTool } from './project'; +export { ProjectTool }; diff --git a/src/service/base/crs/proj/project.js b/src/service/base/crs/proj/project.js new file mode 100644 index 000000000..4efe88a5a --- /dev/null +++ b/src/service/base/crs/proj/project.js @@ -0,0 +1,63 @@ +import { EPSG, epsgId } from '../epsg/EPSG'; + +// import * as proj4 from "proj4"; +// import proj4 from "proj4"; + +import * as proj4x from 'proj4'; +const proj4 = proj4x.default; + +export class ProjectTool { + static getProj4sCascader() { + const options = Object.keys(EPSG).map((key) => { + const menu = { + value: key, + label: key, + children: [] + }; + menu.children = EPSG[key].map((epsg) => { + return { value: epsg.id, label: epsg.name }; + }); + return menu; + }); + return options; + } + + static getProj4sDetail(id) { + let detail = ''; + const keys = Object.keys(EPSG); + for (const key of keys) { + const epsgs = EPSG[key]; + for (const item of epsgs) { + if (item.id === id) { + detail = item.strProject; + break; + } + } + if (detail !== '') { + break; + } + } + return detail; + } + + static proj4TransformByEpsg(sourceid, destinationid, point) { + let sId = epsgId(sourceid); + let desId = epsgId(destinationid); + + let source = ProjectTool.getProj4sDetail(sId); + let destination = ProjectTool.getProj4sDetail(desId); + + let proj = proj4(source, destination); + let projpoint = proj.forward(point); + + return projpoint; + } + + static proj4Transform(source, destination, point) { + let proj = proj4(source, destination); + let projpoint = proj.forward(point); + return projpoint; + } +} + +export default ProjectTool; diff --git a/src/service/base/crs/proj/test/test_proj.js b/src/service/base/crs/proj/test/test_proj.js new file mode 100644 index 000000000..d76f18353 --- /dev/null +++ b/src/service/base/crs/proj/test/test_proj.js @@ -0,0 +1,232 @@ +// import * as proj4x from 'proj4'; +// const proj4 = proj4x.default; +let proj4 = require('proj4'); + +export const EPSG = { + WGS84: [ + { id: 4326, name: "WGS1984_度", type: 0, strProject: "+proj=longlat +datum=WGS84 +no_defs" } + ], + Web墨卡托: [ + { id: 3857, name: "Web墨卡托_WGS1984", type: 1, strProject: "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs" } + ], + 经纬度西安80: [ + { id: 4610, name: "地理坐标系(西安)_度", type: 0, strProject: "+proj=longlat +a=6378140 +b=6356755.288157528 +units=degrees +no_defs" } + ], + 经纬度北京54: [ + { id: 4214, name: "地理坐标系(北京)_度", type: 0, strProject: "+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs" } + ], + 经纬度中国2000: [ + { id: 4490, name: "中国2000国家大地坐标系_度", type: 0, strProject: "+proj=longlat +ellps=GRS80 +units=degrees +no_defs" } + ], + 高斯西安80: [ + { id: 2348, name: "高斯大地坐标系_西安80_23带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2347, name: "高斯大地坐标系_西安80_22带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2346, name: "高斯大地坐标系_西安80_21带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2345, name: "高斯大地坐标系_西安80_20带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2344, name: "高斯大地坐标系_西安80_19带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2343, name: "高斯大地坐标系_西安80_18带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2342, name: "高斯大地坐标系_西安80_17带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2341, name: "高斯大地坐标系_西安80_16带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2340, name: "高斯大地坐标系_西安80_15带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2339, name: "高斯大地坐标系_西安80_14带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2338, name: "高斯大地坐标系_西安80_13带6_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2390, name: "高斯大地坐标系_西安80_45带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2389, name: "高斯大地坐标系_西安80_44带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2388, name: "高斯大地坐标系_西安80_43带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2387, name: "高斯大地坐标系_西安80_42带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2386, name: "高斯大地坐标系_西安80_41带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2385, name: "高斯大地坐标系_西安80_40带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2384, name: "高斯大地坐标系_西安80_39带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2383, name: "高斯大地坐标系_西安80_38带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2382, name: "高斯大地坐标系_西安80_37带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2381, name: "高斯大地坐标系_西安80_36带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2380, name: "高斯大地坐标系_西安80_35带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2379, name: "高斯大地坐标系_西安80_34带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2378, name: "高斯大地坐标系_西安80_33带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2377, name: "高斯大地坐标系_西安80_32带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2376, name: "高斯大地坐标系_西安80_31带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2375, name: "高斯大地坐标系_西安80_30带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2374, name: "高斯大地坐标系_西安80_29带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2373, name: "高斯大地坐标系_西安80_28带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2372, name: "高斯大地坐标系_西安80_27带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2371, name: "高斯大地坐标系_西安80_26带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2370, name: "高斯大地坐标系_西安80_25带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2327, name: "高斯大地坐标系_西安80_13带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2328, name: "高斯大地坐标系_西安80_14带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2329, name: "高斯大地坐标系_西安80_15带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2330, name: "高斯大地坐标系_西安80_16带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2331, name: "高斯大地坐标系_西安80_17带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2332, name: "高斯大地坐标系_西安80_18带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2333, name: "高斯大地坐标系_西安80_19带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2334, name: "高斯大地坐标系_西安80_20带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2335, name: "高斯大地坐标系_西安80_21带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2336, name: "高斯大地坐标系_西安80_22带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2337, name: "高斯大地坐标系_西安80_23带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2403, name: "高斯大地坐标系_西安80_27带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2404, name: "高斯大地坐标系_西安80_28带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2405, name: "高斯大地坐标系_西安80_29带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2406, name: "高斯大地坐标系_西安80_30带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2407, name: "高斯大地坐标系_西安80_31带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2408, name: "高斯大地坐标系_西安80_32带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2409, name: "高斯大地坐标系_西安80_33带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2410, name: "高斯大地坐标系_西安80_34带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2411, name: "高斯大地坐标系_西安80_35带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2412, name: "高斯大地坐标系_西安80_36带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2413, name: "高斯大地坐标系_西安80_37带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2414, name: "高斯大地坐标系_西安80_38带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2415, name: "高斯大地坐标系_西安80_39带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2416, name: "高斯大地坐标系_西安80_40带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2417, name: "高斯大地坐标系_西安80_41带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2418, name: "高斯大地坐标系_西安80_42带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2419, name: "高斯大地坐标系_西安80_43带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2420, name: "高斯大地坐标系_西安80_44带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2421, name: "高斯大地坐标系_西安80_45带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2349, name: "高斯大地坐标系_西安80_25带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2350, name: "高斯大地坐标系_西安80_26带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2351, name: "高斯大地坐标系_西安80_27带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2352, name: "高斯大地坐标系_西安80_28带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2353, name: "高斯大地坐标系_西安80_29带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2354, name: "高斯大地坐标系_西安80_30带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2355, name: "高斯大地坐标系_西安80_31带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2356, name: "高斯大地坐标系_西安80_32带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2357, name: "高斯大地坐标系_西安80_33带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2358, name: "高斯大地坐标系_西安80_34带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2359, name: "高斯大地坐标系_西安80_35带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2360, name: "高斯大地坐标系_西安80_36带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2361, name: "高斯大地坐标系_西安80_37带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2362, name: "高斯大地坐标系_西安80_38带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2363, name: "高斯大地坐标系_西安80_39带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2364, name: "高斯大地坐标系_西安80_40带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2365, name: "高斯大地坐标系_西安80_41带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2366, name: "高斯大地坐标系_西安80_42带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2367, name: "高斯大地坐标系_西安80_43带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2368, name: "高斯大地坐标系_西安80_44带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" }, + { id: 2369, name: "高斯大地坐标系_西安80_45带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs" } + ], + 高斯北京54: [ + { id: 21413, name: "高斯大地坐标系_北京54_13带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21414, name: "高斯大地坐标系_北京54_14带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21415, name: "高斯大地坐标系_北京54_15带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21416, name: "高斯大地坐标系_北京54_16带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21417, name: "高斯大地坐标系_北京54_17带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21418, name: "高斯大地坐标系_北京54_18带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21419, name: "高斯大地坐标系_北京54_19带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21420, name: "高斯大地坐标系_北京54_20带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21421, name: "高斯大地坐标系_北京54_21带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21422, name: "高斯大地坐标系_北京54_22带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 21423, name: "高斯大地坐标系_北京54_23带6_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2431, name: "高斯大地坐标系_北京54_34带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2401, name: "高斯大地坐标系_北京54_25带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 2402, name: "高斯大地坐标系_北京54_26带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs" }, + { id: 32646, name: "Beijing 1954 / 3-degree Gauss-Kruger CM 102E", type: 1, strProject: "+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs" } + ], + 高斯中国2000: [ + { id: 4502, name: "高斯大地坐标系_中国2000_13带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4503, name: "高斯大地坐标系_中国2000_14带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4504, name: "高斯大地坐标系_中国2000_15带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4505, name: "高斯大地坐标系_中国2000_16带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4506, name: "高斯大地坐标系_中国2000_17带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4507, name: "高斯大地坐标系_中国2000_18带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4508, name: "高斯大地坐标系_中国2000_19带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4509, name: "高斯大地坐标系_中国2000_20带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4510, name: "高斯大地坐标系_中国2000_21带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4511, name: "高斯大地坐标系_中国2000_22带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4512, name: "高斯大地坐标系_中国2000_23带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4513, name: "高斯大地坐标系_中国2000_25带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4514, name: "高斯大地坐标系_中国2000_26带6_北", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4515, name: "高斯大地坐标系_中国2000_27带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4516, name: "高斯大地坐标系_中国2000_28带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4517, name: "高斯大地坐标系_中国2000_29带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4518, name: "高斯大地坐标系_中国2000_30带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4519, name: "高斯大地坐标系_中国2000_31带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4520, name: "高斯大地坐标系_中国2000_32带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4521, name: "高斯大地坐标系_中国2000_33带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4522, name: "高斯大地坐标系_中国2000_34带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4523, name: "高斯大地坐标系_中国2000_35带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4524, name: "高斯大地坐标系_中国2000_36带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4525, name: "高斯大地坐标系_中国2000_37带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4526, name: "高斯大地坐标系_中国2000_38带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4527, name: "高斯大地坐标系_中国2000_39带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4528, name: "高斯大地坐标系_中国2000_40带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4529, name: "高斯大地坐标系_中国2000_41带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4530, name: "高斯大地坐标系_中国2000_42带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4531, name: "高斯大地坐标系_中国2000_43带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4532, name: "高斯大地坐标系_中国2000_44带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4533, name: "高斯大地坐标系_中国2000_45带3_北2", type: 0, strProject: "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4546, name: "高斯大地坐标系_中国2000_37带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4547, name: "高斯大地坐标系_中国2000_38带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" }, + { id: 4545, name: "高斯大地坐标系_中国2000_36带3_北", type: 1, strProject: "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs" } + ] +}; + +export function epsgId(epsg) { + if (typeof epsg === 'string') { + const str = epsg.toUpperCase() + let result; + + if (str.indexOf('EPSG:') >= 0) { + result = str.split('EPSG:') + } else if (str.indexOf('EPSG_') >= 0) { + result = str.split('EPSG_') + } else if (str.indexOf('EPSG') >= 0) { + result = str.split('EPSG') + } else { + return parseInt(epsg, 10) + } + if (result.length >= 2) { + return parseInt(result[1], 10) + } else { + return 4326 + } + } else { + return epsg; + } +} + +export class ProjectTool { + static getProj4sCascader() { + const options = Object.keys(EPSG).map((key) => { + const menu = { + value: key, + label: key, + children: [] + }; + menu.children = EPSG[key].map((epsg) => { + return { value: epsg.id, label: epsg.name }; + }); + return menu; + }); + return options; + } + + static getProj4sDetail(id) { + let detail = ''; + const keys = Object.keys(EPSG); + for (const key of keys) { + const epsgs = EPSG[key]; + for (const item of epsgs) { + if (item.id === id) { + detail = item.strProject; + break; + } + } + if (detail !== '') { + break; + } + } + return detail; + } + + static proj4Transform(source, destination, point) { + let proj = proj4(source, destination); + let projpoint = proj.forward(point); + return projpoint; + } +} + + +let source = epsgId("EPSG:4326"); +let des = epsgId("EPSG:3857"); +let point = [110, 30] +let result = ProjectTool.proj4Transform(source, des, point); +console.log('result', result); \ No newline at end of file diff --git a/src/service/base/format/geojson/geohash.js b/src/service/base/format/geojson/geohash.js new file mode 100644 index 000000000..86d54209b --- /dev/null +++ b/src/service/base/format/geojson/geohash.js @@ -0,0 +1,165 @@ +// geohash.js +// Geohash library for Javascript +// (c) 2008 David Troy +// Distributed under the MIT License + +let BITS = [16, 8, 4, 2, 1]; + +let BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz"; +let NEIGHBORS = { + right: {even: "bc01fg45238967deuvhjyznpkmstqrwx"}, + left: {even: "238967debc01fg45kmstqrwxuvhjyznp"}, + top: {even: "p0r21436x8zb9dcf5h7kjnmqesgutwvy"}, + bottom: {even: "14365h7k9dcfesgujnmqp0r2twvyx8zb"} +}; +let BORDERS = { + right: {even: "bcfguvyz"}, + left: {even: "0145hjnp"}, + top: {even: "prxz"}, + bottom: {even: "028b"} +}; + +NEIGHBORS.bottom.odd = NEIGHBORS.left.even; +NEIGHBORS.top.odd = NEIGHBORS.right.even; +NEIGHBORS.left.odd = NEIGHBORS.bottom.even; +NEIGHBORS.right.odd = NEIGHBORS.top.even; + +BORDERS.bottom.odd = BORDERS.left.even; +BORDERS.top.odd = BORDERS.right.even; +BORDERS.left.odd = BORDERS.bottom.even; +BORDERS.right.odd = BORDERS.top.even; + +var lat_err; +var lon_err; +var geohash; +function refine_interval(interval, cd, mask) { + if (cd & mask) + interval[0] = (interval[0] + interval[1]) / 2; + else + interval[1] = (interval[0] + interval[1]) / 2; +} + +function calculateAdjacent(srcHash, dir) { + srcHash = srcHash.toLowerCase(); + var lastChr = srcHash.charAt(srcHash.length - 1); + var type = (srcHash.length % 2) ? 'odd' : 'even'; + var base = srcHash.substring(0, srcHash.length - 1); + if (BORDERS[dir][type].indexOf(lastChr) != -1) + base = calculateAdjacent(base, dir); + return base + BASE32[NEIGHBORS[dir][type].indexOf(lastChr)]; +} + +function decodeGeoHash(geohash) { + var is_even = 1; + var lat = []; + var lon = []; + lat[0] = -90.0; + lat[1] = 90.0; + lon[0] = -180.0; + lon[1] = 180.0; + lat_err = 90.0; + lon_err = 180.0; + + for (let i = 0; i < geohash.length; i++) { + let c = geohash[i]; + let cd = BASE32.indexOf(c); + for (let j = 0; j < 5; j++) { + let mask = BITS[j]; + if (is_even) { + lon_err /= 2; + refine_interval(lon, cd, mask); + } else { + lat_err /= 2; + refine_interval(lat, cd, mask); + } + is_even = !is_even; + } + } + lat[2] = (lat[0] + lat[1]) / 2; + lon[2] = (lon[0] + lon[1]) / 2; + + return {latitude: lat, longitude: lon}; +} + +function encodeGeoHash(latitude, longitude) { + var is_even = 1; + var i = 0; + var lat = []; + var lon = []; + var bit = 0; + var ch = 0; + var precision = 12; + geohash = ""; + + lat[0] = -90.0; + lat[1] = 90.0; + lon[0] = -180.0; + lon[1] = 180.0; + + while (geohash.length < precision) { + if (is_even) { + let mid = (lon[0] + lon[1]) / 2; + if (longitude > mid) { + ch |= BITS[bit]; + lon[0] = mid; + } else + lon[1] = mid; + } else { + let mid = (lat[0] + lat[1]) / 2; + if (latitude > mid) { + ch |= BITS[bit]; + lat[0] = mid; + } else + lat[1] = mid; + } + + is_even = !is_even; + if (bit < 4) + bit++; + else { + geohash += BASE32[ch]; + bit = 0; + ch = 0; + } + } + return geohash; +} + +function decodeGeoHashToPolygon(geohash) { + var is_even = 1; + var lat = []; + var lon = []; + lat[0] = -90.0; + lat[1] = 90.0; + lon[0] = -180.0; + lon[1] = 180.0; + lat_err = 90.0; + lon_err = 180.0; + + for (let i = 0; i < geohash.length; i++) { + let c = geohash[i]; + let cd = BASE32.indexOf(c); + for (let j = 0; j < 5; j++) { + let mask = BITS[j]; + if (is_even) { + lon_err /= 2; + refine_interval(lon, cd, mask); + } else { + lat_err /= 2; + refine_interval(lat, cd, mask); + } + is_even = !is_even; + } + } + lat[2] = (lat[0] + lat[1]) / 2; + lon[2] = (lon[0] + lon[1]) / 2; + + var top_left = [lon[0], lat[1]]; + var top_right = [lon[1], lat[1]]; + var bottom_right = [lon[1], lat[0]]; + var bottom_left = [lon[0], lat[0]]; + + return [[top_left, top_right, bottom_right, bottom_left, top_left]]; +} + +export {decodeGeoHash, decodeGeoHashToPolygon, encodeGeoHash}; \ No newline at end of file diff --git a/src/service/base/format/geojson/geojson.js b/src/service/base/format/geojson/geojson.js new file mode 100644 index 000000000..4e7bb6ff2 --- /dev/null +++ b/src/service/base/format/geojson/geojson.js @@ -0,0 +1,131 @@ +import turfbbox from '@turf/bbox'; + +/* type GeoJSONPosition = [number, number] | [number, number, number]; +type Geometry = { type: T, coordinates: C }; + +export type GeoJSONPoint = Geometry<'Point', GeoJSONPosition>; +export type GeoJSONMultiPoint = Geometry<'MultiPoint', Array>; + +export type GeoJSONLineString = Geometry<'LineString', Array>; +export type GeoJSONMultiLineString = Geometry<'MultiLineString', Array>>; + +export type GeoJSONPolygon = Geometry<'Polygon', Array>>; +export type GeoJSONMultiPolygon = Geometry<'MultiPolygon', Array>>>; + +export type GeoJSONGeometry = + | GeoJSONPoint + | GeoJSONMultiPoint + | GeoJSONLineString + | GeoJSONMultiLineString + | GeoJSONPolygon + | GeoJSONMultiPolygon + | GeoJSONGeometryCollection; + +export type GeoJSONGeometryCollection = { + type: 'GeometryCollection', + geometries: Array +}; + +export type GeoJSONFeature = { + type: 'Feature', + geometry?: GeoJSONGeometry, + properties?: {}, + id?: number | string +}; + +export type GeoJSONFeatureCollection = { + type: 'FeatureCollection', + features: Array +}; + +export type GeoJSON = GeoJSONGeometry | GeoJSONFeature | GeoJSONFeatureCollection; + +export let EmptyGeoJSONFeatureCollection: GeoJSONFeatureCollection = { + type: 'FeatureCollection', + features: [] +}; */ + +export class GeojsonFeature { + constructor() { + // constructor + this.feature = undefined; + this.bounds = undefined; + } + + createFeature(feature) { + this.feature = feature; + } + + createGeomtry(geometry) { + this.feature = { + geometry + }; + } + + createProperties(properties) { + this.feature = { + properties + }; + } + + getFeature() { + return this.feature; + } + + getBounds(maprender) { + this.bbox(); + const { bounds } = this; + return [ + [bounds[0], bounds[1]], + [bounds[2], bounds[3]] + ]; + } + + bbox() { + this.bounds = turfbbox(this.feature); + return this.bounds; + } +} + +export class GeojsonCollection { + constructor(features) { + this.bounds = undefined; + this.data = { + type: 'FeatureCollection', + features: [] + }; + + if (features instanceof Array) { + this.data.features = features || []; + } else { + this.data.features = [features]; + } + } + + addFeature(feature) { + if (feature instanceof GeojsonFeature) { + this.data.features.push(feature.getFeature()); + } else { + this.data.features.push(feature); + } + } + + setFeatures(features) { + this.data.features = features; + } + + getData() { + return this.data; + } + + getBounds() { + this.bbox(); + const { bounds } = this; + return bounds; + } + + bbox() { + this.bounds = turfbbox(this.data); + return this.bounds; + } +} diff --git a/src/service/base/format/geojson/index.js b/src/service/base/format/geojson/index.js new file mode 100644 index 000000000..2c93c75e2 --- /dev/null +++ b/src/service/base/format/geojson/index.js @@ -0,0 +1,3 @@ +import {decodeGeoHash, decodeGeoHashToPolygon, encodeGeoHash} from "./geohash" + +export {decodeGeoHash, decodeGeoHashToPolygon, encodeGeoHash}; diff --git a/src/service/base/index.js b/src/service/base/index.js index 98bb5abeb..a5e343047 100644 --- a/src/service/base/index.js +++ b/src/service/base/index.js @@ -1,3 +1,76 @@ -import { Enum, Symbol, Shadow, VectorStyle, PointStyle, MarkerStyle, LineStyle, FillStyle, TextStyle } from './style'; +import { + Shadow, + VectorStyle, + PointStyle, + MarkerStyle, + LineStyle, + FillStyle, + ExtrudeStyle, + TextStyle, + FontStyle, + ModelStyle, + TrackStyle +} from './style'; -export { Enum, Symbol, Shadow, VectorStyle, PointStyle, MarkerStyle, LineStyle, FillStyle, TextStyle }; +export { Shadow, VectorStyle, PointStyle, MarkerStyle, LineStyle, FillStyle, ExtrudeStyle, TextStyle, FontStyle, ModelStyle, TrackStyle }; + +import { + Enum, + Symbol, + Symbol3D, + Symbol3DLayer, + Font, + MarkerSymbol, + LineSymbol, + FillSymbol, + TextSymbol, + PictureMarkerSymbol, + SimpleMarkerSymbol, + SimpleLineSymbol, + SimpleFillSymbol, + PictureFillSymbol, + LineSymbolMarker, + PointSymbol3D, + LineSymbol3D, + PolygonSymbol3D, + LabelSymbol3D, + IconSymbol3DLayer, + ObjectSymbol3DLayer, + LineSymbol3DLayer, + PathSymbol3DLayer, + FillSymbol3DLayer, + ExtrudeSymbol3DLayer, + TextSymbol3DLayer +} from './symbols'; + +export { + Enum, + Symbol, + Symbol3D, + Symbol3DLayer, + Font, + MarkerSymbol, + LineSymbol, + FillSymbol, + TextSymbol, + PictureMarkerSymbol, + SimpleMarkerSymbol, + SimpleLineSymbol, + SimpleFillSymbol, + PictureFillSymbol, + LineSymbolMarker, + PointSymbol3D, + LineSymbol3D, + PolygonSymbol3D, + LabelSymbol3D, + IconSymbol3DLayer, + ObjectSymbol3DLayer, + LineSymbol3DLayer, + PathSymbol3DLayer, + FillSymbol3DLayer, + ExtrudeSymbol3DLayer, + TextSymbol3DLayer +}; + +import { decodeGeoHash, decodeGeoHashToPolygon, encodeGeoHash } from './format/geojson'; +export { decodeGeoHash, decodeGeoHashToPolygon, encodeGeoHash }; diff --git a/src/service/base/renderer/ClassBreakInfo.js b/src/service/base/renderer/ClassBreakInfo.js new file mode 100644 index 000000000..89bf6f372 --- /dev/null +++ b/src/service/base/renderer/ClassBreakInfo.js @@ -0,0 +1,61 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { Renderer } from './Renderer'; + +import { PointSymbol3D, PolygonSymbol3D, LineSymbol3D } from "../symbols/index"; + +/** + * 三维专题图-分段信息 + * @class mapgis.renderer.ClassBreakInfo + * @classdesc 三维专题图-分段信息 + * @param {Number} [minValue] 设置分段间隔的最小值 + * @param {Number} [maxValue] 设置分段间隔的最大值 + * @param {Symbol} [symbol] 符号,用来渲染分段间隔最小-最大值之间的要素 + * @param {String} [label] 标签,用来描述符号表示的值 + */ +export default class ClassBreakInfo { + constructor(option) { + var options = option ? option : {}; + const { minValue, maxValue, symbol, label } = options; + this.minValue = minValue; + this.maxValue = maxValue; + this.symbol = symbol; + this.label = label; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的分段信息转换为JS对象 + * @param {Object} json 分段信息的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { minValue, maxValue, symbol, label } = json; + this.minValue = minValue; + this.maxValue = maxValue; + this.symbol = symbol; + this.label = label; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 分段信息的实例化JSON + */ + toJSON() { + return { + minValue: this.minValue, + maxValue: this.maxValue, + symbol: this.symbol, + label: this.label, + }; + } +} + +export { ClassBreakInfo }; +mapgis.renderer.ClassBreakInfo = ClassBreakInfo; diff --git a/src/service/base/renderer/ClassBreaksRenderer.js b/src/service/base/renderer/ClassBreaksRenderer.js new file mode 100644 index 000000000..d220ea08c --- /dev/null +++ b/src/service/base/renderer/ClassBreaksRenderer.js @@ -0,0 +1,140 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { Renderer } from './Renderer'; + +import { PointSymbol3D, PolygonSymbol3D, LineSymbol3D } from "../symbols/index"; + +/** + * 三维专题图-分段专题图 + * @class mapgis.renderer.ClassBreaksRenderer + * @classdesc 三维专题图-分段专题图 + * @param {String} [type] 专题图类型,只能是'class-breaks' + * @param {String} [field] 专题图字段名称,用来确定分段要素 + * @param {Symbol} [defaultSymbol] 专题图默认符号样式,用来绘制具有与给定中断值不匹配的要素 + * @param {String} [defaultLabel] 专题图图例标签,用来描述分配了默认符号的元素 + * @param {Array} [classBreakInfos] 专题图分段信息 + * @param {Array} [visualVariables] 专题图视觉变量,可选 "color"|"opacity"|"size"|"rotation" + * @param {PolygonSymbol3D} [backgroundFillSymbol] 专题图边界变量,使用分级符号对面要素进行符号化时,在此属性上设置以可视化每个要素的边界 + * @param {Object} [legendOptions] 专题图图例选项,用来在图例中展示符号信息 + * @param {String} [normalizationType] 专题图归一化类型,可选 "field"|"percent-of-total"|"log" + * @param {String} [normalizationField] 专题图归一化字段,将数据值除以对应字段数据值 + * @param {Number} [normalizationTotal] 专题图归一化值,将数据值除以所有数据值的总和 + * @param {String} [valueExpression] 专题图计算表达式,用来对要素中的单/多个属性进行数学计算 + * @param {String} [valueExpressionTitle] 专题图计算表达式标题,在legendOptions属性中没有提供的情况下,将显示为图例中的标题 + */ +export default class ClassBreaksRenderer extends Renderer { + constructor(option) { + super(option); + var options = option ? option : {}; + const { type = "class-breaks" } = options; + this.type = type; + const { field, defaultSymbol, defaultLabel, classBreakInfos, visualVariables, backgroundFillSymbol, legendOptions, normalizationType, normalizationField, normalizationTotal, valueExpression, valueExpressionTitle } = options; + this.field = field; + this.defaultSymbol = defaultSymbol; + this.defaultLabel = defaultLabel; + this.classBreakInfos = classBreakInfos; + this.visualVariables = visualVariables; + this.backgroundFillSymbol = backgroundFillSymbol; + this.legendOptions = legendOptions; + this.normalizationType = normalizationType; + this.normalizationField = normalizationField; + this.normalizationTotal = normalizationTotal; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的渲染规则转换为JS对象 + * @param {Object} json 渲染规则的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = "class-breaks" } = json; + this.type = type; + const { field, defaultSymbol, defaultLabel, classBreakInfos, visualVariables, backgroundFillSymbol, legendOptions, normalizationType, normalizationField, normalizationTotal, valueExpression, valueExpressionTitle } = json; + this.field = field; + this.defaultSymbol = defaultSymbol; + this.defaultLabel = defaultLabel; + this.classBreakInfos = classBreakInfos; + this.visualVariables = visualVariables; + this.backgroundFillSymbol = backgroundFillSymbol; + this.legendOptions = legendOptions; + this.normalizationType = normalizationType; + this.normalizationField = normalizationField; + this.normalizationTotal = normalizationTotal; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 渲染规则的实例化JSON + */ + toJSON() { + return { + type: this.type, + field: this.field, + defaultSymbol: this.defaultSymbol, + defaultLabel: this.defaultLabel, + classBreakInfos: this.classBreakInfos, + visualVariables: this.visualVariables, + backgroundFillSymbol: this.backgroundFillSymbol, + legendOptions: this.legendOptions, + normalizationType: this.normalizationType, + normalizationField: this.normalizationField, + normalizationTotal: this.normalizationTotal, + valueExpression: this.valueExpression, + valueExpressionTitle: this.valueExpressionTitle + }; + } + + /** + * @description 添加分段信息 + * @param {Object} info 分段信息的实例化对象 + */ + addClassBreakInfo(info) { + info = info || {}; + this.classBreakInfos.push(info); + } + + /** + * @description 获取分段信息 + * @param {Object} info 分段信息的实例化对象 + * @returns {Object} 根据info查询到的分段信息 + */ + getClassBreakInfo(info) { + info = info || {}; + const { minValue, maxValue, symbol, label } = info; + for(let i = 0; i < this.classBreakInfos.length; i++) { + let item = this.classBreakInfos[i]; + if (item.minValue == minValue && item.maxValue == maxValue) { + return item; + } + } + } + + /** + * @description 移除分段信息 + * @param {Object} info 分段信息的实例化对象 + */ + removeClassBreakInfo(info) { + info = info || {}; + const { minValue, maxValue, symbol, label } = info; + for(let i = 0; i < this.classBreakInfos.length; i++) { + let item = this.classBreakInfos[i]; + if (item.minValue == minValue && item.maxValue == maxValue) { + this.classBreakInfos.splice(i, 1); + } + } + } +} + +export { ClassBreaksRenderer }; +mapgis.renderer.ClassBreaksRenderer = ClassBreaksRenderer; diff --git a/src/service/base/renderer/ColorVariable.js b/src/service/base/renderer/ColorVariable.js new file mode 100644 index 000000000..5cef93e5d --- /dev/null +++ b/src/service/base/renderer/ColorVariable.js @@ -0,0 +1,78 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { VisualVariable } from './VisualVariable'; + +/** + * 视觉变量-颜色视觉变量 + * @class mapgis.renderer.ColorVariable + * @classdesc 视觉变量-颜色视觉变量 + * @param {String} [type] 视觉变量类型,只能是 'color' + * @param {String} [field] 视觉变量字段 + * @param {String} [valueExpression] 计算表达式,用来对要素中的单/多个属性进行数学计算 + * @param {String} [valueExpressionTitle] 计算表达式标题 + * @param {String} [normalizationType] 归一化类型,可选 "field"|"percent-of-total"|"log" + * @param {String} [normalizationField] 归一化字段,将renderer中对应字段数据值除以归一化字段数据值 + * @param {Number} [normalizationTotal] 归一化值,将renderer中对应字段数据值除以所有数据值的总和 + * @param {Array} [stops] 视觉变量颜色数组,定义在一系列停靠点中应用于要素的连续色带的颜色 + */ +export default class ColorVariable extends VisualVariable { + constructor(option) { + super(option); + var options = option ? option : {}; + const { type = "color" } = options; + this.type = type; + const { field, valueExpression, valueExpressionTitle, normalizationType, normalizationField, normalizationTotal, stops } = options; + this.field = field; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + this.normalizationType = normalizationType; + this.normalizationField = normalizationField; + this.normalizationTotal = normalizationTotal; + this.stops = stops; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的视觉变量转换为JS对象 + * @param {Object} json 视觉变量的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = "color" } = json; + this.type = type; + const { field, valueExpression, valueExpressionTitle, normalizationType, normalizationField, normalizationTotal, stops } = json; + this.field = field; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + this.normalizationType = normalizationType; + this.normalizationField = normalizationField; + this.normalizationTotal = normalizationTotal; + this.stops = stops; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 视觉变量的实例化JSON + */ + toJSON() { + return { + type: this.type, + field: this.field, + valueExpression: this.valueExpression, + valueExpressionTitle: this.valueExpressionTitle, + normalizationType: this.normalizationType, + normalizationField: this.normalizationField, + normalizationTotal: this.normalizationTotal, + stops: this.stops, + }; + } +} + +export { ColorVariable }; +mapgis.renderer.ColorVariable = ColorVariable; diff --git a/src/service/base/renderer/OpacityVariable.js b/src/service/base/renderer/OpacityVariable.js new file mode 100644 index 000000000..00c3f8821 --- /dev/null +++ b/src/service/base/renderer/OpacityVariable.js @@ -0,0 +1,78 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { VisualVariable } from './VisualVariable'; + +/** + * 视觉变量-透明度视觉变量 + * @class mapgis.renderer.OpacityVariable + * @classdesc 视觉变量-透明度视觉变量 + * @param {String} [type] 视觉变量类型,只能是 'opacity' + * @param {String} [field] 视觉变量字段 + * @param {String} [valueExpression] 计算表达式,用来对要素中的单/多个属性进行数学计算 + * @param {String} [valueExpressionTitle] 计算表达式标题 + * @param {String} [normalizationType] 归一化类型,可选 "field"|"percent-of-total"|"log" + * @param {String} [normalizationField] 归一化字段,将renderer中对应字段数据值除以归一化字段数据值 + * @param {Number} [normalizationTotal] 归一化值,将renderer中对应字段数据值除以所有数据值的总和 + * @param {Array} [stops] 视觉变量透明度数组,定义在一系列停靠点中应用于要素的透明度 + */ +export default class OpacityVariable extends VisualVariable { + constructor(option) { + super(option); + var options = option ? option : {}; + const { type = "opacity" } = options; + this.type = type; + const { field, valueExpression, valueExpressionTitle, normalizationType, normalizationField, normalizationTotal, stops } = options; + this.field = field; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + this.normalizationType = normalizationType; + this.normalizationField = normalizationField; + this.normalizationTotal = normalizationTotal; + this.stops = stops; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的视觉变量转换为JS对象 + * @param {Object} json 视觉变量的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = "opacity" } = json; + this.type = type; + const { field, valueExpression, valueExpressionTitle, normalizationType, normalizationField, normalizationTotal, stops } = json; + this.field = field; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + this.normalizationType = normalizationType; + this.normalizationField = normalizationField; + this.normalizationTotal = normalizationTotal; + this.stops = stops; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 视觉变量的实例化JSON + */ + toJSON() { + return { + type: this.type, + field: this.field, + valueExpression: this.valueExpression, + valueExpressionTitle: this.valueExpressionTitle, + normalizationType: this.normalizationType, + normalizationField: this.normalizationField, + normalizationTotal: this.normalizationTotal, + stops: this.stops, + }; + } +} + +export { OpacityVariable }; +mapgis.renderer.OpacityVariable = OpacityVariable; diff --git a/src/service/base/renderer/Renderer.js b/src/service/base/renderer/Renderer.js new file mode 100644 index 000000000..586a512be --- /dev/null +++ b/src/service/base/renderer/Renderer.js @@ -0,0 +1,42 @@ +import { mapgis } from '../common/base'; + +/** + * 三维专题图渲染基类 + * @class mapgis.renderer.Renderer + * @classdesc 三维专题图渲染基类 + * @param {String} [type] 三维专题图类型,可选 "simple"|"unique-value"|"class-breaks" + * @param {Object} [authoringInfo] 三维专题图创建的元信息 + */ +export default class Renderer { + constructor(option) { + var options = option ? option : {}; + const { type, authoringInfo } = options; + this.type = type; + this.authoringInfo = authoringInfo; + } + + /** + * @description 将JSON格式的渲染规则转换为JS对象 + * @param {Object} json 渲染规则的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type, authoringInfo } = json; + this.type = type; + this.authoringInfo = authoringInfo; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 渲染规则的实例化JSON + */ + toJSON() { + return { + type: this.type, + authoringInfo: this.authoringInfo, + }; + } +} + +export { Renderer }; +mapgis.renderer.Renderer = Renderer; diff --git a/src/service/base/renderer/RotationVariable.js b/src/service/base/renderer/RotationVariable.js new file mode 100644 index 000000000..5950ce68f --- /dev/null +++ b/src/service/base/renderer/RotationVariable.js @@ -0,0 +1,58 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { VisualVariable } from './VisualVariable'; + +/** + * 视觉变量-旋转视觉变量 + * @class mapgis.renderer.RotationVariable + * @classdesc 视觉变量-旋转视觉变量 + * @param {String} [type] 视觉变量类型,只能是 'rotation' + * @param {String} [axis] 符号旋转所绕的轴,可选 "heading"|"tilt"|"roll" + * @param {String} [rotationType] 符号旋转方向,此属性仅适用于绕heading轴旋转,可选 "geographic"|"arithmetic" + */ +export default class RotationVariable extends VisualVariable { + constructor(option) { + super(option); + var options = option ? option : {}; + const { type = "rotation" } = options; + this.type = type; + const { axis, rotationType } = options; + this.axis = axis; + this.rotationType = rotationType; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的视觉变量转换为JS对象 + * @param {Object} json 视觉变量的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = "rotation" } = json; + this.type = type; + const { axis, rotationType } = options; + this.axis = axis; + this.rotationType = rotationType; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 视觉变量的实例化JSON + */ + toJSON() { + return { + type: this.type, + axis: this.axis, + rotationType: this.rotationType, + }; + } +} + +export { RotationVariable }; +mapgis.renderer.RotationVariable = RotationVariable; diff --git a/src/service/base/renderer/SimpleRenderer.js b/src/service/base/renderer/SimpleRenderer.js new file mode 100644 index 000000000..a401ebc02 --- /dev/null +++ b/src/service/base/renderer/SimpleRenderer.js @@ -0,0 +1,65 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { Renderer } from './Renderer'; + +import { PointSymbol3D, PolygonSymbol3D, LineSymbol3D } from "../symbols/index"; + +/** + * 三维专题图-统一专题图 + * @class mapgis.renderer.SimpleRenderer + * @classdesc 三维专题图-统一专题图 + * @param {String} [type] 专题图类型,只能是'simple' + * @param {Symbol} [symbol] 专题图符号样式 + * @param {String} [label] 专题图图例标签,用来描述分配了默认符号的元素 + * @param {Array} [visualVariables] 专题图视觉变量,可选 "color"|"opacity"|"size"|"rotation" + * @param {Object} [legendOptions] 专题图图例选项,用来在图例中展示符号信息 + */ +export default class SimpleRenderer extends Renderer { + constructor(option) { + super(option); + var options = option ? option : {}; + const { type = "simple" } = options; + this.type = type; + const { symbol, label, visualVariables } = options; + this.symbol = symbol; + this.label = label; + this.visualVariables = visualVariables; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的渲染规则转换为JS对象 + * @param {Object} json 渲染规则的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = "simple" } = json; + this.type = type; + const { symbol, label, visualVariables } = json; + this.symbol = symbol; + this.label = label; + this.visualVariables = visualVariables; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 渲染规则的实例化JSON + */ + toJSON() { + return { + type: this.type, + symbol: this.symbol, + label: this.label, + visualVariables: this.visualVariables + }; + } +} + +export { SimpleRenderer }; +mapgis.renderer.SimpleRenderer = SimpleRenderer; diff --git a/src/service/base/renderer/SizeVariable.js b/src/service/base/renderer/SizeVariable.js new file mode 100644 index 000000000..7f33292c0 --- /dev/null +++ b/src/service/base/renderer/SizeVariable.js @@ -0,0 +1,98 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { VisualVariable } from './VisualVariable'; + +/** + * 视觉变量-大小视觉变量 + * @class mapgis.renderer.SizeVariable + * @classdesc 视觉变量-大小视觉变量 + * @param {String} [type] 视觉变量类型,只能是 'size' + * @param {String} [axis] 轴,可选 "heading"|"tilt"|"roll" + * @param {Object} [legendOptions] 图例选项,用来在图例中展示符号信息 + * @param {Number} [maxDataValue] 尺寸渐变中使用的最大数据值 + * @param {Number} [maxSize] 最大数据值的要素尺寸的大小 + * @param {Number} [minDataValue] 尺寸渐变中使用的最小数据值 + * @param {Number} [minSize] 最小数据值的要素尺寸的大小 + * @param {String} [normalizationField] 标准化数据所依据的数字属性字段的名称,将数据值除以对应字段数据值 + * @param {Array} [stops] 视觉变量尺寸数组,定义从field或valueExpression返回的数据值到符号大小的映射的对象数组 + * @param {String} [target] outline在根据视图比例缩放多边形轮廓宽度时,必须使用此值 + * @param {Boolean} [useSymbolValue] 使用符号值,当使用ObjectSymbol3DLayer在渲染器上设置大小可视变量时,此属性指示是否将由height、width或depth属性定义的值应用于此可视变量的相应轴,而不是按比例缩放此轴的值 + * @param {String} [valueRepresentation] 指定在映射实际大小时如何应用数据值 + * @param {String} [valueUnit] 度量单位,用于field或valueExpression返回的值上 + */ +export default class SizeVariable extends VisualVariable { + constructor(option) { + super(option); + var options = option ? option : {}; + const { type = "size" } = options; + this.type = type; + const { axis, legendOptions, maxDataValue, maxSize, minDataValue, minSize, normalizationField, stops, target, useSymbolValue, valueRepresentation, valueUnit } = options; + this.axis = axis; + this.legendOptions = legendOptions; + this.maxDataValue = maxDataValue; + this.maxSize = maxSize; + this.minDataValue = minDataValue; + this.minSize = minSize; + this.normalizationField = normalizationField; + this.stops = stops; + this.target = target; + this.useSymbolValue = useSymbolValue; + this.valueRepresentation = valueRepresentation; + this.valueUnit = valueUnit; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的视觉变量转换为JS对象 + * @param {Object} json 视觉变量的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = "size" } = json; + this.type = type; + const { axis, legendOptions, maxDataValue, maxSize, minDataValue, minSize, normalizationField, stops, target, useSymbolValue, valueRepresentation, valueUnit } = json; + this.axis = axis; + this.legendOptions = legendOptions; + this.maxDataValue = maxDataValue; + this.maxSize = maxSize; + this.minDataValue = minDataValue; + this.minSize = minSize; + this.normalizationField = normalizationField; + this.stops = stops; + this.target = target; + this.useSymbolValue = useSymbolValue; + this.valueRepresentation = valueRepresentation; + this.valueUnit = valueUnit; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 视觉变量的实例化JSON + */ + toJSON() { + return { + type: this.type, + axis: this.axis, + legendOptions: this.legendOptions, + maxDataValue: this.maxDataValue, + maxSize: this.maxSize, + minDataValue: this.minDataValue, + minSize: this.minSize, + normalizationField: this.normalizationField, + stops: this.stops, + target: this.target, + useSymbolValue: this.useSymbolValue, + valueRepresentation: this.valueRepresentation, + valueUnit: this.valueUnit, + }; + } +} + +export { SizeVariable }; +mapgis.renderer.SizeVariable = SizeVariable; diff --git a/src/service/base/renderer/UniqueValueInfo.js b/src/service/base/renderer/UniqueValueInfo.js new file mode 100644 index 000000000..980b83436 --- /dev/null +++ b/src/service/base/renderer/UniqueValueInfo.js @@ -0,0 +1,57 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { Renderer } from './Renderer'; + +import { PointSymbol3D, PolygonSymbol3D, LineSymbol3D } from "../symbols/index"; + +/** + * 三维专题图-单值信息 + * @class mapgis.renderer.UniqueValueInfo + * @classdesc 三维专题图-单值信息 + * @param {String|Number} [value] 指定字段下的要素值,具有此值的要素将使用给定的符号可视化 + * @param {Symbol} [symbol] 符号,用来渲染指定要素 + * @param {String} [label] 标签,用来描述符号表示的值 + */ +export default class UniqueValueInfo { + constructor(option) { + var options = option ? option : {}; + const { value, symbol, label } = options; + this.value = value; + this.symbol = symbol; + this.label = label; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的单值信息转换为JS对象 + * @param {Object} json 单值信息的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { value, symbol, label } = json; + this.value = value; + this.symbol = symbol; + this.label = label; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 单值信息的实例化JSON + */ + toJSON() { + return { + value: this.value, + symbol: this.symbol, + label: this.label, + }; + } +} + +export { UniqueValueInfo }; +mapgis.renderer.UniqueValueInfo = UniqueValueInfo; diff --git a/src/service/base/renderer/UniqueValueRenderer.js b/src/service/base/renderer/UniqueValueRenderer.js new file mode 100644 index 000000000..44a68bbef --- /dev/null +++ b/src/service/base/renderer/UniqueValueRenderer.js @@ -0,0 +1,140 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; +import { Renderer } from './Renderer'; + +import { PointSymbol3D, PolygonSymbol3D, LineSymbol3D } from "../symbols/index"; + +/** + * 三维专题图-单值专题图 + * @class mapgis.renderer.UniqueValueRenderer + * @classdesc 三维专题图-单值专题图 + * @param {String} [type] 专题图类型,只能是'unique-value' + * @param {String} [field] 专题图字段名称,用来确定分段要素 + * @param {String} [field2] 专题图字段名称,用来确定分段要素 + * @param {String} [field3] 专题图字段名称,用来确定分段要素 + * @param {Symbol} [defaultSymbol] 专题图默认符号样式,用来绘制具有与给定单值不匹配的要素 + * @param {String} [defaultLabel] 专题图图例标签,用来描述分配了默认符号的元素 + * @param {Array} [uniqueValueInfos] 专题图单值信息 + * @param {Array} [visualVariables] 专题图视觉变量,可选 "color"|"opacity"|"size"|"rotation" + * @param {PolygonSymbol3D} [backgroundFillSymbol] 专题图边界变量,使用分级符号对面要素进行符号化时,在此属性上设置以可视化每个要素的边界 + * @param {String} [fieldDelimiter] 专题图字段分隔符,如果指定了多个属性字段,则在值之间插入字符串 + * @param {Object} [legendOptions] 专题图图例选项,用来在图例中展示符号信息 + * @param {String} [valueExpression] 专题图计算表达式,用来对要素中的单/多个属性进行数学计算 + * @param {String} [valueExpressionTitle] 专题图计算表达式标题,在legendOptions属性中没有提供的情况下,将显示为图例中的标题 + */ +export default class UniqueValueRenderer extends Renderer { + constructor(option) { + super(option); + var options = option ? option : {}; + const { type = "unique-value" } = options; + this.type = type; + const { field, field2, field3, defaultSymbol, defaultLabel, uniqueValueInfos, visualVariables, backgroundFillSymbol, fieldDelimiter, legendOptions, valueExpression, valueExpressionTitle } = options; + this.field = field; + this.field2 = field2; + this.field3 = field3; + this.defaultSymbol = defaultSymbol; + this.defaultLabel = defaultLabel; + this.uniqueValueInfos = uniqueValueInfos; + this.visualVariables = visualVariables; + this.backgroundFillSymbol = backgroundFillSymbol; + this.fieldDelimiter = fieldDelimiter; + this.legendOptions = legendOptions; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的渲染规则转换为JS对象 + * @param {Object} json 渲染规则的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = "unique-value" } = json; + this.type = type; + const { field, field2, field3, defaultSymbol, defaultLabel, uniqueValueInfos, visualVariables, backgroundFillSymbol, fieldDelimiter, legendOptions, valueExpression, valueExpressionTitle } = json; + this.field = field; + this.field2 = field2; + this.field3 = field3; + this.defaultSymbol = defaultSymbol; + this.defaultLabel = defaultLabel; + this.uniqueValueInfos = uniqueValueInfos; + this.visualVariables = visualVariables; + this.backgroundFillSymbol = backgroundFillSymbol; + this.fieldDelimiter = fieldDelimiter; + this.legendOptions = legendOptions; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 渲染规则的实例化JSON + */ + toJSON() { + return { + type: this.type, + field: this.field, + field2: this.field2, + field3: this.field3, + defaultSymbol: this.defaultSymbol, + defaultLabel: this.defaultLabel, + uniqueValueInfos: this.uniqueValueInfos, + visualVariables: this.visualVariables, + backgroundFillSymbol: this.backgroundFillSymbol, + fieldDelimiter: this.fieldDelimiter, + legendOptions: this.legendOptions, + valueExpression: this.valueExpression, + valueExpressionTitle: this.valueExpressionTitle, + }; + } + + /** + * @description 添加单值信息 + * @param {Object} info 单值信息的实例化对象 + */ + addUniqueValueInfo(info) { + info = info || {}; + this.uniqueValueInfos.push(info); + } + + /** + * @description 获取单值信息 + * @param {Object} info 单值信息的实例化对象 + * @returns {Object} 根据info查询到的单值信息 + */ + getUniqueValueInfo(info) { + info = info || {}; + const { value, symbol, label } = info; + for(let i = 0; i < this.uniqueValueInfos.length; i++) { + let item = this.uniqueValueInfos[i]; + if (item.value == value) { + return item; + } + } + } + + /** + * @description 移除单值信息 + * @param {Object} json 渲染规则的实例化JSON + */ + removeUniqueValueInfo(info) { + info = info || {}; + const { value, symbol, label } = info; + for(let i = 0; i < this.uniqueValueInfos.length; i++) { + let item = this.uniqueValueInfos[i]; + if (item.value == value) { + this.uniqueValueInfos.splice(i, 1); + } + } + } +} + +export { UniqueValueRenderer }; +mapgis.renderer.UniqueValueRenderer = UniqueValueRenderer; diff --git a/src/service/base/renderer/VisualVariable.js b/src/service/base/renderer/VisualVariable.js new file mode 100644 index 000000000..51146dc23 --- /dev/null +++ b/src/service/base/renderer/VisualVariable.js @@ -0,0 +1,54 @@ +import { mapgis } from '../common/base'; + +/** + * 视觉变量基类 + * @class mapgis.renderer.VisualVariable + * @classdesc 视觉变量基类 + * @param {String} [type] 视觉变量类型,可选 "color"|"opacity"|"rotation"|"size" + * @param {String} [field] 字段名称,包含用于确定每个要素的颜色/不透明度/大小/旋转的数据值的数字属性字段的名称 + * @param {Object} [legendOptions] 图例选项,用来在图例中展示视觉变量信息 + * @param {String} [valueExpression] 计算表达式,用来对要素中的单/多个属性进行数学计算 + * @param {String} [valueExpressionTitle] 计算表达式标题,在legendOptions属性中没有提供的情况下,将显示为图例中的标题 + */ +export default class VisualVariable { + constructor(option) { + var options = option ? option : {}; + const { type, field, legendOptions, valueExpression, valueExpressionTitle } = options; + this.type = type; + this.field = field; + this.legendOptions = legendOptions; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + } + + /** + * @description 将JSON格式的视觉变量转换为JS对象 + * @param {Object} json 视觉变量的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type, field, legendOptions, valueExpression, valueExpressionTitle } = json; + this.type = type; + this.field = field; + this.legendOptions = legendOptions; + this.valueExpression = valueExpression; + this.valueExpressionTitle = valueExpressionTitle; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 视觉变量的实例化JSON + */ + toJSON() { + return { + type: this.type, + field: this.field, + legendOptions: this.legendOptions, + valueExpression: this.valueExpression, + valueExpressionTitle: this.valueExpressionTitle, + }; + } +} + +export { VisualVariable }; +mapgis.renderer.VisualVariable = VisualVariable; diff --git a/src/service/base/renderer/index.js b/src/service/base/renderer/index.js new file mode 100644 index 000000000..07ac0dbb5 --- /dev/null +++ b/src/service/base/renderer/index.js @@ -0,0 +1,41 @@ +// 原子级专题图渲染规则 +import { Renderer } from "./Renderer"; + +// 原子级专题图信息 +import { UniqueValueInfo } from "./UniqueValueInfo"; +import { ClassBreakInfo } from "./ClassBreakInfo"; + +// 原子级专题图视觉变量 +import { VisualVariable } from "./VisualVariable"; + +// 三维专题图渲染规则 +import { SimpleRenderer } from "./SimpleRenderer"; +import { UniqueValueRenderer } from "./UniqueValueRenderer"; +import { ClassBreaksRenderer } from "./ClassBreaksRenderer"; + +// 三维专题图视觉变量 +import { ColorVariable } from "./ColorVariable"; +import { OpacityVariable } from "./OpacityVariable"; +import { SizeVariable } from "./SizeVariable"; +import { RotationVariable } from "./RotationVariable"; + +// 原子级专题图渲染规则 +export { Renderer }; + +// 原子级专题图信息 +export { UniqueValueInfo }; +export { ClassBreakInfo }; + +// 原子级专题图视觉变量 +export { VisualVariable }; + +// 三维专题图渲染规则 +export { SimpleRenderer }; +export { UniqueValueRenderer }; +export { ClassBreaksRenderer }; + +// 三维专题图视觉变量 +export { ColorVariable }; +export { OpacityVariable }; +export { SizeVariable }; +export { RotationVariable }; diff --git a/src/service/base/style/Enum.js b/src/service/base/style/Enum.js index f12e0e57c..1f5f29d56 100644 --- a/src/service/base/style/Enum.js +++ b/src/service/base/style/Enum.js @@ -1,33 +1,120 @@ /** - * @enum Anchor - * @description 锚点方向 + * @enum MarkStyle + * @description 标注样式 */ -export const Anchor = { - center: 'center', - left: 'left', - right: 'right', - top: 'top', - bottom: 'bottom', - 'top-left': 'top-left', - 'top-right': 'top-right', - 'bottom-left': 'bottom-left', - 'bottom-right': 'bottom-right' +export const MarkStyle = { + circle: 'circle', + cross: 'cross', + diamond: 'diamond', + square: 'square', + triangle: 'triangle', + x: 'x' }; + /** - * @enum Align - * @description 对齐方向 + * @enum LineStyle + * @description 标注样式 */ -export const Align = { +export const LineStyle = { + dash: 'dash', + 'dash-dot': 'dash-dot', + dot: 'dot', + 'long-dash': 'long-dash', + 'long-dash-dot': 'long-dash-dot', + 'long-dash-dot-dot': 'long-dash-dot-dot', + none: 'none', + 'short-dash': 'short-dash', + 'short-dash-dot': 'short-dash-dot', + 'short-dash-dot-dot': 'short-dash-dot-dot', + 'short-dot': 'short-dot', + solid: 'solid' +}; + +/** + * @enum LineMarkerStyle + * @description 线样式 + */ +export const LineMarkerStyle = { + arrow: 'arrow', + circle: 'circle', + square: 'square', + diamond: 'diamond', + cross: 'cross', + x: 'x' +}; + +/** + * @enum FillStyle + * @description 填充样式 + */ +export const FillStyle = { + 'backward-diagonal': 'backward-diagonal', + cross: 'cross', + 'diagonal-cross': 'diagonal-cross', + 'forward-diagonal': 'forward-diagonal', + horizontal: 'horizontal', + none: 'none', + solid: 'solid', + vertical: 'vertical' +}; + +/** + * @enum FontStyle + * @description 字体样式 + */ +export const FontStyle = { + normal: 'normal', + italic: 'italic', + oblique: 'oblique' +}; + +/** + * @enum FontWeight + * @description 字体权重 + */ +export const FontWeight = { + normal: 'normal', + bold: 'bold', + bolder: 'bolder', + lighter: 'lighter' +}; + +/** + * @enum FontDecoration + * @description 字体权重 + */ +export const FontDecoration = { + underline: 'underline', + 'line-through': 'line-through', + none: 'none' +}; + +/** + * @enum HorizontalAlignment + * @description 水平对齐方向 + */ +export const HorizontalAlignment = { left: 'left', center: 'center', right: 'right' }; /** - * @enum LineCap + * @enum VerticalAlignment + * @description 竖直对齐方向 + */ +export const VerticalAlignment = { + baseline: 'baseline', + top: 'top', + middle: 'middle', + bottom: 'bottom' +}; + +/** + * @enum Cap * @description 线头类型 */ -export const LineCap = { +export const Cap = { /** * 尖头 */ @@ -39,14 +126,18 @@ export const LineCap = { /** * 平头 */ - square: 'square' + square: 'square', + /** + * 无,仅三维生效 + */ + none: 'none' }; /** - * @enum LineJoin + * @enum Join * @description 拐角类型 */ -export const LineJoin = { +export const Join = { /** * 平拐 */ @@ -61,9 +152,46 @@ export const LineJoin = { miter: 'miter' }; +/** + * @enum LineMarkerPlacement + * @description 标记线标记点位置 + */ +export const LineMarkerPlacement = { + begin: 'begin', + end: 'end', + 'begin-end': 'begin-end' +}; + +/** + * @enum Anchor + * @description 锚点方向 + */ +export const Anchor = { + center: 'center', + left: 'left', + right: 'right', + top: 'top', + bottom: 'bottom', + 'top-left': 'top-left', + 'top-right': 'top-right', + 'bottom-left': 'bottom-left', + 'bottom-right': 'bottom-right', + origin: 'origin', + relative: 'relative' +}; +/** + * @enum Align + * @description 对齐方向 + */ +export const Align = { + left: 'left', + center: 'center', + right: 'right' +}; + /** * @enum TextPlacement - * @description 文字方向 + * @description 文字方向 mapboxgl引擎特有属性 */ export const TextPlacement = { /** diff --git a/src/service/base/style/ExtrudeStyle.js b/src/service/base/style/ExtrudeStyle.js new file mode 100644 index 000000000..a07396a10 --- /dev/null +++ b/src/service/base/style/ExtrudeStyle.js @@ -0,0 +1,70 @@ +import { extend } from '../../common/Util'; +import { mapgis } from '../common/base'; +import { Symbol } from './Symbol'; +import { Graphic } from './Graphic'; + +/** + * 拉伸体样式 + * @class mapgis.symbols.ExtrudeStyle + * @classdesc 拉伸体样式 + * @param {String} [color = #FFFFFF] 拉伸体外边线颜色,16进制颜色或rgb值或rgba值,默认#FFFFFF,白色 + * @param {Object} [shadowStyle = undefined] 阴影样式,默认undefined + * @param {Object} [symbolStyle = undefined] 填充图案样式,默认undefined + * @param {Object} [outlineSymbolStyle = undefined] 拉伸体外边线填充图案样式,默认undefined + */ +export default class ExtrudeStyle extends Symbol { + constructor(option) { + super(); + var options = option ? option : {}; + const { color = '#FFFFFF', opacity = 1.0, symbol } = options; + const { castShadows = true, edges, size = 1, material } = options; + + this.type = 'extrude'; + + this.color = color; + this.opacity = opacity; + this.symbolStyle = symbol || new Graphic(); + + this.castShadows = castShadows; + this.edges = edges; + this.material = material || color; + this.size = size; + + extend(this, options); + } + + /** + * @param {Boolean} [highlight = false] 是否激活高亮样式 + * @link https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#fill-extrusion + * @returns MapboxGL线格式的样式 + */ + toMapboxStyle(options) { + options = options || {}; + const { highlight = false } = options; + let { material, size, opacity, symbolStyle } = this; + const { pattern, xoffset, yoffset } = symbolStyle; + let style = { + filter: ['==', '$type', 'Polygon'], + paint: { + 'fill-extrusion-base': 0, + 'fill-extrusion-color': material, + 'fill-extrusion-height': size, + 'fill-extrusion-opacity': opacity, + 'fill-extrusion-translate': [xoffset, yoffset], + 'fill-extrusion-translate-anchor': 'map', + 'fill-extrusion-vertical-gradient': true + } + }; + if (symbolStyle && pattern) { + style.paint['fill-extrusion-pattern'] = pattern; + } + if (highlight) { + style.paint['fill-extrusion-color'] = ['case', ['boolean', ['feature-state', 'hover'], false], material, 'rgba(0,0,0,0)']; + style.paint['fill-extrusion-base'] = ['case', ['boolean', ['feature-state', 'hover'], false], 100, 0]; + } + return style; + } +} + +export { ExtrudeStyle }; +mapgis.symbols.ExtrudeStyle = ExtrudeStyle; diff --git a/src/service/base/style/FillStyle.js b/src/service/base/style/FillStyle.js index 368d092b0..3e3ecb8e5 100644 --- a/src/service/base/style/FillStyle.js +++ b/src/service/base/style/FillStyle.js @@ -1,7 +1,8 @@ -import { extend } from '../Util'; -import { mapgis } from '../Base'; +import { extend } from '../../common/Util'; +import { mapgis } from '../common/base'; import { VectorStyle } from './VectorStyle'; -import { Symbol } from './Symbol'; +import { Graphic } from './Graphic'; +import { Shadow } from './Shadow'; /** * 多边形样式 @@ -18,15 +19,70 @@ export default class FillStyle extends VectorStyle { constructor(option) { super(); var options = option ? option : {}; - const { symbol } = option; - this.outlineWidth = 1; - this.outlineColor = '#FFFFFF'; - this.outlineDashArray = 'line'; - this.shadowStyle = undefined; - this.symbolStyle = symbol || new Symbol(); - this.outlineSymbolStyle = undefined; + const { + outlineWidth = 1, + outlineColor = '#FFFFFF', + outlineDashArray = 'line', + offsetX = 0, + offsetY = 0, + shadow, + symbol, + outlineSymbolStyle + } = options; + this.type = 'fill'; + this.outlineWidth = outlineWidth; + this.outlineColor = outlineColor; + this.outlineDashArray = outlineDashArray; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.shadowStyle = shadow || new Shadow(); + this.symbolStyle = symbol || new Graphic(); + this.outlineSymbolStyle = outlineSymbolStyle || new Graphic(); extend(this, options); } + + /** + * @param {Boolean} [highlight = false] 是否激活高亮样式 + * @link https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#fill + * @returns MapboxGL线格式的样式 + */ + toMapboxStyle(options) { + options = options || {}; + const { highlight = false } = options; + let { color, opacity, outlineColor, symbolStyle, offsetX, offsetY } = this; + let style = { + filter: ['==', '$type', 'Polygon'], + paint: { + 'fill-antialias': true, //抗锯齿,true表示针对边界缝隙进行填充 + 'fill-color': color, + 'fill-opacity': opacity, + 'fill-outline-color': outlineColor + } + }; + if (symbolStyle && symbolStyle.symbol) { + style.paint['fill-pattern'] = symbolStyle.symbol; + } + if (offsetX || offsetY) { + style.paint['fill-translate'] = [offsetX, offsetY]; + } + if (highlight) { + // mapbox 区高亮用的是line的样式,因此此处不做处理 + style.paint['fill-color'] = ['case', ['boolean', ['feature-state', 'hover'], false], color, 'rgba(0,0,0,0)']; + style.paint['fill-outline-color'] = ['case', ['boolean', ['feature-state', 'hover'], false], outlineColor, 'rgba(0,0,0,0)']; + } + return style; + } + + /** + * @link https://sandcastle.cesium.com/index.html?src=Polygon.html + * @returns Cesium区格式的样式 + */ + toCesiumStyle(Cesium) { + let { color, opacity, outlineColor } = this; + let material = new Cesium.ColorMaterialProperty(Cesium.Color.fromCssColorString(color).withAlpha(opacity)); + let outline = new Cesium.Color.fromCssColorString(outlineColor); + return { material, outlineColor: outline }; + } } export { FillStyle }; diff --git a/src/service/base/style/FontStyle.js b/src/service/base/style/FontStyle.js new file mode 100644 index 000000000..9be547c97 --- /dev/null +++ b/src/service/base/style/FontStyle.js @@ -0,0 +1,27 @@ +import { extend } from '../../common/Util'; +import { mapgis } from '../common/base'; + +/** + * 符号样式 + * @class mapgis.style.FontStyle + * @classdesc 符号样式 + * @param {String} [family = 黑体] 字体类型 + * @param {Number} [size = 16] 字体大小 + * @param {String} [style = normal] 字体样式: "normal" 常规 | "italic" 斜体 | "oblique" + * @param {String} [weight = normal] Y轴偏移 + */ +export default class FontStyle { + constructor(option) { + var options = option ? option : {}; + const { family = '黑体', size = 12, style = 'normal', weight = 'normal' } = options; + // this.decoration; 暂不支持 + this.family = family; + this.size = size; + this.style = style; + this.weight = weight; + extend(this, options); + } +} + +export { FontStyle }; +mapgis.style.FontStyle = FontStyle; diff --git a/src/service/base/style/Graphic.js b/src/service/base/style/Graphic.js new file mode 100644 index 000000000..1fa1a7a7d --- /dev/null +++ b/src/service/base/style/Graphic.js @@ -0,0 +1,40 @@ +import { extend } from '../../common/Util'; +import { mapgis } from '../common/base'; +import { Anchor } from './Enum'; + +/** + * 符号样式 + * @class mapgis.style.GraphicStyle + * @classdesc 符号样式 + * @param {String} [pattern = ""] 符号名称或url + * @param {Number} [opacity = 1] 透明度,0~1之间的值,默认为1,不透明 + * @param {String} [color = #FFFFFF] 颜色,十六进制或RGB,默认为#FFFFFF,白色 + * @param {Number} [size = 1] 符号大小 + * @param {Number} [rotate = 0] 旋转角度,0~360度 + * @param {Number} [offsetX = 0] X轴偏移 + * @param {Number} [offsetY = 0] Y轴偏移 + * @param {String} [anchor = center] 锚点 + */ +export default class Graphic { + constructor(option) { + var options = option ? option : {}; + const { pattern = undefined, opacity = 1.0, allowOverlap = false } = options; + const { color = '#FFFFFF', size = 1, rotate = 0 } = options; + const { xoffset = 0, yoffset = 0 } = options; + + this.allowOverlap = allowOverlap; + this.pattern = pattern; + this.opacity = opacity; + this.color = color; + this.size = size; + this.rotate = rotate; + this.xoffset = xoffset; + this.yoffset = yoffset; + this.anchor = Anchor.center; + + extend(this, options); + } +} + +export { Graphic }; +mapgis.style.GraphicStyle = Graphic; diff --git a/src/service/base/style/LineStyle.js b/src/service/base/style/LineStyle.js index 9b6d9ca0e..de22a09d0 100644 --- a/src/service/base/style/LineStyle.js +++ b/src/service/base/style/LineStyle.js @@ -1,15 +1,17 @@ -import { extend } from '../../common/Util'; -import { mapgis } from '../../common/Base'; +import { extend } from '../../common'; +import { mapgis } from '../common/base'; import { VectorStyle } from './VectorStyle'; -import { LineCap, LineJoin } from './Enum'; -import { Symbol } from './Symbol'; +import { Cap, Join } from './Enum'; +import { Shadow } from './Shadow'; +import { Graphic } from './Graphic'; /** * 线样式 * @class mapgis.style.LineStyle * @classdesc 线样式 * @param {Number} [width = 1] 线宽度,默认为1 - * @param {String} [dashArray = line] 线的样式,默认line,即为实线 + * @param {String} [type = 'line'] 线的样式,默认line,即为实线 + * @param {String} [dashArray = [5, 5]] 虚实组合关系 * @param {String} [cap = butt] 线头样式,默认butt * @param {String} [join = miter] 拐角样式,默认miter * @param {Object} [shadowStyle = undefined] 阴影样式,默认undefined @@ -18,15 +20,87 @@ export default class LineStyle extends VectorStyle { constructor(option) { super(); var options = option ? option : {}; - const { symbol } = option; - this.width = 1; - this.dashArray = 'line'; - this.cap = LineCap.butt; - this.join = LineJoin.miter; - this.shadowStyle = undefined; - this.symbolStyle = symbol || new Symbol(); + const { + width = 1, + dashArray, + cap = Cap.butt, + join = Join.miter, + shadow, + symbol + } = options; + this.type = 'line'; + this.width = width; + this.dashArray = dashArray; + this.cap = cap; + this.join = join; + this.shadowStyle = shadow || new Shadow(); + this.symbolStyle = symbol || new Graphic(); extend(this, options); } + + /** + * @param {Boolean} [highlight = false] 是否激活高亮样式 + * @link https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#line + * @returns MapboxGL线格式的样式 + */ + toMapboxStyle(options) { + options = options || {}; + const { highlight = false } = options; + let { color, opacity, width, cap, join, blur, dashArray, shadowStyle, symbolStyle } = this; + if (shadowStyle) { + blur = shadowStyle.blur; + width = width + blur; + } + let style = { + filter: ['==', '$type', 'LineString'], + layout: { + 'line-cap': cap, + 'line-join': join + }, + paint: { + 'line-width': width, + 'line-color': color, + 'line-opacity': opacity, //透明度 `0 ~ 1.0` + 'line-blur': blur + } + }; + if (symbolStyle && symbolStyle.symbol) { + style.paint['line-pattern'] = symbolStyle.symbol; + } + if (dashArray) { + style.paint['line-dasharray'] = dashArray; + } + if (highlight) { + style.paint['line-width'] = ['case', ['boolean', ['feature-state', 'hover'], false], width, 0]; + } + return style; + } + + /** + * @link https://sandcastle.cesium.com/index.html?src=Polyline.html&label=Geometries + * @returns Cesium线格式的样式 + */ + toCesiumStyle(Cesium) { + let material; + let { dashArray, shadowStyle, color, opacity, width } = this; + // PolylineArrowMaterialProperty + if (dashArray) { + material = new Cesium.PolylineDashMaterialProperty({ + color: Cesium.Color.fromCssColorString(color) + }); + } else if (shadowStyle && shadowStyle.blur > 0) { + width = width + shadowStyle.blur; + material = new Cesium.PolylineGlowMaterialProperty({ + glowPower: 0.2, + taperPower: 0.5, + color: Cesium.Color.fromCssColorString(shadowStyle.color) + }); + } else { + material = new Cesium.ColorMaterialProperty(Cesium.Color.fromCssColorString(color).withAlpha(opacity)); + } + + return { material, width }; + } } export { LineStyle }; diff --git a/src/service/base/style/MarkerStyle.js b/src/service/base/style/MarkerStyle.js index 0a04c9395..491c48d42 100644 --- a/src/service/base/style/MarkerStyle.js +++ b/src/service/base/style/MarkerStyle.js @@ -1,23 +1,118 @@ -import { extend } from '../Util'; -import { mapgis } from '../Base'; -import { VectorStyle } from './VectorStyle'; +import { mapgis } from '../common/base'; + import { Symbol } from './Symbol'; +import { Graphic } from './Graphic'; + +const DefaultMarkerImagePlotting = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAuCAYAAABEbmvDAAAAAXNSR0IB2cksfwAAAAlwSFlzAAASdAAAEnQB3mYfeAAABjNJREFUeJztWF1MFFcUnsSY8NjEmJj0xRfTJk19sEkfffGpsWn9Q5HFYX9nd9lZVkgb2/ovC11cRRRYQLYIrAK2WrUNVK3SqtFapU1t0xrTRK1UrEbEv/fT75thXWphf2DAh/YmX2Zn5t5zv3vOd86du4ryf5um9uTJkwWPHj3SHj58uHl4eLg5Cd7z+ePHj99++vTpnGkhw4k46YMHD768OXBb4ke/kffrD0tReL8s/iBuXEtqDsru7pNy5ervMjQ01E+iXMSUkSIhTvTpyQuyqLxZZi6pFmVprSjL6kRZ1STKymZcgZUxPNstyrvbZb6vXiIdPXL33j0hQUs9SGMM0ZnLv8jCtY2iLNlhEihoFcXWIUpRAtdRMO7x3NaGfi0G+bnqTsO79LQl3qMRGosdOiV5y6pNz3BCTl7cOYKuMTDyjv2K2kVZDYLvRKW4KiGDd/4S6m9SniKp8rrPjLAYxlV4ovhAipC9e3zwvaMrRbDgEyPEb5bsket/DEycHMMXSfQiFAidDUbtMO7oNCdzdo/gYBqM9GF/jlPpPXg7v04WlsUM3eUcVgr1SN9FmbEkIkrhKE/9g1QOMDx3wFycCnJLd4nj44ShuaxJcRXUwVw7PQVNqdCIYz8m6DLh7s4dybEuksMi18SRRBH54ttLwmzP2ltMcWVFDUjtA6mEadCFcLi6JoFOE1wkvVYQk/neWqPWZSwj7MDYzy5EBhahJNhhwAVD7k4LQUnQa9AtamFHz9nMXmOH/b1nRVmOLFQx0NFuGiI8ndYgScyOaBTWy1vrmjJrjZlYHMGgAlRuJwa68NsDQ95O60B7bsqjzYhKXn6lkaFpw0nmbwRBytaQIqYxlFYDxDyIhh1JsDwifd//NHZdI1uCQpxlQ4lQkY1ObDkaiSVMclbCzUi0mcRWRiV+7PTYOhshJvfv35eZS7eh5kD4rlZzsDdhPbhgFyJiR41cFZWart60xAyP5eVvxQBs1k6sRiOxDuuhIYweLNyxFx6rlr1HT6XPTGpsfgCFVcWnjKvFHOwluXaLAZseZL2bn0qVcvx8f/q9k1mp10IDRTsxEKvRMNgPI/52CwF7GmWChTtj8tKacOaspDt7zl3CKsIYiATQEE4fjPihB59FMGxhwR54a02NrKhoyVzHyBoJMDjXWQWdoWxo8JqfXgO5kn2TB+0QGmUCHReE5XDfhez2S4ZzW/sR1DKUDW9jilyg1Rr4Wsxo2GvlVV81K8FgVp/cFOHNgT9lVnEFsgZe88KID+QCIKe3ThwcT3gRQi/OBYWV0nD4hHEWyEhqtNc+iuPL1YaQerEL+GHMj5UG4hMHx/uxQB9LUY28pm/P/WORXrs9eEde1irhdpyESppMcjqM6/EJgIvaa9rRUIpWb5VDfedz89ZorzV8fhyZg5CW1ANYqQ5ypZgkFM8e7K9TClwcQuiMyqINddlr6/lGF3Pw6yEkgQd1LQCjOowHMUmoJXsER5HSamVm4Sa5eOXX7L9cx2p09bEz38kMdQu0hpDqSXLN2YP9Oc63BztKWEINB3L71h+rJfdPdTtC4oDecPQyJglhslIg1Dw+jPfsBwkEkUDaDplXUinU7qTOlclGl9+4NSBz3FsM40oQetMxUajRnDgtGs3+vhqZYdsoX124PDHBj9eYCG29p5EIm+C1XfACJgvFzInLmv4Ng3TM7BeABBwV4q9rz+7gkUtLJsLirUh1e9ic7Bk5oKwxheQzvtcRencEIaywLoTPN4b02vUbMtu9GYmAU1QpJg2RHMK6NpYC7/mc7/1RyVPXy7kff7Y2hM83hrT7a5yi1A3GpEoptqwykFjbkALv+dzH77qNUnuoZ/JZmKk9y9Id3IhReAOob6E9JpnyEVK853NXhSyvajAK6ZT+cZds1MnA7UGZF8AnuIa9VMeJvRSaC+02r7zHc75nNk+qkObaqJezP1yRvOIPkaXYGUpBJrjLvOKez/l+SnU1Vkv+dxY9eAwnqvUIHU7uwah5xT2f8/20/Tk8ulE31NuyKujKhfrmrTSuqyIxo15Ni67Ga9TbLejtFR0lRF0nC8rDcufu3ampV7k2eqb/t2syz/WeXL1+M/1p50W0oeHh/hfN4b/d/gYnm2n24iputAAAAABJRU5ErkJggg=='; /** * 点样式 * @class mapgis.style.PointStyle * @classdesc 点样式 * @param {Number} [symbol] 符号样式 + * @param {Number} [size] 符号大小 */ -export default class MarkerStyle extends VectorStyle { +export default class MarkerStyle extends Symbol { constructor(option) { super(); var options = option ? option : {}; - const { symbol } = option; - this.symbol = symbol || new Symbol(); - extend(this, options); + const { symbol, size = 1.0, show = true } = options; + this.type = 'marker'; + this.show = show; + this.size = size; + this.symbol = symbol || new Graphic({ symbol: DefaultMarkerImagePlotting }); + } + + /** + * @param {Boolean} [highlight = false] 是否激活高亮样式 + * @link https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#symbol + * @returns MapboxGL点格式的样式 + */ + toMapboxStyle(options) { + options = options || {}; + const { highlight = false } = options; + const { symbol } = this; + const { allowOverlap, color, pattern, opacity } = symbol; + const { size, rotate, xoffset, yoffset } = symbol; + + let mapstyle = { + paint: { + 'icon-color': color, + 'icon-opacity': opacity + }, + layout: { + 'icon-allow-overlap': allowOverlap, + 'icon-offset': [xoffset, yoffset], + 'icon-size': size, + 'icon-rotate': rotate + } + }; + if (pattern) { + mapstyle.layout['icon-image'] = pattern; + } + if (highlight) { + } + return mapstyle; + } + + /** + * @link https://sandcastle.cesium.com/index.html?src=Circles%20and%20Ellipses.html&label=Geometries + * @returns Cesium点格式的样式 + */ + toCesiumStyle(options, feature, Cesium) { + const { + field = '', + scale = 1, + backgroundColor = '#FFFFFF', + backgroundOpacity = 0, + color = '#FFFFFF', + opacity = 1, + outlineColor = '#FFFFFF', + outlineOpacity = 1, + outlineWidth = 0, + xOffset = 0, + yOffset = 0, + text, + show = true + } = options; + const { url = '', rotation = 0, imageScale = 1, width, height } = options; + let labelText; + if (field && feature.properties && feature.properties[field]) { + labelText = feature.properties[field]; + } + if (text) { + labelText = text; + } + let billboard = { + show: show, + image: url, + rotation: rotation, + scale: imageScale, + pixelOffset: new Cesium.Cartesian2(xOffset, yOffset) + }; + if (width) { + billboard.width = width; + } + if (height) { + billboard.height = height; + } + return { + label: { + show: show, + text: labelText, + scale: scale, + showBackground: true, + fillColor: Cesium.Color.fromCssColorString(color).withAlpha(opacity), + outlineColor: Cesium.Color.fromCssColorString(outlineColor).withAlpha(outlineOpacity), + outlineWidth: outlineWidth, + backgroundColor: Cesium.Color.fromCssColorString(backgroundColor).withAlpha(backgroundOpacity), + pixelOffset: new Cesium.Cartesian2(xOffset, yOffset * -1) + }, + billboard: billboard + }; } } export { MarkerStyle }; -mapgis.style.MarkerStyle = MarkerStyle; +mapgis.symbols.MarkerStyle = MarkerStyle; diff --git a/src/service/base/style/ModelStyle.js b/src/service/base/style/ModelStyle.js new file mode 100644 index 000000000..8145f702c --- /dev/null +++ b/src/service/base/style/ModelStyle.js @@ -0,0 +1,45 @@ +import { extend } from '../../common/Util'; +import { mapgis } from '../common/base'; +import { VectorStyle } from './VectorStyle'; +import { Anchor } from './Enum'; + +/** + * 模型样式 + * @class mapgis.style.ModelStyle + * @classdesc 模型样式 + * @param {Number} [radius = 1] 半径 + * @param {Number} [outlineWidth = 0] 外边线宽度,默认0,没有外边线 + * @param {String} [outlineColor = #FFFFFF] 外边线颜色,16进制颜色或rgb值或rgba值,默认#FFFFFF,白色 + * @param {String} [anchor = center] 锚点,默center + */ +export default class ModelStyle extends VectorStyle { + constructor(option) { + super(); + let options = option ? option : {}; + const { scale = 1, url, show = true } = options; + this.type = 'model'; + this.url = url; + this.scale = scale; + this.show = show; + extend(this, options); + } + + toMapboxStyle() { + } + + /** + * @link https://sandcastle.cesium.com/index.html?src=Circles%20and%20Ellipses.html&label=Geometries + * @returns Cesium点格式的样式 + */ + toCesiumStyle(Cesium) { + let { url, scale, show = true } = this; + return { + uri: url, + show: show, + scale: scale + }; + } +} + +export { ModelStyle }; +mapgis.style.ModelStyle = ModelStyle; diff --git a/src/service/base/style/PointStyle.js b/src/service/base/style/PointStyle.js index c72a11d8e..c1c89e57c 100644 --- a/src/service/base/style/PointStyle.js +++ b/src/service/base/style/PointStyle.js @@ -1,5 +1,5 @@ import { extend } from '../../common/Util'; -import { mapgis } from '../../common/Base'; +import { mapgis } from '../common/base'; import { VectorStyle } from './VectorStyle'; import { Anchor } from './Enum'; @@ -16,12 +16,58 @@ export default class PointStyle extends VectorStyle { constructor(option) { super(); var options = option ? option : {}; - this.radius = 0; - this.outlineColor = '#FFFFFF'; - this.outlineWidth = 0; - this.anchor = Anchor.center; + const { radius = 5, opacity = 1, outlineColor = '#FFFFFF', outlineWidth = 0, anchor = Anchor.center, outlineOpacity = 1, show = true } = options; + this.type = 'point'; + this.radius = radius; + this.opacity = opacity; + this.outlineColor = outlineColor; + this.outlineWidth = outlineWidth; + this.outlineOpacity = outlineOpacity; + this.anchor = anchor; + this.show = show; extend(this, options); } + + /** + * @param {Boolean} [highlight = false] 是否激活高亮样式 + * @link https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#circle + * @returns MapboxGL点格式的样式 + */ + toMapboxStyle(options) { + options = options || {}; + const { highlight = false } = options; + const { color, opacity, radius, outlineColor, outlineWidth } = this; + let style = { + filter: ['==', '$type', 'Point'], + paint: { + 'circle-radius': radius, + 'circle-color': color, + 'circle-opacity': opacity, + 'circle-stroke-width': outlineWidth, + 'circle-stroke-color': outlineColor + } + }; + if (highlight) { + style.paint['circle-color'] = ['case', ['boolean', ['feature-state', 'hover'], false], color, 'rgba(0, 0, 0, 0)']; + style.paint['circle-stroke-width'] = ['case', ['boolean', ['feature-state', 'hover'], false], outlineWidth, 0]; + } + return style; + } + + /** + * @link https://sandcastle.cesium.com/index.html?src=Circles%20and%20Ellipses.html&label=Geometries + * @returns Cesium点格式的样式 + */ + toCesiumStyle(Cesium) { + let { color = "#FFFFFF", opacity = 1, radius, outlineColor = "#000000", outlineWidth = 1, outlineOpacity = 1, show = true } = this; + return { + show: show, + pixelSize: radius, + color: Cesium.Color.fromCssColorString(color).withAlpha(opacity), + outlineWidth: outlineWidth, + outlineColor: Cesium.Color.fromCssColorString(outlineColor).withAlpha(outlineOpacity), + }; + } } export { PointStyle }; diff --git a/src/service/base/style/Shadow.js b/src/service/base/style/Shadow.js index 06885f0fe..4c879ff43 100644 --- a/src/service/base/style/Shadow.js +++ b/src/service/base/style/Shadow.js @@ -1,22 +1,23 @@ import { extend } from '../../common/Util'; -import { mapgis } from '../../common/Base'; +import { mapgis } from '../common/base'; /** * 阴影样式 * @class mapgis.style.Shadow * @classdesc 阴影样式 - * @param {Number} [shadowBlur = 0] 阴影模糊度,默认为0,大于0有效 - * @param {String} [shadowColor = #000000] 阴影颜色,16进制颜色或rgb值或rgba值,默认黑色 - * @param {Number} [shadowOffsetX = 0] 阴影X轴偏移,默认0 - * @param {Number} [shadowOffsetY = 0] 阴影Y轴偏移,默认0 + * @param {Number} [blur = 0] 阴影模糊度,默认为0,大于0有效 + * @param {String} [color = #000000] 阴影颜色,16进制颜色或rgb值或rgba值,默认黑色 + * @param {Number} [offsetX = 0] 阴影X轴偏移,默认0 + * @param {Number} [offsetY = 0] 阴影Y轴偏移,默认0 */ - export default class Shadow { +export default class Shadow { constructor(option) { var options = option ? option : {}; - this.shadowBlur = 0; - this.shadowColor = '#000000'; - this.shadowOffsetX = 0; - this.shadowOffsetY = 0; + const { blur = 0, color = '#000000', offsetX = 0, offsetY = 0 } = options; + this.blur = blur; + this.color = color; + this.offsetX = offsetX; + this.offsetY = offsetY; extend(this, options); } } diff --git a/src/service/base/style/Symbol.js b/src/service/base/style/Symbol.js index 11d4552fe..87fc60bb6 100644 --- a/src/service/base/style/Symbol.js +++ b/src/service/base/style/Symbol.js @@ -1,34 +1,40 @@ -import { extend } from '../Util'; -import { mapgis } from '../Base'; +import { extend } from '../../common/Util'; +import { mapgis } from '../common/base'; import { Anchor } from './Enum'; /** * 符号样式 * @class mapgis.style.SymbolStyle * @classdesc 符号样式 - * @param {String} [symbol = ""] 符号名称或url + * @param {String} [pattern = ""] 符号名称或url * @param {Number} [opacity = 1] 透明度,0~1之间的值,默认为1,不透明 * @param {String} [color = #FFFFFF] 颜色,十六进制或RGB,默认为#FFFFFF,白色 * @param {Number} [size = 1] 符号大小 * @param {Number} [rotate = 0] 旋转角度,0~360度 - * @param {Number} [xOffset = 0] X轴偏移 - * @param {Number} [yOffset = 0] Y轴偏移 + * @param {Number} [offsetX = 0] X轴偏移 + * @param {Number} [offsetY = 0] Y轴偏移 * @param {String} [anchor = center] 锚点 */ export default class Symbol { constructor(option) { var options = option ? option : {}; - this.symbol = ''; - this.opacity = 1; - this.color = '#FFFFFF'; - this.size = 1; - this.rotate = 0; - this.xOffset = 0; - this.yOffset = 0; + const { pattern = undefined, opacity = 1.0, allowOverlap = false } = options; + const { color = '#FFFFFF', size = 1, rotate = 0 } = options; + const { xoffset = 0, yoffset = 0 } = options; + + this.allowOverlap = allowOverlap; + this.pattern = pattern; + this.opacity = opacity; + this.color = color; + this.size = size; + this.rotate = rotate; + this.xoffset = xoffset; + this.yoffset = yoffset; this.anchor = Anchor.center; + extend(this, options); } } export { Symbol }; -mapgis.style.SymbolStyle = Symbol; +mapgis.style.SymbolStyle = Symbol; \ No newline at end of file diff --git a/src/service/base/style/TextStyle.js b/src/service/base/style/TextStyle.js index 838ccdf05..d009aaa84 100644 --- a/src/service/base/style/TextStyle.js +++ b/src/service/base/style/TextStyle.js @@ -1,7 +1,8 @@ -import { extend } from '../Util'; -import { mapgis } from '../Base'; +import { extend } from '../../common/Util'; +import { mapgis } from '../common/base'; +import { FontStyle } from './FontStyle'; import { VectorStyle } from './VectorStyle'; -import { TextPlacement, Align } from './Enum'; +import { TextPlacement, HorizontalAlignment, VerticalAlignment } from './Enum'; /** * 点样式 @@ -10,6 +11,7 @@ import { TextPlacement, Align } from './Enum'; * @param {String} [fontFamily = 宋体] 字体 * @param {String} [fontColor = #000000] 字体颜色,16进制颜色或rgb值或rgba值,默认#000000,黑色 * @param {Number} [fontSize = 12] 字体大小,默认12 + * @param {Number} [angle = 0] 文字角度,默认0 * @param {String} [spacing = 0] 文字间距,默认0 * @param {Number} [rotate = 0] 文字间距,默认0 * @param {Number} [xOffset = 0] X轴偏移,默认0 @@ -26,22 +28,92 @@ export default class TextStyle extends VectorStyle { constructor(option) { super(); var options = option ? option : {}; - this.fontFamily = '宋体'; - this.fontColor = '#000000'; - this.fontSize = 12; - this.spacing = 0; - this.rotate = 0; - this.xOffset = 0; - this.yOffset = 0; - this.lineHeight = 1.2; - this.maxWidth = 10; - this.align = Align.center; - this.haloBlur = 0; - this.haloColor = '#000000'; - this.haloWidth = 0; - this.placement = TextPlacement.point; + const { angle = 0, allowOverlap = false } = options; + const { backgroundColor, borderLineColor, borderLineSize } = options; + const { color = '#000000', font } = options; + const { haloColor = '#000000', haloSize = 0, horizontalAlignment = HorizontalAlignment.center } = options; + const { kerning = true, lineHeight = 1.0, lineWidth = 192 } = options; + const { rotated = false, text = '', type = 'text', verticalAlignment = VerticalAlignment.baseline } = options; + const { xoffset = 0, yoffset = 0 } = options; + + this.allowOverlap = allowOverlap; + this.angle = angle; + this.backgroundColor = backgroundColor; + this.borderLineColor = borderLineColor; + this.borderLineSize = borderLineSize; + this.color = color; + this.font = font || new FontStyle(); + this.haloColor = haloColor; + this.haloSize = haloSize; + this.horizontalAlignment = horizontalAlignment; + this.kerning = kerning; + this.lineHeight = lineHeight; + this.lineWidth = lineWidth; + this.rotated = rotated; + this.text = text; + this.type = 'text'; + this.verticalAlignment = verticalAlignment; + this.xoffset = xoffset; + this.yoffset = yoffset; + extend(this, options); } + + /** + * @param {Boolean} [highlight = false] 是否激活高亮样式 + * @link https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#symbol + * @returns MapboxGL点格式的样式 + */ + toMapboxStyle(options) { + options = options || {}; + const { highlight = false } = options; + const { angle, allowOverlap, color, font } = this; + const { family, size, style, weight } = font; + const { backgroundColor, borderLineColor, borderLineSize } = this; + const { haloColor, haloSize, horizontalAlignment } = this; + const { kerning, lineHeight, lineWidth } = this; + const { rotated, text, type, verticalAlignment } = this; + const { xoffset, yoffset } = this; + + let mapstyle = { + paint: { + 'text-color': color, + 'text-halo-color': haloColor, + 'text-halo-width': haloSize + }, + layout: { + 'text-rotate': angle, + 'text-font': [family, family], + 'text-line-height': lineHeight, + 'text-max-width': lineWidth, + 'text-field': text, + 'text-offset': [xoffset, yoffset], + 'text-size': size, + 'text-allow-overlap': allowOverlap + } + }; + if (highlight) { + let highsize = size * 1.5; + mapstyle.paint['text-color'] = ['case', ['boolean', ['feature-state', 'hover'], false], color, 'rgba(0, 0, 0, 0)']; + // mapstyle.layout['text-size'] = ['case', ['boolean', ['feature-state', 'hover'], false], highsize, 0]; + } + return mapstyle; + } + + /** + * @link https://sandcastle.cesium.com/index.html?src=Circles%20and%20Ellipses.html&label=Geometries + * @returns Cesium点格式的样式 + */ + toCesiumStyle(Cesium) { + let { color = '#FFFFFF', opacity = 1, radius, outlineColor = '#000000', outlineWidth = 1, outlineOpacity = 1, show = true } = this; + return { + show: show, + pixelSize: radius, + color: Cesium.Color.fromCssColorString(color).withAlpha(opacity), + outlineWidth: outlineWidth, + outlineColor: Cesium.Color.fromCssColorString(outlineColor).withAlpha(outlineOpacity) + }; + } } export { TextStyle }; diff --git a/src/service/base/style/TrackStyle.js b/src/service/base/style/TrackStyle.js new file mode 100644 index 000000000..3456467cc --- /dev/null +++ b/src/service/base/style/TrackStyle.js @@ -0,0 +1,132 @@ +import {extend} from '../../common/Util'; +import {mapgis} from '../common/base'; +import {VectorStyle} from './VectorStyle'; +import {Anchor} from './Enum'; + +function hex2int(hex) { + let len = hex.length, a = new Array(len), code; + for (let i = 0; i < len; i++) { + code = hex.charCodeAt(i); + if (48 <= code && code < 58) { + code -= 48; + } else { + code = (code & 0xdf) - 65 + 10; + } + a[i] = code; + } + + return a.reduce(function (acc, c) { + acc = 16 * acc + c; + return acc; + }, 0); +} + +function formatColor(color, opacity) { + let newColor; + if (typeof color === "string") { + if ((color.length === 7 || color.length === 4) && color.indexOf("#") === 0) { + let c1 = color.split("#")[0].substr(0, 2); + c1 = hex2int(c1); + let c2 = color.split("#")[0].substr(2, 2); + c2 = hex2int(c2); + let c3 = color.split("#")[0].substr(4, 2); + c3 = hex2int(c3); + let cp = Math.floor(opacity / 1 * 255); + newColor = [c1, c2, c3, cp]; + } else if (color.indexOf("rgba") === 0) { + let cStr = color.split("rgba(")[1]; + cStr = cStr.split(")")[0]; + let c1 = Number(cStr.split(",")[0]); + let c2 = Number(cStr.split(",")[1]); + let c3 = Number(cStr.split(",")[2]); + let cp = Math.floor(Number(cStr.split(",")[3]) / 1 * 255); + newColor = [c1, c2, c3, cp]; + } else if (color.indexOf("rgb") === 0) { + let cStr = color.split("rgb(")[1]; + cStr = cStr.split(")")[0]; + let c1 = Number(cStr.split(",")[0]); + let c2 = Number(cStr.split(",")[1]); + let c3 = Number(cStr.split(",")[2]); + let cp = Math.floor(opacity / 1 * 255); + newColor = [c1, c2, c3, cp]; + } + } else if (color instanceof Array && color.length === 4) { + newColor = color; + } + return newColor; +} + +/** + * 轨迹样式 + * @class mapgis.style.TrackStyle + * @classdesc 模型样式 + * @param {Number} [radius = 1] 半径 + * @param {Number} [outlineWidth = 0] 外边线宽度,默认0,没有外边线 + * @param {String} [outlineColor = #FFFFFF] 外边线颜色,16进制颜色或rgb值或rgba值,默认#FFFFFF,白色 + * @param {String} [anchor = center] 锚点,默center + */ +export default class TrackStyle extends VectorStyle { + constructor(option) { + super(); + let options = option ? option : {}; + const {show, width, color, opacity, outlineColor, outlineOpacity, outlineWidth} = options; + this.type = 'track'; + this.show = show; + this.width = width; + this.color = color; + this.opacity = opacity; + this.outlineColor = outlineColor; + this.outlineWidth = outlineWidth; + this.outlineOpacity = outlineOpacity; + extend(this, options); + } + + toMapboxStyle() { + } + + /** + * @link https://sandcastle.cesium.com/index.html?src=Circles%20and%20Ellipses.html&label=Geometries + * @returns Cesium点格式的样式 + */ + toCesiumStyle(Cesium) { + const { + show = true, + width = 8, + color = [255, 0, 255], + opacity = 1, + outlineColor = [0, 255, 255], + outlineWidth = 5, + outlineOpacity = 1 + } = this; + let newColor, newOutlineColor; + newColor = formatColor(color, opacity); + newOutlineColor = formatColor(outlineColor, outlineOpacity); + if (!newColor) { + newColor = [255, 0, 255, 255]; + } + if(!newOutlineColor){ + newOutlineColor = [0, 255, 255, 255]; + } + return { + show: show, + material: { + polylineOutline: { + color: { + rgba: newColor, + }, + outlineColor: { + rgba: newOutlineColor, + }, + outlineWidth: outlineWidth, + }, + }, + width: width, + leadTime: 0, + trailTime: 1000, + resolution: 5, + }; + } +} + +export {TrackStyle}; +mapgis.style.TrackStyle = TrackStyle; diff --git a/src/service/base/style/VectorStyle.js b/src/service/base/style/VectorStyle.js index 96d7e3323..95dac920b 100644 --- a/src/service/base/style/VectorStyle.js +++ b/src/service/base/style/VectorStyle.js @@ -1,5 +1,5 @@ import { extend } from '../../common/Util'; -import { mapgis } from '../../common/Base'; +import { mapgis } from '../common/base'; /** * 矢量样式基类 @@ -8,14 +8,16 @@ import { mapgis } from '../../common/Base'; * @param {Number} [opacity = 1] 透明度,0~1之间的值,默认为1,不透明 * @param {String} [color = #FFFFFF] 颜色,十六进制或RGB,默认为#FFFFFF,白色 */ - export default class VectorStyle { +export default class VectorStyle { constructor(option) { var options = option ? option : {}; - this.opacity = 1; - this.color = '#FFFFFF'; + const { opacity = 1, color = '#FFFFFF' } = options; + this.type = undefined; + this.opacity = opacity; + this.color = color; extend(this, options); } } export { VectorStyle }; -mapgis.style.VectorStyle = VectorStyle; +mapgis.style.VectorStyle = VectorStyle; \ No newline at end of file diff --git a/src/service/base/style/index.js b/src/service/base/style/index.js index c06a18c6d..c135135e9 100644 --- a/src/service/base/style/index.js +++ b/src/service/base/style/index.js @@ -1,5 +1,5 @@ // 枚举 -import { Enum } from './Enum'; +import { Align, Anchor, Cap, Join, TextPlacement } from './Enum'; // 原子级样式 import { Symbol } from './Symbol'; @@ -9,8 +9,14 @@ import { Shadow } from './Shadow'; import { VectorStyle } from './VectorStyle'; import { PointStyle } from './PointStyle'; import { MarkerStyle } from './MarkerStyle'; +import { ModelStyle } from './ModelStyle'; +import { TrackStyle } from './TrackStyle'; import { LineStyle } from './LineStyle'; -import { FillStyle } from './PolygonStyle'; +import { FillStyle } from './FillStyle'; +import { ExtrudeStyle } from './ExtrudeStyle'; import { TextStyle } from './TextStyle'; +import { FontStyle } from './FontStyle'; -export { Enum, Symbol, Shadow, VectorStyle, PointStyle, MarkerStyle, LineStyle, FillStyle, TextStyle }; +export { Align, Anchor, Cap, Join, TextPlacement }; +export { Symbol, Shadow }; +export { VectorStyle, PointStyle, MarkerStyle, ModelStyle, LineStyle, FillStyle, ExtrudeStyle, TextStyle, FontStyle, TrackStyle }; \ No newline at end of file diff --git a/src/service/base/symbols/Enum.js b/src/service/base/symbols/Enum.js new file mode 100644 index 000000000..1f5f29d56 --- /dev/null +++ b/src/service/base/symbols/Enum.js @@ -0,0 +1,205 @@ +/** + * @enum MarkStyle + * @description 标注样式 + */ +export const MarkStyle = { + circle: 'circle', + cross: 'cross', + diamond: 'diamond', + square: 'square', + triangle: 'triangle', + x: 'x' +}; + +/** + * @enum LineStyle + * @description 标注样式 + */ +export const LineStyle = { + dash: 'dash', + 'dash-dot': 'dash-dot', + dot: 'dot', + 'long-dash': 'long-dash', + 'long-dash-dot': 'long-dash-dot', + 'long-dash-dot-dot': 'long-dash-dot-dot', + none: 'none', + 'short-dash': 'short-dash', + 'short-dash-dot': 'short-dash-dot', + 'short-dash-dot-dot': 'short-dash-dot-dot', + 'short-dot': 'short-dot', + solid: 'solid' +}; + +/** + * @enum LineMarkerStyle + * @description 线样式 + */ +export const LineMarkerStyle = { + arrow: 'arrow', + circle: 'circle', + square: 'square', + diamond: 'diamond', + cross: 'cross', + x: 'x' +}; + +/** + * @enum FillStyle + * @description 填充样式 + */ +export const FillStyle = { + 'backward-diagonal': 'backward-diagonal', + cross: 'cross', + 'diagonal-cross': 'diagonal-cross', + 'forward-diagonal': 'forward-diagonal', + horizontal: 'horizontal', + none: 'none', + solid: 'solid', + vertical: 'vertical' +}; + +/** + * @enum FontStyle + * @description 字体样式 + */ +export const FontStyle = { + normal: 'normal', + italic: 'italic', + oblique: 'oblique' +}; + +/** + * @enum FontWeight + * @description 字体权重 + */ +export const FontWeight = { + normal: 'normal', + bold: 'bold', + bolder: 'bolder', + lighter: 'lighter' +}; + +/** + * @enum FontDecoration + * @description 字体权重 + */ +export const FontDecoration = { + underline: 'underline', + 'line-through': 'line-through', + none: 'none' +}; + +/** + * @enum HorizontalAlignment + * @description 水平对齐方向 + */ +export const HorizontalAlignment = { + left: 'left', + center: 'center', + right: 'right' +}; + +/** + * @enum VerticalAlignment + * @description 竖直对齐方向 + */ +export const VerticalAlignment = { + baseline: 'baseline', + top: 'top', + middle: 'middle', + bottom: 'bottom' +}; + +/** + * @enum Cap + * @description 线头类型 + */ +export const Cap = { + /** + * 尖头 + */ + butt: 'butt', + /** + * 圆头 + */ + round: 'round', + /** + * 平头 + */ + square: 'square', + /** + * 无,仅三维生效 + */ + none: 'none' +}; + +/** + * @enum Join + * @description 拐角类型 + */ +export const Join = { + /** + * 平拐 + */ + bevel: 'bevel', + /** + * 圆拐 + */ + round: 'round', + /** + * 棱拐 + */ + miter: 'miter' +}; + +/** + * @enum LineMarkerPlacement + * @description 标记线标记点位置 + */ +export const LineMarkerPlacement = { + begin: 'begin', + end: 'end', + 'begin-end': 'begin-end' +}; + +/** + * @enum Anchor + * @description 锚点方向 + */ +export const Anchor = { + center: 'center', + left: 'left', + right: 'right', + top: 'top', + bottom: 'bottom', + 'top-left': 'top-left', + 'top-right': 'top-right', + 'bottom-left': 'bottom-left', + 'bottom-right': 'bottom-right', + origin: 'origin', + relative: 'relative' +}; +/** + * @enum Align + * @description 对齐方向 + */ +export const Align = { + left: 'left', + center: 'center', + right: 'right' +}; + +/** + * @enum TextPlacement + * @description 文字方向 mapboxgl引擎特有属性 + */ +export const TextPlacement = { + /** + * 中心点/静态注记 + */ + point: 'point', + /** + * 动态注记-沿线方向 + */ + line: 'line' +}; diff --git a/src/service/base/symbols/ExtrudeSymbol3DLayer.js b/src/service/base/symbols/ExtrudeSymbol3DLayer.js new file mode 100644 index 000000000..8d1a35bef --- /dev/null +++ b/src/service/base/symbols/ExtrudeSymbol3DLayer.js @@ -0,0 +1,82 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3DLayer from './Symbol3DLayer'; + +/** + * 三维线图层 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.ExtrudeSymbol3DLayer + * @classdesc 三维区图层 + * @param {String} [type] 类型,只能是'extrude' + * @param {Object} [castShadows=true] 阴影,默认激活 + * @param {Edges3D} [edges] 轮廓线 + * @param {Object} [material] 材质 + * @param {String} [material.color='rgb(255,255,255)'] 材质-颜色,默认白色 + * @param {Number} [size=1] 大小,当设置sizeField后size不起作用,通过sizeField和sizeRatio计算,若未设置sizeField则直接使用size值 + * @param {Number} [sizeField] 拉伸字段 + * @param {Number} [sizeRatio=1] 拉伸比例 + */ +export default class ExtrudeSymbol3DLayer extends Symbol3DLayer { + constructor(option) { + super(option); + var option = option ? option : {}; + const { castShadows = true, edges = undefined, sizeField = undefined } = option; + const { material = { color: 'rgb(255,255,255)' } } = option; + const { size = 1, sizeRatio = 1 } = option; + + this.type = 'extrude'; + this.castShadows = castShadows; + this.edges = edges; + this.material = material; + this.size = size; + this.sizeField = sizeField; + this.sizeRatio = sizeRatio; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'extrude' } = json; + const { castShadows = true, edges = undefined, sizeField = undefined } = json; + const { material = { color: 'rgb(255,255,255)' } } = json; + const { size = 1, sizeRatio = 1 } = json; + this.type = type; + + this.castShadows = castShadows; + this.edges = edges; + this.material = material; + this.size = size; + this.sizeField = sizeField; + this.sizeRatio = sizeRatio; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + castShadows: this.castShadows, + edges: this.edges, + material: this.material, + size: this.size, + sizeField: this.sizeField, + sizeRatio: this.sizeRatio + }; + } +} + +export { ExtrudeSymbol3DLayer }; +mapgis.symbols.ExtrudeSymbol3DLayer = ExtrudeSymbol3DLayer; diff --git a/src/service/base/symbols/FillSymbol.js b/src/service/base/symbols/FillSymbol.js new file mode 100644 index 000000000..a645b30ff --- /dev/null +++ b/src/service/base/symbols/FillSymbol.js @@ -0,0 +1,54 @@ +import { mapgis } from '../common/base'; + +import { Symbol } from './Symbol'; +import SimpleLineSymbol from './SimpleLineSymbol'; + +/** + * 标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PointStyle + * @classdesc 线符号 + * @param {String} [type = 'simple-fill'] marker类型:可选值"simple-fill"|"picture-fill" + * @param {SimpleLineSymbol} [outline] 简单标记轮廓线符号 + */ +export default class FillSymbol extends Symbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { color = 'rgb(0,0,0)', outline = undefined } = options; + this.type = 'simple-fill'; + this.outline = outline ? new SimpleLineSymbol(outline) : undefined; + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { opacity = 1.0 } = json; + const { type = 'simple-fill' } = json; + const { outline = undefined } = json; + + // 父类属性Symbol.fromJSON + this.opacity = opacity; + + // 自身属性 + this.type = type; + this.outline = outline; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + outline: this.outline + }; + } +} + +export { FillSymbol }; +mapgis.symbols.FillSymbol = FillSymbol; diff --git a/src/service/base/symbols/FillSymbol3DLayer.js b/src/service/base/symbols/FillSymbol3DLayer.js new file mode 100644 index 000000000..403401699 --- /dev/null +++ b/src/service/base/symbols/FillSymbol3DLayer.js @@ -0,0 +1,84 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3DLayer from './Symbol3DLayer'; +import { Cap } from './Enum'; + +/** + * 三维填充图层 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.FillSymbol3DLayer + * @classdesc 三维填充图层 + * @param {String} [type] 类型,只能是'fill' + * @param {Boolean} [castShadows = true] 阴影,默认激活 + * @param {Edges3D} [edges] 轮廓线 + * @param {Object} [material] 材质 + * @param {String} [material.color] 材质颜色 + * @param {String} [material.colorMixMode = 'multiply'] 材质颜色混合模式,可选"tint"|"replace"|"multiply" + * @param {Object} [outline] 轮廓外包线 + * @param {String} [outline.color] 轮廓外包线-颜色 + * @param {Number} [outline.size] 轮廓外包线-大小 + * @param {LineStylePattern3D} [outline.pattern] 轮廓外包线-模式 + * @param {Cap} [outline.patternCap] 轮廓外包线-线头模式,可选"butt" 平头 |"round" 圆头 |"square" 方头 + * @param {StylePattern3D} [pattern] + */ +export default class FillSymbol3DLayer extends Symbol3DLayer { + constructor(option) { + super(option); + var option = option ? option : {}; + const { castShadows = undefined, edges = undefined } = option; + const { material = undefined, outline = undefined, pattern = undefined } = option; + + this.type = 'fill'; + + this.castShadows = castShadows; + this.edges = edges; + this.material = material; + this.outline = outline; + this.pattern = pattern; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'fill' } = json; + const { castShadows = undefined, edges = undefined } = json; + const { material = undefined, outline = undefined, pattern = undefined } = json; + + this.type = type; + + this.castShadows = castShadows; + this.edges = edges; + this.material = material; + this.outline = outline; + this.pattern = pattern; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + castShadows: this.castShadows, + edges: this.edges, + material: this.material, + outline: this.outline, + pattern: this.pattern + }; + } +} + +export { FillSymbol3DLayer }; +mapgis.symbols.FillSymbol3DLayer = FillSymbol3DLayer; diff --git a/src/service/base/symbols/Font.js b/src/service/base/symbols/Font.js new file mode 100644 index 000000000..06be697e0 --- /dev/null +++ b/src/service/base/symbols/Font.js @@ -0,0 +1,68 @@ +import { mapgis } from '../common/base'; + +import { FontDecoration, FontStyle, FontWeight } from './Enum'; + +/** + * 字体 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.Font + * @classdesc 字体 + * @param {String} [decoration = 'none'] 字体装饰,可选"underline"|"line-through"|"none" + * @param {String} [family = '宋体'] 字号 + * @param {Number} [size = 9] 字体大小 + * @param {FontStyle} [style = 'normal'] 字体样式, 可选"normal"|"italic"|"oblique" + * @param {FontWeight} [weight = 'normal'] 字体粗细, 可选"normal"|"bold"|"bolder"|"lighter" + */ +export default class Font { + constructor(option) { + var options = option ? option : {}; + const { decoration = FontDecoration.none, family = '宋体' } = options; + const { size = 9, style = FontStyle.normal, weight = FontWeight.normal } = options; + + this.decoration = decoration; + this.family = family; + this.size = size; + this.style = style; + this.weight = weight; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { decoration = FontDecoration.none, family = '宋体' } = json; + const { size = 9, style = FontStyle.normal, weight = FontWeight.normal } = json; + + this.decoration = decoration; + this.family = family; + this.size = size; + this.style = style; + this.weight = weight; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + decoration: this.decoration, + family: this.family, + size: this.size, + style: this.style, + weight: this.weight + }; + } +} + +export { Font }; +mapgis.symbols.Font = Font; diff --git a/src/service/base/symbols/IconSymbol3DLayer.js b/src/service/base/symbols/IconSymbol3DLayer.js new file mode 100644 index 000000000..6eb5cd652 --- /dev/null +++ b/src/service/base/symbols/IconSymbol3DLayer.js @@ -0,0 +1,89 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3DLayer from './Symbol3DLayer'; +import { Anchor } from './Enum'; + +/** + * 三维图标图层 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.IconSymbol3DLayer + * @classdesc 三维图标图层 + * @param {String} [type] 类型,只能是'icon' + * @param {Anchor} [anchor='center'] 锚点位置, 可选"center"|"left"|"right"|"top"|"bottom"|"top-left"|"top-right"|"bottom-left"|"bottom-right"|"relative" + * @param {Object} [anchorPosition ={x:0, y:0}] 锚点偏移 + * @param {Object} [material] 材质 + * @param {String} [material.color] 材质颜色 + * @param {Object} [outline] 轮廓 {color: 'rgba(255, 255,255,1)', size: 4} + * @param {String} [outline.color] 轮廓颜色 + * @param {Number} [outline.size] 轮廓大小 + * @param {Object} [resource = { primitive: "circle" }] 资源,默认{ primitive: "circle" } + * @param {Object} [resource.primitive="circle"] 资源-图元,使用内置的形状'circle', 'square', 'cross','x', 'kite','triangle' + * @param {Object} [resource.href] 资源-引用,引用SVG的路径URL/URI,SVG的root node必须设置width和height + * @param {Number} [size=12] 大小 + */ +export default class IconSymbol3DLayer extends Symbol3DLayer { + constructor(option) { + super(option); + var option = option ? option : {}; + const { anchor = Anchor.center, anchorPosition = { x: 0, y: 0 } } = option; + const { material = undefined, outline = undefined, resource = { primitive: 'circle' } } = option; + const { size = 12 } = option; + + this.type = 'icon'; + + this.anchor = Anchor.center; + this.anchorPosition = anchorPosition; + this.material = material; + this.outline = outline; + this.resource = resource; + this.size = size; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'icon' } = json; + const { anchor = Anchor.center, anchorPosition = { x: 0, y: 0 } } = json; + const { material = undefined, outline = undefined, resource = { primitive: 'circle' } } = json; + const { size = 12 } = json; + + this.type = undefined; + + this.anchor = Anchor.center; + this.anchorPosition = anchorPosition; + this.material = material; + this.outline = outline; + this.resource = resource; + this.size = size; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + anchor: this.anchor, + anchorPosition: this.anchorPosition, + material: this.material, + outline: this.outline, + resource: this.resource, + size: this.size + }; + } +} + +export { IconSymbol3DLayer }; +mapgis.symbols.IconSymbol3DLayer = IconSymbol3DLayer; diff --git a/src/service/base/symbols/LabelSymbol3D.js b/src/service/base/symbols/LabelSymbol3D.js new file mode 100644 index 000000000..dd8f36a61 --- /dev/null +++ b/src/service/base/symbols/LabelSymbol3D.js @@ -0,0 +1,82 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3D from './Symbol3D'; + +/** + * 三维文本符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.LabelSymbol3D + * @classdesc 三维文本符号 + * @param {String} [type] 类型,只能是'label-3d' + * @param {String} [callout] 插图线,连接点与地形高度之间的示意线 + * @param {Object} [styleOrigin] 样式起源,{ name: '', [styleName|styleUrl] :'' } + * @param {Object} [styleOrigin.name] 样式起源-名称,表示引用样式的名称 + * @param {Object} [styleOrigin.styleName] 样式起源-样式名称,表示默认的内置的MapGIS的样式 + * @param {Object} [styleOrigin.styleUrl] 样式起源-样式地址,表示样式Url路径 + * @param {Array} [symbolLayers] 图层集合,用来可视化要素和制图综合 + * @param {Object} [verticalOffset] 垂直偏移策略 + * @param {Object} [verticalOffset.screenLength ] 垂直偏移策略-屏幕高度 + * @param {Object} [verticalOffset.minWorldLength ] 垂直偏移策略-最小世界高度 + * @param {Object} [verticalOffset.maxWorldLength ] 垂直偏移策略-最大世界高度 + */ +export default class LabelSymbol3D extends Symbol3D { + constructor(option) { + super(option); + var options = option ? option : {}; + + const { callout = undefined } = options; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = options; + const { symbolLayers, verticalOffset } = options; + + this.type = 'label-3d'; + + this.callout = callout; + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + this.verticalOffset = verticalOffset; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'label-3d' } = json; + const { callout = undefined } = options; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = options; + const { symbolLayers, verticalOffset } = options; + + this.type = type; + + this.callout = callout; + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + this.verticalOffset = verticalOffset; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + callout: this.callout, + styleOrigin: this.styleOrigin, + symbolLayers: this.symbolLayers, + verticalOffset: this.verticalOffset + }; + } +} + +export { LabelSymbol3D }; +mapgis.symbols.LabelSymbol3D = LabelSymbol3D; diff --git a/src/service/base/symbols/LineSymbol.js b/src/service/base/symbols/LineSymbol.js new file mode 100644 index 000000000..c19f746ac --- /dev/null +++ b/src/service/base/symbols/LineSymbol.js @@ -0,0 +1,56 @@ +import { mapgis } from '../common/base'; + +import { Symbol } from './Symbol'; + +/** + * 标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PointStyle + * @classdesc 线符号 + * @param {String} [type = 'simple-line'] marker类型:只能是'simple-line' + * @param {String} [color = 0] 线符号颜色,默认为'rgb(0,0,0)' + * @param {Number} [width = 0] 线符号宽度,默认为0.75像素 + */ +export default class LineSymbol extends Symbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { color = 'rgb(0,0,0)', width = 0.75 } = options; + this.type = 'simple-line'; + this.color = color; + this.width = width; + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { opacity = 1.0 } = json; + const { type = 'simple-line', color = 'rgb(0,0,0)', width = 0.75 } = json; + + // 父类属性Symbol.fromJSON + this.opacity = opacity; + + // 自身属性 + this.type = type; + this.color = color; + this.width = width; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + color: this.color, + width: this.width + }; + } +} + +export { LineSymbol }; +mapgis.symbols.LineSymbol = LineSymbol; diff --git a/src/service/base/symbols/LineSymbol3D.js b/src/service/base/symbols/LineSymbol3D.js new file mode 100644 index 000000000..deae82985 --- /dev/null +++ b/src/service/base/symbols/LineSymbol3D.js @@ -0,0 +1,68 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3D from './Symbol3D'; + +/** + * 三维线符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.Symbol3D + * @classdesc 三维线符号 + * @param {String} [type] 类型,只能是'line-3d' + * @param {Object} [styleOrigin] 样式起源,{ name: '', [styleName|styleUrl] :'' } + * @param {Object} [styleOrigin.name] 样式起源-名称,表示引用样式的名称 + * @param {Object} [styleOrigin.styleName] 样式起源-样式名称,表示默认的内置的MapGIS的样式 + * @param {Object} [styleOrigin.styleUrl] 样式起源-样式地址,表示样式Url路径 + * @param {Array} [symbolLayers] 图层集合,用来可视化要素和制图综合 + */ +export default class LineSymbol3D extends Symbol3D { + constructor(option) { + super(option); + var options = option ? option : {}; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = options; + const { symbolLayers } = options; + + this.type = 'line-3d'; + + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'line-3d' } = json; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = json; + const { symbolLayers } = json; + + this.type = type; + + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + styleOrigin: this.styleOrigin, + symbolLayers: this.symbolLayers, + }; + } +} + +export { LineSymbol3D }; +mapgis.symbols.LineSymbol3D = LineSymbol3D; diff --git a/src/service/base/symbols/LineSymbol3DLayer.js b/src/service/base/symbols/LineSymbol3DLayer.js new file mode 100644 index 000000000..16cec8265 --- /dev/null +++ b/src/service/base/symbols/LineSymbol3DLayer.js @@ -0,0 +1,85 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3DLayer from './Symbol3DLayer'; +import { Cap, Join } from './Enum'; + +/** + * 三维线图层 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.LineSymbol3DLayer + * @classdesc 三维线图层 + * @param {String} [type] 类型,只能是'line' + * @param {Cap} [cap = 'butt'] 线头类型,默认为平头butt, 可选"butt" 平头 |"round" 圆头 |"square" 方头 + * @param {Join} [join = 'miter'] 拐角类型,可选"miter" 尖角 |"round" 圆角 |"bevel" 平角 + * @param {LineStyleMarker3D} [marker] 标注类型 + * @param {Object} [material] 材质 + * @param {String} [material.color] 材质颜色 + * @param {LineStylePattern3D} [pattern] 模式 + * @param {Number} [size=1] 宽度,默认1像素 + */ +export default class LineSymbol3DLayer extends Symbol3DLayer { + constructor(option) { + super(option); + var option = option ? option : {}; + const { cap = Cap.butt, join = Join.miter } = option; + const { marker = undefined, material = undefined, pattern = undefined } = option; + const { size = 1 } = option; + + this.type = 'line'; + + this.cap = cap; + this.join = join; + this.marker = marker; + this.material = material; + this.pattern = pattern; + this.size = size; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'line' } = json; + const { cap = Cap.butt, join = Join.miter } = option; + const { marker = undefined, material = undefined, pattern = undefined } = option; + const { size = 1 } = option; + + this.type = type; + + this.cap = cap; + this.join = join; + this.marker = marker; + this.material = material; + this.pattern = pattern; + this.size = size; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + cap: this.cap, + join: this.join, + marker: this.marker, + material: this.material, + pattern: this.pattern, + size: this.size + }; + } +} + +export { LineSymbol3DLayer }; +mapgis.symbols.LineSymbol3DLayer = LineSymbol3DLayer; diff --git a/src/service/base/symbols/LineSymbolMarker.js b/src/service/base/symbols/LineSymbolMarker.js new file mode 100644 index 000000000..2f8071ebe --- /dev/null +++ b/src/service/base/symbols/LineSymbolMarker.js @@ -0,0 +1,27 @@ +import { mapgis } from '../common/base'; + +import { LineMarkerStyle, LineMarkerPlacement } from './Enum'; + +/** + * 标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.LineSymbolMarker + * @classdesc 线符号标记 + * @param {String} [type = 'line-marker'] marker类型:只能是'line-marker' + * @param {String} [color = 'rgb(0,0,0)'] 线符号标记颜色,默认为'rgb(0,0,0)' + * @param {Number} [placement = "begin-end"] 线符号标记摆放位置,"begin"|"end"|"begin-end" + * @param {LineMarkerStyle} [style = 'arrow'] 线符号标记样式,可选值"arrow"|"circle"|"square"|"diamond"|"cross"|"x" + */ +export default class LineSymbolMarker { + constructor(option) { + var options = option ? option : {}; + const { color = 'rgb(0,0,0)', placement = LineMarkerPlacement.begin_end, style = LineMarkerStyle.arrow } = options; + this.type = 'line-marker'; + this.color = color; + this.placement = placement; + this.style = style; + } +} + +export { LineSymbolMarker }; +mapgis.symbols.LineSymbolMarker = LineSymbolMarker; diff --git a/src/service/base/symbols/MarkerSymbol.js b/src/service/base/symbols/MarkerSymbol.js new file mode 100644 index 000000000..8a0a5f229 --- /dev/null +++ b/src/service/base/symbols/MarkerSymbol.js @@ -0,0 +1,63 @@ +import { mapgis } from '../common/base'; + +import { Symbol } from './Symbol'; + +/** + * 标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PointStyle + * @classdesc 标记符号 + * @param {String} [type = 'simple-marker'] marker类型:可选"simple-marker"|"picture-marker" + * @param {Number} [angle = 0] 标记角度,默认为0 + * @param {Number} [xoffset = 0] 标记x偏移,默认为0像素 + * @param {Number} [yoffset = 0] 标记y偏移,默认为0像素 + */ +export default class MarkerSymbol extends Symbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { angle = 0.0, xoffset = 0, yoffset = 0 } = options; + this.type = 'simple-marker'; + this.angle = angle; + this.xoffset = xoffset; + this.yoffset = yoffset; + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'simple-marker', opacity = 1.0, color = '#FFFFFF' } = json; + const { angle = 0.0, xoffset = 0, yoffset = 0 } = json; + + // 父类属性Symbol.fromJSON + this.color = color; + this.opacity = opacity; + + // 自身属性 + this.type = type; + this.angle = angle; + this.xoffset = xoffset; + this.yoffset = yoffset; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + color: this.color, + opacity: this.opacity, + angle: this.angle, + xoffset: this.xoffset, + yoffset: this.yoffset + }; + } +} + +export { MarkerSymbol }; +mapgis.symbols.MarkerSymbol = MarkerSymbol; diff --git a/src/service/base/symbols/ObjectSymbol3DLayer.js b/src/service/base/symbols/ObjectSymbol3DLayer.js new file mode 100644 index 000000000..3a61a8bf9 --- /dev/null +++ b/src/service/base/symbols/ObjectSymbol3DLayer.js @@ -0,0 +1,118 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3DLayer from './Symbol3DLayer'; +import { Anchor } from './Enum'; + +/** + * 三维对象图层 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.ObjectSymbol3DLayer + * @classdesc 三维对象图层 + * @param {String} [type] 类型,只能是'object' + * @param {Anchor} [anchor='origin'] 锚点,可选值"center"|"top"|"bottom"|"origin"|"relative"。 + * 1. 当图元为球,立方,菱形时,origin在中心位置; + * 2. 当图元为圆柱、锥、四面体时,origin在底部; + * 3. 当图元为href时,origin为模型的原点; + * 4. 如果anchor设置为relative,通过anchorPosition辅助外包盒 + * @param {Object} [anchorPosition] 锚点偏移位置 {x:0,y:0,z:0} + * @param {Object} [castShadows=true] 阴影,默认激活 + * @param {Number} [depth=10] 深度或者南北直径,传undefined会基于模型重新计算 + * @param {Number} [heading] 偏航角,Z轴旋转角度 + * @param {Number} [height=10] 高度,传undefined会基于模型重新计算 + * @param {Object} [material] 材质 + * @param {String} [material.color='rgb(255,255,255)'] 材质-颜色,默认白色 + * @param {Object} [resource = { primitive: "sphere" }] 资源,默认{ primitive: "sphere" } + * @param {Object} [resource.primitive="sphere"] 资源-图元,使用内置的形状'sphere', 'cylinder', 'cube','cone', 'inverted-cone','diamond', 'tetrahedron' + * @param {String} [resource.href] 资源-引用,引用GLTF的路径URL/URI + * @param {Number} [roll] 滚转角,Y轴旋转角度 + * @param {Number} [tilt] 倾斜角,X轴旋转角度,对应pitch + * @param {Number} [width=10] 宽度或者东西直径,传undefined会基于模型重新计算 + */ +export default class ObjectSymbol3DLayer extends Symbol3DLayer { + constructor(option) { + super(option); + var option = option ? option : {}; + + const { anchor = Anchor.origin, anchorPosition = { x: 0, y: 0, z: 0 } } = option; + const { castShadows = true } = option; + const { material = { color: 'rgb(255,255,255)' } } = option; + const { resource = { primitive: 'sphere' } } = option; + const { heading, roll, tilt } = option; + const { depth = 10, height = 10, width = 10 } = option; + + this.type = 'object'; + + this.anchor = anchor; + this.anchorPosition = anchorPosition; + this.castShadows = castShadows; + this.height = height; + this.width = width; + this.depth = depth; + this.material = material; + this.resource = resource; + this.heading = heading; + this.roll = roll; + this.tilt = tilt; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'object' } = json; + const { anchor = Anchor.origin, anchorPosition = { x: 0, y: 0, z: 0 } } = json; + const { castShadows = true } = json; + const { material = { color: 'rgb(255,255,255)' } } = json; + const { resource = { primitive: 'sphere' } } = json; + const { heading, roll, tilt } = json; + const { depth = 10, height = 10, width = 10 } = json; + + this.type = type; + + this.anchor = anchor; + this.anchorPosition = anchorPosition; + this.castShadows = castShadows; + this.height = height; + this.width = width; + this.depth = depth; + this.material = material; + this.resource = resource; + this.heading = heading; + this.roll = roll; + this.tilt = tilt; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + anchor: this.anchor, + anchorPosition: this.anchorPosition, + castShadows: this.castShadows, + height: this.height, + width: this.width, + depth: this.depth, + material: this.material, + resource: this.resource, + heading: this.heading, + roll: this.roll, + tilt: this.tilt + }; + } +} + +export { ObjectSymbol3DLayer }; +mapgis.symbols.ObjectSymbol3DLayer = ObjectSymbol3DLayer; diff --git a/src/service/base/symbols/PathSymbol3DLayer.js b/src/service/base/symbols/PathSymbol3DLayer.js new file mode 100644 index 000000000..5e4055493 --- /dev/null +++ b/src/service/base/symbols/PathSymbol3DLayer.js @@ -0,0 +1,98 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3DLayer from './Symbol3DLayer'; +import { Anchor, Cap, Join } from './Enum'; + +/** + * 三维线图层 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PathSymbol3DLayer + * @classdesc 三维线图层 + * @param {String} [type] 类型,只能是'path' + * @param {Anchor} [anchor='center'] 锚点,可选值"center"|"bottom"|"top" + * @param {Cap} [cap = 'butt'] 线头类型,默认为平头butt, 可选"butt" 平头 |"round" 圆头 |"square" 方头|"none" 无 + * @param {Object} [castShadows=true] 阴影,默认激活 + * @param {Number} [height] 高度 + * @param {Join} [join = 'miter'] 拐角类型,可选"miter" 尖角 |"round" 圆角 |"bevel" 平角 + * @param {Object} [material] 材质 + * @param {String} [material.color='rgb(255,255,255)'] 材质-颜色,默认白色 + * @param {String} [profile="circle"] 横截面,可选"circle"|"quad" + * @param {String} [profileRotation="all"] 横截面旋转角度,可选"heading"|"all" + * @param {Number} [width=10] 宽度或者东西直径,传undefined会基于模型重新计算 + */ +export default class PathSymbol3DLayer extends Symbol3DLayer { + constructor(option) { + super(option); + var option = option ? option : {}; + const { anchor = Anchor.center, castShadows = true } = option; + const { cap = Cap.butt, join = Join.miter } = option; + const { height, width } = option; + const { material, profile, profileRotation } = option; + + this.type = 'path'; + this.anchor = anchor; + this.cap = cap; + this.castShadows = castShadows; + this.height = height; + this.join = join; + this.material = material; + this.profile = profile; + this.profileRotation = profileRotation; + this.width = width; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'path' } = json; + const { anchor = Anchor.center, castShadows = true } = json; + const { cap = Cap.butt, join = Join.miter } = json; + const { height, width } = json; + const { material, profile, profileRotation } = json; + + this.type = type; + + this.anchor = anchor; + this.cap = cap; + this.castShadows = castShadows; + this.height = height; + this.join = join; + this.material = material; + this.profile = profile; + this.profileRotation = profileRotation; + this.width = width; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + anchor: this.anchor, + cap: this.cap, + castShadows: this.castShadows, + height: this.height, + join: this.join, + material: this.material, + profile: this.profile, + profileRotation: this.profileRotation, + width: this.width + }; + } +} + +export { PathSymbol3DLayer }; +mapgis.symbols.PathSymbol3DLayer = PathSymbol3DLayer; diff --git a/src/service/base/symbols/PictureFillSymbol.js b/src/service/base/symbols/PictureFillSymbol.js new file mode 100644 index 000000000..f6e69436b --- /dev/null +++ b/src/service/base/symbols/PictureFillSymbol.js @@ -0,0 +1,96 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import { FillSymbol } from './FillSymbol'; +import SimpleLineSymbol from './SimpleLineSymbol'; + +/** + * 简单标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PointStyle + * @classdesc 图片填充符号 + * @param {String} [type = 'picture-fill'] 简单填充符号类型,只能是picture-fill + * @param {Number} [height=12] 简单填充符号颜色,默认为12 + * @param {SimpleLineSymbol} [outline] 简单填充符号轮廓 + * @param {String} [url] 简单填充符号颜色 + * @param {Number} [width=12] 简单填充符号颜色,默认为12 + * @param {Number} [xoffset=0] 简单填充符号颜色,默认为0 + * @param {Number} [xscale=1] 简单填充符号颜色,默认为1 + * @param {Number} [yoffset=0] 简单填充符号颜色,默认为0 + * @param {Number} [yscale=1] 简单填充符号颜色,默认为1 + */ +export default class PictureFillSymbol extends FillSymbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { outline = undefined, height = 12, width = 12 } = options; + const { xoffset = 0, xscale = 1, yoffset = 0, yscale = 1 } = options; + + this.type = 'picture-fill'; + + this.height = height; + this.outline = outline; + this.url = url; + this.width = width; + this.xoffset = xoffset; + this.xscale = xscale; + this.yoffset = yoffset; + this.yscale = yscale; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'picture-fill' } = json; + const { opacity = 1 } = json; + const { outline = undefined, height = 12, width = 12 } = json; + const { xoffset = 0, xscale = 1, yoffset = 0, yscale = 1 } = json; + + // 基类属性Symbol.fromJSON + this.opacity = opacity; + + // 父类属性MarkerSymbol.fromJSON + this.outline = outline; + + // 自身属性 + this.type = type; + this.height = height; + this.url = url; + this.width = width; + this.xoffset = xoffset; + this.xscale = xscale; + this.yoffset = yoffset; + this.yscale = yscale; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + height: this.height, + outline: this.outline, + url: this.url, + width: this.width, + xoffset: this.xoffset, + xscale: this.xscale, + yoffset: this.yoffset, + yscale: this.yscale + }; + } +} + +export { PictureFillSymbol }; +mapgis.symbols.PictureFillSymbol = PictureFillSymbol; diff --git a/src/service/base/symbols/PictureMarkerSymbol.js b/src/service/base/symbols/PictureMarkerSymbol.js new file mode 100644 index 000000000..9bcdc03bf --- /dev/null +++ b/src/service/base/symbols/PictureMarkerSymbol.js @@ -0,0 +1,86 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import MarkerSymbol from './MarkerSymbol'; + +/** + * 简单标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PictureMarkerSymbol + * @classdesc 图片标记符号 + * @param {String} [type = 'picture-marker'] 图片标记符号类型,只能是picture-marker + * @param {Number} [angle = 0] 图片标记符号角度,默认为0 + * @param {Number} [height = 12] 图片标记符号高度,默认为12 + * @param {String} [url] 图片标记符号url路径 + * @param {Number} [width = 12] 图片标记符号宽度,默认为12像素 + * @param {Number} [xoffset = 0] 图片标记符号x偏移,默认为0像素 + * @param {Number} [yoffset = 0] 图片标记符号y偏移,默认为0像素 + */ +export default class PictureMarkerSymbol extends MarkerSymbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { angle = 0, height = 12, url = undefined, width = 12 } = options; + const { xoffset = 0, yoffset = 0 } = options; + this.type = 'picture-marker'; + + this.angle = angle; + this.height = height; + this.url = url; + this.width = width; + this.xoffset = xoffset; + this.yoffset = yoffset; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'picture-marker' } = json; + const { opacity = 1.0 } = json; + const { angle = 0, height = 12, url = undefined, width = 12 } = options; + const { xoffset = 0, yoffset = 0 } = options; + + // 基类属性Symbol.fromJSON + this.opacity = opacity; + + // 父类属性MarkerSymbol.fromJSON + this.angle = angle; + this.xoffset = xoffset; + this.yoffset = yoffset; + + // 自身属性 + this.type = type; + this.height = height; + this.width = width; + this.url = url; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + angle: this.angle, + height: this.height, + url: this.url, + width: this.width, + xoffset: this.xoffset, + yoffset: this.yoffset + }; + } +} + +export { PictureMarkerSymbol }; +mapgis.symbols.PictureMarkerSymbol = PictureMarkerSymbol; diff --git a/src/service/base/symbols/PointSymbol3D.js b/src/service/base/symbols/PointSymbol3D.js new file mode 100644 index 000000000..bec379de6 --- /dev/null +++ b/src/service/base/symbols/PointSymbol3D.js @@ -0,0 +1,81 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3D from './Symbol3D'; + +/** + * 三维点符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.Symbol3D + * @classdesc 三维点符号 + * @param {String} [type] 类型,只能是'point-3d' + * @param {String} [callout] 插图线,连接点与地形高度之间的示意线 + * @param {Object} [styleOrigin] 样式起源,{ name: '', [styleName|styleUrl] :'' } + * @param {Object} [styleOrigin.name] 样式起源-名称,表示引用样式的名称 + * @param {Object} [styleOrigin.styleName] 样式起源-样式名称,表示默认的内置的MapGIS的样式 + * @param {Object} [styleOrigin.styleUrl] 样式起源-样式地址,表示样式Url路径 + * @param {Array} [symbolLayers] 图层集合,用来可视化要素和制图综合 + * @param {Object} [verticalOffset] 垂直偏移策略 + * @param {Object} [verticalOffset.screenLength ] 垂直偏移策略-屏幕高度 + * @param {Object} [verticalOffset.minWorldLength ] 垂直偏移策略-最小世界高度 + * @param {Object} [verticalOffset.maxWorldLength ] 垂直偏移策略-最大世界高度 + */ +export default class PointSymbol3D extends Symbol3D { + constructor(option) { + super(option); + var options = option ? option : {}; + const { callout = undefined } = options; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = options; + const { symbolLayers, verticalOffset } = options; + + this.type = 'point-3d'; + + this.callout = callout; + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + this.verticalOffset = verticalOffset; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'point-3d' } = json; + const { callout = undefined } = json; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = json; + const { symbolLayers, verticalOffset } = json; + + this.type = type; + + this.callout = callout; + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + this.verticalOffset = verticalOffset; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + callout: this.callout, + styleOrigin: this.styleOrigin, + symbolLayers: this.symbolLayers, + verticalOffset: this.verticalOffset + }; + } +} + +export { PointSymbol3D }; +mapgis.symbols.PointSymbol3D = PointSymbol3D; diff --git a/src/service/base/symbols/PolygonSymbol3D.js b/src/service/base/symbols/PolygonSymbol3D.js new file mode 100644 index 000000000..9aba83967 --- /dev/null +++ b/src/service/base/symbols/PolygonSymbol3D.js @@ -0,0 +1,68 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3D from './Symbol3D'; + +/** + * 三维点符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PolygonSymbol3D + * @classdesc 三维点符号 + * @param {String} [type] 类型,只能是'polygon-3d' + * @param {Object} [styleOrigin] 样式起源,{ name: '', [styleName|styleUrl] :'' } + * @param {Object} [styleOrigin.name] 样式起源-名称,表示引用样式的名称 + * @param {Object} [styleOrigin.styleName] 样式起源-样式名称,表示默认的内置的MapGIS的样式 + * @param {Object} [styleOrigin.styleUrl] 样式起源-样式地址,表示样式Url路径 + * @param {Array} [symbolLayers] 图层集合,用来可视化要素和制图综合 + */ +export default class PolygonSymbol3D extends Symbol3D { + constructor(option) { + super(option); + var options = option ? option : {}; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = options; + const { symbolLayers } = options; + + this.type = 'polygon-3d'; + + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'polygon-3d' } = json; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = json; + const { symbolLayers } = json; + + this.type = type; + + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + styleOrigin: this.styleOrigin, + symbolLayers: this.symbolLayers + }; + } +} + +export { PolygonSymbol3D }; +mapgis.symbols.PolygonSymbol3D = PolygonSymbol3D; diff --git a/src/service/base/symbols/SimpleFillSymbol.js b/src/service/base/symbols/SimpleFillSymbol.js new file mode 100644 index 000000000..4ea0cb732 --- /dev/null +++ b/src/service/base/symbols/SimpleFillSymbol.js @@ -0,0 +1,75 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import { FillSymbol } from './FillSymbol'; +import SimpleLineSymbol from './SimpleLineSymbol'; +import { FillStyle } from './Enum'; + +/** + * 简单标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PointStyle + * @classdesc 简单填充符号 + * @param {String} [type = 'simple-fill'] 简单填充符号类型,只能是simple-line + * @param {String} [color = 'rgba(0, 0, 0, 0.25)'] 简单填充符号颜色,默认为'rgba(0, 0, 0, 0.25)' + * @param {SimpleLineSymbol} [outline] 简单填充符号轮廓 + * @param {FillStyle} [style = 'solid'] 简单填充符号样式类型,可选"backward-diagonal"|"cross"|"diagonal-cross"|"forward-diagonal"|"horizontal"|"none"|"solid"|"vertical" + */ +export default class SimpleFillSymbol extends FillSymbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { color = 'rgba(0, 0, 0, 0.25)', outline = undefined, style = FillStyle.solid } = options; + + this.type = 'simple-fill'; + + this.color = color; + this.outline = this.outline; + this.style = style; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'simple-marker' } = json; + const { opacity = 1 } = json; + const { color = 'rgba(0, 0, 0, 0.25)', outline = undefined, style = FillStyle.solid } = options; + + // 基类属性Symbol.fromJSON + this.opacity = opacity; + + // 父类属性MarkerSymbol.fromJSON + this.outline = outline; + + // 自身属性 + this.type = type; + this.color = color; + this.style = style; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + color: this.color, + outline: this.outline, + style: this.style + }; + } +} + +export { SimpleFillSymbol }; +mapgis.symbols.SimpleFillSymbol = SimpleFillSymbol; diff --git a/src/service/base/symbols/SimpleLineSymbol.js b/src/service/base/symbols/SimpleLineSymbol.js new file mode 100644 index 000000000..cfdf5376b --- /dev/null +++ b/src/service/base/symbols/SimpleLineSymbol.js @@ -0,0 +1,92 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import { LineSymbol } from './LineSymbol'; +import { Cap, Join, LineStyle } from './Enum'; + +/** + * 简单标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PointStyle + * @classdesc 简单线符号 + * @param {String} [type = 'simple-line'] 类型,只能是simple-line + * @param {Cap} [cap = 'round'] 线头类型,默认为圆头round, 可选"butt" 平头 |"round" 圆头 |"square" 方头 + * @param {String} [color = 'rgb(0, 0, 0)'] 符号颜色,默认为'rgb(0, 0, 0)' + * @param {Join} [join = 'bevel'] 拐角类型,可选"miter" 尖角 |"round" 圆角 |"bevel" 平角 + * @param {LineSymbolMarker} [marker] 标注类型 + * @param {Number} [miterLimit = 2] 最大挂角宽度,默认为2 + * @param {LineStyle} [style = 'solid'] 样式类型,可选"dash"|"dash-dot"|"dot"|"long-dash"|"long-dash-dot"|"long-dash-dot-dot"|"none"|"short-dash"|"short-dash-dot"|"short-dash-dot-dot"|"short-dot"|"solid" + * @param {Number} [width = 0.75] 宽度,默认为0.75 + */ +export default class SimpleLineSymbol extends LineSymbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { cap = Cap.round, color = 'rgb(0, 0, 0)', join = Join.bevel } = options; + const { marker = undefined, miterLimit = 2, style = LineStyle.solid } = options; + const { width = 0.75 } = options; + + this.type = 'simple-line'; + + this.cap = cap; + this.color = color; + this.join = join; + this.marker = marker; + this.miterLimit = miterLimit; + this.style = style; + this.width = width; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'simple-line' } = json; + const { cap = Cap.round, color = 'rgb(0, 0, 0)', join = Join.bevel } = json; + const { marker = undefined, miterLimit = 2, style = LineStyle.solid } = json; + const { width = 0.75 } = json; + + // 基类属性Symbol.fromJSON + this.opacity = opacity; + + // 父类属性MarkerSymbol.fromJSON + this.angle = angle; + this.xoffset = xoffset; + this.yoffset = yoffset; + + // 自身属性 + this.type = type; + this.color = color; + this.outline = outline; + this.path = path; + this.size = size; + this.style = style; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + color: this.color, + opacity: this.opacity, + angle: this.angle, + xoffset: this.xoffset, + yoffset: this.yoffset + }; + } +} + +export { SimpleLineSymbol }; +mapgis.symbols.SimpleLineSymbol = SimpleLineSymbol; diff --git a/src/service/base/symbols/SimpleMarkerSymbol.js b/src/service/base/symbols/SimpleMarkerSymbol.js new file mode 100644 index 000000000..995f33e04 --- /dev/null +++ b/src/service/base/symbols/SimpleMarkerSymbol.js @@ -0,0 +1,95 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import MarkerSymbol from './MarkerSymbol'; +import SimpleLineSymbol from './SimpleLineSymbol'; +import { MarkStyle } from './Enum'; + +/** + * 简单标记符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PointStyle + * @classdesc 简单标记符号 + * @param {String} [type = 'simple-marker'] marker类型,只能是simple-marker + * @param {Number} [angle = 0] 标记角度,默认为0 + * @param {String} [color = 0] 简单标记颜色,默认为'rgba(255, 255, 255, 0.25)' + * @param {SimpleLineSymbol} [outline] 简单标记轮廓线符号 + * @param {Number} [path] 简单标记SVG路径 + * @param {Number} [size = 12] 简单标记大小,默认为12像素 + * @param {MarkStyle} [style = 'circle'] 简单标记样式类型,可选"circle"|"square"|"cross"|"x"|"diamond"|"triangle"|"path" + * @param {Number} [xoffset = 0] 简单标记x偏移,默认为0像素 + * @param {Number} [yoffset = 0] 简单标记y偏移,默认为0像素 + */ +export default class SimpleMarkerSymbol extends MarkerSymbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { angle = 0.0, color = 'rgba(255, 255, 255, 0.25)', outline = undefined } = options; + const { path = undefined, size = 12, style = MarkStyle.circle } = options; + const { xoffset = 0, yoffset = 0 } = options; + this.type = 'simple-marker'; + + this.angle = angle; + this.color = color; + this.outline = outline ? new SimpleLineSymbol(outline) : undefined; + this.path = path; + this.size = size; + this.style = style; + this.xoffset = xoffset; + this.yoffset = yoffset; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'simple-marker' } = json; + const { opacity = 1.0 } = json; + const { angle = 0.0, color = 'rgba(255, 255, 255, 0.25)', outline = 0 } = json; + const { path = undefined, size = 12, style = MarkStyle.circle } = json; + const { xoffset = 0, yoffset = 0 } = json; + + // 基类属性Symbol.fromJSON + this.opacity = opacity; + + // 父类属性MarkerSymbol.fromJSON + this.angle = angle; + this.xoffset = xoffset; + this.yoffset = yoffset; + + // 自身属性 + this.type = type; + this.color = color; + this.outline = outline; + this.path = path; + this.size = size; + this.style = style; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + color: this.color, + opacity: this.opacity, + angle: this.angle, + xoffset: this.xoffset, + yoffset: this.yoffset + }; + } +} + +export { SimpleMarkerSymbol }; +mapgis.symbols.SimpleMarkerSymbol = SimpleMarkerSymbol; diff --git a/src/service/base/symbols/Symbol.js b/src/service/base/symbols/Symbol.js new file mode 100644 index 000000000..bb3071665 --- /dev/null +++ b/src/service/base/symbols/Symbol.js @@ -0,0 +1,46 @@ +import { mapgis } from '../common/base'; + +/** + * 符号基类 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.Symbol + * @classdesc 符号基类 + * @param {Number} [opacity = 1] 透明度,0~1之间的值,默认为1,不透明 + * @param {String} [color = #FFFFFF] 颜色,十六进制或RGB,默认为#FFFFFF,白色 + */ +export default class Symbol { + constructor(option) { + var options = option ? option : {}; + const { opacity = 1, color = '#FFFFFF' } = options; + this.type = undefined; + this.opacity = opacity; + this.color = color; + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'unkown', opacity = 1, color = '#FFFFFF' } = json; + this.type = type; + this.color = color; + this.opacity = opacity; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + color: this.color, + opacity: this.opacity + }; + } +} + +export { Symbol }; +mapgis.symbols.Symbol = Symbol; diff --git a/src/service/base/symbols/Symbol3D.js b/src/service/base/symbols/Symbol3D.js new file mode 100644 index 000000000..cbbd05be9 --- /dev/null +++ b/src/service/base/symbols/Symbol3D.js @@ -0,0 +1,54 @@ +import { mapgis } from '../common/base'; + +import Symbol from './Symbol'; + +/** + * 三维符号基类 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.Symbol3D + * @classdesc 三维符号基类 + * @param {String} [type] 简单填充符号类型,可选 point-3d"|"line-3d"|"polygon-3d"|"mesh-3d"|"label-3d" + * @param {Object} [styleOrigin] 三维符号样式起源,{ name: '', [styleName|styleUrl] :'' } + * @param {Object} [styleOrigin.name] 三维符号样式起源-名称,表示引用样式的名称 + * @param {Object} [styleOrigin.styleName] 三维符号样式起源-样式名称,表示默认的内置的MapGIS的样式 + * @param {Object} [styleOrigin.styleUrl] 三维符号样式起源-样式地址,表示样式Url路径 + * @param {Array} [symbolLayers] 三维符号图层集合,用来可视化要素和制图综合 + */ +export default class Symbol3D extends Symbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { styleOrigin = { name: 'mapgis-style', styleName: 'styleName' } } = options; + const { symbolLayers } = options; + this.type = undefined; + this.styleOrigin = styleOrigin; + this.symbolLayers = symbolLayers; + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'unkown', opacity = 1, color = '#FFFFFF' } = json; + this.type = type; + this.color = color; + this.opacity = opacity; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + color: this.color, + opacity: this.opacity + }; + } +} + +export { Symbol }; +mapgis.symbols.Symbol = Symbol; diff --git a/src/service/base/symbols/Symbol3DLayer.js b/src/service/base/symbols/Symbol3DLayer.js new file mode 100644 index 000000000..5caf16890 --- /dev/null +++ b/src/service/base/symbols/Symbol3DLayer.js @@ -0,0 +1,38 @@ +import { mapgis } from '../common/base'; + +/** + * 三维符号图层 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.Symbol3DLayer + * @classdesc 三维符号图层 + * @param {String} [type] 简单填充符号类型,可选 "icon"|"object"|"line"|"path"|"fill"|"water"|"extrude"|"text" + */ +export default class Symbol3DLayer { + constructor(option) { + var option = option ? option : {}; + this.type = undefined; + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'unkown' } = json; + this.type = type; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type + }; + } +} + +export { Symbol3DLayer }; +mapgis.symbols.Symbol3DLayer = Symbol3DLayer; diff --git a/src/service/base/symbols/TextSymbol.js b/src/service/base/symbols/TextSymbol.js new file mode 100644 index 000000000..3b872498c --- /dev/null +++ b/src/service/base/symbols/TextSymbol.js @@ -0,0 +1,129 @@ +import { mapgis } from '../common/base'; + +import { HorizontalAlignment, VerticalAlignment } from './Enum'; +import Symbol from './Symbol'; +import Font from './Font'; + +/** + * 文本符号 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.PointStyle + * @classdesc 文本符号 + * @param {String} [type = 'text'] marker类型:只能是"text" + * @param {Number} [angle = 0] 角度 + * @param {String} [backgroundColor] 背景颜色 + * @param {String} [borderLineColor] 边界颜色 + * @param {Number} [borderLineSize] 边界宽度 + * @param {String} [color='rgb(0,0,0)'] 颜色 + * @param {Font} [font] 字体 + * @param {String} [haloColor] 光晕颜色 + * @param {Number} [haloSize] 光晕大小 + * @param {HorizontalAlignment} [horizontalAlignment='center'] 水平方向,可选"left"|"right"|"center" + * @param {Boolean} [kerning=true] 空格间距 + * @param {Number} [lineHeight=1.0] 行高 + * @param {Number} [lineWidth=192] 行宽 + * @param {Boolean} [rotated=false] 是否旋转 + * @param {String} [text] 显示内容 + * @param {VerticalAlignment} [verticalAlignment='baseline'] 垂直对齐,可选"baseline"|"top"|"middle"|"bottom" + * @param {Number} [xoffset=0] x偏移 + * @param {Number} [yoffset=0] y偏移 + */ +export default class TextSymbol extends Symbol { + constructor(option) { + super(option); + var options = option ? option : {}; + const { angle = 0, backgroundColor, borderLineColor, borderLineSize } = options; + const { color = 'rgb(0,0,0)', font, haloColor, haloSize } = options; + const { horizontalAlignment = HorizontalAlignment.center, verticalAlignment = VerticalAlignment.baseline } = options; + const { kerning = true, lineHeight = 1.0, lineWidth = 192, rotated = false } = options; + const { text, xoffset = 0, yoffset = 0 } = options; + + this.type = 'text'; + this.angle = angle; + this.backgroundColor = backgroundColor; + this.borderLineColor = borderLineColor; + this.borderLineSize = borderLineSize; + this.color = color; + this.font = font ? new Font(font) : undefined; + this.haloColor = haloColor; + this.haloSize = haloSize; + this.horizontalAlignment = horizontalAlignment; + this.kerning = kerning; + this.lineHeight = lineHeight; + this.lineWidth = lineWidth; + this.rotated = rotated; + this.text = text; + this.verticalAlignment = verticalAlignment; + this.xoffset = xoffset; + this.yoffset = yoffset; + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { opacity = 1.0 } = json; + const { type = 'text' } = json; + const { angle = 0, backgroundColor, borderLineColor, borderLineSize } = json; + const { color = 'rgb(0,0,0)', font, haloColor, haloSize } = json; + const { horizontalAlignment = HorizontalAlignment.center, verticalAlignment = VerticalAlignment.baseline } = json; + const { kerning = true, lineHeight = 1.0, lineWidth = 192, rotated = false } = json; + const { text, xoffset = 0, yoffset = 0 } = json; + + // 父类属性Symbol.fromJSON + this.opacity = opacity; + + // 自身属性 + this.type = type; + this.angle = angle; + this.backgroundColor = backgroundColor; + this.borderLineColor = borderLineColor; + this.borderLineSize = borderLineSize; + this.color = color; + this.font = font; + this.haloColor = haloColor; + this.haloSize = haloSize; + this.horizontalAlignment = horizontalAlignment; + this.kerning = kerning; + this.lineHeight = lineHeight; + this.lineWidth = lineWidth; + this.rotated = rotated; + this.text = text; + this.verticalAlignment = verticalAlignment; + this.xoffset = xoffset; + this.yoffset = yoffset; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + type: this.type, + angle: this.angle, + backgroundColor: this.backgroundColor, + borderLineColor: this.borderLineColor, + borderLineSize: this.borderLineSize, + color: this.color, + font: this.font, + haloColor: this.haloColor, + haloSize: this.haloSize, + horizontalAlignment: this.horizontalAlignment, + kerning: this.kerning, + lineHeight: this.lineHeight, + lineWidth: this.lineWidth, + rotated: this.rotated, + text: this.text, + verticalAlignment: this.verticalAlignment, + xoffset: this.xoffset, + yoffset: this.yoffset + }; + } +} + +export { TextSymbol }; +mapgis.symbols.TextSymbol = TextSymbol; diff --git a/src/service/base/symbols/TextSymbol3DLayer.js b/src/service/base/symbols/TextSymbol3DLayer.js new file mode 100644 index 000000000..bbdf00327 --- /dev/null +++ b/src/service/base/symbols/TextSymbol3DLayer.js @@ -0,0 +1,102 @@ +import { mapgis } from '../common/base'; +import { cloneDeep } from 'lodash'; + +import Symbol3DLayer from './Symbol3DLayer'; +import { HorizontalAlignment, VerticalAlignment } from './Enum'; + +/** + * 三维文本图层 + * @author 基础平台-潘卓然 + * @class mapgis.symbols.TextSymbol3DLayer + * @classdesc 三维文本图层 + * @param {String} [type] 类型,只能是'text' + * @param {Object} [background] 背景 + * @param {String} [background.color] 背景-颜色 + * @param {Font} [font] 字体 + * @param {Object} [halo] 光晕 + * @param {Object} [halo.color = 'rgb(0,0,0)'] 光晕颜色,默认'rgb(0,0,0)' + * @param {Object} [halo.size = 0] 光晕大小,默认0 + * @param {HorizontalAlignment} [horizontalAlignment='center'] 水平方向,可选"left"|"right"|"center" + * @param {Number} [lineHeight=1.0] 行高 + * @param {Object} [material] 材质 + * @param {Object} [material.color='rgb(255,255,255)'] 材质-颜色,默认白色 + * @param {Number} [size = 9] 大小 + * @param {String} [text] 显示内容 + * @param {VerticalAlignment} [verticalAlignment='baseline'] 垂直对齐,可选"baseline"|"top"|"middle"|"bottom" + */ +export default class TextSymbol3DLayer extends Symbol3DLayer { + constructor(option) { + super(option); + var option = option ? option : {}; + const { background = undefined, font, halo = { color: 'rgb(0,0,0)', size: 0 } } = option; + const { horizontalAlignment = HorizontalAlignment.center, verticalAlignment = VerticalAlignment.baseline } = option; + const { lineHeight = 1.0, material = { color: 'rgb(255,255,255)' }, size = 9 } = option; + const { text } = option; + + this.type = 'text'; + + this.background = background; + this.font = font; + this.halo = halo; + this.horizontalAlignment = horizontalAlignment; + this.lineHeight = lineHeight; + this.material = material; + this.size = size; + this.text = text; + this.verticalAlignment = verticalAlignment; + } + + /** + * @description 克隆函数 + */ + clone() { + return cloneDeep(this); + } + + /** + * @description 将JSON格式的符号转换为JS对象 + * @param {Object} json 符号的实例化JSON + */ + fromJSON(json) { + json = json || {}; + const { type = 'text' } = json; + const { background = undefined, font, halo = { color: 'rgb(0,0,0)', size: 0 } } = json; + const { horizontalAlignment = HorizontalAlignment.center, verticalAlignment = VerticalAlignment.baseline } = json; + const { lineHeight = 1.0, material = { color: 'rgb(255,255,255)' }, size = 9 } = json; + const { text } = option; + + this.type = undefined; + + this.background = background; + this.font = font; + this.halo = halo; + this.horizontalAlignment = horizontalAlignment; + this.lineHeight = lineHeight; + this.material = material; + this.size = size; + this.text = text; + this.verticalAlignment = verticalAlignment; + } + + /** + * 将JS对象转换为JSON格式 + * @returns {Object} 符号的实例化JSON + */ + toJSON() { + return { + type: this.type, + background: this.background, + font: this.font, + halo: this.halo, + horizontalAlignment: this.horizontalAlignment, + lineHeight: this.lineHeight, + material: this.material, + size: this.size, + text: this.text, + verticalAlignment: this.verticalAlignment + }; + } +} + +export { TextSymbol3DLayer }; +mapgis.symbols.TextSymbol3DLayer = TextSymbol3DLayer; diff --git a/src/service/base/symbols/index.js b/src/service/base/symbols/index.js new file mode 100644 index 000000000..6d1255d90 --- /dev/null +++ b/src/service/base/symbols/index.js @@ -0,0 +1,75 @@ +// 枚举 +import { MarkStyle, LineStyle, LineMarkerStyle, FillStyle } from './Enum'; +import { FontStyle, FontWeight, FontDecoration } from './Enum'; +import { HorizontalAlignment, VerticalAlignment } from './Enum'; +import { Cap, Join, LineMarkerPlacement } from './Enum'; +import { Anchor, Align, TextPlacement } from './Enum'; + +// 原子级符号 +import Symbol from './Symbol'; +import Symbol3D from './Symbol3D'; +import Symbol3DLayer from './Symbol3DLayer'; +import Font from './Font'; + +// 二维符号 +import MarkerSymbol from './MarkerSymbol'; +import LineSymbol from './LineSymbol'; +import FillSymbol from './FillSymbol'; +import TextSymbol from './TextSymbol'; +import PictureMarkerSymbol from './PictureMarkerSymbol'; +import SimpleMarkerSymbol from './SimpleMarkerSymbol'; +import SimpleLineSymbol from './SimpleLineSymbol'; +import SimpleFillSymbol from './SimpleFillSymbol'; +import PictureFillSymbol from './PictureFillSymbol'; +import LineSymbolMarker from './LineSymbolMarker'; + +// 三维符号 +import PointSymbol3D from './PointSymbol3D'; +import LineSymbol3D from './LineSymbol3D'; +import PolygonSymbol3D from './PolygonSymbol3D'; +import LabelSymbol3D from './LabelSymbol3D'; +import IconSymbol3DLayer from './IconSymbol3DLayer'; +import ObjectSymbol3DLayer from './ObjectSymbol3DLayer'; +import LineSymbol3DLayer from './LineSymbol3DLayer'; +import PathSymbol3DLayer from './PathSymbol3DLayer'; +import FillSymbol3DLayer from './FillSymbol3DLayer'; +import ExtrudeSymbol3DLayer from './ExtrudeSymbol3DLayer'; +import TextSymbol3DLayer from './TextSymbol3DLayer'; + +// 枚举 +export { MarkStyle, LineStyle, LineMarkerStyle, FillStyle }; +export { FontStyle, FontWeight, FontDecoration }; +export { HorizontalAlignment, VerticalAlignment }; +export { Cap, Join, LineMarkerPlacement }; +export { Anchor, Align, TextPlacement }; + +// 原子级符号 +export { Symbol }; +export { Symbol3D }; +export { Symbol3DLayer }; +export { Font }; + +// 二维符号 +export { MarkerSymbol }; +export { LineSymbol }; +export { FillSymbol }; +export { TextSymbol }; +export { PictureMarkerSymbol }; +export { SimpleMarkerSymbol }; +export { SimpleLineSymbol }; +export { SimpleFillSymbol }; +export { PictureFillSymbol }; +export { LineSymbolMarker }; + +// 三维符号 +export { PointSymbol3D }; +export { LineSymbol3D }; +export { PolygonSymbol3D }; +export { LabelSymbol3D }; +export { IconSymbol3DLayer }; +export { ObjectSymbol3DLayer }; +export { LineSymbol3DLayer }; +export { PathSymbol3DLayer }; +export { FillSymbol3DLayer }; +export { ExtrudeSymbol3DLayer }; +export { TextSymbol3DLayer }; diff --git a/src/service/baseserver/CommonServiceBase.js b/src/service/baseserver/CommonServiceBase.js index 7cb2fbcf2..2e5857a35 100644 --- a/src/service/baseserver/CommonServiceBase.js +++ b/src/service/baseserver/CommonServiceBase.js @@ -218,7 +218,7 @@ class CommonServiceBase { serviceProcessFailed(result) { result = transformResult(result); var error = result; - this.events.triggerEvent('processFailed', { error: error }); + this.events.triggerEvent('processFailed', { result: error }); } _commit(options) { @@ -298,9 +298,9 @@ class CommonServiceBase { } ); } else { - return new Promise( + return new Promise( (resolve) => { - // console.log('【服务】【基础服务】【抽象类Fetch异常信息:4xx/5xx-resoleve】'); + // console.log('【服务】【基础服务】【抽象类Fetch异常信息:4xx/5xx-resoleve】'); check().then(function (text) { // console.log('【服务】【基础服务】【抽象类Fetch异常信息:4xx/5xx】', text); if (!text) return; diff --git a/src/service/baseserver/FetchRequest.js b/src/service/baseserver/FetchRequest.js index dcb80bf71..73529ba53 100644 --- a/src/service/baseserver/FetchRequest.js +++ b/src/service/baseserver/FetchRequest.js @@ -1,7 +1,5 @@ -import { extend } from "../common/Util"; -import "./PromisePolyfill" -import './fetch' - +import 'promise-polyfill/dist/polyfill'; +import 'fetch-ie8'; var fetch = window.fetch; @@ -210,4 +208,4 @@ var FetchRequest = Zondy.FetchRequest = { export { CORS,RequestTimeout,FetchRequest}; Zondy.Service.FetchRequest = FetchRequest; Zondy.Service.CORS = CORS; -Zondy.Service.RequestTimeout = RequestTimeout; \ No newline at end of file +Zondy.Service.RequestTimeout = RequestTimeout; diff --git a/src/service/baseserver/PromisePolyfill.js b/src/service/baseserver/PromisePolyfill.js deleted file mode 100644 index 06d089e12..000000000 --- a/src/service/baseserver/PromisePolyfill.js +++ /dev/null @@ -1,2 +0,0 @@ -import Promise from './promise-polyfill'; -window.Promise = Promise; \ No newline at end of file diff --git a/src/service/baseserver/promise-polyfill.js b/src/service/baseserver/promise-polyfill.js deleted file mode 100644 index 860e2e470..000000000 --- a/src/service/baseserver/promise-polyfill.js +++ /dev/null @@ -1,233 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.Promise = factory()); -}(this, (function () { 'use strict'; - -// Store setTimeout reference so promise-polyfill will be unaffected by -// other code modifying setTimeout (like sinon.useFakeTimers()) -var setTimeoutFunc = setTimeout; - -function noop() {} - -// Polyfill for Function.prototype.bind -function bind(fn, thisArg) { - return function() { - fn.apply(thisArg, arguments); - }; -} - -function handle(self, deferred) { - while (self._state === 3) { - self = self._value; - } - if (self._state === 0) { - self._deferreds.push(deferred); - return; - } - self._handled = true; - Promise._immediateFn(function() { - var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; - if (cb === null) { - (self._state === 1 ? resolve : reject)(deferred.promise, self._value); - return; - } - var ret; - try { - ret = cb(self._value); - } catch (e) { - reject(deferred.promise, e); - return; - } - resolve(deferred.promise, ret); - }); -} - -function resolve(self, newValue) { - try { - // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === self) - throw new TypeError('A promise cannot be resolved with itself.'); - if ( - newValue && - (typeof newValue === 'object' || typeof newValue === 'function') - ) { - var then = newValue.then; - if (newValue instanceof Promise) { - self._state = 3; - self._value = newValue; - finale(self); - return; - } else if (typeof then === 'function') { - doResolve(bind(then, newValue), self); - return; - } - } - self._state = 1; - self._value = newValue; - finale(self); - } catch (e) { - reject(self, e); - } -} - -function reject(self, newValue) { - self._state = 2; - self._value = newValue; - finale(self); -} - -function finale(self) { - if (self._state === 2 && self._deferreds.length === 0) { - Promise._immediateFn(function() { - if (!self._handled) { - Promise._unhandledRejectionFn(self._value); - } - }); - } - - for (var i = 0, len = self._deferreds.length; i < len; i++) { - handle(self, self._deferreds[i]); - } - self._deferreds = null; -} - -function Handler(onFulfilled, onRejected, promise) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.promise = promise; -} - -/** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ -function doResolve(fn, self) { - var done = false; - try { - fn( - function(value) { - if (done) return; - done = true; - resolve(self, value); - }, - function(reason) { - if (done) return; - done = true; - reject(self, reason); - } - ); - } catch (ex) { - if (done) return; - done = true; - reject(self, ex); - } -} - -function Promise(fn) { - if (!(this instanceof Promise)) - throw new TypeError('Promises must be constructed via new'); - if (typeof fn !== 'function') throw new TypeError('not a function'); - this._state = 0; - this._handled = false; - this._value = undefined; - this._deferreds = []; - - doResolve(fn, this); -} - -var _proto = Promise.prototype; -_proto.catch = function(onRejected) { - return this.then(null, onRejected); -}; - -_proto.then = function(onFulfilled, onRejected) { - var prom = new this.constructor(noop); - - handle(this, new Handler(onFulfilled, onRejected, prom)); - return prom; -}; - -Promise.all = function(arr) { - return new Promise(function(resolve, reject) { - if (!arr || typeof arr.length === 'undefined') - throw new TypeError('Promise.all accepts an array'); - var args = Array.prototype.slice.call(arr); - if (args.length === 0) return resolve([]); - var remaining = args.length; - - function res(i, val) { - try { - if (val && (typeof val === 'object' || typeof val === 'function')) { - var then = val.then; - if (typeof then === 'function') { - then.call( - val, - function(val) { - res(i, val); - }, - reject - ); - return; - } - } - args[i] = val; - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex); - } - } - - for (var i = 0; i < args.length; i++) { - res(i, args[i]); - } - }); -}; - -Promise.resolve = function(value) { - if (value && typeof value === 'object' && value.constructor === Promise) { - return value; - } - - return new Promise(function(resolve) { - resolve(value); - }); -}; - -Promise.reject = function(value) { - return new Promise(function(resolve, reject) { - reject(value); - }); -}; - -Promise.race = function(values) { - return new Promise(function(resolve, reject) { - for (var i = 0, len = values.length; i < len; i++) { - values[i].then(resolve, reject); - } - }); -}; - -// Use polyfill for setImmediate for performance gains -Promise._immediateFn = - (typeof setImmediate === 'function' && - function(fn) { - setImmediate(fn); - }) || - function(fn) { - setTimeoutFunc(fn, 0); - }; - -Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { - if (typeof console !== 'undefined' && console) { - console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console - } -}; - -return Promise; - -}))); \ No newline at end of file diff --git a/src/service/common/Base.js b/src/service/common/Base.js index 1b38b0552..e26a43b9c 100644 --- a/src/service/common/Base.js +++ b/src/service/common/Base.js @@ -1,4 +1,5 @@ -var Zondy = (window.Zondy = window.Zondy || {}); + +var Zondy = (window.Zondy = window.Zondy || {}); Zondy.Event = Zondy.Event || {}; @@ -54,9 +55,6 @@ Zondy.CloudDisk.Model = Zondy.CloudDisk.Model || {}; Zondy.IGServerX = Zondy.IGServerX || {}; Zondy.IGServerX.Vector = Zondy.IGServerX.Vector || {}; -export { Zondy }; +Zondy.Plot = Zondy.Plot || {}; -// 新版本的设计框架 -var mapgis = (window.mapgis = window.mapgis || {}); -mapgis.style = mapgis.style || {}; -export { mapgis }; +export { Zondy }; \ No newline at end of file diff --git a/src/service/common/CDisplayStyle.js b/src/service/common/CDisplayStyle.js index 11cfe5834..c83554e61 100644 --- a/src/service/common/CDisplayStyle.js +++ b/src/service/common/CDisplayStyle.js @@ -1,12 +1,6 @@ -import { - Zondy -} from './Base'; -import { - extend -} from "./Util"; -import { - DynShowStyle -} from './DynShowStyle' +import { Zondy } from './Base'; +import { extend } from './Util'; +import { DynShowStyle } from './DynShowStyle'; /** * 地图文档显示样式对象 @@ -26,11 +20,23 @@ import { * @param {Boolean} [option.ShowCoordPnt = false] 显示坐标点 * @param {Boolean} [option.ShowElemRect = false] 显示元素的外包矩形 * @param {Array} [option.ShowStyle = null] 图层显示参数 Array, {@link Zondy.Object.DynShowStyle} + * @param {Array} [option.LayerStyles = null] 图层显示参数 Map, {@link Zondy.Object.DynShowStyle} * @param {Boolean} [option.SymbleShow = false] 是否进行还原显示 * @see Zondy.Service.GetDocImageService + * @example + * var layerStyle = new Zondy.Object.DynShowStyle({ + Alpha: 50 + }); + var style = new Zondy.Object.CDisplayStyle({ + LayerStyles: { + 0: layerStyle, + 1: layerStyle, + '2-0': layerStyle + } + }); */ var CDisplayStyle = function (option) { - var options = (option !== undefined) ? option : {}; + var options = option !== undefined ? option : {}; extend(this, options); /** @@ -40,7 +46,7 @@ var CDisplayStyle = function (option) { * @description 注记符号大小固定 * @default false */ - this.AnnSizeFixed = (options.AnnSizeFixed !== undefined) ? options.AnnSizeFixed : false; + this.AnnSizeFixed = options.AnnSizeFixed !== undefined ? options.AnnSizeFixed : false; /** * @private @@ -49,7 +55,7 @@ var CDisplayStyle = function (option) { * @description 图像质量可选值为:1(低)、2(中)、3(高) * @default 0 */ - this.DriverQuality = (options.DriverQuality !== undefined) ? options.DriverQuality : 0; + this.DriverQuality = options.DriverQuality !== undefined ? options.DriverQuality : 0; /** * @private @@ -58,7 +64,7 @@ var CDisplayStyle = function (option) { * @description 是否动态投影 * @default false */ - this.DynProjFlag = (options.DynProjFlag !== undefined) ? options.DynProjFlag : false; + this.DynProjFlag = options.DynProjFlag !== undefined ? options.DynProjFlag : false; /** * @private @@ -67,7 +73,7 @@ var CDisplayStyle = function (option) { * @description 符号是否跟随显示放大(该属性已过时,请使用各个要素类的大小固定及线宽固定) * @default false */ - this.FollowScale = (options.FollowScale !== undefined) ? options.FollowScale : false; + this.FollowScale = options.FollowScale !== undefined ? options.FollowScale : false; /** * @private @@ -76,7 +82,7 @@ var CDisplayStyle = function (option) { * @description 线状符号线宽固定 * @default false */ - this.LinPenWidFixed = (options.LinPenWidFixed !== undefined) ? options.LinPenWidFixed : false; + this.LinPenWidFixed = options.LinPenWidFixed !== undefined ? options.LinPenWidFixed : false; /** * @private @@ -85,7 +91,7 @@ var CDisplayStyle = function (option) { * @description 线状符号大小固定 * @default false */ - this.LinSizeFixed = (options.LinSizeFixed !== undefined) ? options.LinSizeFixed : false; + this.LinSizeFixed = options.LinSizeFixed !== undefined ? options.LinSizeFixed : false; /** * @private @@ -94,7 +100,7 @@ var CDisplayStyle = function (option) { * @description 点状符号线宽固定 * @default false */ - this.PntPenWidFixed = (options.PntPenWidFixed !== undefined) ? options.PntPenWidFixed : false; + this.PntPenWidFixed = options.PntPenWidFixed !== undefined ? options.PntPenWidFixed : false; /** * @private @@ -103,7 +109,7 @@ var CDisplayStyle = function (option) { * @description 点状符号大小固定 * @default false */ - this.PntSizeFixed = (options.PntSizeFixed !== undefined) ? options.PntSizeFixed : false; + this.PntSizeFixed = options.PntSizeFixed !== undefined ? options.PntSizeFixed : false; /** * @private @@ -112,7 +118,7 @@ var CDisplayStyle = function (option) { * @description 填充符号线宽固定 * @default false */ - this.RegPenWidFixed = (options.RegPenWidFixed !== undefined) ? options.RegPenWidFixed : false; + this.RegPenWidFixed = options.RegPenWidFixed !== undefined ? options.RegPenWidFixed : false; /** * @private @@ -121,7 +127,7 @@ var CDisplayStyle = function (option) { * @description 填充符号大小固定 * @default false */ - this.RegSizeFixed = (options.RegSizeFixed !== undefined) ? options.RegSizeFixed : false; + this.RegSizeFixed = options.RegSizeFixed !== undefined ? options.RegSizeFixed : false; /** * @private @@ -130,7 +136,7 @@ var CDisplayStyle = function (option) { * @description 显示坐标点 * @default false */ - this.ShowCoordPnt = (options.ShowCoordPnt !== undefined) ? options.ShowCoordPnt : false; + this.ShowCoordPnt = options.ShowCoordPnt !== undefined ? options.ShowCoordPnt : false; /** * @private @@ -139,7 +145,7 @@ var CDisplayStyle = function (option) { * @description 显示元素的外包矩形 * @default false */ - this.ShowElemRect = (options.ShowElemRect !== undefined) ? options.ShowElemRect : false; + this.ShowElemRect = options.ShowElemRect !== undefined ? options.ShowElemRect : false; /** * @private @@ -148,7 +154,16 @@ var CDisplayStyle = function (option) { * @description 图层显示参数Array<{@link Zondy.Object.DynShowStyle}> * @default null */ - this.ShowStyle = (options.ShowStyle !== undefined) ? options.ShowStyle : null; + this.ShowStyle = options.ShowStyle !== undefined ? options.ShowStyle : null; + + /** + * @private + * @member Zondy.Object.CDisplayStyle.prototype.LayerStyles + * @type {Map} + * @description 图层显示参数Map<{@link Zondy.Object.DynShowStyle}> + * @default null + */ + this.LayerStyles = options.LayerStyles !== undefined ? options.LayerStyles : null; /** * @private @@ -157,10 +172,8 @@ var CDisplayStyle = function (option) { * @description 是否进行还原显示 * @default false */ - this.SymbleShow = (options.SymbleShow !== undefined) ? options.SymbleShow : false; + this.SymbleShow = options.SymbleShow !== undefined ? options.SymbleShow : false; }; -export { - CDisplayStyle -}; -Zondy.Object.CDisplayStyle = CDisplayStyle; \ No newline at end of file +export { CDisplayStyle }; +Zondy.Object.CDisplayStyle = CDisplayStyle; diff --git a/src/service/common/DynShowStyle.js b/src/service/common/DynShowStyle.js index bf8aed57b..5dffd2da4 100644 --- a/src/service/common/DynShowStyle.js +++ b/src/service/common/DynShowStyle.js @@ -1,31 +1,17 @@ -import { - Zondy -} from './Base'; -import { - extend -} from "./Util"; -import { - CDynNoteInfo -} from "./CDynNoteInfo"; -import { - ISShowArc -} from "./EnumComm"; -import { - CLineInfo -} from "./CLineInfo"; -import { - CPointInfo -} from "./CPointInfo"; -import { - CRegionInfo -} from "./CRegionInfo"; +import { Zondy } from './Base'; +import { extend } from './Util'; +import { CDynNoteInfo } from './CDynNoteInfo'; +import { ISShowArc } from './EnumComm'; +import { CLineInfo } from './CLineInfo'; +import { CPointInfo } from './CPointInfo'; +import { CRegionInfo } from './CRegionInfo'; /** * 图层动态显示样式对象 * @class Zondy.Object.DynShowStyle * @classdesc 地图文档显示样式对象构造函数 * @param {Object} option 属性键值对 - * @param {Number} [option.Alpha = 0] 透明度 + * @param {Number} [option.Alpha = 0] 透明度(0-100),0表示全部显示,100表示隐藏,50表示半透明 * @param {Boolean} [option.BugSpare = false] 是否使用错误处理符号 * @param {Boolean} [option.CustomRender = false] 是否自绘驱动 * @param {String} [option.CustomRenderPath = false] 自绘驱动路径设置 @@ -47,7 +33,7 @@ import { * @see Zondy.Object.CDisplayStyle */ var DynShowStyle = function (option) { - var options = (option !== undefined) ? option : {}; + var options = option !== undefined ? option : {}; extend(this, options); /** @@ -56,7 +42,7 @@ var DynShowStyle = function (option) { * @description 透明度 * @default 0 */ - this.Alpha = (options.Alpha !== undefined) ? options.Alpha : 0; + this.Alpha = options.Alpha !== undefined ? options.Alpha : 0; /** * @member Zondy.Object.DynShowStyle.prototype.BugSpare @@ -64,7 +50,7 @@ var DynShowStyle = function (option) { * @description 是否使用错误处理符号 * @default false */ - this.BugSpare = (options.BugSpare !== undefined) ? options.BugSpare : false; + this.BugSpare = options.BugSpare !== undefined ? options.BugSpare : false; /** * @member Zondy.Object.DynShowStyle.prototype.CustomRender @@ -72,7 +58,7 @@ var DynShowStyle = function (option) { * @description 是否自绘驱动 * @default false */ - this.CustomRender = (options.CustomRender !== undefined) ? options.CustomRender : false; + this.CustomRender = options.CustomRender !== undefined ? options.CustomRender : false; /** * @member Zondy.Object.DynShowStyle.prototype.CustomRenderPath @@ -80,7 +66,7 @@ var DynShowStyle = function (option) { * @description 自绘驱动路径设置 * @default null */ - this.CustomRenderPath = (options.CustomRenderPath !== undefined) ? options.CustomRenderPath : null; + this.CustomRenderPath = options.CustomRenderPath !== undefined ? options.CustomRenderPath : null; /** * @member Zondy.Object.DynShowStyle.prototype.DirectionLineClr @@ -88,7 +74,7 @@ var DynShowStyle = function (option) { * @description 显示的线方向线符号(只适用于其颜色) * @default 0 */ - this.DirectionLineClr = (options.DirectionLineClr !== undefined) ? options.DirectionLineClr : 0; + this.DirectionLineClr = options.DirectionLineClr !== undefined ? options.DirectionLineClr : 0; /** * @member Zondy.Object.DynShowStyle.prototype.DynNoteFlag @@ -96,7 +82,7 @@ var DynShowStyle = function (option) { * @description 是否动态注记 * @default false */ - this.DynNoteFlag = (options.DynNoteFlag !== undefined) ? options.DynNoteFlag : false; + this.DynNoteFlag = options.DynNoteFlag !== undefined ? options.DynNoteFlag : false; /** * @member Zondy.Object.DynShowStyle.prototype.DynNoteInfo @@ -104,7 +90,7 @@ var DynShowStyle = function (option) { * @description 动态注记参数 * @default null */ - this.DynNoteInfo = (options.DynNoteInfo !== undefined) ? options.DynNoteInfo : null; + this.DynNoteInfo = options.DynNoteInfo !== undefined ? options.DynNoteInfo : null; /** * @member Zondy.Object.DynShowStyle.prototype.IsShowArc @@ -113,7 +99,7 @@ var DynShowStyle = function (option) { * 取值范围: 1(Zondy.Enum.ISShowArc.Reg),2(Zondy.Enum.ISShowArc.Arc),3(Zondy.Enum.ISShowArc.All) * @default 0 */ - this.IsShowArc = (options.IsShowArc !== undefined) ? options.IsShowArc : 0; + this.IsShowArc = options.IsShowArc !== undefined ? options.IsShowArc : 0; /** * @member Zondy.Object.DynShowStyle.prototype.ISShowLineDirection @@ -121,7 +107,7 @@ var DynShowStyle = function (option) { * @description 是否显示线方向 * @default false */ - this.ISShowLineDirection = (options.ISShowLineDirection !== undefined) ? options.ISShowLineDirection : false; + this.ISShowLineDirection = options.ISShowLineDirection !== undefined ? options.ISShowLineDirection : false; /** * @member Zondy.Object.DynShowStyle.prototype.LineInfo @@ -129,7 +115,7 @@ var DynShowStyle = function (option) { * @description 显示的弧段样式(只适用于其颜色) * @default null */ - this.LineInfo = (options.LineInfo !== undefined) ? options.LineInfo : null; + this.LineInfo = options.LineInfo !== undefined ? options.LineInfo : null; /** * @member Zondy.Object.DynShowStyle.prototype.MaxScale @@ -137,7 +123,7 @@ var DynShowStyle = function (option) { * @description 最大显示比率 * @default 0.00 */ - this.MaxScale = (options.MaxScale !== undefined) ? options.MaxScale : 0.00; + this.MaxScale = options.MaxScale !== undefined ? options.MaxScale : 0.0; /** * @member Zondy.Object.DynShowStyle.prototype.MinScale @@ -145,7 +131,7 @@ var DynShowStyle = function (option) { * @description 最小显示比率 * @default 0.00 */ - this.MinScale = (options.MinScale !== undefined) ? options.MinScale : 0.00; + this.MinScale = options.MinScale !== undefined ? options.MinScale : 0.0; /** * @member Zondy.Object.DynShowStyle.prototype.ShowCoordPnt @@ -153,7 +139,7 @@ var DynShowStyle = function (option) { * @description 显示坐标点 * @default false */ - this.ShowCoordPnt = (options.ShowCoordPnt !== undefined) ? options.ShowCoordPnt : false; + this.ShowCoordPnt = options.ShowCoordPnt !== undefined ? options.ShowCoordPnt : false; /** * @member Zondy.Object.DynShowStyle.prototype.SpareLineInfo @@ -161,7 +147,7 @@ var DynShowStyle = function (option) { * @description 错误处理线符号 * @default null */ - this.SpareLineInfo = (options.SpareLineInfo !== undefined) ? options.SpareLineInfo : null; + this.SpareLineInfo = options.SpareLineInfo !== undefined ? options.SpareLineInfo : null; /** * @member Zondy.Object.DynShowStyle.prototype.SparePointInfo @@ -169,7 +155,7 @@ var DynShowStyle = function (option) { * @description 错误处理点符号 * @default null */ - this.SparePointInfo = (options.SparePointInfo !== undefined) ? options.SparePointInfo : null; + this.SparePointInfo = options.SparePointInfo !== undefined ? options.SparePointInfo : null; /** * @member Zondy.Object.DynShowStyle.prototype.SpareRegInfo @@ -177,7 +163,7 @@ var DynShowStyle = function (option) { * @description 错误处理区符号 * @default null */ - this.SpareRegInfo = (options.SpareRegInfo !== undefined) ? options.SpareRegInfo : null; + this.SpareRegInfo = options.SpareRegInfo !== undefined ? options.SpareRegInfo : null; /** * @member Zondy.Object.DynShowStyle.prototype.SymbleScale @@ -185,9 +171,7 @@ var DynShowStyle = function (option) { * @description 符号显示比例 * @default 0.00 */ - this.SymbleScale = (options.SymbleScale !== undefined) ? options.SymbleScale : 0.00; + this.SymbleScale = options.SymbleScale !== undefined ? options.SymbleScale : 0.0; }; -export { - DynShowStyle -}; -Zondy.Object.DynShowStyle = DynShowStyle; \ No newline at end of file +export { DynShowStyle }; +Zondy.Object.DynShowStyle = DynShowStyle; diff --git a/src/service/common/Util.js b/src/service/common/Util.js index 7811f6795..b3bd907f1 100644 --- a/src/service/common/Util.js +++ b/src/service/common/Util.js @@ -1057,11 +1057,17 @@ var formatQuery = function (query,url,paramArr,formatObj) { if(param.type === "polyline"){ geometry["paths"] = query[key]["paths"]; } + if(param.type === "circle"){ + param.type = "polygon"; + geometry["rings"] = query[key]["rings"]; + } geometry["spatialReference"] = query[key]["spatialReference"]; param = geometry; url += "&geometryType=esriGeometry" + query[key]["type"].charAt(0).toUpperCase() + query[key]["type"].slice(1); + param = encodeURI(JSON.stringify(param)); + }else { + param = JSON.stringify(param); } - param = JSON.stringify(param); } if(formatObj && formatObj.hasOwnProperty(key)){ keyStr = formatObj[key]; diff --git a/src/service/docs/webpack4/mapboxgl/babel.config.js b/src/service/docs/webpack4/mapboxgl/babel.config.js new file mode 100644 index 000000000..3ecebf1a5 --- /dev/null +++ b/src/service/docs/webpack4/mapboxgl/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ["@vue/app"] +}; diff --git a/src/service/docs/webpack4/mapboxgl/package.json b/src/service/docs/webpack4/mapboxgl/package.json new file mode 100644 index 000000000..52d0dca5e --- /dev/null +++ b/src/service/docs/webpack4/mapboxgl/package.json @@ -0,0 +1,81 @@ +{ + "name": "@mapgis/webclient-vue-mapboxgl", + "version": "10.5.8", + "description": "中地数码webclient-vue-mapboxgl", + "main": "dist-libs/webclient-vue-mapboxgl.umd.min.js", + "module1": "src/main.js", + "scripts": { + "build": "node --max_old_space_size=8196 ./node_modules/@vue/cli-service/bin/vue-cli-service build --target lib --name webclient-vue-mapboxgl src/main.js", + "serve": "vue-cli-service build --target lib --name webclient-vue-mapboxgl src/index.js --watch", + "lint": "vue-cli-service lint", + "docs:serve": "vuepress dev docs", + "docs:build": "vuepress build docs" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,json,css,md}": [ + "prettier --write", + "git add" + ] + }, + "dependencies": { + "@mapbox/mapbox-gl-draw": "^1.3.0", + "@mapbox/mapbox-gl-draw-static-mode": "^1.0.1", + "@mapgis/mapbox-gl": "^1.9.12", + "@mapgis/mapbox-gl-compare": "^0.4.0", + "@mapgis/mapbox-gl-draw-circle": "^10.5.5", + "@mapgis/mapbox-gl-draw-radius": "^1.0.0", + "@mapgis/mapbox-gl-inspect": "^10.5.6", + "@mapgis/webclient-es6-service": "^10.5.8", + "@mapgis/webclient-store": "^10.5.5", + "@mapgis/webclient-vue-ui": "^10.5.8", + "@turf/turf": "^6.5.0", + "echarts": "^5.3.0", + "file-saver": "^2.0.5", + "html2canvas": "^1.4.1", + "map-promisified": "^0.4.0", + "mapbox-gl-draw-circle": "^1.1.2", + "mapbox-gl-draw-rectangle-mode": "^1.0.4", + "mapv": "^2.0.62", + "moment": "^2.29.1", + "node-sql-parser": "^4.1.1", + "postcss-inline-svg": "4.1.0", + "resize-detector": "^0.3.0", + "v-contextmenu": "^2.9.0", + "v-jsoneditor": "^1.4.5", + "vcolorpicker": "^1.1.0", + "vue-runtime-helpers": "^1.1.2", + "vuepress": "^1.9.7" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "^3.2.0", + "@vue/cli-plugin-eslint": "^3.2.1", + "@vue/cli-service": "^3.2.0", + "@vue/eslint-config-prettier": "^4.0.1", + "babel-eslint": "^10.0.1", + "eslint": "^5.10.0", + "eslint-loader": "2.1.1", + "eslint-plugin-prettier": "^3.1.2", + "eslint-plugin-vue": "^6.1.2", + "husky": "^1.2.0", + "less": "3.12.2", + "less-loader": "7.0.2", + "lint-staged": "^8.1.0", + "node-sass": "^4.14.1", + "sass-loader": "10.1.1", + "vue": "^2.6.6", + "vue-cli-plugin-webpack-bundle-analyzer": "^4.0.0", + "vue-template-compiler": "^2.6.6", + "webpack-bundle-analyzer": "^4.4.2" + }, + "keywords": [ + "vue", + "mapbox" + ], + "author": "Wuhan Zondy Cyber Science&Technology Co.Ltd.", + "license": "Apache2" +} diff --git a/src/service/docs/webpack4/mapboxgl/vue.config.js b/src/service/docs/webpack4/mapboxgl/vue.config.js new file mode 100644 index 000000000..62121fc0d --- /dev/null +++ b/src/service/docs/webpack4/mapboxgl/vue.config.js @@ -0,0 +1,31 @@ +module.exports = { + productionSourceMap: false, + outputDir: "dist-libs", + pluginOptions: { + /* webpackBundleAnalyzer: { + openAnalyzer: false + } */ + }, + configureWebpack: { + externals: { + "mapbox-gl": { + commonjs: "mapbox-gl", + commonjs2: "mapbox-gl", + amd: "mapbox-gl", + root: "mapbox-gl" + }, + vue: { + commonjs: "vue", + commonjs2: "vue", + amd: "vue", + root: "vue" + }, + "map-promisified": { + commonjs: "map-promisified", + commonjs2: "map-promisified", + amd: "map-promisified", + root: "map-promisified" + } + } + } +}; diff --git a/src/service/docs/webpack4/service/package.json b/src/service/docs/webpack4/service/package.json new file mode 100644 index 000000000..b6b84437d --- /dev/null +++ b/src/service/docs/webpack4/service/package.json @@ -0,0 +1,28 @@ +{ + "name": "@mapgis/webclient-es6-service", + "version": "10.5.8", + "description": "中地数码基于ES6语法针对igserver的服务封装", + "main": "dist-libs/webclient-es6-service.min.js", + "module1": "index.js", + "scripts": { + "build": "npm run build-debug && npm run build-release", + "build-debug": "webpack --config webpack/service-debug-config.js", + "build-release": "webpack --config webpack/service-release-config.js" + }, + "author": "Wuhan Zondy Cyber Science&Technology Co.Ltd.", + "license": "Apache-2.0", + "dependencies": { + "@turf/turf": "^6.5.0", + "fast-xml-parser": "^3.17.6", + "fetch-ie8": "^1.5.0", + "promise-polyfill": "^8.2.1", + "qs": "^6.9.4" + }, + "devDependencies": { + "happypack": "^5.0.0", + "webpack": "4.19.1", + "webpack-cleanup-plugin": "0.4.2", + "webpack-cli": "2.1.5", + "webpack-parallel-uglify-plugin": "0.4.2" + } +} diff --git a/src/service/docs/webpack4/service/webpack/service-debug-config.js b/src/service/docs/webpack4/service/webpack/service-debug-config.js new file mode 100644 index 000000000..d28aaf02b --- /dev/null +++ b/src/service/docs/webpack4/service/webpack/service-debug-config.js @@ -0,0 +1,42 @@ +var webpack = require('webpack'); +var path = require('path'); +var HappyPack = require('happypack'); //多线程loader 加快编译速度 +var os = require('os'); +var happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }); + +module.exports = { + mode: 'development', + devtool: 'eval-source-map', + entry: path.join(__dirname, '..', 'index.js'), //已多次提及的唯一入口文件 + output: { + path: path.join(__dirname, '..', 'dist-libs'), //打包后的文件存放的地方 + filename: 'webclient-es6-service.js', //打包后输出文件的文件名 + libraryTarget: 'umd' + }, + externals: {}, + module: { + rules: [ + { + test: /(\.js)$/, + use: 'happypack/loader?id=js', + exclude: [/node_modules/] + } + ] + }, + plugins: [ + new HappyPack({ + id: 'js', + threadPool: happyThreadPool, + loaders: [ + { + loader: 'babel-loader', + options: { + presets: ['es2015'], + cacheDirectory: true, + plugins: ['transform-runtime', 'transform-decorators-legacy', 'transform-class-properties'] + } + } + ] + }) + ] +}; diff --git a/src/service/docs/webpack4/service/webpack/service-release-config.js b/src/service/docs/webpack4/service/webpack/service-release-config.js new file mode 100644 index 000000000..620713a92 --- /dev/null +++ b/src/service/docs/webpack4/service/webpack/service-release-config.js @@ -0,0 +1,52 @@ +var webpack = require('webpack'); +var path = require('path'); + +var HappyPack = require('happypack'); //多线程loader 加快编译速度 +const uglify = require('uglifyjs-webpack-plugin'); +var os = require('os'); +var happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }); + +module.exports = { + mode: 'none', + entry: path.join(__dirname, '..', 'index.js'), //已多次提及的唯一入口文件 + output: { + path: path.join(__dirname, '..', 'dist-libs'), //打包后的文件存放的地方 + filename: 'webclient-es6-service.min.js', //打包后输出文件的文件名 + libraryTarget: 'umd' + }, + devtool: 'sourcemap', //生成用来调试的map + externals: {}, + module: { + rules: [ + { + test: /(\.js)$/, + use: 'happypack/loader?id=js', + exclude: [/node_modules/] + } + ] + }, + plugins: [ + new HappyPack({ + id: 'js', + threadPool: happyThreadPool, + loaders: [ + { + loader: 'babel-loader', + options: { + presets: ['es2015'], + cacheDirectory: true, + plugins: ['transform-decorators-legacy', 'transform-class-properties'] + } + } + ] + }), + new uglify(), + new webpack.optimize.OccurrenceOrderPlugin(), + new webpack.optimize.AggressiveMergingPlugin(), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(process.env.NODE_ENV) + } + }) + ] +}; \ No newline at end of file diff --git a/src/service/docs/webpack5/service/babel.config.json b/src/service/docs/webpack5/service/babel.config.json new file mode 100644 index 000000000..c3867b2e9 --- /dev/null +++ b/src/service/docs/webpack5/service/babel.config.json @@ -0,0 +1,19 @@ +{ + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "edge": "17", + "firefox": "60", + "chrome": "67", + "safari": "11.1" + }, + "useBuiltIns": "usage", + "corejs": "3.21.1" // 2.6.12 3.21.1 + } + ] + ], + "plugins": ["@babel/plugin-transform-runtime"], + "sourceType": "unambiguous" +} diff --git a/src/service/docs/webpack5/service/package.json b/src/service/docs/webpack5/service/package.json new file mode 100644 index 000000000..c15cbf9f4 --- /dev/null +++ b/src/service/docs/webpack5/service/package.json @@ -0,0 +1,37 @@ +{ + "name": "@mapgis/webclient-es6-service", + "version": "10.5.8", + "description": "中地数码基于ES6语法针对igserver的服务封装", + "main": "dist-libs/webclient-es6-service.min.js", + "module1": "index.js", + "scripts": { + "build": "npm run build-debug && npm run build-release", + "build-debug": "webpack --config webpack/service-debug-config.js", + "build-release": "webpack --config webpack/service-release-config.js" + }, + "author": "Wuhan Zondy Cyber Science&Technology Co.Ltd.", + "license": "Apache-2.0", + "dependencies": { + "@turf/turf": "^6.5.0", + "fast-xml-parser": "^3.17.6", + "core-js": "^3.21.1", + "fetch-ie8": "^1.5.0", + "promise-polyfill": "^8.2.1", + "qs": "^6.9.4" + }, + "devDependencies": { + "@babel/cli": "^7.17.6", + "@babel/core": "^7.17.5", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/preset-env": "^7.16.11", + "babel-loader": "^8.2.3", + "compression-webpack-plugin": "^9.2.0", + "css-loader": "^6.5.1", + "sass-loader": "^12.4.0", + "style-loader": "^3.3.1", + "terser-webpack-plugin": "^5.3.1", + "ts-loader": "^9.2.6", + "webpack": "^5.69.1", + "webpack-cli": "^4.9.2" + } +} diff --git "a/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.pdf" "b/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.pdf" new file mode 100644 index 000000000..02bc1d9d7 Binary files /dev/null and "b/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.pdf" differ diff --git "a/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.png" "b/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.png" new file mode 100644 index 000000000..49fa35ce0 Binary files /dev/null and "b/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.png" differ diff --git "a/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.vsdx" "b/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.vsdx" new file mode 100644 index 000000000..88002adfa Binary files /dev/null and "b/src/service/docs/\347\274\226\350\257\221\346\265\201\347\250\213.vsdx" differ diff --git a/src/service/index.js b/src/service/index.js index 1984ae473..43a1ddac5 100644 --- a/src/service/index.js +++ b/src/service/index.js @@ -1,6 +1,17 @@ +/* + * @Description: + * @Author: zk + * @Date: 2022-05-10 12:45:10 + * @LastEditors: zk + * @LastEditTime: 2022-06-22 19:49:31 + */ //-------命名空间 mapgis 开始----- -import * as Style from './bsae/style'; - +import * as Util from './utils'; +import * as Symbol from './base/symbols'; +import * as Style from './base/style'; +import * as Renderer from './base/renderer'; +import * as geoJSON from './base/format/geojson'; +import * as Crs from './base/crs'; //-------命名空间 mapgis 结束----- //-------命名空间 Zondy 开始----- @@ -25,12 +36,39 @@ import PostGIS from './datastore/postgis'; import CloudDisk from './clouddisk'; import ArcGis from './ArcGis'; -export { Common, BaseServer, Extend, G3D, MRCS, MRFS, MRFWS, MRGS, MRMS, Info, OGC, ElasticSearch, PostGIS, CloudDisk, ArcGis }; +export { + Util, + Symbol, + Style, + Renderer, + geoJSON, + Crs, + Common, + BaseServer, + Extend, + G3D, + MRCS, + MRFS, + MRFWS, + MRGS, + MRMS, + Info, + OGC, + ElasticSearch, + PostGIS, + CloudDisk, + ArcGis +}; //-------命名空间 Zondy 结束----- const All = { //-------命名空间 mapgis 开始----- + Symbol, Style, + Renderer, + geoJSON, + Util, + Crs, //-------命名空间 mapgis 结束----- //-------命名空间 Zondy 开始----- Common, diff --git a/src/service/package.json b/src/service/package.json index f309edb95..13ebcb242 100644 --- a/src/service/package.json +++ b/src/service/package.json @@ -1,8 +1,8 @@ { "name": "@mapgis/webclient-es6-service", - "version": "10.5.5", + "version": "15.6.1", "description": "中地数码基于ES6语法针对igserver的服务封装", - "main": "dist-libs/webclient-es6-service.min.js", + "main1": "dist-libs/webclient-es6-service.min.js", "module": "index.js", "scripts": { "build": "npm run build-debug && npm run build-release", @@ -10,11 +10,17 @@ "build-release": "webpack --config webpack/service-release-config.js" }, "author": "Wuhan Zondy Cyber Science&Technology Co.Ltd.", - "license": "Apache2", + "license": "Apache-2.0", "dependencies": { - "@turf/turf": "^6.3.0", + "@turf/turf": "^6.5.0", + "axios": "^0.26.0", + "core-js": "^3.21.1", "fast-xml-parser": "^3.17.6", - "qs": "^6.9.4" + "fetch-ie8": "^1.5.0", + "proj4": "^2.7.5", + "promise-polyfill": "^8.2.1", + "qs": "^6.9.4", + "svg-pathdata": "^6.0.0" }, "devDependencies": { "happypack": "^5.0.0", diff --git a/src/service/uml/Symbols.mdj b/src/service/uml/Symbols.mdj new file mode 100644 index 000000000..2816a6a59 --- /dev/null +++ b/src/service/uml/Symbols.mdj @@ -0,0 +1,18065 @@ +{ + "_type": "Project", + "_id": "AAAAAAFF+h6SjaM2Hec=", + "name": "Untitled", + "ownedElements": [ + { + "_type": "UMLModel", + "_id": "AAAAAAFF+qBWK6M3Z8Y=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model", + "ownedElements": [ + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAFF+qBtyKM79qY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Main", + "defaultDiagram": true, + "ownedViews": [ + { + "_type": "UMLClassView", + "_id": "AAAAAAGAO1MYek/JnBg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAO1MYek/KY2Y=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYek/LgeU=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2656, + "top": 1856, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/M6PU=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "font": "Arial;13;3", + "left": 1469, + "top": 1047, + "width": 80.57080078125, + "height": 13, + "text": "Symbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/N9fA=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2656, + "top": 1856, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/OGZc=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2656, + "top": 1856, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1464, + "top": 1040, + "width": 90.57080078125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAO1MYek/LgeU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAO1MYe0/M6PU=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAO1MYe0/N9fA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO1MYe0/OGZc=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAO1MYe0/PFXM=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1M4vE/0AZw=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1M4mE/xJtQ=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1070, + "width": 80.57080078125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1NDbU/6l7g=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1NDTE/3Mpo=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1085, + "width": 80.57080078125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1NF21AAY2Y=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1NFuk/9tZ0=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1100, + "width": 80.57080078125, + "height": 13, + "text": "-opacity", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1464, + "top": 1065, + "width": 90.57080078125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAO1MYe0/Qbfc=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO1QI21AKpLU=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "model": { + "$ref": "AAAAAAGAO1QIuVAHl58=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1123, + "width": 80.57080078125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO1QR1VAQzNY=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "model": { + "$ref": "AAAAAAGAO1QRq1ANbHM=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1138, + "width": 80.57080078125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1464, + "top": 1118, + "width": 90.57080078125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAO1MYe0/RU/o=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1328, + "top": 928, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAO1MYe0/S0T0=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1328, + "top": 928, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1464, + "top": 1040, + "width": 90.57080078125, + "height": 116, + "nameCompartment": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAO1MYe0/RU/o=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAO1MYe0/S0T0=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAO4K5hlAZreY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAO4K5hlAaHxg=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAO4K5hlAbL2E=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2128, + "top": 1872, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO4K5hlAcyhk=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "font": "Arial;13;3", + "left": 1181, + "top": 1287, + "width": 89.5908203125, + "height": 13, + "text": "MarkerSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO4K5hlAdskM=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2128, + "top": 1872, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO4K5hlAe7O4=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2128, + "top": 1872, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1176, + "top": 1280, + "width": 99.5908203125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAO4K5hlAbL2E=" + }, + "nameLabel": { + "$ref": "AAAAAAGAO4K5hlAcyhk=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAO4K5hlAdskM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO4K5hlAe7O4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAO4K5hlAfRpQ=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4p0BZr4gb8=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4pz5Zr153M=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1310, + "width": 89.5908203125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4mT4prSiMQ=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4mTwJrPb7w=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1325, + "width": 89.5908203125, + "height": 13, + "text": "+angle", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4qdoZsDpGc=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4qdgZsAE80=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1340, + "width": 89.5908203125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4mfvZrYhZg=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4mfnZrVlig=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1355, + "width": 89.5908203125, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4mirJreNX8=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4mihZrbRuU=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1370, + "width": 89.5908203125, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1176, + "top": 1305, + "width": 99.5908203125, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAO4K5hlAg2rk=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO4niGZrnj9g=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAg2rk=" + }, + "model": { + "$ref": "AAAAAAGAO4nh+prkPOw=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1393, + "width": 89.5908203125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO4n8uZruYQg=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAg2rk=" + }, + "model": { + "$ref": "AAAAAAGAO4n8mJrrxks=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1408, + "width": 89.5908203125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1176, + "top": 1388, + "width": 99.5908203125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAO4K5hlAh8MY=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1064, + "top": 936, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAO4K5hlAi2GE=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1064, + "top": 936, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1176, + "top": 1280, + "width": 99.5908203125, + "height": 146, + "nameCompartment": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAO4K5hlAg2rk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAO4K5hlAh8MY=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAO4K5hlAi2GE=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAO4k9eZq+zz8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO4k9d5q8o/w=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO4k9eZq/7Fk=", + "_parent": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "model": { + "$ref": "AAAAAAGAO4k9d5q8o/w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1359, + "top": 1204, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO4k9eprAyRg=", + "_parent": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "model": { + "$ref": "AAAAAAGAO4k9d5q8o/w=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1349, + "top": 1193, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO4k9eprBcRg=", + "_parent": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "model": { + "$ref": "AAAAAAGAO4k9d5q8o/w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1378, + "top": 1227, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "lineStyle": 1, + "points": "1276:1306;1463:1138", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAO4k9eZq/7Fk=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAO4k9eprAyRg=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO4k9eprBcRg=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAO5gALZsP5fo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAO5gALZsQXyM=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAO5gALZsREwU=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1968, + "top": 1888, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO5gALZsSpDs=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "font": "Arial;13;1", + "left": 1141, + "top": 1503, + "width": 168.0224609375, + "height": 13, + "text": "SimpleMarkerSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO5gALpsT33s=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1968, + "top": 1888, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO5gALpsUJRw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1968, + "top": 1888, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1136, + "top": 1496, + "width": 178.0224609375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAO5gALZsREwU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAO5gALZsSpDs=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAO5gALpsT33s=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO5gALpsUJRw=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAO5gALpsV0BA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5hkWZtP8PU=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5hkNptMOqw=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1526, + "width": 168.0224609375, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5hwcZtVFjw=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5hwUJtS32g=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1541, + "width": 168.0224609375, + "height": 13, + "text": "+angle", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5hyo5tbu24=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5hygptYMPQ=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1556, + "width": 168.0224609375, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5pIyZug9DU=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5pIqJud5fM=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1571, + "width": 168.0224609375, + "height": 13, + "text": "+outline: SimpleLineSymbol", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h1Fpth6Io=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h09pteLz4=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1586, + "width": 168.0224609375, + "height": 13, + "text": "+path", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h3AJtnyLU=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h23Jtkc88=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1601, + "width": 168.0224609375, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h4s5ttpWM=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h4k5tqygA=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1616, + "width": 168.0224609375, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h7JZtzPks=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h7A5tw0cA=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1631, + "width": 168.0224609375, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h9KJt5VaY=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h9B5t2d9Q=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1646, + "width": 168.0224609375, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1136, + "top": 1521, + "width": 178.0224609375, + "height": 143 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAO5gALpsWEzw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO5iarJuLMpA=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsWEzw=" + }, + "model": { + "$ref": "AAAAAAGAO5iajJuIBOs=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1669, + "width": 168.0224609375, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO5iP6Zt/is8=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsWEzw=" + }, + "model": { + "$ref": "AAAAAAGAO5iPxpt81pU=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1684, + "width": 168.0224609375, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO5iYEJuFzf0=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsWEzw=" + }, + "model": { + "$ref": "AAAAAAGAO5iX6JuC7TA=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1699, + "width": 168.0224609375, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1136, + "top": 1664, + "width": 178.0224609375, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAO5gALpsX4xs=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 984, + "top": 944, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAO5gALpsYIWU=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 984, + "top": 944, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1136, + "top": 1496, + "width": 178.0224609375, + "height": 221, + "nameCompartment": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAO5gALpsWEzw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAO5gALpsX4xs=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAO5gALpsYIWU=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAO5hIaJs96IQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO5hIZ5s7B30=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO5hIaJs+4Ok=", + "_parent": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "model": { + "$ref": "AAAAAAGAO5hIZ5s7B30=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1209, + "top": 1453, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO5hIaZs/RMg=", + "_parent": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "model": { + "$ref": "AAAAAAGAO5hIZ5s7B30=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1194, + "top": 1453, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO5hIaZtAgEI=", + "_parent": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "model": { + "$ref": "AAAAAAGAO5hIZ5s7B30=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1238, + "top": 1454, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "tail": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "lineStyle": 1, + "points": "1224:1495;1225:1426", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAO5hIaJs+4Ok=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAO5hIaZs/RMg=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO5hIaZtAgEI=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPAEECJu1N1A=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPAEECJu2GKs=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPAEECJu37WA=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1232, + "top": 2048, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAEECJu4rMc=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "font": "Arial;13;3", + "left": 1389, + "top": 1287, + "width": 80.57080078125, + "height": 13, + "text": "LineSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAEECJu5XS0=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1232, + "top": 2048, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAEECJu6Xx8=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1232, + "top": 2048, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1384, + "top": 1280, + "width": 90.57080078125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAEECJu37WA=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPAEECJu4rMc=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPAEECJu5XS0=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAEECJu6Xx8=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPAEECJu7Y48=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAKLfZvgDgI=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu7Y48=" + }, + "model": { + "$ref": "AAAAAAGAPAKLVpvdNNE=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1310, + "width": 80.57080078125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAKR8JvmJRQ=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu7Y48=" + }, + "model": { + "$ref": "AAAAAAGAPAKRz5vj6lU=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1325, + "width": 80.57080078125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAKawZvsFL8=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu7Y48=" + }, + "model": { + "$ref": "AAAAAAGAPAKan5vpoKk=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1340, + "width": 80.57080078125, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1384, + "top": 1305, + "width": 90.57080078125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPAEECJu8gpg=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPALTA5v1qYw=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu8gpg=" + }, + "model": { + "$ref": "AAAAAAGAPALS25vyQdo=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1363, + "width": 80.57080078125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPALeV5v77pQ=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu8gpg=" + }, + "model": { + "$ref": "AAAAAAGAPALeMZv49lY=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1378, + "width": 80.57080078125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1384, + "top": 1358, + "width": 90.57080078125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPAEECJu9bYo=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 616, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPAEECJu+TtY=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 616, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1384, + "top": 1280, + "width": 90.57080078125, + "height": 116, + "nameCompartment": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPAEECJu7Y48=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPAEECJu8gpg=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPAEECJu9bYo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPAEECJu+TtY=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPAMK75wCNw0=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPAMK75wDgvA=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPAMK75wEXt4=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1168, + "top": 1888, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAMK75wFMJ8=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "font": "Arial;13;1", + "left": 1341, + "top": 1503, + "width": 163.63623046875, + "height": 13, + "text": "SimpleLineSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAMK75wGU50=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1168, + "top": 1888, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAMK75wH9ao=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1168, + "top": 1888, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1336, + "top": 1496, + "width": 173.63623046875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAMK75wEXt4=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPAMK75wFMJ8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPAMK75wGU50=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAMK75wH9ao=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPAMK75wIQws=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQZ9ZxPVZ4=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQZ0pxMviw=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1526, + "width": 163.63623046875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQgupxVbQ0=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQglpxSlAw=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1541, + "width": 163.63623046875, + "height": 13, + "text": "+cap", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQjcJxbkyI=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQjTpxYRgc=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1556, + "width": 163.63623046875, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQlhJxh1vo=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQlXpxeKLg=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1571, + "width": 163.63623046875, + "height": 13, + "text": "+join", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQnqJxnLvE=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQnhpxkzMk=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1586, + "width": 163.63623046875, + "height": 13, + "text": "+marker: LineSymbolMarker", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQp2JxtOVk=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQprpxqv+k=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1601, + "width": 163.63623046875, + "height": 13, + "text": "+miterLimit", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQsE5xzh2M=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQr7pxwm+c=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1616, + "width": 163.63623046875, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQuOpx5WOc=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQuFpx2vEw=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1631, + "width": 163.63623046875, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1336, + "top": 1521, + "width": 173.63623046875, + "height": 128 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPAMK75wJsVE=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCva0a3oEDg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wJsVE=" + }, + "model": { + "$ref": "AAAAAAGAPCvaqK3lziY=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1654, + "width": 163.63623046875, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCvhoa4eijc=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wJsVE=" + }, + "model": { + "$ref": "AAAAAAGAPCvhf64bbOg=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1669, + "width": 163.63623046875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCvkQq5CWqQ=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wJsVE=" + }, + "model": { + "$ref": "AAAAAAGAPCvkHq4/nNg=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1684, + "width": 163.63623046875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1336, + "top": 1649, + "width": 173.63623046875, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPAMK75wKurQ=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 584, + "top": 944, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPAMK75wL/Ow=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 584, + "top": 944, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1336, + "top": 1496, + "width": 173.63623046875, + "height": 206, + "nameCompartment": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPAMK75wJsVE=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPAMK75wKurQ=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPAMK75wL/Ow=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPAMl+Jws8Rc=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAMl+Jwq3y8=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAMl+JwtX/4=", + "_parent": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "model": { + "$ref": "AAAAAAGAPAMl+Jwq3y8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1452, + "top": 1206, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAMl+Jwu10s=", + "_parent": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "model": { + "$ref": "AAAAAAGAPAMl+Jwq3y8=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1438, + "top": 1201, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAMl+Jwvxu0=", + "_parent": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "model": { + "$ref": "AAAAAAGAPAMl+Jwq3y8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1481, + "top": 1215, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "lineStyle": 1, + "points": "1447:1279;1488:1156", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPAMl+JwtX/4=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAMl+Jwu10s=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAMl+Jwvxu0=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPAM0X5w94vo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAM0X5w7CQk=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAM0X5w+PYk=", + "_parent": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "model": { + "$ref": "AAAAAAGAPAM0X5w7CQk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1410, + "top": 1438, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAM0YJw/sFo=", + "_parent": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "model": { + "$ref": "AAAAAAGAPAM0X5w7CQk=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1395, + "top": 1437, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAM0YJxAm/U=", + "_parent": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "model": { + "$ref": "AAAAAAGAPAM0X5w7CQk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1439, + "top": 1439, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "tail": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "lineStyle": 1, + "points": "1424:1495;1427:1396", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPAM0X5w+PYk=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAM0YJw/sFo=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAM0YJxAm/U=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPAZXyJz7pes=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJz8vTg=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1324, + "top": 1581, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJz9jgA=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1324, + "top": 1566, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJz+i7M=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1324, + "top": 1611, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJz/1qs=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz4H6A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1339, + "top": 1581, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0AVnY=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz4H6A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1342, + "top": 1567, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0BuAo=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz4H6A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1335, + "top": 1608, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0CqJk=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz5qwM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1309, + "top": 1581, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0DRxo=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz5qwM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1306, + "top": 1567, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0EjG8=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz5qwM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1313, + "top": 1608, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPAZXyJ0FhtE=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz4H6A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPAZXyJ0Gq9E=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz5qwM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "tail": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "lineStyle": 1, + "points": "1314:1602;1335:1602", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPAZXyJz8vTg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAZXyJz9jgA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAZXyJz+i7M=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPAZXyJz/1qs=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPAZXyJ0AVnY=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPAZXyJ0BuAo=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPAZXyJ0CqJk=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPAZXyJ0DRxo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPAZXyJ0EjG8=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPAZXyJ0FhtE=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPAZXyJ0Gq9E=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPAZ6f51RxO8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPAZ6f51SOeE=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPAZ6f51TTAU=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": 2752, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAZ6f51UoT0=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "font": "Arial;13;1", + "left": 1365, + "top": 1751, + "width": 116.314453125, + "height": 13, + "text": "LineSymbolMarker" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAZ6f51V14E=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": 2752, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAZ6f51W2RM=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": 2752, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1360, + "top": 1744, + "width": 126.314453125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAZ6f51TTAU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPAZ6f51UoT0=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPAZ6f51V14E=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAZ6f51W2RM=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPAZ6f51XwF4=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAaeH52jAV8=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "model": { + "$ref": "AAAAAAGAPAad+p2dGzE=" + }, + "font": "Arial;13;0", + "left": 1365, + "top": 1774, + "width": 116.314453125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAaku53Bq+k=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "model": { + "$ref": "AAAAAAGAPAakl5275T8=" + }, + "font": "Arial;13;0", + "left": 1365, + "top": 1789, + "width": 116.314453125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAam3p3W7Sk=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "model": { + "$ref": "AAAAAAGAPAamt53QDe4=" + }, + "font": "Arial;13;0", + "left": 1365, + "top": 1804, + "width": 116.314453125, + "height": 13, + "text": "+placement", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAapVJ3rP5A=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "model": { + "$ref": "AAAAAAGAPAapL53l9Sc=" + }, + "font": "Arial;13;0", + "left": 1365, + "top": 1819, + "width": 116.314453125, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1360, + "top": 1769, + "width": 126.314453125, + "height": 68 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPAZ6f51YMfU=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "font": "Arial;13;0", + "left": 1360, + "top": 1837, + "width": 126.314453125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPAZ6f51Z/g8=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 280, + "top": 1376, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPAZ6f51a1Yg=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 280, + "top": 1376, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1360, + "top": 1744, + "width": 126.314453125, + "height": 103, + "nameCompartment": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPAZ6f51YMfU=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPAZ6f51Z/g8=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPAZ6f51a1Yg=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPAgXl59w9tY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ9x8Wc=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1436, + "top": 1715, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ9yGZE=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1451, + "top": 1715, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ9zKjU=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1407, + "top": 1716, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ90XoY=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59tmOM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1437, + "top": 1721, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ91D64=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59tmOM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1450, + "top": 1724, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ92hKk=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59tmOM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1409, + "top": 1717, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ93qTo=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59uDWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1437, + "top": 1711, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ945Nk=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59uDWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1450, + "top": 1708, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ951JU=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59uDWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1409, + "top": 1715, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPAgXmJ96iVI=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59tmOM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPAgXmJ97Rxw=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59uDWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "tail": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "lineStyle": 1, + "points": "1422:1702;1422:1743", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPAgXmJ9x8Wc=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAgXmJ9yGZE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAgXmJ9zKjU=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPAgXmJ90XoY=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPAgXmJ91D64=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPAgXmJ92hKk=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPAgXmJ93qTo=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPAgXmJ945Nk=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPAgXmJ951JU=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPAgXmJ96iVI=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPAgXmJ97Rxw=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPBd73qHscQA=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPBd73qHtjz8=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPBd73qHudqQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 896, + "top": 1920, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPBd73qHvzLw=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "font": "Arial;13;1", + "left": 981, + "top": 1503, + "width": 133.66259765625, + "height": 13, + "text": "PictureMarkerSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPBd73qHwpPE=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 896, + "top": 1920, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPBd73qHxJhQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 896, + "top": 1920, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 976, + "top": 1496, + "width": 143.66259765625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPBd73qHudqQ=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPBd73qHvzLw=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPBd73qHwpPE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPBd73qHxJhQ=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPBd736Hy3vE=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBe8LKL7BvY=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBe8CaLygzQ=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1526, + "width": 133.66259765625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfDAaMxM0g=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfC3qMo4vU=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1541, + "width": 133.66259765625, + "height": 13, + "text": "+angle", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfF1qNVuNA=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfFsKNMfiQ=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1556, + "width": 133.66259765625, + "height": 13, + "text": "+height", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfIGaN5OJU=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfH9qNwFW8=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1571, + "width": 133.66259765625, + "height": 13, + "text": "+url", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfKMKOdoEo=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfKDqOUl0Y=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1586, + "width": 133.66259765625, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfMSaPBn5I=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfMJqO4ULE=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1601, + "width": 133.66259765625, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfOiaPlYo4=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfOZ6Pcm9c=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1616, + "width": 133.66259765625, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 976, + "top": 1521, + "width": 143.66259765625, + "height": 113 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPBd736HzKbk=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPBeuDKLFpuw=", + "_parent": { + "$ref": "AAAAAAGAPBd736HzKbk=" + }, + "model": { + "$ref": "AAAAAAGAPBet6aK8jQc=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1639, + "width": 133.66259765625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPBhv66W3Wa4=", + "_parent": { + "$ref": "AAAAAAGAPBd736HzKbk=" + }, + "model": { + "$ref": "AAAAAAGAPBhvx6Wusf8=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1654, + "width": 133.66259765625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPBhyDaXb2Ko=", + "_parent": { + "$ref": "AAAAAAGAPBd736HzKbk=" + }, + "model": { + "$ref": "AAAAAAGAPBhx56XShSk=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1669, + "width": 133.66259765625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 976, + "top": 1634, + "width": 143.66259765625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPBd736H0W7E=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 448, + "top": 960, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPBd736H1Moo=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 448, + "top": 960, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 976, + "top": 1496, + "width": 143.66259765625, + "height": 191, + "nameCompartment": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPBd736HzKbk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPBd736H0W7E=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPBd736H1Moo=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPBeg7KJxVzQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPBeg7KJvEiE=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPBeg7KJySLo=", + "_parent": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "model": { + "$ref": "AAAAAAGAPBeg7KJvEiE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1134, + "top": 1441, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPBeg7KJzizU=", + "_parent": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "model": { + "$ref": "AAAAAAGAPBeg7KJvEiE=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1122, + "top": 1432, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPBeg7KJ008o=", + "_parent": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "model": { + "$ref": "AAAAAAGAPBeg7KJvEiE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1157, + "top": 1460, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "tail": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "lineStyle": 1, + "points": "1118:1495;1175:1419", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPBeg7KJySLo=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPBeg7KJzizU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPBeg7KJ008o=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPCD46KeYkpo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPCD46KeZWB4=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPCD46KeaMOQ=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": 2000, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCD46KebbT8=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "font": "Arial;13;3", + "left": 1525, + "top": 1287, + "width": 160.7861328125, + "height": 13, + "text": "FillSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCD46Kechlw=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": 2000, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCD46Ked/xc=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": 2000, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1520, + "top": 1280, + "width": 170.7861328125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPCD46KeaMOQ=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPCD46KebbT8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPCD46Kechlw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPCD46Ked/xc=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPCD46Kee1O0=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCEdTKhxXM4=", + "_parent": { + "$ref": "AAAAAAGAPCD46Kee1O0=" + }, + "model": { + "$ref": "AAAAAAGAPCEdKahoOMM=" + }, + "font": "Arial;13;0", + "left": 1525, + "top": 1310, + "width": 160.7861328125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCEmM6i5bsM=", + "_parent": { + "$ref": "AAAAAAGAPCD46Kee1O0=" + }, + "model": { + "$ref": "AAAAAAGAPCEmEKiwQC0=" + }, + "font": "Arial;13;0", + "left": 1525, + "top": 1325, + "width": 160.7861328125, + "height": 13, + "text": "+outline: SimpleLineSymbol", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1520, + "top": 1305, + "width": 170.7861328125, + "height": 38 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPCD46aefwOo=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCEvp6jvsj4=", + "_parent": { + "$ref": "AAAAAAGAPCD46aefwOo=" + }, + "model": { + "$ref": "AAAAAAGAPCEvg6jm2cI=" + }, + "font": "Arial;13;0", + "left": 1525, + "top": 1348, + "width": 160.7861328125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCE2o6kl+ZE=", + "_parent": { + "$ref": "AAAAAAGAPCD46aefwOo=" + }, + "model": { + "$ref": "AAAAAAGAPCE2f6kc9N4=" + }, + "font": "Arial;13;0", + "left": 1525, + "top": 1363, + "width": 160.7861328125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1520, + "top": 1343, + "width": 170.7861328125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPCD46aeg9BU=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 520, + "top": 1000, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPCD46aehjMA=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 520, + "top": 1000, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1520, + "top": 1280, + "width": 170.7861328125, + "height": 101, + "nameCompartment": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPCD46Kee1O0=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPCD46aefwOo=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPCD46aeg9BU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPCD46aehjMA=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPCEOcKgdRwY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPCEOb6gbYVs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCEOcKgezAQ=", + "_parent": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "model": { + "$ref": "AAAAAAGAPCEOb6gbYVs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1543, + "top": 1216, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCEOcKgfges=", + "_parent": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "model": { + "$ref": "AAAAAAGAPCEOb6gbYVs=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1529, + "top": 1222, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCEOcKggoCI=", + "_parent": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "model": { + "$ref": "AAAAAAGAPCEOb6gbYVs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1570, + "top": 1205, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "lineStyle": 1, + "points": "1583:1279;1532:1156", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPCEOcKgezAQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPCEOcKgfges=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPCEOcKggoCI=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPCnyRqqSpVk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPCnyR6qT0qo=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPCnyR6qUmU8=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 992, + "top": 1872, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCnyR6qVskM=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "font": "Arial;13;1", + "left": 1533, + "top": 1503, + "width": 160.7861328125, + "height": 13, + "text": "SimpleFillSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCnyR6qWzlw=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 992, + "top": 1872, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCnyR6qX0jU=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 992, + "top": 1872, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1528, + "top": 1496, + "width": 170.7861328125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPCnyR6qUmU8=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPCnyR6qVskM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPCnyR6qWzlw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPCnyR6qX0jU=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPCnyR6qYf2U=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCqTNquhaEY=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "model": { + "$ref": "AAAAAAGAPCqTEauYd9c=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1526, + "width": 160.7861328125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCqZmqvXg2I=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "model": { + "$ref": "AAAAAAGAPCqZd6vOxgQ=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1541, + "width": 160.7861328125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCqcsqv7lf8=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "model": { + "$ref": "AAAAAAGAPCqcjqvys9Y=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1556, + "width": 160.7861328125, + "height": 13, + "text": "+outline: SimpleLineSymbol", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCqfm6wfWwQ=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "model": { + "$ref": "AAAAAAGAPCqfd6wWjho=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1571, + "width": 160.7861328125, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1528, + "top": 1521, + "width": 170.7861328125, + "height": 68 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPCnyR6qZZbw=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCp9CqsRn5Y=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qZZbw=" + }, + "model": { + "$ref": "AAAAAAGAPCp84qsIizc=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1594, + "width": 160.7861328125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCqE2qtH91E=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qZZbw=" + }, + "model": { + "$ref": "AAAAAAGAPCqEt6s+HlI=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1609, + "width": 160.7861328125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCqItatrJLk=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qZZbw=" + }, + "model": { + "$ref": "AAAAAAGAPCqIjqtiAxk=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1624, + "width": 160.7861328125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1528, + "top": 1589, + "width": 170.7861328125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPCnyR6qacBE=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 496, + "top": 936, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPCnyR6qbhsM=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 496, + "top": 936, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1528, + "top": 1496, + "width": 170.7861328125, + "height": 146, + "nameCompartment": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPCnyR6qZZbw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPCnyR6qacBE=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPCnyR6qbhsM=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPCwoxq9nUGU=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPCwoxq9lm94=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCwoxq9ow70=", + "_parent": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "model": { + "$ref": "AAAAAAGAPCwoxq9lm94=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1593, + "top": 1432, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCwoxq9pgNU=", + "_parent": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "model": { + "$ref": "AAAAAAGAPCwoxq9lm94=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1578, + "top": 1433, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCwoxq9qtb4=", + "_parent": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "model": { + "$ref": "AAAAAAGAPCwoxq9lm94=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1622, + "top": 1431, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "tail": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "lineStyle": 1, + "points": "1610:1495;1606:1381", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPCwoxq9ow70=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPCwoxq9pgNU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPCwoxq9qtb4=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPQMJ63hIQC8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPQMJ63hJTUk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPQMJ63hKJJk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1088, + "top": 1920, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQMJ63hLNu0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "font": "Arial;13;1", + "left": 1717, + "top": 1503, + "width": 160.7861328125, + "height": 13, + "text": "PictureFillSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQMJ63hM0WA=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1088, + "top": 1920, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQMJ63hNiQU=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1088, + "top": 1920, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1712, + "top": 1496, + "width": 170.7861328125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQMJ63hKJJk=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPQMJ63hLNu0=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPQMJ63hM0WA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQMJ63hNiQU=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPQMJ63hOhZk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQM7f3jBJ7M=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQM7WHi4dEU=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1526, + "width": 160.7861328125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQND4Xj379s=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNDuXjuWOY=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1541, + "width": 160.7861328125, + "height": 13, + "text": "+height", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNGE3kbdFg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNF6nkSbuY=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1556, + "width": 160.7861328125, + "height": 13, + "text": "+outline: SimpleLineSymbol", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNIx3k/XFc=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNIonk2nHk=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1571, + "width": 160.7861328125, + "height": 13, + "text": "+url", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNKqnljCV0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNKhXlabsA=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1586, + "width": 160.7861328125, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNMZnmH/hI=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNMP3l+opg=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1601, + "width": 160.7861328125, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNOvHmrcrM=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNOl3miql8=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1616, + "width": 160.7861328125, + "height": 13, + "text": "+xscale", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNQdXnPFQ0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNQUnnGgkw=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1631, + "width": 160.7861328125, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNVUHoXv8w=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNVK3oOyW0=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1646, + "width": 160.7861328125, + "height": 13, + "text": "+yscale", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1712, + "top": 1521, + "width": 170.7861328125, + "height": 143 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPQMJ63hPGHg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPQP0snvrEeE=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hPGHg=" + }, + "model": { + "$ref": "AAAAAAGAPQP0jXviawc=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1669, + "width": 160.7861328125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPQP6XHwh97M=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hPGHg=" + }, + "model": { + "$ref": "AAAAAAGAPQP6OHwYjDU=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1684, + "width": 160.7861328125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPQP9KXxFN3I=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hPGHg=" + }, + "model": { + "$ref": "AAAAAAGAPQP8/nw8tdI=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1699, + "width": 160.7861328125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1712, + "top": 1664, + "width": 170.7861328125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPQMJ63hQXkg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 960, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPQMJ63hRc7s=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 960, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1712, + "top": 1496, + "width": 170.7861328125, + "height": 221, + "nameCompartment": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPQMJ63hPGHg=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPQMJ63hQXkg=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPQMJ63hRc7s=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPQQ/rX0URLo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQQ/rX0Sm58=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQQ/rX0VtkM=", + "_parent": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "model": { + "$ref": "AAAAAAGAPQQ/rX0Sm58=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1666, + "top": 1440, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQQ/rX0Wl60=", + "_parent": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "model": { + "$ref": "AAAAAAGAPQQ/rX0Sm58=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1654, + "top": 1449, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQQ/rX0XM6s=", + "_parent": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "model": { + "$ref": "AAAAAAGAPQQ/rX0Sm58=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1691, + "top": 1423, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "tail": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "lineStyle": 1, + "points": "1719:1495;1639:1381", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPQQ/rX0VtkM=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQQ/rX0Wl60=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQQ/rX0XM6s=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPQTeDH32cnY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX33gTs=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1521, + "top": 1590, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX34DKc=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1525, + "top": 1605, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX35nSg=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1514, + "top": 1561, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX3618o=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3zm0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1504, + "top": 1594, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX37f5c=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3zm0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1504, + "top": 1607, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX38gSU=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3zm0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1503, + "top": 1566, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX39Vcs=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH30fcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1538, + "top": 1588, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX3+aTI=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH30fcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1542, + "top": 1600, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX3/PDY=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH30fcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1529, + "top": 1561, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPQTeDX4Auts=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3zm0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPQTeDX4BSzc=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH30fcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "tail": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "lineStyle": 1, + "points": "1527:1581;1510:1584", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPQTeDX33gTs=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQTeDX34DKc=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQTeDX35nSg=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPQTeDX3618o=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPQTeDX37f5c=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPQTeDX38gSU=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPQTeDX39Vcs=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPQTeDX3+aTI=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPQTeDX3/PDY=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPQTeDX4Auts=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPQTeDX4BSzc=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPQTsHn5p+g8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5qTWg=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1609, + "top": 1670, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5rB/w=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1609, + "top": 1685, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5stGY=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1610, + "top": 1640, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5tREM=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5mdOE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1686, + "top": 1669, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5uFV8=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5mdOE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1683, + "top": 1683, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5vvws=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5mdOE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1690, + "top": 1642, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5wMFQ=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5nfsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1534, + "top": 1669, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5xqQc=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5nfsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1537, + "top": 1683, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5y2DI=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5nfsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1530, + "top": 1642, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPQTsHn5zeYw=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5mdOE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPQTsHn505Lo=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5nfsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "tail": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "points": "1712:1661;1509:1661", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPQTsHn5qTWg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQTsHn5rB/w=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQTsHn5stGY=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPQTsHn5tREM=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPQTsHn5uFV8=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPQTsHn5vvws=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPQTsHn5wMFQ=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPQTsHn5xqQc=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPQTsHn5y2DI=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPQTsHn5zeYw=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPQTsHn505Lo=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPQff+YT4B2c=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPQff+YT5brs=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPQff+YT6ibA=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 912, + "top": 1984, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQff+YT73zw=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "font": "Arial;13;1", + "left": 1909, + "top": 1287, + "width": 121.76708984375, + "height": 13, + "text": "TextSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQff+YT8ACs=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 912, + "top": 1984, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQff+oT9tm4=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 912, + "top": 1984, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1904, + "top": 1280, + "width": 131.76708984375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQff+YT6ibA=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPQff+YT73zw=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPQff+YT8ACs=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQff+oT9tm4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPQff+oT+U9k=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAILpBJc2o=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAICJA6v/o=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1310, + "width": 121.76708984375, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAORZCvhv0=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAOIJCgc6M=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1325, + "width": 121.76708984375, + "height": 13, + "text": "+angle", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSARAZDxqV8=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAQ2ZDiIF4=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1340, + "width": 121.76708984375, + "height": 13, + "text": "+backgroundColor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSATSZEzAa4=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSATI5Ek4IM=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1355, + "width": 121.76708984375, + "height": 13, + "text": "+borderLineColor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAVNZF1V5s=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAVEZFmIR8=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1370, + "width": 121.76708984375, + "height": 13, + "text": "+borderLineSize", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAXNpG3Gb0=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAXEZGod8M=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1385, + "width": 121.76708984375, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAZe5H5/4w=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAZV5HqksU=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1400, + "width": 121.76708984375, + "height": 13, + "text": "+font: Font", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAcbJI7qJg=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAcR5Is1X4=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1415, + "width": 121.76708984375, + "height": 13, + "text": "+haloColor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAebJJ9kFc=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAeRZJuhG0=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1430, + "width": 121.76708984375, + "height": 13, + "text": "+haloSize", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAgsJK/da8=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAgi5KwfFQ=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1445, + "width": 121.76708984375, + "height": 13, + "text": "+horizontalAlignment", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAi3JMB7Lg=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAitpLy8xw=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1460, + "width": 121.76708984375, + "height": 13, + "text": "+kerning", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAlBZNDIlM=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAk2pM04uU=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1475, + "width": 121.76708984375, + "height": 13, + "text": "+lineHeight", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAnOJOFtK8=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAnFJN2K9s=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1490, + "width": 121.76708984375, + "height": 13, + "text": "+lineWidth", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSApW5PHPKo=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSApNZO4TrY=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1505, + "width": 121.76708984375, + "height": 13, + "text": "+rotated", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSDpdpiVETQ=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSDpSpiG08U=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1520, + "width": 121.76708984375, + "height": 13, + "text": "+text", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSDysJkT9m8=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSDyipkENGA=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1535, + "width": 121.76708984375, + "height": 13, + "text": "+verticalAlignment", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSD1pZlVxKo=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSD1fJlGhvw=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1550, + "width": 121.76708984375, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSFI3pt8ews=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSFIs5ttMYs=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1565, + "width": 121.76708984375, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1904, + "top": 1305, + "width": 131.76708984375, + "height": 278 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPQff+oT/0h0=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPR/v/48X06k=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT/0h0=" + }, + "model": { + "$ref": "AAAAAAGAPR/v2o8IG9I=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1588, + "width": 121.76708984375, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPR/8/I+hiJ0=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT/0h0=" + }, + "model": { + "$ref": "AAAAAAGAPR/81I+SarM=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1603, + "width": 121.76708984375, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPR//VY/j/To=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT/0h0=" + }, + "model": { + "$ref": "AAAAAAGAPR//MI/UW7w=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1618, + "width": 121.76708984375, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1904, + "top": 1583, + "width": 131.76708984375, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPQff+oUASTM=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 456, + "top": 992, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPQff+oUBbVo=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 456, + "top": 992, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1904, + "top": 1280, + "width": 131.76708984375, + "height": 356, + "nameCompartment": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPQff+oT/0h0=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPQff+oUASTM=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPQff+oUBbVo=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPQhWsoWnkVI=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQhWsoWl3dc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQhWsoWo0Ew=", + "_parent": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "model": { + "$ref": "AAAAAAGAPQhWsoWl3dc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1719, + "top": 1274, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQhWsoWpfhI=", + "_parent": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "model": { + "$ref": "AAAAAAGAPQhWsoWl3dc=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1710, + "top": 1286, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQhWsoWqvn0=", + "_parent": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "model": { + "$ref": "AAAAAAGAPQhWsoWl3dc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1738, + "top": 1251, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "lineStyle": 1, + "points": "1903:1405;1555:1133", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPQhWsoWo0Ew=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQhWsoWpfhI=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQhWsoWqvn0=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPS3xYKL0b/4=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPS3xYKL1KHw=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPS3xYKL2ebU=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 976, + "top": 1952, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPS3xYKL35s8=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "font": "Arial;13;1", + "left": 1933, + "top": 1679, + "width": 80.57080078125, + "height": 13, + "text": "Font" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPS3xYKL41mk=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 976, + "top": 1952, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPS3xYKL5gP4=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 976, + "top": 1952, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1928, + "top": 1672, + "width": 90.57080078125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPS3xYKL2ebU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPS3xYKL35s8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPS3xYKL41mk=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPS3xYKL5gP4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPS3xYKL6R/Y=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4SpKO7AQ4=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4SfqOsEp4=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1702, + "width": 80.57080078125, + "height": 13, + "text": "+decoration", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4ZkqQheL8=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4ZY6QSK9k=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1717, + "width": 80.57080078125, + "height": 13, + "text": "+family", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4cCaRjfvc=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4b4KRUp0w=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1732, + "width": 80.57080078125, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4eT6SlCv0=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4eKqSWMIQ=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1747, + "width": 80.57080078125, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4gZ6TnLcg=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4gOqTYZto=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1762, + "width": 80.57080078125, + "height": 13, + "text": "+weight", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1928, + "top": 1697, + "width": 90.57080078125, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPS3xYKL7b/k=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPS8byazlViU=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL7b/k=" + }, + "model": { + "$ref": "AAAAAAGAPS8boazWojk=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1785, + "width": 80.57080078125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPS8jN61jd0Y=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL7b/k=" + }, + "model": { + "$ref": "AAAAAAGAPS8jDq1UJEA=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1800, + "width": 80.57080078125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPS8lh620UOM=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL7b/k=" + }, + "model": { + "$ref": "AAAAAAGAPS8lYK2li7A=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1815, + "width": 80.57080078125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1928, + "top": 1780, + "width": 90.57080078125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPS3xYKL8wkA=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 488, + "top": 976, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPS3xYKL9dXs=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 488, + "top": 976, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1928, + "top": 1672, + "width": 90.57080078125, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPS3xYKL7b/k=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPS3xYKL8wkA=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPS3xYKL9dXs=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPS6KpabfujQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabgWK0=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1985, + "top": 1646, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabhLRk=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2000, + "top": 1646, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabiqxA=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1956, + "top": 1647, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabjOP8=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbc4jk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1986, + "top": 1655, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabkrpE=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbc4jk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1999, + "top": 1658, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabltA0=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbc4jk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1958, + "top": 1651, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6Kpabmkkw=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbd/TA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1986, + "top": 1639, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabnrMk=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbd/TA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1999, + "top": 1636, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6Kpabo7ro=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbd/TA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1958, + "top": 1643, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPS6KpabpliQ=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbc4jk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPS6KpabqOVc=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbd/TA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "tail": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "lineStyle": 1, + "points": "1971:1636;1971:1671", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPS6KpabgWK0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPS6KpabhLRk=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPS6KpabiqxA=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPS6KpabjOP8=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPS6KpabkrpE=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPS6KpabltA0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPS6Kpabmkkw=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPS6KpabnrMk=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPS6Kpabo7ro=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPS6KpabpliQ=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPS6KpabqOVc=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAP6S17MjIqpw=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAP6S17MjJsCI=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAP6S17MjK9LY=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 336, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP6S17MjL4mU=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "font": "Arial;13;1", + "left": 2093, + "top": 1055, + "width": 187.4970703125, + "height": 13, + "text": "Symbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP6S17MjMWnM=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 336, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP6S17MjN+/8=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 336, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2088, + "top": 1048, + "width": 197.4970703125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAP6S17MjK9LY=" + }, + "nameLabel": { + "$ref": "AAAAAAGAP6S17MjL4mU=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAP6S17MjMWnM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAP6S17MjN+/8=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAP6S17MjOyVk=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAP6byBMxNWNw=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjOyVk=" + }, + "model": { + "$ref": "AAAAAAGAP6bx38w7uLM=" + }, + "font": "Arial;13;0", + "left": 2093, + "top": 1078, + "width": 187.4970703125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAP6bpZMt+sLY=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjOyVk=" + }, + "model": { + "$ref": "AAAAAAGAP6bpOstslHY=" + }, + "font": "Arial;13;0", + "left": 2093, + "top": 1093, + "width": 187.4970703125, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAP6bvwcv8vqE=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjOyVk=" + }, + "model": { + "$ref": "AAAAAAGAP6bvnMvqZyg=" + }, + "font": "Arial;13;0", + "left": 2093, + "top": 1108, + "width": 187.4970703125, + "height": 13, + "text": "+symbolLayers: Symbol3DLayer", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2088, + "top": 1073, + "width": 197.4970703125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAP6S17MjP11s=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "font": "Arial;13;0", + "left": 2088, + "top": 1126, + "width": 197.4970703125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAP6S17MjQSC4=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -296, + "top": 168, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAP6S17MjRxnU=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -296, + "top": 168, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2088, + "top": 1048, + "width": 197.4970703125, + "height": 103, + "nameCompartment": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAP6S17MjOyVk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAP6S17MjP11s=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAP6S17MjQSC4=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAP6S17MjRxnU=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAP6VdPsogt5M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAP6VdPsoeetU=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP6VdPsohCjE=", + "_parent": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "model": { + "$ref": "AAAAAAGAP6VdPsoeetU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1820, + "top": 1106, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP6VdPsoiBVU=", + "_parent": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "model": { + "$ref": "AAAAAAGAP6VdPsoeetU=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1820, + "top": 1121, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP6VdPsojJm4=", + "_parent": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "model": { + "$ref": "AAAAAAGAP6VdPsoeetU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1821, + "top": 1077, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "lineStyle": 1, + "points": "2087:1099;1555:1097", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAP6VdPsohCjE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAP6VdPsoiBVU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAP6VdPsojJm4=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAP8/5/T2zufk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAP8/5/T20DgQ=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAP8/5/T21uxE=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -352, + "top": 1984, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP8/5/T22bXc=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "font": "Arial;13;1", + "left": 2133, + "top": 2055, + "width": 98.26171875, + "height": 13, + "text": "Symbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP8/5/T23zRY=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -352, + "top": 1984, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP8/5/T24vDs=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -352, + "top": 1984, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2128, + "top": 2048, + "width": 108.26171875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAP8/5/T21uxE=" + }, + "nameLabel": { + "$ref": "AAAAAAGAP8/5/T22bXc=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAP8/5/T23zRY=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAP8/5/T24vDs=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAP8/5/T25IMk=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAP9Vqf0BVvHk=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T25IMk=" + }, + "model": { + "$ref": "AAAAAAGAP9VqWEBDC5M=" + }, + "font": "Arial;13;0", + "left": 2133, + "top": 2078, + "width": 98.26171875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2128, + "top": 2073, + "width": 108.26171875, + "height": 23 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAP8/5/T26ZYI=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAP9WNUUGXHo8=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T26ZYI=" + }, + "model": { + "$ref": "AAAAAAGAP9WNLEGF+44=" + }, + "font": "Arial;13;0", + "left": 2133, + "top": 2101, + "width": 98.26171875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAP9WlTEMkprQ=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T26ZYI=" + }, + "model": { + "$ref": "AAAAAAGAP9WlJEMSNXw=" + }, + "font": "Arial;13;0", + "left": 2133, + "top": 2116, + "width": 98.26171875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2128, + "top": 2096, + "width": 108.26171875, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAP8/5/T27SB0=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -208, + "top": 328, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAP8/5/T28FXA=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -208, + "top": 328, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2128, + "top": 2048, + "width": 108.26171875, + "height": 86, + "nameCompartment": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAP8/5/T25IMk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAP8/5/T26ZYI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAP8/5/T27SB0=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAP8/5/T28FXA=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAP9XAwkPvc1M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAwkPwXAY=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2197, + "top": 1593, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAwkPxHKM=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2212, + "top": 1593, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAwkPyQeI=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2168, + "top": 1592, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAwkPzAt0=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPs9B8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2200, + "top": 1171, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P0LwY=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPs9B8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2214, + "top": 1173, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P1d9g=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPs9B8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2173, + "top": 1166, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P2EkY=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPtw8Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2196, + "top": 2015, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P3VJo=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPtw8Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2209, + "top": 2012, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P4O+I=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPtw8Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2168, + "top": 2019, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAP9XAw0P5lng=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPs9B8=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAP9XAw0P6/Tc=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPtw8Y=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "lineStyle": 1, + "points": "2186:1151;2181:2047", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAP9XAwkPwXAY=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAP9XAwkPxHKM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAP9XAwkPyQeI=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAP9XAwkPzAt0=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAP9XAw0P0LwY=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAP9XAw0P1d9g=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAP9XAw0P2EkY=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAP9XAw0P3VJo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAP9XAw0P4O+I=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAP9XAw0P5lng=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAP9XAw0P6/Tc=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQHO4GV0qRew=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQHO4GV0r5pY=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQHO4Gl0su54=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 112, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHO4Gl0tCEM=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "font": "Arial;13;1", + "left": 2301, + "top": 1303, + "width": 96.0654296875, + "height": 13, + "text": "PointSymbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHO4Gl0u6Pc=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 112, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHO4Gl0vKA4=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 112, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2296, + "top": 1296, + "width": 106.0654296875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHO4Gl0su54=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQHO4Gl0tCEM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQHO4Gl0u6Pc=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHO4Gl0vKA4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQHO4Gl0wYjk=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPbt14/Mhk=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPbk14qDNA=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1326, + "width": 96.0654296875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPo+V8v5gQ=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPo018aeJo=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1341, + "width": 96.0654296875, + "height": 13, + "text": "+callout", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPrE1+Pxyw=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPq7F96x14=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1356, + "width": 96.0654296875, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPtJl/vZKM=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPtAV/aljM=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1371, + "width": 96.0654296875, + "height": 13, + "text": "+symbolLayers", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPu7WBPLOE=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPuxGA6UBk=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1386, + "width": 96.0654296875, + "height": 13, + "text": "+verticalOffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2296, + "top": 1321, + "width": 106.0654296875, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQHO4Gl0xIS8=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHYPjWRlPzk=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0xIS8=" + }, + "model": { + "$ref": "AAAAAAGAQHYPZmRQTEw=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1409, + "width": 96.0654296875, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHYV+mT76q4=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0xIS8=" + }, + "model": { + "$ref": "AAAAAAGAQHYVz2Tm/qo=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1424, + "width": 96.0654296875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHYYXWVbi8o=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0xIS8=" + }, + "model": { + "$ref": "AAAAAAGAQHYYN2VGn1k=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1439, + "width": 96.0654296875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2296, + "top": 1404, + "width": 106.0654296875, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQHO4Gl0yzMo=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 56, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQHO4Gl0z6yU=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 56, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2296, + "top": 1296, + "width": 106.0654296875, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQHO4Gl0xIS8=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQHO4Gl0yzMo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQHO4Gl0z6yU=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQHbWNI6go9U=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHbWNI6eATI=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHbWNI6hWow=", + "_parent": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "model": { + "$ref": "AAAAAAGAQHbWNI6eATI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2245, + "top": 1224, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHbWNI6i6Gc=", + "_parent": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "model": { + "$ref": "AAAAAAGAQHbWNI6eATI=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2232, + "top": 1232, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHbWNI6j2Xk=", + "_parent": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "model": { + "$ref": "AAAAAAGAQHbWNI6eATI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2270, + "top": 1209, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "tail": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "lineStyle": 1, + "points": "2301:1295;2216:1151", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQHbWNI6hWow=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHbWNI6i6Gc=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHbWNI6j2Xk=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQHci648v8Jg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQHci648wfDg=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQHci648xm3U=", + "_parent": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -576, + "top": 416, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHci648y398=", + "_parent": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "font": "Arial;13;1", + "left": 2205, + "top": 1663, + "width": 124.9853515625, + "height": 13, + "text": "IconSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHci648zUvA=", + "_parent": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -576, + "top": 416, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHci6480uGg=", + "_parent": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -576, + "top": 416, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2200, + "top": 1656, + "width": 134.9853515625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHci648xm3U=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQHci648y398=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQHci648zUvA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHci6480uGg=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQHci6481mLQ=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHiSDaEIOXU=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHiR5aDzLYY=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1686, + "width": 124.9853515625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHiYZ6GekyE=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHiYP6GJhto=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1701, + "width": 124.9853515625, + "height": 13, + "text": "+anchor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHiaXaH+jCo=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHiaNaHpMeE=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1716, + "width": 124.9853515625, + "height": 13, + "text": "+anchorPosition", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHicMqJeplA=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHicC6JJ2ps=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1731, + "width": 124.9853515625, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHidn6K+gmY=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHidd6KpQY0=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1746, + "width": 124.9853515625, + "height": 13, + "text": "+outline", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHift6MepBw=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHifkKMJgeQ=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1761, + "width": 124.9853515625, + "height": 13, + "text": "+resource", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHihY6N+OW8=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHihOaNp1o4=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1776, + "width": 124.9853515625, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2200, + "top": 1681, + "width": 134.9853515625, + "height": 113 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQHci6482BLA=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHlBOamqzMI=", + "_parent": { + "$ref": "AAAAAAGAQHci6482BLA=" + }, + "model": { + "$ref": "AAAAAAGAQHlBEamVlhM=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1799, + "width": 124.9853515625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHlHeapAByk=", + "_parent": { + "$ref": "AAAAAAGAQHci6482BLA=" + }, + "model": { + "$ref": "AAAAAAGAQHlHU6orzwA=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1814, + "width": 124.9853515625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHlJkqqg+fk=", + "_parent": { + "$ref": "AAAAAAGAQHci6482BLA=" + }, + "model": { + "$ref": "AAAAAAGAQHlJbKqLtE0=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1829, + "width": 124.9853515625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2200, + "top": 1794, + "width": 134.9853515625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQHci6483qFU=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -312, + "top": 336, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQHci6484OCg=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -312, + "top": 336, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2200, + "top": 1656, + "width": 134.9853515625, + "height": 191, + "nameCompartment": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQHci6482BLA=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQHci6483qFU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQHci6484OCg=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQHcyhZBoBpU=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHcyhZBm0hs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHcyhZBpnaU=", + "_parent": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "model": { + "$ref": "AAAAAAGAQHcyhZBm0hs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2231, + "top": 1944, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHcyhZBqlPU=", + "_parent": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "model": { + "$ref": "AAAAAAGAQHcyhZBm0hs=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2246, + "top": 1948, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHcyhZBrWm8=", + "_parent": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "model": { + "$ref": "AAAAAAGAQHcyhZBm0hs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2202, + "top": 1937, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "lineStyle": 1, + "points": "2242:1847;2192:2047", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQHcyhZBpnaU=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHcyhZBqlPU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHcyhZBrWm8=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQHpof7ePZ3E=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eQAD8=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2345, + "top": 1549, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eRS9Q=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2360, + "top": 1549, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eSzzw=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2315, + "top": 1550, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eTIUI=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreMF+Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2345, + "top": 1475, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eUIc0=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreMF+Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2358, + "top": 1478, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eVYJY=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreMF+Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2317, + "top": 1471, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eWbVI=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreNRd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2345, + "top": 1624, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eXzL0=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreNRd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2358, + "top": 1621, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eYolo=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreNRd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2317, + "top": 1628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQHpof7eZQkE=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreMF+Y=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQHpof7eadhQ=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreNRd8=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "tail": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "points": "2330:1456;2330:1656", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQHpof7eQAD8=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHpof7eRS9Q=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHpof7eSzzw=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQHpof7eTIUI=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQHpof7eUIc0=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQHpof7eVYJY=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQHpof7eWbVI=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQHpof7eXzL0=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQHpof7eYolo=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQHpof7eZQkE=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQHpof7eadhQ=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQI6jGOak5LQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQI6jGOalULs=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6jGOamfLc=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 48, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6jGOan4lw=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "font": "Arial;13;1", + "left": 2557, + "top": 1311, + "width": 90.29541015625, + "height": 13, + "text": "LineSymbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6jGOaon5I=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 48, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6jGOaphYg=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 48, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2552, + "top": 1304, + "width": 100.29541015625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQI6jGOamfLc=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQI6jGOan4lw=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQI6jGOaon5I=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQI6jGOaphYg=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQI6jGOaqStk=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI7RZehHBIg=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOaqStk=" + }, + "model": { + "$ref": "AAAAAAGAQI7RO+gvDaw=" + }, + "font": "Arial;13;0", + "left": 2557, + "top": 1334, + "width": 90.29541015625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI7YSuj1EEw=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOaqStk=" + }, + "model": { + "$ref": "AAAAAAGAQI7YIujdTVQ=" + }, + "font": "Arial;13;0", + "left": 2557, + "top": 1349, + "width": 90.29541015625, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI7fRenNc5E=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOaqStk=" + }, + "model": { + "$ref": "AAAAAAGAQI7fHum1PPw=" + }, + "font": "Arial;13;0", + "left": 2557, + "top": 1364, + "width": 90.29541015625, + "height": 13, + "text": "+symbolLayers", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2552, + "top": 1329, + "width": 100.29541015625, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQI6jGOarZ7Y=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI83ZO7MOkU=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOarZ7Y=" + }, + "model": { + "$ref": "AAAAAAGAQI83Pu60uKU=" + }, + "font": "Arial;13;0", + "left": 2557, + "top": 1387, + "width": 90.29541015625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI89tO96OHs=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOarZ7Y=" + }, + "model": { + "$ref": "AAAAAAGAQI89iO9irzg=" + }, + "font": "Arial;13;0", + "left": 2557, + "top": 1402, + "width": 90.29541015625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI8/5+/pUmk=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOarZ7Y=" + }, + "model": { + "$ref": "AAAAAAGAQI8/v+/RXtM=" + }, + "font": "Arial;13;0", + "left": 2557, + "top": 1417, + "width": 90.29541015625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2552, + "top": 1382, + "width": 100.29541015625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQI6jGOaspYk=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 24, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQI6jGOatLLQ=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 24, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2552, + "top": 1304, + "width": 100.29541015625, + "height": 131, + "nameCompartment": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQI6jGOaqStk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQI6jGOarZ7Y=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQI6jGOaspYk=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQI6jGOatLLQ=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQJBZ8ACOlRk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJBZ8ACM7PY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBZ8ACPeVE=", + "_parent": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "model": { + "$ref": "AAAAAAGAQJBZ8ACM7PY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2399, + "top": 1249, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBZ8ACQETM=", + "_parent": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "model": { + "$ref": "AAAAAAGAQJBZ8ACM7PY=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2391, + "top": 1262, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBZ8ACRbEc=", + "_parent": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "model": { + "$ref": "AAAAAAGAQJBZ8ACM7PY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2416, + "top": 1224, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "tail": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "lineStyle": 1, + "points": "2551:1336;2266:1151", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQJBZ8ACPeVE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJBZ8ACQETM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJBZ8ACRbEc=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQJBpFAEyXK4=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJBpFAEwA94=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBpFAEzB1w=", + "_parent": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "model": { + "$ref": "AAAAAAGAQJBpFAEwA94=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2380, + "top": 1932, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBpFAE0Dy4=", + "_parent": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "model": { + "$ref": "AAAAAAGAQJBpFAEwA94=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2390, + "top": 1943, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBpFAE1gVA=", + "_parent": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "model": { + "$ref": "AAAAAAGAQJBpFAEwA94=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2361, + "top": 1909, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "lineStyle": 1, + "points": "2511:1808;2231:2047", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQJBpFAEzB1w=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJBpFAE0Dy4=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJBpFAE1gVA=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQJB91wHYp2s=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHZ4Fw=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2604, + "top": 1539, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHaANg=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2619, + "top": 1540, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHbV8A=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2575, + "top": 1538, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHcJGw=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHV5+E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2610, + "top": 1455, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHdzyA=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHV5+E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2623, + "top": 1458, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHev5k=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHV5+E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2583, + "top": 1449, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHf4ho=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHWZ0U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2600, + "top": 1623, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHgUDE=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHWZ0U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2613, + "top": 1622, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHhRqY=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHWZ0U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2572, + "top": 1626, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQJB91wHidSU=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHV5+E=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQJB91wHj0Is=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHWZ0U=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "tail": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "lineStyle": 1, + "points": "2597:1435;2584:1655", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQJB91wHZ4Fw=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJB91wHaANg=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJB91wHbV8A=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQJB91wHcJGw=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQJB91wHdzyA=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQJB91wHev5k=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQJB91wHf4ho=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQJB91wHgUDE=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQJB91wHhRqY=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQJB91wHidSU=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQJB91wHj0Is=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQJPNQDjq3dQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQJPNQDjrEHc=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQJPNQDjsZh8=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -16, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQJPNQDjtVq4=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "font": "Arial;13;1", + "left": 2797, + "top": 1295, + "width": 114.84814453125, + "height": 13, + "text": "PolygonSymbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQJPNQDju7ps=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -16, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQJPNQDjv96U=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -16, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2792, + "top": 1288, + "width": 124.84814453125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJPNQDjsZh8=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQJPNQDjtVq4=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQJPNQDju7ps=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJPNQDjv96U=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQJPNQDjwCpo=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQJPv2zpN3O0=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjwCpo=" + }, + "model": { + "$ref": "AAAAAAGAQJPvrzoyMNs=" + }, + "font": "Arial;13;0", + "left": 2797, + "top": 1318, + "width": 114.84814453125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQJP6zjtbIHg=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjwCpo=" + }, + "model": { + "$ref": "AAAAAAGAQJP6pjtAYNM=" + }, + "font": "Arial;13;0", + "left": 2797, + "top": 1333, + "width": 114.84814453125, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQJP9JTvZiSI=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjwCpo=" + }, + "model": { + "$ref": "AAAAAAGAQJP8/ju+xJc=" + }, + "font": "Arial;13;0", + "left": 2797, + "top": 1348, + "width": 114.84814453125, + "height": 13, + "text": "+symbolLayers", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2792, + "top": 1313, + "width": 124.84814453125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQJPNQDjxeds=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQJQJdjzP6kM=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjxeds=" + }, + "model": { + "$ref": "AAAAAAGAQJQJTTy0Pz0=" + }, + "font": "Arial;13;0", + "left": 2797, + "top": 1371, + "width": 114.84814453125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQJQQIz2Vo/k=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjxeds=" + }, + "model": { + "$ref": "AAAAAAGAQJQP+D16Vf8=" + }, + "font": "Arial;13;0", + "left": 2797, + "top": 1386, + "width": 114.84814453125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQJQShD4TuAw=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjxeds=" + }, + "model": { + "$ref": "AAAAAAGAQJQSWz34cwY=" + }, + "font": "Arial;13;0", + "left": 2797, + "top": 1401, + "width": 114.84814453125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2792, + "top": 1366, + "width": 124.84814453125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQJPNQDjybwU=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -8, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQJPNQDjzOsI=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -8, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2792, + "top": 1288, + "width": 124.84814453125, + "height": 131, + "nameCompartment": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQJPNQDjwCpo=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQJPNQDjxeds=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQJPNQDjybwU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQJPNQDjzOsI=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQJR3UkvOHJo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJR3UUvMi3E=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJR3UkvPfd4=", + "_parent": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "model": { + "$ref": "AAAAAAGAQJR3UUvMi3E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2831, + "top": 1159, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJR3UkvQei4=", + "_parent": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "model": { + "$ref": "AAAAAAGAQJR3UUvMi3E=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2831, + "top": 1174, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJR3UkvRy1w=", + "_parent": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "model": { + "$ref": "AAAAAAGAQJR3UUvMi3E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2832, + "top": 1129, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "points": "2832:1288;2832:1150;2284:1150", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQJR3UkvPfd4=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJR3UkvQei4=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJR3UkvRy1w=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQKMeBnOU3pU=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQKMeBnOSzgA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMeBnOVxvY=", + "_parent": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "model": { + "$ref": "AAAAAAGAQKMeBnOSzgA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2894, + "top": 2072, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMeBnOWsmM=", + "_parent": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "model": { + "$ref": "AAAAAAGAQKMeBnOSzgA=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2894, + "top": 2087, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMeBnOXDsI=", + "_parent": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "model": { + "$ref": "AAAAAAGAQKMeBnOSzgA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2895, + "top": 2042, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "points": "2895:1831;2895:2063;2235:2063", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQKMeBnOVxvY=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQKMeBnOWsmM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQKMeBnOXDsI=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQKMnaHQfR5Y=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQgNHo=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2875, + "top": 1530, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQhhl4=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2890, + "top": 1530, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQi6TY=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2845, + "top": 1531, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQjj+M=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQc7Rs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2875, + "top": 1437, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQkBlA=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQc7Rs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2888, + "top": 1440, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQlgk0=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQc7Rs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2847, + "top": 1433, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQmq5o=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQdqUs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2875, + "top": 1624, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQnK7k=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQdqUs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2888, + "top": 1621, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQonBQ=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQdqUs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2847, + "top": 1628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQKMnaXQpT2Q=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQc7Rs=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQKMnaXQqcZE=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQdqUs=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "points": "2860:1418;2860:1656", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQKMnaXQgNHo=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQKMnaXQhhl4=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQKMnaXQi6TY=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQKMnaXQjj+M=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQKMnaXQkBlA=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQKMnaXQlgk0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQKMnaXQmq5o=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQKMnaXQnK7k=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQKMnaXQonBQ=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQKMnaXQpT2Q=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQKMnaXQqcZE=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQLjRBoVMI9U=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQLjRBoVNFhk=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQLjRBoVO9Fw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": -16, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLjRBoVPLIA=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "font": "Arial;13;1", + "left": 3141, + "top": 1303, + "width": 150.6689453125, + "height": 13, + "text": "LabelSymbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLjRBoVQcTM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": -16, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLjRBoVRh+I=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": -16, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 3136, + "top": 1296, + "width": 160.6689453125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLjRBoVO9Fw=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQLjRBoVPLIA=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQLjRBoVQcTM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLjRBoVRh+I=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQLjRBoVSSjQ=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkJQIqgt9U=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkJF4qC7uw=" + }, + "font": "Arial;13;0", + "left": 3141, + "top": 1326, + "width": 150.6689453125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkP1Yt+nAw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkPq4tgUdM=" + }, + "font": "Arial;13;0", + "left": 3141, + "top": 1341, + "width": 150.6689453125, + "height": 13, + "text": "+callout", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkR04wL9EQ=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkRqYvtqAE=" + }, + "font": "Arial;13;0", + "left": 3141, + "top": 1356, + "width": 150.6689453125, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkUA4yYwFg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkT24x6g2s=" + }, + "font": "Arial;13;0", + "left": 3141, + "top": 1371, + "width": 150.6689453125, + "height": 13, + "text": "+symbolLayers", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkWgI0lYgg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkWVo0H4Q8=" + }, + "font": "Arial;13;0", + "left": 3141, + "top": 1386, + "width": 150.6689453125, + "height": 13, + "text": "+verticalOffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 3136, + "top": 1321, + "width": 160.6689453125, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQLjRBoVT+pk=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLjfqIbWTPM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVT+pk=" + }, + "model": { + "$ref": "AAAAAAGAQLjff4a4sxM=" + }, + "font": "Arial;13;0", + "left": 3141, + "top": 1409, + "width": 150.6689453125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLjl84e03IQ=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVT+pk=" + }, + "model": { + "$ref": "AAAAAAGAQLjlyoeW4cw=" + }, + "font": "Arial;13;0", + "left": 3141, + "top": 1424, + "width": 150.6689453125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLjoMohBjUc=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVT+pk=" + }, + "model": { + "$ref": "AAAAAAGAQLjoBYgjCv8=" + }, + "font": "Arial;13;0", + "left": 3141, + "top": 1439, + "width": 150.6689453125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 3136, + "top": 1404, + "width": 160.6689453125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQLjRBoVUyQg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 280, + "top": -8, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQLjRB4VVp9k=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3165, + "top": 1296, + "width": 130.6689453125, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 3136, + "top": 1296, + "width": 160.6689453125, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQLjRBoVT+pk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQLjRBoVUyQg=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQLjRB4VVp9k=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQLnZqZjXg3U=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLnZqZjVkdk=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLnZqZjYgFI=", + "_parent": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "model": { + "$ref": "AAAAAAGAQLnZqZjVkdk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3215, + "top": 1159, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLnZqZjZLo0=", + "_parent": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "model": { + "$ref": "AAAAAAGAQLnZqZjVkdk=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3215, + "top": 1174, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLnZqZjaT2c=", + "_parent": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "model": { + "$ref": "AAAAAAGAQLnZqZjVkdk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3216, + "top": 1129, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "tail": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "points": "3216:1296;3216:1150;2284:1150", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQLnZqZjYgFI=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLnZqZjZLo0=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLnZqZjaT2c=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQLns6JmlVRk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQLns6ZmmuQ4=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQLns6ZmnQz0=", + "_parent": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 624, + "top": 240, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLns6ZmoUbY=", + "_parent": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "font": "Arial;13;1", + "left": 3165, + "top": 1655, + "width": 124.02685546875, + "height": 13, + "text": "TextSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLns6Zmp+VU=", + "_parent": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 624, + "top": 240, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLns6ZmqOIg=", + "_parent": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 624, + "top": 240, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 3160, + "top": 1648, + "width": 134.02685546875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLns6ZmnQz0=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQLns6ZmoUbY=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQLns6Zmp+VU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLns6ZmqOIg=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQLns6Zmrs/4=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLoWUpuBuNA=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLoWJ5tje4c=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1678, + "width": 124.02685546875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLocfpxfnd8=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLocVpxB5AM=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1693, + "width": 124.02685546875, + "height": 13, + "text": "+background", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLofKJzsoYc=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLofAJzO1GA=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1708, + "width": 124.02685546875, + "height": 13, + "text": "+font", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLohDJ15dOM=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLog4Z1bzo4=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1723, + "width": 124.02685546875, + "height": 13, + "text": "+halo", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLojPJ4GhSY=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLojE53omX0=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1738, + "width": 124.02685546875, + "height": 13, + "text": "+horizontalAlignment", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLolfZ6T3fI=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLolVZ51Tdg=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1753, + "width": 124.02685546875, + "height": 13, + "text": "+lineHeight", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLonc58goqg=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLonSp8CGas=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1768, + "width": 124.02685546875, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLopup+tBm8=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLopjp+PrHs=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1783, + "width": 124.02685546875, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLosE6A6wU8=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLor6qAcWyY=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1798, + "width": 124.02685546875, + "height": 13, + "text": "+text", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLq7R6iEU80=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLq7GahmsQQ=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1813, + "width": 124.02685546875, + "height": 13, + "text": "+verticalAlignment", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 3160, + "top": 1673, + "width": 134.02685546875, + "height": 158 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQLns6Zmsbbk=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLrMgqpWe4I=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmsbbk=" + }, + "model": { + "$ref": "AAAAAAGAQLrMV6o4fWE=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1836, + "width": 124.02685546875, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLrS4as0gpM=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmsbbk=" + }, + "model": { + "$ref": "AAAAAAGAQLrSt6sWGnA=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1851, + "width": 124.02685546875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLrVDqvBW34=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmsbbk=" + }, + "model": { + "$ref": "AAAAAAGAQLrU4qujo+U=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1866, + "width": 124.02685546875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 3160, + "top": 1831, + "width": 134.02685546875, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQLns6Zmtu+E=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 312, + "top": 120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQLns6ZmulWE=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 312, + "top": 120, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 3160, + "top": 1648, + "width": 134.02685546875, + "height": 236, + "nameCompartment": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQLns6Zmsbbk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQLns6Zmtu+E=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQLns6ZmulWE=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQLsG/7AEF2M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AFuFA=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3234, + "top": 1545, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AGddo=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3249, + "top": 1545, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AHS58=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3205, + "top": 1546, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AIFAY=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ABSMo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3232, + "top": 1476, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AJvLI=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ABSMo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3246, + "top": 1478, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AKKlA=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ABSMo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3205, + "top": 1473, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7ALPOs=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ACCWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3237, + "top": 1614, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AMZ1k=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ACCWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3250, + "top": 1611, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7ANfkw=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ACCWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3209, + "top": 1619, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQLsG/7AOwEs=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ABSMo=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQLsG/7APzkw=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ACCWw=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "tail": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "lineStyle": 1, + "points": "3217:1457;3223:1647", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQLsG/7AFuFA=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLsG/7AGddo=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLsG/7AHS58=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQLsG/7AIFAY=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQLsG/7AJvLI=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQLsG/7AKKlA=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQLsG/7ALPOs=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQLsG/7AMZ1k=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQLsG/7ANfkw=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQLsG/7AOwEs=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQLsG/7APzkw=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQLsTnLEIRdg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLsTnLEG5Uo=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsTnLEJqIk=", + "_parent": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "model": { + "$ref": "AAAAAAGAQLsTnLEG5Uo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3225, + "top": 2082, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsTnLEKkkU=", + "_parent": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "model": { + "$ref": "AAAAAAGAQLsTnLEG5Uo=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3225, + "top": 2097, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsTnLELziw=", + "_parent": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "model": { + "$ref": "AAAAAAGAQLsTnLEG5Uo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3226, + "top": 2052, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "points": "3226:1883;3226:2073;2235:2073", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQLsTnLEJqIk=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLsTnLEKkkU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLsTnLELziw=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQPnVf+rFgxs=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQPnVf+rG/uI=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQPnVf+rH+X4=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -208, + "top": 224, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQPnVf+rIOQ8=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "font": "Arial;13;1", + "left": 2349, + "top": 1663, + "width": 138.71533203125, + "height": 13, + "text": "ObjectSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQPnVf+rJBmE=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -208, + "top": 224, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQPnVf+rKhyE=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -208, + "top": 224, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2344, + "top": 1656, + "width": 148.71533203125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQPnVf+rH+X4=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQPnVf+rIOQ8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQPnVf+rJBmE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQPnVf+rKhyE=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQPnVf+rLrvw=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPoqJ+3fVWM=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPop+u2+iXY=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1686, + "width": 138.71533203125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPozO+7VY3Y=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPozEe604dA=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1701, + "width": 138.71533203125, + "height": 13, + "text": "+anchor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo2Qu9xHwE=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo2Gu9Q5Ck=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1716, + "width": 138.71533203125, + "height": 13, + "text": "+anchorPosition", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo4sPANIaw=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo4he/sG20=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1731, + "width": 138.71533203125, + "height": 13, + "text": "+castShadows", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo7GfCpnZQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo66/CIc7k=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1746, + "width": 138.71533203125, + "height": 13, + "text": "+depth", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo9VvFFjYg=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo9LPEkQrk=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1761, + "width": 138.71533203125, + "height": 13, + "text": "+heading", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo/evHhEZs=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo/TvHAQDk=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1776, + "width": 138.71533203125, + "height": 13, + "text": "+height", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPpB7fJ90ko=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPpBxPJcIdQ=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1791, + "width": 138.71533203125, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPpEo/MZpZ8=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPpEefL4VGc=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1806, + "width": 138.71533203125, + "height": 13, + "text": "+resource", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPsGmfymRn8=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPsGafyFSfs=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1821, + "width": 138.71533203125, + "height": 13, + "text": "+roll", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPsI9P1C/aQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPsIyv0hvRE=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1836, + "width": 138.71533203125, + "height": 13, + "text": "+tilt", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPsLS/3eFgo=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPsLH/2976o=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1851, + "width": 138.71533203125, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2344, + "top": 1681, + "width": 148.71533203125, + "height": 188 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQPnVf+rMRGw=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "font": "Arial;13;0", + "left": 2344, + "top": 1869, + "width": 148.71533203125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQPnVf+rNwuY=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -104, + "top": 240, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQPnVf+rOqqQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -104, + "top": 240, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2344, + "top": 1656, + "width": 148.71533203125, + "height": 223, + "nameCompartment": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQPnVf+rMRGw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQPnVf+rNwuY=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQPnVf+rOqqQ=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQPx5LwekjGk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5LwelExo=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2377, + "top": 1549, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5LwemrGk=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2392, + "top": 1549, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5LwenPhw=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2347, + "top": 1550, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lweorws=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LwehMeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2377, + "top": 1475, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwep3bw=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LwehMeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2390, + "top": 1478, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwequps=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LwehMeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2349, + "top": 1471, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwer26o=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LweiweU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2377, + "top": 1624, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwesa/g=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LweiweU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2390, + "top": 1621, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwet0DI=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LweiweU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2349, + "top": 1628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQPx5MAeuGxQ=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LwehMeE=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQPx5MAevwVI=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LweiweU=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "tail": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "points": "2362:1456;2362:1656", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQPx5LwelExo=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQPx5LwemrGk=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQPx5LwenPhw=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQPx5Lweorws=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQPx5Lwep3bw=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQPx5Lwequps=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQPx5Lwer26o=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQPx5Lwesa/g=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQPx5Lwet0DI=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQPx5MAeuGxQ=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQPx5MAevwVI=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQPyJKAjgoMc=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjheM8=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2754, + "top": 1515, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjifbw=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2754, + "top": 1500, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjj/Y8=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2754, + "top": 1545, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjkbqg=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjdEa4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2363, + "top": 1475, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjl6r0=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjdEa4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2376, + "top": 1478, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjm/ws=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjdEa4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2335, + "top": 1471, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjnFYU=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjecM4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3175, + "top": 1616, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjogAo=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjecM4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3188, + "top": 1613, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjpL0Q=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjecM4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3147, + "top": 1620, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQPyJKAjq8as=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjdEa4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQPyJKAjr9jk=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjecM4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "tail": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "lineStyle": 2, + "points": "2348:1456;2348:1536;3160:1536;3160:1648", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQPyJKAjheM8=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQPyJKAjifbw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQPyJKAjj/Y8=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQPyJKAjkbqg=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQPyJKAjl6r0=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQPyJKAjm/ws=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQPyJKAjnFYU=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQPyJKAjogAo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQPyJKAjpL0Q=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQPyJKAjq8as=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQPyJKAjr9jk=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQP3Zl0BOeuY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQP3ZlkBMubY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQP3Zl0BPyaY=", + "_parent": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "model": { + "$ref": "AAAAAAGAQP3ZlkBMubY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2289, + "top": 1959, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQP3Zl0BQzP8=", + "_parent": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "model": { + "$ref": "AAAAAAGAQP3ZlkBMubY=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2301, + "top": 1968, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQP3Zl0BRot4=", + "_parent": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "model": { + "$ref": "AAAAAAGAQP3ZlkBMubY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2264, + "top": 1942, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "lineStyle": 1, + "points": "2343:1868;2212:2047", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQP3Zl0BPyaY=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQP3Zl0BQzP8=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQP3Zl0BRot4=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQQuTLkcBevI=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQQuTLkcC9fI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQQuTLkcDgPU=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -16, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQQuTLkcEsG0=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "font": "Arial;13;1", + "left": 2669, + "top": 1663, + "width": 126.4326171875, + "height": 13, + "text": "PathSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQQuTLkcF42M=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -16, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQQuTLkcGurk=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -16, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2664, + "top": 1656, + "width": 136.4326171875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQQuTLkcDgPU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQQuTLkcEsG0=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQQuTLkcF42M=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQQuTLkcGurk=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQQuTLkcHnPo=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvIoU3KW5A=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvIck2jTQg=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1686, + "width": 126.4326171875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvOwE7wXsc=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvOlU7J+Js=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1701, + "width": 126.4326171875, + "height": 13, + "text": "+anchor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvRhE+qEgM=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvRWk+D8Kk=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1716, + "width": 126.4326171875, + "height": 13, + "text": "+cap", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvUL1Bk2Jw=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvUBFA9SC8=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1731, + "width": 126.4326171875, + "height": 13, + "text": "+castShadows", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvWKlEe1YQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvWAFD3ufw=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1746, + "width": 126.4326171875, + "height": 13, + "text": "+height", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvYzVHYs68=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvYoVGxGiQ=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1761, + "width": 126.4326171875, + "height": 13, + "text": "+join", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQva51KS5U8=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvaulJrSXY=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1776, + "width": 126.4326171875, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvdWlNM1OI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvdLlMlZuI=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1791, + "width": 126.4326171875, + "height": 13, + "text": "+profile", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQyX/2QpKPI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQyXzmQCWwQ=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1806, + "width": 126.4326171875, + "height": 13, + "text": "+profileRotation", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQya+GTjnuA=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQyayGS8q5c=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1821, + "width": 126.4326171875, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2664, + "top": 1681, + "width": 136.4326171875, + "height": 158 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQQuTLkcIZQI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQQvrFlTegUc=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcIZQI=" + }, + "model": { + "$ref": "AAAAAAGAQQvq6VS33RQ=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1844, + "width": 126.4326171875, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQQvyaFYESws=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcIZQI=" + }, + "model": { + "$ref": "AAAAAAGAQQvyP1Xdy/A=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1859, + "width": 126.4326171875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQQv1q1a+rRA=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcIZQI=" + }, + "model": { + "$ref": "AAAAAAGAQQv1gFaXIyU=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1874, + "width": 126.4326171875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2664, + "top": 1839, + "width": 136.4326171875, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQQuTLkcJ1Lw=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": 120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQQuTLkcKQJM=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": 120, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2664, + "top": 1656, + "width": 136.4326171875, + "height": 236, + "nameCompartment": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQQuTLkcIZQI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQQuTLkcJ1Lw=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQQuTLkcKQJM=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQQzoZmpqp3M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmprD4I=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2671, + "top": 1534, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpspdQ=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2685, + "top": 1529, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmptR4s=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2642, + "top": 1543, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpuXcM=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpnhlg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2644, + "top": 1449, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpv0rc=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpnhlg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2657, + "top": 1447, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpwlDI=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpnhlg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2616, + "top": 1453, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpxJrc=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWposbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2699, + "top": 1619, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpyIqM=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWposbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2711, + "top": 1613, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpz2Hg=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWposbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2674, + "top": 1632, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQQzoZmp0WHs=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpnhlg=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQQzoZmp1EFk=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWposbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "tail": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "lineStyle": 1, + "points": "2622:1435;2693:1655", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQQzoZmprD4I=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQQzoZmpspdQ=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQQzoZmptR4s=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQQzoZmpuXcM=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQQzoZmpv0rc=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQQzoZmpwlDI=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQQzoZmpxJrc=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQQzoZmpyIqM=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQQzoZmpz2Hg=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQQzoZmp0WHs=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQQzoZmp1EFk=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQQz8yG323pI=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQQz8x230K8E=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQz8yG336r0=", + "_parent": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "model": { + "$ref": "AAAAAAGAQQz8x230K8E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2730, + "top": 2067, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQz8yG34XJw=", + "_parent": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "model": { + "$ref": "AAAAAAGAQQz8x230K8E=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2730, + "top": 2082, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQz8yG35oyg=", + "_parent": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "model": { + "$ref": "AAAAAAGAQQz8x230K8E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2731, + "top": 2037, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "points": "2731:1891;2731:2058;2235:2058", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQQz8yG336r0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQQz8yG34XJw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQQz8yG35oyg=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQI6qsOc2n1Y=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQI6qsOc3FW8=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6qsOc4SMo=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 272, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6qsOc5HLY=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "font": "Arial;13;1", + "left": 2517, + "top": 1663, + "width": 124.9853515625, + "height": 13, + "text": "LineSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6qsOc6mDQ=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 272, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6qsOc7Vpo=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 272, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2512, + "top": 1656, + "width": 134.9853515625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQI6qsOc4SMo=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQI6qsOc5HLY=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQI6qsOc6mDQ=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQI6qsOc7Vpo=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQI6qsOc83nc=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/M2vf+oXE=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/Ms/fm62A=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1686, + "width": 124.9853515625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/S7fisuuE=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/SxfiUCXU=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1701, + "width": 124.9853515625, + "height": 13, + "text": "+cap", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/VHvkb5w4=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/U9/kDTG0=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1716, + "width": 124.9853515625, + "height": 13, + "text": "+join", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/XEfmKdbM=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/W6PlyuF4=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1731, + "width": 124.9853515625, + "height": 13, + "text": "+marker", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/yCvs2lr0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/x4vseoP0=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1746, + "width": 124.9853515625, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/0WfulqSU=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/0MvuNWWU=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1761, + "width": 124.9853515625, + "height": 13, + "text": "+pattern", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/2O/wUaY0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/2Efv8elc=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1776, + "width": 124.9853515625, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2512, + "top": 1681, + "width": 134.9853515625, + "height": 113 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQI6qsOc9LOA=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI+3G/X0hfw=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc9LOA=" + }, + "model": { + "$ref": "AAAAAAGAQI+28vXcViw=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1799, + "width": 124.9853515625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI/BfPbh9OM=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc9LOA=" + }, + "model": { + "$ref": "AAAAAAGAQI/BU/bJXC8=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1814, + "width": 124.9853515625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI/DyfdQ/Sc=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc9LOA=" + }, + "model": { + "$ref": "AAAAAAGAQI/Do/c45mg=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1829, + "width": 124.9853515625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2512, + "top": 1794, + "width": 134.9853515625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQI6qsOc+n3A=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 24, + "top": 264, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQI6qsOc/vKw=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 24, + "top": 264, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2512, + "top": 1656, + "width": 134.9853515625, + "height": 191, + "nameCompartment": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQI6qsOc9LOA=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQI6qsOc+n3A=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQI6qsOc/vKw=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQYqXdn+2K7I=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQYqXdn+3DBc=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQYqXdn+4LmU=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": -608, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQYqXdn+5yHM=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "font": "Arial;13;1", + "left": 2989, + "top": 1663, + "width": 146.66259765625, + "height": 13, + "text": "ExtrudeSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQYqXdn+6S/c=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": -608, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQYqXdn+7ohw=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": -608, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2984, + "top": 1656, + "width": 156.66259765625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQYqXdn+4LmU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQYqXdn+5yHM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQYqXdn+6S/c=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQYqXdn+7ohw=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQYqXdn+8FmQ=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYrtG4fWan4=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYrs74espQ8=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1686, + "width": 146.66259765625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYr0dYks/wg=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYr0SYkCuFQ=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1701, + "width": 146.66259765625, + "height": 13, + "text": "+castShadows", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYr3GIoEiD8=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYr27InaovU=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1716, + "width": 146.66259765625, + "height": 13, + "text": "+edges", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYr5iorc0jw=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYr5XIqy5mU=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1731, + "width": 146.66259765625, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYr+cou0D1I=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYr+RIuK/FY=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1746, + "width": 146.66259765625, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2984, + "top": 1681, + "width": 156.66259765625, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQYqXdn+9yYI=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQYt7fZSblX8=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+9yYI=" + }, + "model": { + "$ref": "AAAAAAGAQYt7S5Rx0RQ=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1769, + "width": 146.66259765625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQYuCcZXxhxk=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+9yYI=" + }, + "model": { + "$ref": "AAAAAAGAQYuCRZXHU2w=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1784, + "width": 146.66259765625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQYuFNJbJFPY=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+9yYI=" + }, + "model": { + "$ref": "AAAAAAGAQYuFBpaftPw=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1799, + "width": 146.66259765625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2984, + "top": 1764, + "width": 156.66259765625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQYqXdn++XHc=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 136, + "top": -304, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQYqXdn+//9c=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 136, + "top": -304, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2984, + "top": 1656, + "width": 156.66259765625, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQYqXdn+9yYI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQYqXdn++XHc=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQYqXdn+//9c=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQYq/foR37Qo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR4+uY=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2963, + "top": 1587, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR5GLE=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2963, + "top": 1572, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR64b0=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2963, + "top": 1617, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR7QWc=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR06rU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2886, + "top": 1437, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR8Oh4=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR06rU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2899, + "top": 1440, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR9S74=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR06rU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2858, + "top": 1433, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR+RBM=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR197U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3071, + "top": 1624, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR/oTw=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR197U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3084, + "top": 1621, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foSAW70=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR197U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3043, + "top": 1628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQYq/f4SB/Ng=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR06rU=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQYq/f4SCkwA=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR197U=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "points": "2871:1418;2871:1608;3056:1608;3056:1656", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQYq/foR4+uY=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQYq/foR5GLE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQYq/foR64b0=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQYq/foR7QWc=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQYq/foR8Oh4=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQYq/foR9S74=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQYq/foR+RBM=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQYq/foR/oTw=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQYq/foSAW70=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQYq/f4SB/Ng=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQYq/f4SCkwA=" + } + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKoDGxLvTU=", + "font": "Arial;13;0", + "left": 2837, + "top": 1686, + "width": 117.0380859375, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQYrN7oX5Qwo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQYrN7oX36Ng=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYrN7oX6FtM=", + "_parent": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "model": { + "$ref": "AAAAAAGAQYrN7oX36Ng=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3060, + "top": 2077, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYrN7oX7C7s=", + "_parent": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "model": { + "$ref": "AAAAAAGAQYrN7oX36Ng=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3060, + "top": 2092, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYrN7oX8Jdk=", + "_parent": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "model": { + "$ref": "AAAAAAGAQYrN7oX36Ng=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3061, + "top": 2047, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "points": "3061:1816;3061:2068;2235:2068", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQYrN7oX6FtM=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQYrN7oX7C7s=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQYrN7oX8Jdk=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQKIeqWLv2j0=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQKIeqmLwPvU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQKIeqmLxGTE=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 336, + "top": 256, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQKIeqmLyYNk=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "font": "Arial;13;1", + "left": 2837, + "top": 1663, + "width": 117.0380859375, + "height": 13, + "text": "FillSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQKIeqmLzzjA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 336, + "top": 256, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQKIeqmL0DUA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 336, + "top": 256, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2832, + "top": 1656, + "width": 127.0380859375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQKIeqmLxGTE=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQKIeqmLyYNk=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQKIeqmLzzjA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQKIeqmL0DUA=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQKIeqmL15DU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKoDGxLvTU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKKn5Gwwvc4=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1686, + "width": 117.0380859375, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKuJm0R9gw=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKKt/Wz2iEA=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1701, + "width": 117.0380859375, + "height": 13, + "text": "+castShadows", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKwDW2PUPU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKKv4210K3A=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1716, + "width": 117.0380859375, + "height": 13, + "text": "+edges", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKywm4NF+I=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKKymW3yL3A=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1731, + "width": 117.0380859375, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKK0tG6LD/o=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKK0i25wkdY=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1746, + "width": 117.0380859375, + "height": 13, + "text": "+outline", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKK2l28JCeE=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKK2bm7uffg=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1761, + "width": 117.0380859375, + "height": 13, + "text": "+pattern", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2832, + "top": 1681, + "width": 127.0380859375, + "height": 98 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQKIeqmL2dy0=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQKI2X2Rqdhc=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL2dy0=" + }, + "model": { + "$ref": "AAAAAAGAQKI2N2RPsfU=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1784, + "width": 117.0380859375, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQKI9uGUwjGE=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL2dy0=" + }, + "model": { + "$ref": "AAAAAAGAQKI9kGUVE0M=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1799, + "width": 117.0380859375, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQKJAC2WuxLo=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL2dy0=" + }, + "model": { + "$ref": "AAAAAAGAQKI/4mWTMrg=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1814, + "width": 117.0380859375, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2832, + "top": 1779, + "width": 127.0380859375, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQKIeqmL3t4E=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 168, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQKIeqmL4wsU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 168, + "top": 128, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2832, + "top": 1656, + "width": 127.0380859375, + "height": 176, + "nameCompartment": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQKIeqmL2dy0=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQKIeqmL3t4E=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQKIeqmL4wsU=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQZEEMWQzWag=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ06Ho=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2652, + "top": 1557, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ1eXY=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2662, + "top": 1568, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ2OMA=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2631, + "top": 1536, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ3Fys=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQwxWs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2782, + "top": 1434, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ4Qow=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQwxWs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2789, + "top": 1445, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ5gR8=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQwxWs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2766, + "top": 1411, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ6sCU=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQx3vs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2522, + "top": 1681, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ75iI=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQx3vs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2532, + "top": 1690, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ8Hek=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQx3vs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2500, + "top": 1665, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZEEMWQ9h1s=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQwxWs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": -8, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZEEMWQ+R10=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQx3vs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": -8, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "lineStyle": 1, + "points": "2791:1412;2493:1695", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQZEEMWQ06Ho=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQZEEMWQ1eXY=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQZEEMWQ2OMA=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQZEEMWQ3Fys=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQZEEMWQ4Qow=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQZEEMWQ5gR8=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQZEEMWQ6sCU=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQZEEMWQ75iI=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQZEEMWQ8Hek=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQZEEMWQ9h1s=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQZEEMWQ+R10=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQZE2+meDj0I=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meE0dA=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2571, + "top": 1555, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meFKgw=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2579, + "top": 1567, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meGnAQ=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2554, + "top": 1530, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meHJn0=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meABCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2777, + "top": 1415, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meIuKI=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meABCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2783, + "top": 1428, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meJZnE=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meABCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2766, + "top": 1390, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meKXaM=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meB18I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2364, + "top": 1695, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meLG60=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meB18I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2374, + "top": 1705, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meM+Xk=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meB18I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2345, + "top": 1675, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZE2+meN3Qs=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meABCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": -8, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZE2+meO9iI=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meB18I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": -8, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "lineStyle": 1, + "points": "2791:1395;2335:1704", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQZE2+meE0dA=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQZE2+meFKgw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQZE2+meGnAQ=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQZE2+meHJn0=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQZE2+meIuKI=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQZE2+meJZnE=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQZE2+meKXaM=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQZE2+meLG60=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQZE2+meM+Xk=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQZE2+meN3Qs=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQZE2+meO9iI=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQZOWEGpdhEY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpeioI=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3040, + "top": 1499, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpfios=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3040, + "top": 1484, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpgu4U=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3040, + "top": 1529, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGph92Q=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpaZS4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2895, + "top": 1437, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpin14=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpaZS4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2908, + "top": 1440, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpjFv8=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpaZS4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2867, + "top": 1433, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpkaFo=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpb1vk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3215, + "top": 1616, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGplaes=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpb1vk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3228, + "top": 1613, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpmhpw=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpb1vk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3187, + "top": 1620, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZOWEGpnTsQ=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpaZS4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZOWEGpo40M=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpb1vk=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "points": "2880:1418;2880:1520;3200:1520;3200:1648", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQZOWEGpeioI=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQZOWEGpfios=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQZOWEGpgu4U=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQZOWEGph92Q=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQZOWEGpin14=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQZOWEGpjFv8=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQZOWEGpkaFo=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQZOWEGplaes=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQZOWEGpmhpw=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQZOWEGpnTsQ=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQZOWEGpo40M=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQZO4TGv2Wb8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv36pE=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2737, + "top": 1539, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv4yKA=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2749, + "top": 1547, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv5lrs=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2712, + "top": 1522, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv6LtA=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvzO6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2804, + "top": 1442, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv7sK8=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvzO6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2814, + "top": 1452, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv8jXU=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvzO6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2784, + "top": 1423, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv9Ta4=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGv03hE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2671, + "top": 1636, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv+EKc=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGv03hE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2683, + "top": 1641, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv/ouA=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGv03hE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2646, + "top": 1624, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZO4TWwAL+8=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvzO6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZO4TWwBVw0=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGv03hE=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "lineStyle": 1, + "points": "2807:1419;2644:1655", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQZO4TGv36pE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQZO4TGv4yKA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQZO4TGv5lrs=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQZO4TGv6LtA=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQZO4TGv7sK8=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQZO4TGv8jXU=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQZO4TGv9Ta4=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQZO4TGv+EKc=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQZO4TGv/ouA=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQZO4TWwAL+8=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQZO4TWwBVw0=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO1MYeU/HxR0=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1M4mE/xJtQ=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1NDTE/3Mpo=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1NFuk/9tZ0=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "opacity", + "visibility": "private", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO1QIuVAHl58=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO1QRq1ANbHM=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO4K5hVAX2y8=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "MarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAO4k9d5q8o/w=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "source": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4pz5Zr153M=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mTwJrPb7w=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4qdgZsAE80=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mfnZrVlig=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mihZrbRuU=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO4nh+prkPOw=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO4n8mJrrxks=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO5gALZsNaqc=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleMarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAO5hIZ5s7B30=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "source": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "target": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAUdsZyKUJw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAUdsZyL/EI=", + "_parent": { + "$ref": "AAAAAAGAPAUdsZyKUJw=" + }, + "reference": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAUdsZyMSoA=", + "_parent": { + "$ref": "AAAAAAGAPAUdsZyKUJw=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAZXyJz3JCA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAZXyJz4H6A=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "reference": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAZXyJz5qwM=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hkNptMOqw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hwUJtS32g=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hygptYMPQ=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5pIqJud5fM=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "outline", + "type": "SimpleLineSymbol" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h09pteLz4=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "path", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h23Jtkc88=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h4k5tqygA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h7A5tw0cA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h9B5t2d9Q=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iajJuIBOs=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iPxpt81pU=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iX6JuC7TA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAEEB5uzp5s=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPAMl+Jwq3y8=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "source": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKLVpvdNNE=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKRz5vj6lU=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKan5vpoKk=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPALS25vyQdo=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPALeMZv49lY=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAMK75wAYR4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleLineSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPAM0X5w7CQk=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "source": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "target": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAgXl59swT0=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAgXl59tmOM=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAgXl59uDWo=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "reference": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQZ0pxMviw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQglpxSlAw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQjTpxYRgc=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQlXpxeKLg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQnhpxkzMk=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "marker", + "type": "LineSymbolMarker" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQprpxqv+k=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "miterLimit", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQr7pxwm+c=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQuFpx2vEw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvaqK3lziY=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvhf64bbOg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvkHq4/nNg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAZ6f51PAmE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbolMarker", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAad+p2dGzE=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAakl5275T8=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAamt53QDe4=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "placement", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAapL53l9Sc=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "style", + "type": "" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPBd73aHqdKY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PictureMarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPBeg7KJvEiE=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "source": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "target": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBe8CaLygzQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfC3qMo4vU=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfFsKNMfiQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfH9qNwFW8=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "url", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfKDqOUl0Y=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "width", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfMJqO4ULE=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfOZ6Pcm9c=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBet6aK8jQc=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBhvx6Wusf8=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBhx56XShSk=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPCD456eWclQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "FillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPCEOb6gbYVs=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "source": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCEdKahoOMM=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCEmEKiwQC0=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCEvg6jm2cI=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCE2f6kc9N4=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPCnyRqqQR0M=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleFillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPCwoxq9lm94=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "source": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "target": { + "$ref": "AAAAAAGAPCD456eWclQ=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPQTeDH3yZgM=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTeDH3zm0M=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "reference": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTeDH30fcw=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqTEauYd9c=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqZd6vOxgQ=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqcjqvys9Y=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqfd6wWjho=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "style", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCp84qsIizc=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCqEt6s+HlI=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCqIjqtiAxk=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPQMJ6nhGP6w=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PictureFillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPQQ/rX0Sm58=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "source": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "target": { + "$ref": "AAAAAAGAPCD456eWclQ=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPQTsGX5l7I8=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTsGX5mdOE=", + "_parent": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "reference": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTsGX5nfsI=", + "_parent": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQM7WHi4dEU=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNDuXjuWOY=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNF6nkSbuY=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNIonk2nHk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "url", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNKhXlabsA=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "width", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNMP3l+opg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNOl3miql8=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "xscale", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNQUnnGgkw=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "yoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNVK3oOyW0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "yscale", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP0jXviawc=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP6OHwYjDU=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP8/nw8tdI=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPQff+YT2kWw=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "TextSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPQhWsoWl3dc=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "source": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPS6KpKbbg5c=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPS6KpKbc4jk=", + "_parent": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "reference": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPS6KpKbd/TA=", + "_parent": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "reference": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAICJA6v/o=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAOIJCgc6M=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAQ2ZDiIF4=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "backgroundColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSATI5Ek4IM=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "borderLineColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAVEZFmIR8=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "borderLineSize", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAXEZGod8M=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAZV5HqksU=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "font", + "type": "Font" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAcR5Is1X4=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "haloColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAeRZJuhG0=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "haloSize", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAgi5KwfFQ=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "horizontalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAitpLy8xw=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "kerning", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAk2pM04uU=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "lineHeight", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAnFJN2K9s=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "lineWidth", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSApNZO4TrY=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "rotated", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSDpSpiG08U=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "text", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSDyipkENGA=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "verticalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSD1fJlGhvw=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSFIs5ttMYs=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR/v2o8IG9I=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR/81I+SarM=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR//MI/UW7w=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPS3xX6LyqAQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Font", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4SfqOsEp4=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "decoration", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4ZY6QSK9k=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "family", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4b4KRUp0w=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4eKqSWMIQ=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4gOqTYZto=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "weight", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8boazWojk=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8jDq1UJEA=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8lYK2li7A=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAP6S168jGsxA=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAP6VdPsoeetU=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "source": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAP9XAwkPrzU4=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAP9XAwkPs9B8=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "reference": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAP9XAwkPtw8Y=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "reference": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bx38w7uLM=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bpOstslHY=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bvnMvqZyg=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "symbolLayers", + "type": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAP8/5/D2x644=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol3DLayer", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP9VqWEBDC5M=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "type", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAP9WNLEGF+44=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAP9WlJEMSNXw=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQHO4GV0oLfI=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PointSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQHbWNI6eATI=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "source": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQHpofreL/lM=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQHpofreMF+Y=", + "_parent": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQHpofreNRd8=", + "_parent": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "reference": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQPx5Lwegxog=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPx5LwehMeE=", + "_parent": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPx5LweiweU=", + "_parent": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "reference": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQPyJKAjcvoE=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPyJKAjdEa4=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPyJKAjecM4=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPbk14qDNA=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPo018aeJo=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "callout", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPq7F96x14=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPtAV/aljM=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "symbolLayers", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPuxGA6UBk=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "verticalOffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYPZmRQTEw=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYVz2Tm/qo=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYYN2VGn1k=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQHci6o8tBGM=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "IconSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQHcyhZBm0hs=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "source": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiR5aDzLYY=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiYP6GJhto=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiaNaHpMeE=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "anchorPosition", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHicC6JJ2ps=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHidd6KpQY0=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "outline", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHifkKMJgeQ=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "resource", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHihOaNp1o4=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlBEamVlhM=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlHU6orzwA=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlJbKqLtE0=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQI6jF+ainB0=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJBZ8ACM7PY=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "source": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQJB91wHUuZ8=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQJB91wHV5+E=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "reference": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQJB91wHWZ0U=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "reference": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQQzoZWpmJZ0=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQQzoZWpnhlg=", + "_parent": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "reference": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQQzoZWposbQ=", + "_parent": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "reference": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7RO+gvDaw=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7YIujdTVQ=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7fHum1PPw=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "symbolLayers", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI83Pu60uKU=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI89iO9irzg=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI8/v+/RXtM=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQI6qsOc0DIE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJBpFAEwA94=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "source": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/Ms/fm62A=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/SxfiUCXU=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/U9/kDTG0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/W6PlyuF4=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "marker", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/x4vseoP0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/0MvuNWWU=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "pattern", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/2Efv8elc=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI+28vXcViw=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI/BU/bJXC8=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI/Do/c45mg=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQJPNQDjoUDE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PolygonSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJR3UUvMi3E=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "source": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQKMnaHQbRW0=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQKMnaHQc7Rs=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQKMnaHQdqUs=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "reference": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQYq/foRzh3g=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQYq/foR06rU=", + "_parent": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQYq/foR197U=", + "_parent": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "reference": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZEEMGQvP4A=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEEMGQwxWs=", + "_parent": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEEMGQx3vs=", + "_parent": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "reference": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZEYe2XL0XM=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEYe2XM+rA=", + "_parent": { + "$ref": "AAAAAAGAQZEYe2XL0XM=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEYe2XNnz8=", + "_parent": { + "$ref": "AAAAAAGAQZEYe2XL0XM=" + }, + "reference": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZE2+md/zbs=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZE2+meABCg=", + "_parent": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZE2+meB18I=", + "_parent": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "reference": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZOWEGpZGhg=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZOWEGpaZS4=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZOWEGpb1vk=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZO4TGvycxc=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZO4TGvzO6Q=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZO4TGv03hE=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "reference": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJPvrzoyMNs=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJP6pjtAYNM=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJP8/ju+xJc=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "symbolLayers", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQJTTy0Pz0=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQP+D16Vf8=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQSWz34cwY=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQKIeqWLtb7A=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "FillSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQKMeBnOSzgA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "source": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKn5Gwwvc4=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKt/Wz2iEA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKv4210K3A=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "edges", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKymW3yL3A=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKK0i25wkdY=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "outline", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKK2bm7uffg=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "pattern", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI2N2RPsfU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI9kGUVE0M=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI/4mWTMrg=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQLjRBoVK/Ro=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LabelSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQLnZqZjVkdk=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "source": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQLsG/7AAptg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQLsG/7ABSMo=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "reference": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQLsG/7ACCWw=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkJF4qC7uw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkPq4tgUdM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "callout", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkRqYvtqAE=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkT24x6g2s=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "symbolLayers", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkWVo0H4Q8=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "verticalOffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjff4a4sxM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjlyoeW4cw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjoBYgjCv8=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQLns6Jmj0x4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "TextSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQLsTnLEG5Uo=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "source": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLoWJ5tje4c=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLocVpxB5AM=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "background", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLofAJzO1GA=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "font", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLog4Z1bzo4=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "halo", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLojE53omX0=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "horizontalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLolVZ51Tdg=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "lineHeight", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLonSp8CGas=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLopjp+PrHs=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLor6qAcWyY=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "text", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLq7GahmsQQ=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "verticalAlignment", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrMV6o4fWE=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrSt6sWGnA=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrU4qujo+U=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQPnVfurDxP4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "ObjectSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQP3ZlkBMubY=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "source": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPop+u2+iXY=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPozEe604dA=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo2Gu9Q5Ck=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "anchorPosition", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo4he/sG20=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo66/CIc7k=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "depth", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo9LPEkQrk=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "heading", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo/TvHAQDk=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPpBxPJcIdQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPpEefL4VGc=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "resource", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsGafyFSfs=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "roll", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsIyv0hvRE=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "tilt", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsLH/2976o=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "width", + "type": "" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQQuTLUb/9Rg=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PathSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQQz8x230K8E=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "source": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvIck2jTQg=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvOlU7J+Js=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvRWk+D8Kk=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvUBFA9SC8=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvWAFD3ufw=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvYoVGxGiQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvaulJrSXY=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvdLlMlZuI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "profile", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQyXzmQCWwQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "profileRotation", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQyayGS8q5c=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQvq6VS33RQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQvyP1Xdy/A=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQv1gFaXIyU=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQYqXdX+0wEk=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "ExtrudeSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQYrN7oX36Ng=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "source": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYrs74espQ8=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr0SYkCuFQ=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr27InaovU=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "edges", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr5XIqy5mU=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr+RIuK/FY=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYt7S5Rx0RQ=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYuCRZXHU2w=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYuFBpaftPw=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "toJSON" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/service/uml/Symbols2D.mdj b/src/service/uml/Symbols2D.mdj new file mode 100644 index 000000000..db216675f --- /dev/null +++ b/src/service/uml/Symbols2D.mdj @@ -0,0 +1,9253 @@ +{ + "_type": "Project", + "_id": "AAAAAAFF+h6SjaM2Hec=", + "name": "Untitled", + "ownedElements": [ + { + "_type": "UMLModel", + "_id": "AAAAAAFF+qBWK6M3Z8Y=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model", + "ownedElements": [ + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAFF+qBtyKM79qY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Main", + "defaultDiagram": true, + "ownedViews": [ + { + "_type": "UMLClassView", + "_id": "AAAAAAGAO1MYek/JnBg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAO1MYek/KY2Y=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYek/LgeU=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2656, + "top": 1856, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/M6PU=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "font": "Arial;13;3", + "left": 1469, + "top": 1047, + "width": 80.57080078125, + "height": 13, + "text": "Symbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/N9fA=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2656, + "top": 1856, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/OGZc=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2656, + "top": 1856, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1464, + "top": 1040, + "width": 90.57080078125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAO1MYek/LgeU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAO1MYe0/M6PU=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAO1MYe0/N9fA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO1MYe0/OGZc=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAO1MYe0/PFXM=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1M4vE/0AZw=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1M4mE/xJtQ=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1070, + "width": 80.57080078125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1NDbU/6l7g=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1NDTE/3Mpo=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1085, + "width": 80.57080078125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1NF21AAY2Y=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1NFuk/9tZ0=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1100, + "width": 80.57080078125, + "height": 13, + "text": "-opacity", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1464, + "top": 1065, + "width": 90.57080078125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAO1MYe0/Qbfc=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO1QI21AKpLU=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "model": { + "$ref": "AAAAAAGAO1QIuVAHl58=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1123, + "width": 80.57080078125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO1QR1VAQzNY=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "model": { + "$ref": "AAAAAAGAO1QRq1ANbHM=" + }, + "font": "Arial;13;0", + "left": 1469, + "top": 1138, + "width": 80.57080078125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1464, + "top": 1118, + "width": 90.57080078125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAO1MYe0/RU/o=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1328, + "top": 928, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAO1MYe0/S0T0=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1328, + "top": 928, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1464, + "top": 1040, + "width": 90.57080078125, + "height": 116, + "nameCompartment": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAO1MYe0/RU/o=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAO1MYe0/S0T0=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAO4K5hlAZreY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAO4K5hlAaHxg=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAO4K5hlAbL2E=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2128, + "top": 1872, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO4K5hlAcyhk=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "font": "Arial;13;3", + "left": 1181, + "top": 1287, + "width": 89.5908203125, + "height": 13, + "text": "MarkerSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO4K5hlAdskM=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2128, + "top": 1872, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO4K5hlAe7O4=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2128, + "top": 1872, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1176, + "top": 1280, + "width": 99.5908203125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAO4K5hlAbL2E=" + }, + "nameLabel": { + "$ref": "AAAAAAGAO4K5hlAcyhk=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAO4K5hlAdskM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO4K5hlAe7O4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAO4K5hlAfRpQ=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4p0BZr4gb8=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4pz5Zr153M=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1310, + "width": 89.5908203125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4mT4prSiMQ=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4mTwJrPb7w=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1325, + "width": 89.5908203125, + "height": 13, + "text": "+angle", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4qdoZsDpGc=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4qdgZsAE80=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1340, + "width": 89.5908203125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4mfvZrYhZg=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4mfnZrVlig=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1355, + "width": 89.5908203125, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO4mirJreNX8=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "model": { + "$ref": "AAAAAAGAO4mihZrbRuU=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1370, + "width": 89.5908203125, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1176, + "top": 1305, + "width": 99.5908203125, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAO4K5hlAg2rk=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO4niGZrnj9g=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAg2rk=" + }, + "model": { + "$ref": "AAAAAAGAO4nh+prkPOw=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1393, + "width": 89.5908203125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO4n8uZruYQg=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAg2rk=" + }, + "model": { + "$ref": "AAAAAAGAO4n8mJrrxks=" + }, + "font": "Arial;13;0", + "left": 1181, + "top": 1408, + "width": 89.5908203125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1176, + "top": 1388, + "width": 99.5908203125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAO4K5hlAh8MY=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1064, + "top": 936, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAO4K5hlAi2GE=", + "_parent": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "model": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1064, + "top": 936, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1176, + "top": 1280, + "width": 99.5908203125, + "height": 146, + "nameCompartment": { + "$ref": "AAAAAAGAO4K5hlAaHxg=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAO4K5hlAfRpQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAO4K5hlAg2rk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAO4K5hlAh8MY=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAO4K5hlAi2GE=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAO4k9eZq+zz8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO4k9d5q8o/w=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO4k9eZq/7Fk=", + "_parent": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "model": { + "$ref": "AAAAAAGAO4k9d5q8o/w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1359, + "top": 1204, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO4k9eprAyRg=", + "_parent": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "model": { + "$ref": "AAAAAAGAO4k9d5q8o/w=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1349, + "top": 1193, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO4k9eprBcRg=", + "_parent": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "model": { + "$ref": "AAAAAAGAO4k9d5q8o/w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1378, + "top": 1227, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAO4k9eZq+zz8=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "lineStyle": 1, + "points": "1276:1306;1463:1138", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAO4k9eZq/7Fk=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAO4k9eprAyRg=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO4k9eprBcRg=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAO5gALZsP5fo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAO5gALZsQXyM=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAO5gALZsREwU=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1968, + "top": 1888, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO5gALZsSpDs=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "font": "Arial;13;1", + "left": 1141, + "top": 1503, + "width": 168.0224609375, + "height": 13, + "text": "SimpleMarkerSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO5gALpsT33s=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1968, + "top": 1888, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO5gALpsUJRw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1968, + "top": 1888, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1136, + "top": 1496, + "width": 178.0224609375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAO5gALZsREwU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAO5gALZsSpDs=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAO5gALpsT33s=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO5gALpsUJRw=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAO5gALpsV0BA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5hkWZtP8PU=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5hkNptMOqw=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1526, + "width": 168.0224609375, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5hwcZtVFjw=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5hwUJtS32g=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1541, + "width": 168.0224609375, + "height": 13, + "text": "+angle", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5hyo5tbu24=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5hygptYMPQ=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1556, + "width": 168.0224609375, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5pIyZug9DU=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5pIqJud5fM=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1571, + "width": 168.0224609375, + "height": 13, + "text": "+outline: SimpleLineSymbol", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h1Fpth6Io=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h09pteLz4=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1586, + "width": 168.0224609375, + "height": 13, + "text": "+path", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h3AJtnyLU=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h23Jtkc88=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1601, + "width": 168.0224609375, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h4s5ttpWM=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h4k5tqygA=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1616, + "width": 168.0224609375, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h7JZtzPks=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h7A5tw0cA=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1631, + "width": 168.0224609375, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO5h9KJt5VaY=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "model": { + "$ref": "AAAAAAGAO5h9B5t2d9Q=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1646, + "width": 168.0224609375, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1136, + "top": 1521, + "width": 178.0224609375, + "height": 143 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAO5gALpsWEzw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO5iarJuLMpA=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsWEzw=" + }, + "model": { + "$ref": "AAAAAAGAO5iajJuIBOs=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1669, + "width": 168.0224609375, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO5iP6Zt/is8=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsWEzw=" + }, + "model": { + "$ref": "AAAAAAGAO5iPxpt81pU=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1684, + "width": 168.0224609375, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO5iYEJuFzf0=", + "_parent": { + "$ref": "AAAAAAGAO5gALpsWEzw=" + }, + "model": { + "$ref": "AAAAAAGAO5iX6JuC7TA=" + }, + "font": "Arial;13;0", + "left": 1141, + "top": 1699, + "width": 168.0224609375, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1136, + "top": 1664, + "width": 178.0224609375, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAO5gALpsX4xs=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 984, + "top": 944, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAO5gALpsYIWU=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "model": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 984, + "top": 944, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1136, + "top": 1496, + "width": 178.0224609375, + "height": 221, + "nameCompartment": { + "$ref": "AAAAAAGAO5gALZsQXyM=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAO5gALpsV0BA=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAO5gALpsWEzw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAO5gALpsX4xs=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAO5gALpsYIWU=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAO5hIaJs96IQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO5hIZ5s7B30=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO5hIaJs+4Ok=", + "_parent": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "model": { + "$ref": "AAAAAAGAO5hIZ5s7B30=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1209, + "top": 1453, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO5hIaZs/RMg=", + "_parent": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "model": { + "$ref": "AAAAAAGAO5hIZ5s7B30=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1194, + "top": 1453, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAO5hIaZtAgEI=", + "_parent": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "model": { + "$ref": "AAAAAAGAO5hIZ5s7B30=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1238, + "top": 1454, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAO5hIaJs96IQ=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "tail": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "lineStyle": 1, + "points": "1224:1495;1225:1426", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAO5hIaJs+4Ok=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAO5hIaZs/RMg=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO5hIaZtAgEI=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPAEECJu1N1A=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPAEECJu2GKs=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPAEECJu37WA=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1232, + "top": 2048, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAEECJu4rMc=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "font": "Arial;13;3", + "left": 1389, + "top": 1287, + "width": 80.57080078125, + "height": 13, + "text": "LineSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAEECJu5XS0=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1232, + "top": 2048, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAEECJu6Xx8=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1232, + "top": 2048, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1384, + "top": 1280, + "width": 90.57080078125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAEECJu37WA=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPAEECJu4rMc=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPAEECJu5XS0=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAEECJu6Xx8=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPAEECJu7Y48=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAKLfZvgDgI=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu7Y48=" + }, + "model": { + "$ref": "AAAAAAGAPAKLVpvdNNE=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1310, + "width": 80.57080078125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAKR8JvmJRQ=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu7Y48=" + }, + "model": { + "$ref": "AAAAAAGAPAKRz5vj6lU=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1325, + "width": 80.57080078125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAKawZvsFL8=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu7Y48=" + }, + "model": { + "$ref": "AAAAAAGAPAKan5vpoKk=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1340, + "width": 80.57080078125, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1384, + "top": 1305, + "width": 90.57080078125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPAEECJu8gpg=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPALTA5v1qYw=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu8gpg=" + }, + "model": { + "$ref": "AAAAAAGAPALS25vyQdo=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1363, + "width": 80.57080078125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPALeV5v77pQ=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu8gpg=" + }, + "model": { + "$ref": "AAAAAAGAPALeMZv49lY=" + }, + "font": "Arial;13;0", + "left": 1389, + "top": 1378, + "width": 80.57080078125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1384, + "top": 1358, + "width": 90.57080078125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPAEECJu9bYo=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 616, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPAEECJu+TtY=", + "_parent": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "model": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 616, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1384, + "top": 1280, + "width": 90.57080078125, + "height": 116, + "nameCompartment": { + "$ref": "AAAAAAGAPAEECJu2GKs=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPAEECJu7Y48=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPAEECJu8gpg=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPAEECJu9bYo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPAEECJu+TtY=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPAMK75wCNw0=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPAMK75wDgvA=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPAMK75wEXt4=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1168, + "top": 1888, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAMK75wFMJ8=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "font": "Arial;13;1", + "left": 1341, + "top": 1503, + "width": 163.63623046875, + "height": 13, + "text": "SimpleLineSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAMK75wGU50=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1168, + "top": 1888, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAMK75wH9ao=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1168, + "top": 1888, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1336, + "top": 1496, + "width": 173.63623046875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAMK75wEXt4=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPAMK75wFMJ8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPAMK75wGU50=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAMK75wH9ao=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPAMK75wIQws=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQZ9ZxPVZ4=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQZ0pxMviw=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1526, + "width": 163.63623046875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQgupxVbQ0=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQglpxSlAw=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1541, + "width": 163.63623046875, + "height": 13, + "text": "+cap", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQjcJxbkyI=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQjTpxYRgc=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1556, + "width": 163.63623046875, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQlhJxh1vo=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQlXpxeKLg=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1571, + "width": 163.63623046875, + "height": 13, + "text": "+join", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQnqJxnLvE=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQnhpxkzMk=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1586, + "width": 163.63623046875, + "height": 13, + "text": "+marker: LineSymbolMarker", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQp2JxtOVk=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQprpxqv+k=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1601, + "width": 163.63623046875, + "height": 13, + "text": "+miterLimit", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQsE5xzh2M=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQr7pxwm+c=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1616, + "width": 163.63623046875, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAQuOpx5WOc=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "model": { + "$ref": "AAAAAAGAPAQuFpx2vEw=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1631, + "width": 163.63623046875, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1336, + "top": 1521, + "width": 173.63623046875, + "height": 128 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPAMK75wJsVE=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCva0a3oEDg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wJsVE=" + }, + "model": { + "$ref": "AAAAAAGAPCvaqK3lziY=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1654, + "width": 163.63623046875, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCvhoa4eijc=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wJsVE=" + }, + "model": { + "$ref": "AAAAAAGAPCvhf64bbOg=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1669, + "width": 163.63623046875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCvkQq5CWqQ=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wJsVE=" + }, + "model": { + "$ref": "AAAAAAGAPCvkHq4/nNg=" + }, + "font": "Arial;13;0", + "left": 1341, + "top": 1684, + "width": 163.63623046875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1336, + "top": 1649, + "width": 173.63623046875, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPAMK75wKurQ=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 584, + "top": 944, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPAMK75wL/Ow=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "model": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 584, + "top": 944, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1336, + "top": 1496, + "width": 173.63623046875, + "height": 206, + "nameCompartment": { + "$ref": "AAAAAAGAPAMK75wDgvA=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPAMK75wIQws=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPAMK75wJsVE=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPAMK75wKurQ=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPAMK75wL/Ow=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPAMl+Jws8Rc=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAMl+Jwq3y8=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAMl+JwtX/4=", + "_parent": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "model": { + "$ref": "AAAAAAGAPAMl+Jwq3y8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1452, + "top": 1206, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAMl+Jwu10s=", + "_parent": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "model": { + "$ref": "AAAAAAGAPAMl+Jwq3y8=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1438, + "top": 1201, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAMl+Jwvxu0=", + "_parent": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "model": { + "$ref": "AAAAAAGAPAMl+Jwq3y8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1481, + "top": 1215, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAMl+Jws8Rc=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "lineStyle": 1, + "points": "1447:1279;1488:1156", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPAMl+JwtX/4=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAMl+Jwu10s=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAMl+Jwvxu0=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPAM0X5w94vo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAM0X5w7CQk=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAM0X5w+PYk=", + "_parent": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "model": { + "$ref": "AAAAAAGAPAM0X5w7CQk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1410, + "top": 1438, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAM0YJw/sFo=", + "_parent": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "model": { + "$ref": "AAAAAAGAPAM0X5w7CQk=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1395, + "top": 1437, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAM0YJxAm/U=", + "_parent": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "model": { + "$ref": "AAAAAAGAPAM0X5w7CQk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1439, + "top": 1439, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAM0X5w94vo=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAEECJu1N1A=" + }, + "tail": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "lineStyle": 1, + "points": "1424:1495;1427:1396", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPAM0X5w+PYk=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAM0YJw/sFo=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAM0YJxAm/U=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPAZXyJz7pes=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJz8vTg=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1324, + "top": 1581, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJz9jgA=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1324, + "top": 1566, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJz+i7M=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1324, + "top": 1611, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJz/1qs=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz4H6A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1339, + "top": 1581, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0AVnY=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz4H6A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1342, + "top": 1567, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0BuAo=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz4H6A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1335, + "top": 1608, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0CqJk=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz5qwM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1309, + "top": 1581, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0DRxo=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz5qwM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1306, + "top": 1567, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAZXyJ0EjG8=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz5qwM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1313, + "top": 1608, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPAZXyJ0FhtE=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz4H6A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPAZXyJ0Gq9E=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz7pes=" + }, + "model": { + "$ref": "AAAAAAGAPAZXyJz5qwM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "tail": { + "$ref": "AAAAAAGAO5gALZsP5fo=" + }, + "lineStyle": 1, + "points": "1314:1602;1335:1602", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPAZXyJz8vTg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAZXyJz9jgA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAZXyJz+i7M=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPAZXyJz/1qs=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPAZXyJ0AVnY=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPAZXyJ0BuAo=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPAZXyJ0CqJk=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPAZXyJ0DRxo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPAZXyJ0EjG8=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPAZXyJ0FhtE=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPAZXyJ0Gq9E=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPAZ6f51RxO8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPAZ6f51SOeE=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPAZ6f51TTAU=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": 2752, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAZ6f51UoT0=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "font": "Arial;13;1", + "left": 1365, + "top": 1751, + "width": 116.314453125, + "height": 13, + "text": "LineSymbolMarker" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAZ6f51V14E=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": 2752, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPAZ6f51W2RM=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": 2752, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1360, + "top": 1744, + "width": 126.314453125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAZ6f51TTAU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPAZ6f51UoT0=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPAZ6f51V14E=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAZ6f51W2RM=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPAZ6f51XwF4=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAaeH52jAV8=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "model": { + "$ref": "AAAAAAGAPAad+p2dGzE=" + }, + "font": "Arial;13;0", + "left": 1365, + "top": 1774, + "width": 116.314453125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAaku53Bq+k=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "model": { + "$ref": "AAAAAAGAPAakl5275T8=" + }, + "font": "Arial;13;0", + "left": 1365, + "top": 1789, + "width": 116.314453125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAam3p3W7Sk=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "model": { + "$ref": "AAAAAAGAPAamt53QDe4=" + }, + "font": "Arial;13;0", + "left": 1365, + "top": 1804, + "width": 116.314453125, + "height": 13, + "text": "+placement", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPAapVJ3rP5A=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "model": { + "$ref": "AAAAAAGAPAapL53l9Sc=" + }, + "font": "Arial;13;0", + "left": 1365, + "top": 1819, + "width": 116.314453125, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1360, + "top": 1769, + "width": 126.314453125, + "height": 68 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPAZ6f51YMfU=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "font": "Arial;13;0", + "left": 1360, + "top": 1837, + "width": 126.314453125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPAZ6f51Z/g8=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 280, + "top": 1376, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPAZ6f51a1Yg=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "model": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 280, + "top": 1376, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1360, + "top": 1744, + "width": 126.314453125, + "height": 103, + "nameCompartment": { + "$ref": "AAAAAAGAPAZ6f51SOeE=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPAZ6f51XwF4=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPAZ6f51YMfU=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPAZ6f51Z/g8=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPAZ6f51a1Yg=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPAgXl59w9tY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ9x8Wc=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1436, + "top": 1715, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ9yGZE=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1451, + "top": 1715, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ9zKjU=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1407, + "top": 1716, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ90XoY=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59tmOM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1437, + "top": 1721, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ91D64=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59tmOM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1450, + "top": 1724, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ92hKk=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59tmOM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1409, + "top": 1717, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ93qTo=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59uDWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1437, + "top": 1711, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ945Nk=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59uDWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1450, + "top": 1708, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPAgXmJ951JU=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59uDWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1409, + "top": 1715, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPAgXmJ96iVI=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59tmOM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPAgXmJ97Rxw=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59w9tY=" + }, + "model": { + "$ref": "AAAAAAGAPAgXl59uDWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAZ6f51RxO8=" + }, + "tail": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "lineStyle": 1, + "points": "1422:1702;1422:1743", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPAgXmJ9x8Wc=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPAgXmJ9yGZE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPAgXmJ9zKjU=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPAgXmJ90XoY=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPAgXmJ91D64=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPAgXmJ92hKk=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPAgXmJ93qTo=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPAgXmJ945Nk=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPAgXmJ951JU=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPAgXmJ96iVI=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPAgXmJ97Rxw=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPBd73qHscQA=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPBd73qHtjz8=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPBd73qHudqQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 896, + "top": 1920, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPBd73qHvzLw=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "font": "Arial;13;1", + "left": 981, + "top": 1503, + "width": 133.66259765625, + "height": 13, + "text": "PictureMarkerSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPBd73qHwpPE=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 896, + "top": 1920, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPBd73qHxJhQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 896, + "top": 1920, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 976, + "top": 1496, + "width": 143.66259765625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPBd73qHudqQ=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPBd73qHvzLw=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPBd73qHwpPE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPBd73qHxJhQ=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPBd736Hy3vE=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBe8LKL7BvY=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBe8CaLygzQ=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1526, + "width": 133.66259765625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfDAaMxM0g=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfC3qMo4vU=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1541, + "width": 133.66259765625, + "height": 13, + "text": "+angle", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfF1qNVuNA=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfFsKNMfiQ=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1556, + "width": 133.66259765625, + "height": 13, + "text": "+height", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfIGaN5OJU=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfH9qNwFW8=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1571, + "width": 133.66259765625, + "height": 13, + "text": "+url", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfKMKOdoEo=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfKDqOUl0Y=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1586, + "width": 133.66259765625, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfMSaPBn5I=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfMJqO4ULE=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1601, + "width": 133.66259765625, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPBfOiaPlYo4=", + "_parent": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "model": { + "$ref": "AAAAAAGAPBfOZ6Pcm9c=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1616, + "width": 133.66259765625, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 976, + "top": 1521, + "width": 143.66259765625, + "height": 113 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPBd736HzKbk=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPBeuDKLFpuw=", + "_parent": { + "$ref": "AAAAAAGAPBd736HzKbk=" + }, + "model": { + "$ref": "AAAAAAGAPBet6aK8jQc=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1639, + "width": 133.66259765625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPBhv66W3Wa4=", + "_parent": { + "$ref": "AAAAAAGAPBd736HzKbk=" + }, + "model": { + "$ref": "AAAAAAGAPBhvx6Wusf8=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1654, + "width": 133.66259765625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPBhyDaXb2Ko=", + "_parent": { + "$ref": "AAAAAAGAPBd736HzKbk=" + }, + "model": { + "$ref": "AAAAAAGAPBhx56XShSk=" + }, + "font": "Arial;13;0", + "left": 981, + "top": 1669, + "width": 133.66259765625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 976, + "top": 1634, + "width": 143.66259765625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPBd736H0W7E=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 448, + "top": 960, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPBd736H1Moo=", + "_parent": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "model": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 448, + "top": 960, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 976, + "top": 1496, + "width": 143.66259765625, + "height": 191, + "nameCompartment": { + "$ref": "AAAAAAGAPBd73qHtjz8=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPBd736Hy3vE=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPBd736HzKbk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPBd736H0W7E=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPBd736H1Moo=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPBeg7KJxVzQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPBeg7KJvEiE=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPBeg7KJySLo=", + "_parent": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "model": { + "$ref": "AAAAAAGAPBeg7KJvEiE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1134, + "top": 1441, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPBeg7KJzizU=", + "_parent": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "model": { + "$ref": "AAAAAAGAPBeg7KJvEiE=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1122, + "top": 1432, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPBeg7KJ008o=", + "_parent": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "model": { + "$ref": "AAAAAAGAPBeg7KJvEiE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1157, + "top": 1460, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPBeg7KJxVzQ=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO4K5hlAZreY=" + }, + "tail": { + "$ref": "AAAAAAGAPBd73qHscQA=" + }, + "lineStyle": 1, + "points": "1118:1495;1175:1419", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPBeg7KJySLo=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPBeg7KJzizU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPBeg7KJ008o=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPCD46KeYkpo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPCD46KeZWB4=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPCD46KeaMOQ=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": 2000, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCD46KebbT8=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "font": "Arial;13;3", + "left": 1525, + "top": 1287, + "width": 160.7861328125, + "height": 13, + "text": "FillSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCD46Kechlw=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": 2000, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCD46Ked/xc=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1040, + "top": 2000, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1520, + "top": 1280, + "width": 170.7861328125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPCD46KeaMOQ=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPCD46KebbT8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPCD46Kechlw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPCD46Ked/xc=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPCD46Kee1O0=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCEdTKhxXM4=", + "_parent": { + "$ref": "AAAAAAGAPCD46Kee1O0=" + }, + "model": { + "$ref": "AAAAAAGAPCEdKahoOMM=" + }, + "font": "Arial;13;0", + "left": 1525, + "top": 1310, + "width": 160.7861328125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCEmM6i5bsM=", + "_parent": { + "$ref": "AAAAAAGAPCD46Kee1O0=" + }, + "model": { + "$ref": "AAAAAAGAPCEmEKiwQC0=" + }, + "font": "Arial;13;0", + "left": 1525, + "top": 1325, + "width": 160.7861328125, + "height": 13, + "text": "+outline: SimpleLineSymbol", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1520, + "top": 1305, + "width": 170.7861328125, + "height": 38 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPCD46aefwOo=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCEvp6jvsj4=", + "_parent": { + "$ref": "AAAAAAGAPCD46aefwOo=" + }, + "model": { + "$ref": "AAAAAAGAPCEvg6jm2cI=" + }, + "font": "Arial;13;0", + "left": 1525, + "top": 1348, + "width": 160.7861328125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCE2o6kl+ZE=", + "_parent": { + "$ref": "AAAAAAGAPCD46aefwOo=" + }, + "model": { + "$ref": "AAAAAAGAPCE2f6kc9N4=" + }, + "font": "Arial;13;0", + "left": 1525, + "top": 1363, + "width": 160.7861328125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1520, + "top": 1343, + "width": 170.7861328125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPCD46aeg9BU=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 520, + "top": 1000, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPCD46aehjMA=", + "_parent": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "model": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 520, + "top": 1000, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1520, + "top": 1280, + "width": 170.7861328125, + "height": 101, + "nameCompartment": { + "$ref": "AAAAAAGAPCD46KeZWB4=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPCD46Kee1O0=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPCD46aefwOo=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPCD46aeg9BU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPCD46aehjMA=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPCEOcKgdRwY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPCEOb6gbYVs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCEOcKgezAQ=", + "_parent": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "model": { + "$ref": "AAAAAAGAPCEOb6gbYVs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1543, + "top": 1216, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCEOcKgfges=", + "_parent": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "model": { + "$ref": "AAAAAAGAPCEOb6gbYVs=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1529, + "top": 1222, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCEOcKggoCI=", + "_parent": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "model": { + "$ref": "AAAAAAGAPCEOb6gbYVs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1570, + "top": 1205, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPCEOcKgdRwY=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "lineStyle": 1, + "points": "1583:1279;1532:1156", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPCEOcKgezAQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPCEOcKgfges=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPCEOcKggoCI=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPCnyRqqSpVk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPCnyR6qT0qo=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPCnyR6qUmU8=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 992, + "top": 1872, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCnyR6qVskM=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "font": "Arial;13;1", + "left": 1533, + "top": 1503, + "width": 160.7861328125, + "height": 13, + "text": "SimpleFillSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCnyR6qWzlw=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 992, + "top": 1872, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPCnyR6qX0jU=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 992, + "top": 1872, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1528, + "top": 1496, + "width": 170.7861328125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPCnyR6qUmU8=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPCnyR6qVskM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPCnyR6qWzlw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPCnyR6qX0jU=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPCnyR6qYf2U=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCqTNquhaEY=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "model": { + "$ref": "AAAAAAGAPCqTEauYd9c=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1526, + "width": 160.7861328125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCqZmqvXg2I=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "model": { + "$ref": "AAAAAAGAPCqZd6vOxgQ=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1541, + "width": 160.7861328125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCqcsqv7lf8=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "model": { + "$ref": "AAAAAAGAPCqcjqvys9Y=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1556, + "width": 160.7861328125, + "height": 13, + "text": "+outline: SimpleLineSymbol", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPCqfm6wfWwQ=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "model": { + "$ref": "AAAAAAGAPCqfd6wWjho=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1571, + "width": 160.7861328125, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1528, + "top": 1521, + "width": 170.7861328125, + "height": 68 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPCnyR6qZZbw=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCp9CqsRn5Y=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qZZbw=" + }, + "model": { + "$ref": "AAAAAAGAPCp84qsIizc=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1594, + "width": 160.7861328125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCqE2qtH91E=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qZZbw=" + }, + "model": { + "$ref": "AAAAAAGAPCqEt6s+HlI=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1609, + "width": 160.7861328125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPCqItatrJLk=", + "_parent": { + "$ref": "AAAAAAGAPCnyR6qZZbw=" + }, + "model": { + "$ref": "AAAAAAGAPCqIjqtiAxk=" + }, + "font": "Arial;13;0", + "left": 1533, + "top": 1624, + "width": 160.7861328125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1528, + "top": 1589, + "width": 170.7861328125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPCnyR6qacBE=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 496, + "top": 936, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPCnyR6qbhsM=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "model": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 496, + "top": 936, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1528, + "top": 1496, + "width": 170.7861328125, + "height": 146, + "nameCompartment": { + "$ref": "AAAAAAGAPCnyR6qT0qo=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPCnyR6qYf2U=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPCnyR6qZZbw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPCnyR6qacBE=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPCnyR6qbhsM=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPCwoxq9nUGU=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPCwoxq9lm94=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCwoxq9ow70=", + "_parent": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "model": { + "$ref": "AAAAAAGAPCwoxq9lm94=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1593, + "top": 1432, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCwoxq9pgNU=", + "_parent": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "model": { + "$ref": "AAAAAAGAPCwoxq9lm94=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1578, + "top": 1433, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPCwoxq9qtb4=", + "_parent": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "model": { + "$ref": "AAAAAAGAPCwoxq9lm94=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1622, + "top": 1431, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPCwoxq9nUGU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "tail": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "lineStyle": 1, + "points": "1610:1495;1606:1381", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPCwoxq9ow70=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPCwoxq9pgNU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPCwoxq9qtb4=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPQMJ63hIQC8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPQMJ63hJTUk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPQMJ63hKJJk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1088, + "top": 1920, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQMJ63hLNu0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "font": "Arial;13;1", + "left": 1717, + "top": 1503, + "width": 160.7861328125, + "height": 13, + "text": "PictureFillSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQMJ63hM0WA=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1088, + "top": 1920, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQMJ63hNiQU=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1088, + "top": 1920, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1712, + "top": 1496, + "width": 170.7861328125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQMJ63hKJJk=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPQMJ63hLNu0=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPQMJ63hM0WA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQMJ63hNiQU=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPQMJ63hOhZk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQM7f3jBJ7M=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQM7WHi4dEU=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1526, + "width": 160.7861328125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQND4Xj379s=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNDuXjuWOY=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1541, + "width": 160.7861328125, + "height": 13, + "text": "+height", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNGE3kbdFg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNF6nkSbuY=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1556, + "width": 160.7861328125, + "height": 13, + "text": "+outline: SimpleLineSymbol", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNIx3k/XFc=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNIonk2nHk=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1571, + "width": 160.7861328125, + "height": 13, + "text": "+url", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNKqnljCV0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNKhXlabsA=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1586, + "width": 160.7861328125, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNMZnmH/hI=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNMP3l+opg=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1601, + "width": 160.7861328125, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNOvHmrcrM=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNOl3miql8=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1616, + "width": 160.7861328125, + "height": 13, + "text": "+xscale", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNQdXnPFQ0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNQUnnGgkw=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1631, + "width": 160.7861328125, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPQNVUHoXv8w=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "model": { + "$ref": "AAAAAAGAPQNVK3oOyW0=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1646, + "width": 160.7861328125, + "height": 13, + "text": "+yscale", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1712, + "top": 1521, + "width": 170.7861328125, + "height": 143 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPQMJ63hPGHg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPQP0snvrEeE=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hPGHg=" + }, + "model": { + "$ref": "AAAAAAGAPQP0jXviawc=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1669, + "width": 160.7861328125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPQP6XHwh97M=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hPGHg=" + }, + "model": { + "$ref": "AAAAAAGAPQP6OHwYjDU=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1684, + "width": 160.7861328125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPQP9KXxFN3I=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hPGHg=" + }, + "model": { + "$ref": "AAAAAAGAPQP8/nw8tdI=" + }, + "font": "Arial;13;0", + "left": 1717, + "top": 1699, + "width": 160.7861328125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1712, + "top": 1664, + "width": 170.7861328125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPQMJ63hQXkg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 960, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPQMJ63hRc7s=", + "_parent": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "model": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 960, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1712, + "top": 1496, + "width": 170.7861328125, + "height": 221, + "nameCompartment": { + "$ref": "AAAAAAGAPQMJ63hJTUk=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPQMJ63hOhZk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPQMJ63hPGHg=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPQMJ63hQXkg=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPQMJ63hRc7s=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPQQ/rX0URLo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQQ/rX0Sm58=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQQ/rX0VtkM=", + "_parent": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "model": { + "$ref": "AAAAAAGAPQQ/rX0Sm58=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1666, + "top": 1440, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQQ/rX0Wl60=", + "_parent": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "model": { + "$ref": "AAAAAAGAPQQ/rX0Sm58=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1654, + "top": 1449, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQQ/rX0XM6s=", + "_parent": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "model": { + "$ref": "AAAAAAGAPQQ/rX0Sm58=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1691, + "top": 1423, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQQ/rX0URLo=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPCD46KeYkpo=" + }, + "tail": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "lineStyle": 1, + "points": "1719:1495;1639:1381", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPQQ/rX0VtkM=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQQ/rX0Wl60=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQQ/rX0XM6s=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPQTeDH32cnY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX33gTs=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1521, + "top": 1590, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX34DKc=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1525, + "top": 1605, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX35nSg=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1514, + "top": 1561, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX3618o=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3zm0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1504, + "top": 1594, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX37f5c=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3zm0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1504, + "top": 1607, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX38gSU=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3zm0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1503, + "top": 1566, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX39Vcs=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH30fcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1538, + "top": 1588, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX3+aTI=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH30fcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1542, + "top": 1600, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTeDX3/PDY=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH30fcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1529, + "top": 1561, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPQTeDX4Auts=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH3zm0M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPQTeDX4BSzc=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH32cnY=" + }, + "model": { + "$ref": "AAAAAAGAPQTeDH30fcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "tail": { + "$ref": "AAAAAAGAPCnyRqqSpVk=" + }, + "lineStyle": 1, + "points": "1527:1581;1510:1584", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPQTeDX33gTs=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQTeDX34DKc=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQTeDX35nSg=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPQTeDX3618o=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPQTeDX37f5c=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPQTeDX38gSU=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPQTeDX39Vcs=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPQTeDX3+aTI=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPQTeDX3/PDY=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPQTeDX4Auts=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPQTeDX4BSzc=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPQTsHn5p+g8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5qTWg=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1609, + "top": 1670, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5rB/w=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1609, + "top": 1685, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5stGY=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1610, + "top": 1640, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5tREM=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5mdOE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1686, + "top": 1669, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5uFV8=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5mdOE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1683, + "top": 1683, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5vvws=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5mdOE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1690, + "top": 1642, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5wMFQ=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5nfsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1534, + "top": 1669, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5xqQc=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5nfsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1537, + "top": 1683, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQTsHn5y2DI=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5nfsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1530, + "top": 1642, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPQTsHn5zeYw=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5mdOE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPQTsHn505Lo=", + "_parent": { + "$ref": "AAAAAAGAPQTsHn5p+g8=" + }, + "model": { + "$ref": "AAAAAAGAPQTsGX5nfsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPAMK75wCNw0=" + }, + "tail": { + "$ref": "AAAAAAGAPQMJ63hIQC8=" + }, + "points": "1712:1661;1509:1661", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPQTsHn5qTWg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQTsHn5rB/w=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQTsHn5stGY=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPQTsHn5tREM=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPQTsHn5uFV8=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPQTsHn5vvws=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPQTsHn5wMFQ=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPQTsHn5xqQc=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPQTsHn5y2DI=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPQTsHn5zeYw=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPQTsHn505Lo=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPQff+YT4B2c=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPQff+YT5brs=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPQff+YT6ibA=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 912, + "top": 1984, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQff+YT73zw=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "font": "Arial;13;1", + "left": 1909, + "top": 1287, + "width": 121.76708984375, + "height": 13, + "text": "TextSymbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQff+YT8ACs=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 912, + "top": 1984, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPQff+oT9tm4=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 912, + "top": 1984, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1904, + "top": 1280, + "width": 131.76708984375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQff+YT6ibA=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPQff+YT73zw=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPQff+YT8ACs=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQff+oT9tm4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPQff+oT+U9k=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAILpBJc2o=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAICJA6v/o=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1310, + "width": 121.76708984375, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAORZCvhv0=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAOIJCgc6M=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1325, + "width": 121.76708984375, + "height": 13, + "text": "+angle", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSARAZDxqV8=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAQ2ZDiIF4=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1340, + "width": 121.76708984375, + "height": 13, + "text": "+backgroundColor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSATSZEzAa4=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSATI5Ek4IM=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1355, + "width": 121.76708984375, + "height": 13, + "text": "+borderLineColor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAVNZF1V5s=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAVEZFmIR8=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1370, + "width": 121.76708984375, + "height": 13, + "text": "+borderLineSize", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAXNpG3Gb0=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAXEZGod8M=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1385, + "width": 121.76708984375, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAZe5H5/4w=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAZV5HqksU=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1400, + "width": 121.76708984375, + "height": 13, + "text": "+font: Font", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAcbJI7qJg=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAcR5Is1X4=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1415, + "width": 121.76708984375, + "height": 13, + "text": "+haloColor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAebJJ9kFc=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAeRZJuhG0=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1430, + "width": 121.76708984375, + "height": 13, + "text": "+haloSize", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAgsJK/da8=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAgi5KwfFQ=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1445, + "width": 121.76708984375, + "height": 13, + "text": "+horizontalAlignment", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAi3JMB7Lg=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAitpLy8xw=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1460, + "width": 121.76708984375, + "height": 13, + "text": "+kerning", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAlBZNDIlM=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAk2pM04uU=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1475, + "width": 121.76708984375, + "height": 13, + "text": "+lineHeight", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSAnOJOFtK8=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSAnFJN2K9s=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1490, + "width": 121.76708984375, + "height": 13, + "text": "+lineWidth", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSApW5PHPKo=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSApNZO4TrY=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1505, + "width": 121.76708984375, + "height": 13, + "text": "+rotated", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSDpdpiVETQ=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSDpSpiG08U=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1520, + "width": 121.76708984375, + "height": 13, + "text": "+text", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSDysJkT9m8=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSDyipkENGA=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1535, + "width": 121.76708984375, + "height": 13, + "text": "+verticalAlignment", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSD1pZlVxKo=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSD1fJlGhvw=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1550, + "width": 121.76708984375, + "height": 13, + "text": "+xoffset", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPSFI3pt8ews=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "model": { + "$ref": "AAAAAAGAPSFIs5ttMYs=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1565, + "width": 121.76708984375, + "height": 13, + "text": "+yoffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1904, + "top": 1305, + "width": 131.76708984375, + "height": 278 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPQff+oT/0h0=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPR/v/48X06k=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT/0h0=" + }, + "model": { + "$ref": "AAAAAAGAPR/v2o8IG9I=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1588, + "width": 121.76708984375, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPR/8/I+hiJ0=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT/0h0=" + }, + "model": { + "$ref": "AAAAAAGAPR/81I+SarM=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1603, + "width": 121.76708984375, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPR//VY/j/To=", + "_parent": { + "$ref": "AAAAAAGAPQff+oT/0h0=" + }, + "model": { + "$ref": "AAAAAAGAPR//MI/UW7w=" + }, + "font": "Arial;13;0", + "left": 1909, + "top": 1618, + "width": 121.76708984375, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1904, + "top": 1583, + "width": 131.76708984375, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPQff+oUASTM=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 456, + "top": 992, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPQff+oUBbVo=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "model": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 456, + "top": 992, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1904, + "top": 1280, + "width": 131.76708984375, + "height": 356, + "nameCompartment": { + "$ref": "AAAAAAGAPQff+YT5brs=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPQff+oT+U9k=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPQff+oT/0h0=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPQff+oUASTM=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPQff+oUBbVo=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAPQhWsoWnkVI=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPQhWsoWl3dc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQhWsoWo0Ew=", + "_parent": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "model": { + "$ref": "AAAAAAGAPQhWsoWl3dc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1719, + "top": 1274, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQhWsoWpfhI=", + "_parent": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "model": { + "$ref": "AAAAAAGAPQhWsoWl3dc=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1710, + "top": 1286, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPQhWsoWqvn0=", + "_parent": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "model": { + "$ref": "AAAAAAGAPQhWsoWl3dc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1738, + "top": 1251, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPQhWsoWnkVI=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "lineStyle": 1, + "points": "1903:1405;1555:1133", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPQhWsoWo0Ew=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPQhWsoWpfhI=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPQhWsoWqvn0=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAPS3xYKL0b/4=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAPS3xYKL1KHw=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAPS3xYKL2ebU=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 976, + "top": 1952, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPS3xYKL35s8=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "font": "Arial;13;1", + "left": 1933, + "top": 1679, + "width": 80.57080078125, + "height": 13, + "text": "Font" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPS3xYKL41mk=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 976, + "top": 1952, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAPS3xYKL5gP4=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 976, + "top": 1952, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 1928, + "top": 1672, + "width": 90.57080078125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAPS3xYKL2ebU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAPS3xYKL35s8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAPS3xYKL41mk=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPS3xYKL5gP4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAPS3xYKL6R/Y=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4SpKO7AQ4=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4SfqOsEp4=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1702, + "width": 80.57080078125, + "height": 13, + "text": "+decoration", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4ZkqQheL8=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4ZY6QSK9k=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1717, + "width": 80.57080078125, + "height": 13, + "text": "+family", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4cCaRjfvc=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4b4KRUp0w=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1732, + "width": 80.57080078125, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4eT6SlCv0=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4eKqSWMIQ=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1747, + "width": 80.57080078125, + "height": 13, + "text": "+style", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAPS4gZ6TnLcg=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "model": { + "$ref": "AAAAAAGAPS4gOqTYZto=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1762, + "width": 80.57080078125, + "height": 13, + "text": "+weight", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1928, + "top": 1697, + "width": 90.57080078125, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAPS3xYKL7b/k=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPS8byazlViU=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL7b/k=" + }, + "model": { + "$ref": "AAAAAAGAPS8boazWojk=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1785, + "width": 80.57080078125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPS8jN61jd0Y=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL7b/k=" + }, + "model": { + "$ref": "AAAAAAGAPS8jDq1UJEA=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1800, + "width": 80.57080078125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAPS8lh620UOM=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL7b/k=" + }, + "model": { + "$ref": "AAAAAAGAPS8lYK2li7A=" + }, + "font": "Arial;13;0", + "left": 1933, + "top": 1815, + "width": 80.57080078125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 1928, + "top": 1780, + "width": 90.57080078125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAPS3xYKL8wkA=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 488, + "top": 976, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAPS3xYKL9dXs=", + "_parent": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "model": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 488, + "top": 976, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 1928, + "top": 1672, + "width": 90.57080078125, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAGAPS3xYKL1KHw=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAPS3xYKL6R/Y=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAPS3xYKL7b/k=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAPS3xYKL8wkA=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAPS3xYKL9dXs=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAPS6KpabfujQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabgWK0=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1985, + "top": 1646, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabhLRk=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2000, + "top": 1646, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabiqxA=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1956, + "top": 1647, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabjOP8=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbc4jk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1986, + "top": 1655, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabkrpE=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbc4jk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1999, + "top": 1658, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabltA0=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbc4jk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1958, + "top": 1651, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6Kpabmkkw=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbd/TA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1986, + "top": 1639, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6KpabnrMk=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbd/TA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1999, + "top": 1636, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAPS6Kpabo7ro=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbd/TA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1958, + "top": 1643, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPS6KpabpliQ=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbc4jk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAPS6KpabqOVc=", + "_parent": { + "$ref": "AAAAAAGAPS6KpabfujQ=" + }, + "model": { + "$ref": "AAAAAAGAPS6KpKbd/TA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 576, + "top": 1024, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAPS3xYKL0b/4=" + }, + "tail": { + "$ref": "AAAAAAGAPQff+YT4B2c=" + }, + "lineStyle": 1, + "points": "1971:1636;1971:1671", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAPS6KpabgWK0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAPS6KpabhLRk=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAPS6KpabiqxA=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAPS6KpabjOP8=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAPS6KpabkrpE=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAPS6KpabltA0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAPS6Kpabmkkw=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAPS6KpabnrMk=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAPS6Kpabo7ro=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAPS6KpabpliQ=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAPS6KpabqOVc=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO1MYeU/HxR0=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1M4mE/xJtQ=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1NDTE/3Mpo=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1NFuk/9tZ0=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "opacity", + "visibility": "private", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO1QIuVAHl58=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO1QRq1ANbHM=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO4K5hVAX2y8=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "MarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAO4k9d5q8o/w=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "source": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4pz5Zr153M=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mTwJrPb7w=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4qdgZsAE80=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mfnZrVlig=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mihZrbRuU=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO4nh+prkPOw=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO4n8mJrrxks=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO5gALZsNaqc=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleMarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAO5hIZ5s7B30=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "source": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "target": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAUdsZyKUJw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAUdsZyL/EI=", + "_parent": { + "$ref": "AAAAAAGAPAUdsZyKUJw=" + }, + "reference": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAUdsZyMSoA=", + "_parent": { + "$ref": "AAAAAAGAPAUdsZyKUJw=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAZXyJz3JCA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAZXyJz4H6A=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "reference": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAZXyJz5qwM=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hkNptMOqw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hwUJtS32g=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hygptYMPQ=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5pIqJud5fM=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "outline", + "type": "SimpleLineSymbol" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h09pteLz4=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "path", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h23Jtkc88=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h4k5tqygA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h7A5tw0cA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h9B5t2d9Q=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iajJuIBOs=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iPxpt81pU=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iX6JuC7TA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAEEB5uzp5s=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPAMl+Jwq3y8=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "source": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKLVpvdNNE=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKRz5vj6lU=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKan5vpoKk=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPALS25vyQdo=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPALeMZv49lY=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAMK75wAYR4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleLineSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPAM0X5w7CQk=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "source": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "target": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAgXl59swT0=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAgXl59tmOM=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAgXl59uDWo=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "reference": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQZ0pxMviw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQglpxSlAw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQjTpxYRgc=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQlXpxeKLg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQnhpxkzMk=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "marker", + "type": "LineSymbolMarker" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQprpxqv+k=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "miterLimit", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQr7pxwm+c=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQuFpx2vEw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvaqK3lziY=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvhf64bbOg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvkHq4/nNg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAZ6f51PAmE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbolMarker", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAad+p2dGzE=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAakl5275T8=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAamt53QDe4=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "placement", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAapL53l9Sc=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "style", + "type": "" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPBd73aHqdKY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PictureMarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPBeg7KJvEiE=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "source": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "target": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBe8CaLygzQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfC3qMo4vU=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfFsKNMfiQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfH9qNwFW8=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "url", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfKDqOUl0Y=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "width", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfMJqO4ULE=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfOZ6Pcm9c=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBet6aK8jQc=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBhvx6Wusf8=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBhx56XShSk=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPCD456eWclQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "FillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPCEOb6gbYVs=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "source": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCEdKahoOMM=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCEmEKiwQC0=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCEvg6jm2cI=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCE2f6kc9N4=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPCnyRqqQR0M=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleFillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPCwoxq9lm94=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "source": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "target": { + "$ref": "AAAAAAGAPCD456eWclQ=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPQTeDH3yZgM=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTeDH3zm0M=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "reference": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTeDH30fcw=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqTEauYd9c=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqZd6vOxgQ=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqcjqvys9Y=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqfd6wWjho=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "style", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCp84qsIizc=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCqEt6s+HlI=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCqIjqtiAxk=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPQMJ6nhGP6w=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PictureFillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPQQ/rX0Sm58=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "source": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "target": { + "$ref": "AAAAAAGAPCD456eWclQ=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPQTsGX5l7I8=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTsGX5mdOE=", + "_parent": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "reference": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTsGX5nfsI=", + "_parent": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQM7WHi4dEU=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNDuXjuWOY=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNF6nkSbuY=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNIonk2nHk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "url", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNKhXlabsA=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "width", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNMP3l+opg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNOl3miql8=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "xscale", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNQUnnGgkw=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "yoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNVK3oOyW0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "yscale", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP0jXviawc=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP6OHwYjDU=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP8/nw8tdI=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPQff+YT2kWw=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "TextSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPQhWsoWl3dc=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "source": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPS6KpKbbg5c=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPS6KpKbc4jk=", + "_parent": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "reference": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPS6KpKbd/TA=", + "_parent": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "reference": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAICJA6v/o=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAOIJCgc6M=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAQ2ZDiIF4=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "backgroundColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSATI5Ek4IM=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "borderLineColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAVEZFmIR8=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "borderLineSize", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAXEZGod8M=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAZV5HqksU=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "font", + "type": "Font" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAcR5Is1X4=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "haloColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAeRZJuhG0=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "haloSize", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAgi5KwfFQ=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "horizontalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAitpLy8xw=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "kerning", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAk2pM04uU=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "lineHeight", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAnFJN2K9s=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "lineWidth", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSApNZO4TrY=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "rotated", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSDpSpiG08U=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "text", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSDyipkENGA=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "verticalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSD1fJlGhvw=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSFIs5ttMYs=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR/v2o8IG9I=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR/81I+SarM=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR//MI/UW7w=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPS3xX6LyqAQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Font", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4SfqOsEp4=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "decoration", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4ZY6QSK9k=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "family", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4b4KRUp0w=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4eKqSWMIQ=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4gOqTYZto=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "weight", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8boazWojk=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8jDq1UJEA=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8lYK2li7A=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAP6S168jGsxA=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAP6VdPsoeetU=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "source": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAP9XAwkPrzU4=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAP9XAwkPs9B8=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "reference": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAP9XAwkPtw8Y=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "reference": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bx38w7uLM=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bpOstslHY=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bvnMvqZyg=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "symbolLayers", + "type": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAP8/5/D2x644=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol3DLayer", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP9VqWEBDC5M=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "type", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAP9WNLEGF+44=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAP9WlJEMSNXw=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQHO4GV0oLfI=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PointSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQHbWNI6eATI=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "source": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQHpofreL/lM=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQHpofreMF+Y=", + "_parent": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQHpofreNRd8=", + "_parent": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "reference": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQPx5Lwegxog=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPx5LwehMeE=", + "_parent": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPx5LweiweU=", + "_parent": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "reference": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQPyJKAjcvoE=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPyJKAjdEa4=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPyJKAjecM4=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPbk14qDNA=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPo018aeJo=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "callout", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPq7F96x14=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPtAV/aljM=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "symbolLayers", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPuxGA6UBk=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "verticalOffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYPZmRQTEw=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYVz2Tm/qo=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYYN2VGn1k=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQHci6o8tBGM=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "IconSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQHcyhZBm0hs=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "source": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiR5aDzLYY=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiYP6GJhto=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiaNaHpMeE=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "anchorPosition", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHicC6JJ2ps=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHidd6KpQY0=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "outline", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHifkKMJgeQ=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "resource", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHihOaNp1o4=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlBEamVlhM=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlHU6orzwA=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlJbKqLtE0=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQI6jF+ainB0=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJBZ8ACM7PY=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "source": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQJB91wHUuZ8=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQJB91wHV5+E=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "reference": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQJB91wHWZ0U=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "reference": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQQzoZWpmJZ0=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQQzoZWpnhlg=", + "_parent": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "reference": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQQzoZWposbQ=", + "_parent": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "reference": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7RO+gvDaw=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7YIujdTVQ=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7fHum1PPw=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "symbolLayers", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI83Pu60uKU=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI89iO9irzg=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI8/v+/RXtM=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQI6qsOc0DIE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJBpFAEwA94=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "source": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/Ms/fm62A=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/SxfiUCXU=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/U9/kDTG0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/W6PlyuF4=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "marker", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/x4vseoP0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/0MvuNWWU=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "pattern", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/2Efv8elc=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI+28vXcViw=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI/BU/bJXC8=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI/Do/c45mg=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQJPNQDjoUDE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PolygonSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJR3UUvMi3E=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "source": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQKMnaHQbRW0=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQKMnaHQc7Rs=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQKMnaHQdqUs=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "reference": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQYq/foRzh3g=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQYq/foR06rU=", + "_parent": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQYq/foR197U=", + "_parent": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "reference": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZEEMGQvP4A=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEEMGQwxWs=", + "_parent": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEEMGQx3vs=", + "_parent": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "reference": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZEYe2XL0XM=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEYe2XM+rA=", + "_parent": { + "$ref": "AAAAAAGAQZEYe2XL0XM=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEYe2XNnz8=", + "_parent": { + "$ref": "AAAAAAGAQZEYe2XL0XM=" + }, + "reference": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZE2+md/zbs=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZE2+meABCg=", + "_parent": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZE2+meB18I=", + "_parent": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "reference": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZOWEGpZGhg=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZOWEGpaZS4=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZOWEGpb1vk=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZO4TGvycxc=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZO4TGvzO6Q=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZO4TGv03hE=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "reference": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJPvrzoyMNs=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJP6pjtAYNM=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJP8/ju+xJc=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "symbolLayers", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQJTTy0Pz0=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQP+D16Vf8=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQSWz34cwY=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQKIeqWLtb7A=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "FillSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQKMeBnOSzgA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "source": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKn5Gwwvc4=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKt/Wz2iEA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKv4210K3A=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "edges", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKymW3yL3A=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKK0i25wkdY=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "outline", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKK2bm7uffg=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "pattern", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI2N2RPsfU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI9kGUVE0M=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI/4mWTMrg=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQLjRBoVK/Ro=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LabelSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQLnZqZjVkdk=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "source": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQLsG/7AAptg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQLsG/7ABSMo=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "reference": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQLsG/7ACCWw=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkJF4qC7uw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkPq4tgUdM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "callout", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkRqYvtqAE=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkT24x6g2s=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "symbolLayers", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkWVo0H4Q8=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "verticalOffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjff4a4sxM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjlyoeW4cw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjoBYgjCv8=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQLns6Jmj0x4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "TextSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQLsTnLEG5Uo=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "source": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLoWJ5tje4c=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLocVpxB5AM=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "background", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLofAJzO1GA=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "font", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLog4Z1bzo4=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "halo", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLojE53omX0=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "horizontalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLolVZ51Tdg=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "lineHeight", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLonSp8CGas=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLopjp+PrHs=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLor6qAcWyY=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "text", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLq7GahmsQQ=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "verticalAlignment", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrMV6o4fWE=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrSt6sWGnA=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrU4qujo+U=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQPnVfurDxP4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "ObjectSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQP3ZlkBMubY=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "source": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPop+u2+iXY=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPozEe604dA=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo2Gu9Q5Ck=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "anchorPosition", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo4he/sG20=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo66/CIc7k=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "depth", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo9LPEkQrk=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "heading", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo/TvHAQDk=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPpBxPJcIdQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPpEefL4VGc=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "resource", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsGafyFSfs=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "roll", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsIyv0hvRE=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "tilt", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsLH/2976o=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "width", + "type": "" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQQuTLUb/9Rg=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PathSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQQz8x230K8E=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "source": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvIck2jTQg=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvOlU7J+Js=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvRWk+D8Kk=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvUBFA9SC8=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvWAFD3ufw=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvYoVGxGiQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvaulJrSXY=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvdLlMlZuI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "profile", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQyXzmQCWwQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "profileRotation", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQyayGS8q5c=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQvq6VS33RQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQvyP1Xdy/A=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQv1gFaXIyU=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQYqXdX+0wEk=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "ExtrudeSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQYrN7oX36Ng=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "source": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYrs74espQ8=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr0SYkCuFQ=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr27InaovU=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "edges", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr5XIqy5mU=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr+RIuK/FY=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYt7S5Rx0RQ=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYuCRZXHU2w=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYuFBpaftPw=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "toJSON" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/service/uml/Symbols3D.mdj b/src/service/uml/Symbols3D.mdj new file mode 100644 index 000000000..b3146d9e0 --- /dev/null +++ b/src/service/uml/Symbols3D.mdj @@ -0,0 +1,12153 @@ +{ + "_type": "Project", + "_id": "AAAAAAFF+h6SjaM2Hec=", + "name": "Untitled", + "ownedElements": [ + { + "_type": "UMLModel", + "_id": "AAAAAAFF+qBWK6M3Z8Y=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model", + "ownedElements": [ + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAFF+qBtyKM79qY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Main", + "defaultDiagram": true, + "ownedViews": [ + { + "_type": "UMLClassView", + "_id": "AAAAAAGAO1MYek/JnBg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAO1MYek/KY2Y=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYek/LgeU=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 4880, + "top": 2096, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/M6PU=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "font": "Arial;13;3", + "left": 2581, + "top": 1167, + "width": 80.57080078125, + "height": 13, + "text": "Symbol" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/N9fA=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 4880, + "top": 2096, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAO1MYe0/OGZc=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 4880, + "top": 2096, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2576, + "top": 1160, + "width": 90.57080078125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAO1MYek/LgeU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAO1MYe0/M6PU=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAO1MYe0/N9fA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAO1MYe0/OGZc=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAO1MYe0/PFXM=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1M4vE/0AZw=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1M4mE/xJtQ=" + }, + "font": "Arial;13;0", + "left": 2581, + "top": 1190, + "width": 80.57080078125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1NDbU/6l7g=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1NDTE/3Mpo=" + }, + "font": "Arial;13;0", + "left": 2581, + "top": 1205, + "width": 80.57080078125, + "height": 13, + "text": "+color", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAO1NF21AAY2Y=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "model": { + "$ref": "AAAAAAGAO1NFuk/9tZ0=" + }, + "font": "Arial;13;0", + "left": 2581, + "top": 1220, + "width": 80.57080078125, + "height": 13, + "text": "-opacity", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2576, + "top": 1185, + "width": 90.57080078125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAO1MYe0/Qbfc=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO1QI21AKpLU=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "model": { + "$ref": "AAAAAAGAO1QIuVAHl58=" + }, + "font": "Arial;13;0", + "left": 2581, + "top": 1243, + "width": 80.57080078125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAO1QR1VAQzNY=", + "_parent": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "model": { + "$ref": "AAAAAAGAO1QRq1ANbHM=" + }, + "font": "Arial;13;0", + "left": 2581, + "top": 1258, + "width": 80.57080078125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2576, + "top": 1238, + "width": 90.57080078125, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAO1MYe0/RU/o=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2440, + "top": 1048, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAO1MYe0/S0T0=", + "_parent": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "model": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2440, + "top": 1048, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2576, + "top": 1160, + "width": 90.57080078125, + "height": 116, + "nameCompartment": { + "$ref": "AAAAAAGAO1MYek/KY2Y=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAO1MYe0/PFXM=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAO1MYe0/Qbfc=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAO1MYe0/RU/o=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAO1MYe0/S0T0=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAP6S17MjIqpw=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAP6S17MjJsCI=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAP6S17MjK9LY=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 704, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP6S17MjL4mU=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "font": "Arial;13;1", + "left": 2093, + "top": 1239, + "width": 187.4970703125, + "height": 13, + "text": "Symbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP6S17MjMWnM=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 704, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP6S17MjN+/8=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -592, + "top": 704, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2088, + "top": 1232, + "width": 197.4970703125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAP6S17MjK9LY=" + }, + "nameLabel": { + "$ref": "AAAAAAGAP6S17MjL4mU=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAP6S17MjMWnM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAP6S17MjN+/8=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAP6S17MjOyVk=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAP6byBMxNWNw=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjOyVk=" + }, + "model": { + "$ref": "AAAAAAGAP6bx38w7uLM=" + }, + "font": "Arial;13;0", + "left": 2093, + "top": 1262, + "width": 187.4970703125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAP6bpZMt+sLY=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjOyVk=" + }, + "model": { + "$ref": "AAAAAAGAP6bpOstslHY=" + }, + "font": "Arial;13;0", + "left": 2093, + "top": 1277, + "width": 187.4970703125, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAP6bvwcv8vqE=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjOyVk=" + }, + "model": { + "$ref": "AAAAAAGAP6bvnMvqZyg=" + }, + "font": "Arial;13;0", + "left": 2093, + "top": 1292, + "width": 187.4970703125, + "height": 13, + "text": "+symbolLayers: Symbol3DLayer", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2088, + "top": 1257, + "width": 197.4970703125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAP6S17MjP11s=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "font": "Arial;13;0", + "left": 2088, + "top": 1310, + "width": 197.4970703125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAP6S17MjQSC4=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -296, + "top": 352, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAP6S17MjRxnU=", + "_parent": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "model": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -296, + "top": 352, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2088, + "top": 1232, + "width": 197.4970703125, + "height": 103, + "nameCompartment": { + "$ref": "AAAAAAGAP6S17MjJsCI=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAP6S17MjOyVk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAP6S17MjP11s=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAP6S17MjQSC4=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAP6S17MjRxnU=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAP6VdPsogt5M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAP6VdPsoeetU=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP6VdPsohCjE=", + "_parent": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "model": { + "$ref": "AAAAAAGAP6VdPsoeetU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2430, + "top": 1227, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP6VdPsoiBVU=", + "_parent": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "model": { + "$ref": "AAAAAAGAP6VdPsoeetU=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2430, + "top": 1212, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP6VdPsojJm4=", + "_parent": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "model": { + "$ref": "AAAAAAGAP6VdPsoeetU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2430, + "top": 1257, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAP6VdPsogt5M=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAO1MYek/JnBg=" + }, + "tail": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "points": "2284:1248;2576:1248", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAP6VdPsohCjE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAP6VdPsoiBVU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAP6VdPsojJm4=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAP8/5/T2zufk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAP8/5/T20DgQ=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAP8/5/T21uxE=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -336, + "top": 1744, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP8/5/T22bXc=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "font": "Arial;13;1", + "left": 2141, + "top": 1935, + "width": 98.26171875, + "height": 13, + "text": "Symbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP8/5/T23zRY=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -336, + "top": 1744, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAP8/5/T24vDs=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -336, + "top": 1744, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2136, + "top": 1928, + "width": 108.26171875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAP8/5/T21uxE=" + }, + "nameLabel": { + "$ref": "AAAAAAGAP8/5/T22bXc=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAP8/5/T23zRY=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAP8/5/T24vDs=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAP8/5/T25IMk=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAP9Vqf0BVvHk=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T25IMk=" + }, + "model": { + "$ref": "AAAAAAGAP9VqWEBDC5M=" + }, + "font": "Arial;13;0", + "left": 2141, + "top": 1958, + "width": 98.26171875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2136, + "top": 1953, + "width": 108.26171875, + "height": 23 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAP8/5/T26ZYI=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAP9WNUUGXHo8=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T26ZYI=" + }, + "model": { + "$ref": "AAAAAAGAP9WNLEGF+44=" + }, + "font": "Arial;13;0", + "left": 2141, + "top": 1981, + "width": 98.26171875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAP9WlTEMkprQ=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T26ZYI=" + }, + "model": { + "$ref": "AAAAAAGAP9WlJEMSNXw=" + }, + "font": "Arial;13;0", + "left": 2141, + "top": 1996, + "width": 98.26171875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2136, + "top": 1976, + "width": 108.26171875, + "height": 38 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAP8/5/T27SB0=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -200, + "top": 208, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAP8/5/T28FXA=", + "_parent": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "model": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -200, + "top": 208, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2136, + "top": 1928, + "width": 108.26171875, + "height": 86, + "nameCompartment": { + "$ref": "AAAAAAGAP8/5/T20DgQ=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAP8/5/T25IMk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAP8/5/T26ZYI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAP8/5/T27SB0=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAP8/5/T28FXA=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAP9XAwkPvc1M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAwkPwXAY=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2201, + "top": 1624, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAwkPxHKM=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2216, + "top": 1624, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAwkPyQeI=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2172, + "top": 1625, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAwkPzAt0=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPs9B8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2201, + "top": 1354, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P0LwY=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPs9B8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2214, + "top": 1357, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P1d9g=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPs9B8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2173, + "top": 1350, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P2EkY=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPtw8Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2203, + "top": 1894, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P3VJo=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPtw8Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2217, + "top": 1892, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAP9XAw0P4O+I=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPtw8Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2176, + "top": 1899, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAP9XAw0P5lng=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPs9B8=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAP9XAw0P6/Tc=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPvc1M=" + }, + "model": { + "$ref": "AAAAAAGAP9XAwkPtw8Y=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "lineStyle": 1, + "points": "2186:1335;2189:1927", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAP9XAwkPwXAY=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAP9XAwkPxHKM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAP9XAwkPyQeI=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAP9XAwkPzAt0=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAP9XAw0P0LwY=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAP9XAw0P1d9g=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAP9XAw0P2EkY=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAP9XAw0P3VJo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAP9XAw0P4O+I=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAP9XAw0P5lng=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAP9XAw0P6/Tc=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQHO4GV0qRew=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQHO4GV0r5pY=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQHO4Gl0su54=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 384, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHO4Gl0tCEM=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "font": "Arial;13;1", + "left": 2301, + "top": 1439, + "width": 96.0654296875, + "height": 13, + "text": "PointSymbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHO4Gl0u6Pc=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 384, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHO4Gl0vKA4=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 384, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2296, + "top": 1432, + "width": 106.0654296875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHO4Gl0su54=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQHO4Gl0tCEM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQHO4Gl0u6Pc=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHO4Gl0vKA4=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQHO4Gl0wYjk=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPbt14/Mhk=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPbk14qDNA=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1462, + "width": 96.0654296875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPo+V8v5gQ=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPo018aeJo=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1477, + "width": 96.0654296875, + "height": 13, + "text": "+callout", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPrE1+Pxyw=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPq7F96x14=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1492, + "width": 96.0654296875, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPtJl/vZKM=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPtAV/aljM=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1507, + "width": 96.0654296875, + "height": 13, + "text": "+symbolLayers", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHPu7WBPLOE=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "model": { + "$ref": "AAAAAAGAQHPuxGA6UBk=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1522, + "width": 96.0654296875, + "height": 13, + "text": "+verticalOffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2296, + "top": 1457, + "width": 106.0654296875, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQHO4Gl0xIS8=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHYPjWRlPzk=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0xIS8=" + }, + "model": { + "$ref": "AAAAAAGAQHYPZmRQTEw=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1545, + "width": 96.0654296875, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHYV+mT76q4=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0xIS8=" + }, + "model": { + "$ref": "AAAAAAGAQHYVz2Tm/qo=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1560, + "width": 96.0654296875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHYYXWVbi8o=", + "_parent": { + "$ref": "AAAAAAGAQHO4Gl0xIS8=" + }, + "model": { + "$ref": "AAAAAAGAQHYYN2VGn1k=" + }, + "font": "Arial;13;0", + "left": 2301, + "top": 1575, + "width": 96.0654296875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2296, + "top": 1540, + "width": 106.0654296875, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQHO4Gl0yzMo=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 192, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQHO4Gl0z6yU=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "model": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "visible": false, + "font": "Arial;13;0", + "top": 192, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2296, + "top": 1432, + "width": 106.0654296875, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAGAQHO4GV0r5pY=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQHO4Gl0wYjk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQHO4Gl0xIS8=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQHO4Gl0yzMo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQHO4Gl0z6yU=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQHbWNI6go9U=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHbWNI6eATI=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHbWNI6hWow=", + "_parent": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "model": { + "$ref": "AAAAAAGAQHbWNI6eATI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2246, + "top": 1388, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHbWNI6i6Gc=", + "_parent": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "model": { + "$ref": "AAAAAAGAQHbWNI6eATI=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2234, + "top": 1397, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHbWNI6j2Xk=", + "_parent": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "model": { + "$ref": "AAAAAAGAQHbWNI6eATI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2271, + "top": 1371, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHbWNI6go9U=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "tail": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "lineStyle": 1, + "points": "2295:1437;2223:1335", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQHbWNI6hWow=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHbWNI6i6Gc=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHbWNI6j2Xk=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQHci648v8Jg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQHci648wfDg=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQHci648xm3U=", + "_parent": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -576, + "top": 416, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHci648y398=", + "_parent": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "font": "Arial;13;1", + "left": 2205, + "top": 1663, + "width": 124.9853515625, + "height": 13, + "text": "IconSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHci648zUvA=", + "_parent": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -576, + "top": 416, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQHci6480uGg=", + "_parent": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -576, + "top": 416, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2200, + "top": 1656, + "width": 134.9853515625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHci648xm3U=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQHci648y398=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQHci648zUvA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHci6480uGg=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQHci6481mLQ=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHiSDaEIOXU=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHiR5aDzLYY=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1686, + "width": 124.9853515625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHiYZ6GekyE=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHiYP6GJhto=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1701, + "width": 124.9853515625, + "height": 13, + "text": "+anchor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHiaXaH+jCo=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHiaNaHpMeE=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1716, + "width": 124.9853515625, + "height": 13, + "text": "+anchorPosition", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHicMqJeplA=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHicC6JJ2ps=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1731, + "width": 124.9853515625, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHidn6K+gmY=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHidd6KpQY0=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1746, + "width": 124.9853515625, + "height": 13, + "text": "+outline", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHift6MepBw=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHifkKMJgeQ=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1761, + "width": 124.9853515625, + "height": 13, + "text": "+resource", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQHihY6N+OW8=", + "_parent": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "model": { + "$ref": "AAAAAAGAQHihOaNp1o4=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1776, + "width": 124.9853515625, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2200, + "top": 1681, + "width": 134.9853515625, + "height": 113 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQHci6482BLA=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHlBOamqzMI=", + "_parent": { + "$ref": "AAAAAAGAQHci6482BLA=" + }, + "model": { + "$ref": "AAAAAAGAQHlBEamVlhM=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1799, + "width": 124.9853515625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHlHeapAByk=", + "_parent": { + "$ref": "AAAAAAGAQHci6482BLA=" + }, + "model": { + "$ref": "AAAAAAGAQHlHU6orzwA=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1814, + "width": 124.9853515625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQHlJkqqg+fk=", + "_parent": { + "$ref": "AAAAAAGAQHci6482BLA=" + }, + "model": { + "$ref": "AAAAAAGAQHlJbKqLtE0=" + }, + "font": "Arial;13;0", + "left": 2205, + "top": 1829, + "width": 124.9853515625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2200, + "top": 1794, + "width": 134.9853515625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQHci6483qFU=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -312, + "top": 336, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQHci6484OCg=", + "_parent": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "model": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -312, + "top": 336, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2200, + "top": 1656, + "width": 134.9853515625, + "height": 191, + "nameCompartment": { + "$ref": "AAAAAAGAQHci648wfDg=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQHci6481mLQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQHci6482BLA=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQHci6483qFU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQHci6484OCg=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQHcyhZBoBpU=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHcyhZBm0hs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHcyhZBpnaU=", + "_parent": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "model": { + "$ref": "AAAAAAGAQHcyhZBm0hs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2232, + "top": 1885, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHcyhZBqlPU=", + "_parent": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "model": { + "$ref": "AAAAAAGAQHcyhZBm0hs=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2246, + "top": 1890, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHcyhZBrWm8=", + "_parent": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "model": { + "$ref": "AAAAAAGAQHcyhZBm0hs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2203, + "top": 1876, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHcyhZBoBpU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "lineStyle": 1, + "points": "2232:1847;2204:1927", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQHcyhZBpnaU=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHcyhZBqlPU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHcyhZBrWm8=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQHpof7ePZ3E=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eQAD8=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2344, + "top": 1617, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eRS9Q=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2359, + "top": 1617, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eSzzw=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2315, + "top": 1618, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eTIUI=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreMF+Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2345, + "top": 1611, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eUIc0=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreMF+Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2358, + "top": 1614, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eVYJY=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreMF+Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2317, + "top": 1607, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eWbVI=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreNRd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2345, + "top": 1624, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eXzL0=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreNRd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2358, + "top": 1621, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQHpof7eYolo=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreNRd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2317, + "top": 1628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQHpof7eZQkE=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreMF+Y=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQHpof7eadhQ=", + "_parent": { + "$ref": "AAAAAAGAQHpof7ePZ3E=" + }, + "model": { + "$ref": "AAAAAAGAQHpofreNRd8=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "tail": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "points": "2330:1592;2330:1656", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQHpof7eQAD8=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQHpof7eRS9Q=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQHpof7eSzzw=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQHpof7eTIUI=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQHpof7eUIc0=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQHpof7eVYJY=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQHpof7eWbVI=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQHpof7eXzL0=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQHpof7eYolo=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQHpof7eZQkE=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQHpof7eadhQ=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQI6jGOak5LQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQI6jGOalULs=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6jGOamfLc=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 240, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6jGOan4lw=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "font": "Arial;13;1", + "left": 2549, + "top": 1431, + "width": 90.29541015625, + "height": 13, + "text": "LineSymbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6jGOaon5I=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 240, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6jGOaphYg=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 240, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2544, + "top": 1424, + "width": 100.29541015625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQI6jGOamfLc=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQI6jGOan4lw=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQI6jGOaon5I=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQI6jGOaphYg=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQI6jGOaqStk=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI7RZehHBIg=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOaqStk=" + }, + "model": { + "$ref": "AAAAAAGAQI7RO+gvDaw=" + }, + "font": "Arial;13;0", + "left": 2549, + "top": 1454, + "width": 90.29541015625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI7YSuj1EEw=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOaqStk=" + }, + "model": { + "$ref": "AAAAAAGAQI7YIujdTVQ=" + }, + "font": "Arial;13;0", + "left": 2549, + "top": 1469, + "width": 90.29541015625, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI7fRenNc5E=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOaqStk=" + }, + "model": { + "$ref": "AAAAAAGAQI7fHum1PPw=" + }, + "font": "Arial;13;0", + "left": 2549, + "top": 1484, + "width": 90.29541015625, + "height": 13, + "text": "+symbolLayers", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2544, + "top": 1449, + "width": 100.29541015625, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQI6jGOarZ7Y=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI83ZO7MOkU=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOarZ7Y=" + }, + "model": { + "$ref": "AAAAAAGAQI83Pu60uKU=" + }, + "font": "Arial;13;0", + "left": 2549, + "top": 1507, + "width": 90.29541015625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI89tO96OHs=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOarZ7Y=" + }, + "model": { + "$ref": "AAAAAAGAQI89iO9irzg=" + }, + "font": "Arial;13;0", + "left": 2549, + "top": 1522, + "width": 90.29541015625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI8/5+/pUmk=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOarZ7Y=" + }, + "model": { + "$ref": "AAAAAAGAQI8/v+/RXtM=" + }, + "font": "Arial;13;0", + "left": 2549, + "top": 1537, + "width": 90.29541015625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2544, + "top": 1502, + "width": 100.29541015625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQI6jGOaspYk=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 16, + "top": 120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQI6jGOatLLQ=", + "_parent": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "model": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 16, + "top": 120, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2544, + "top": 1424, + "width": 100.29541015625, + "height": 131, + "nameCompartment": { + "$ref": "AAAAAAGAQI6jGOalULs=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQI6jGOaqStk=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQI6jGOarZ7Y=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQI6jGOaspYk=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQI6jGOatLLQ=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQJBZ8ACOlRk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJBZ8ACM7PY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBZ8ACPeVE=", + "_parent": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "model": { + "$ref": "AAAAAAGAQJBZ8ACM7PY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2407, + "top": 1405, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBZ8ACQETM=", + "_parent": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "model": { + "$ref": "AAAAAAGAQJBZ8ACM7PY=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2400, + "top": 1418, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBZ8ACRbEc=", + "_parent": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "model": { + "$ref": "AAAAAAGAQJBZ8ACM7PY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2420, + "top": 1378, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJBZ8ACOlRk=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "tail": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "lineStyle": 1, + "points": "2543:1464;2285:1333", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQJBZ8ACPeVE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJBZ8ACQETM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJBZ8ACRbEc=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQJBpFAEyXK4=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJBpFAEwA94=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBpFAEzB1w=", + "_parent": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "model": { + "$ref": "AAAAAAGAQJBpFAEwA94=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2384, + "top": 1871, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBpFAE0Dy4=", + "_parent": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "model": { + "$ref": "AAAAAAGAQJBpFAEwA94=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2391, + "top": 1884, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJBpFAE1gVA=", + "_parent": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "model": { + "$ref": "AAAAAAGAQJBpFAEwA94=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2369, + "top": 1844, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJBpFAEyXK4=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "lineStyle": 1, + "points": "2511:1789;2244:1939", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQJBpFAEzB1w=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJBpFAE0Dy4=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJBpFAE1gVA=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQJB91wHYp2s=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHZ4Fw=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2600, + "top": 1599, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHaANg=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2615, + "top": 1600, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHbV8A=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2571, + "top": 1598, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHcJGw=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHV5+E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2602, + "top": 1575, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHdzyA=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHV5+E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2615, + "top": 1578, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHev5k=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHV5+E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2575, + "top": 1569, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHf4ho=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHWZ0U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2599, + "top": 1623, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHgUDE=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHWZ0U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2612, + "top": 1622, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJB91wHhRqY=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHWZ0U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2571, + "top": 1626, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQJB91wHidSU=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHV5+E=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQJB91wHj0Is=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHYp2s=" + }, + "model": { + "$ref": "AAAAAAGAQJB91wHWZ0U=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "tail": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "lineStyle": 1, + "points": "2589:1555;2583:1655", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQJB91wHZ4Fw=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJB91wHaANg=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJB91wHbV8A=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQJB91wHcJGw=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQJB91wHdzyA=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQJB91wHev5k=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQJB91wHf4ho=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQJB91wHgUDE=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQJB91wHhRqY=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQJB91wHidSU=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQJB91wHj0Is=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQJPNQDjq3dQ=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQJPNQDjrEHc=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQJPNQDjsZh8=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 240, + "top": 272, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQJPNQDjtVq4=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "font": "Arial;13;1", + "left": 2789, + "top": 1439, + "width": 114.84814453125, + "height": 13, + "text": "PolygonSymbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQJPNQDju7ps=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 240, + "top": 272, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQJPNQDjv96U=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 240, + "top": 272, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2784, + "top": 1432, + "width": 124.84814453125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJPNQDjsZh8=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQJPNQDjtVq4=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQJPNQDju7ps=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJPNQDjv96U=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQJPNQDjwCpo=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQJPv2zpN3O0=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjwCpo=" + }, + "model": { + "$ref": "AAAAAAGAQJPvrzoyMNs=" + }, + "font": "Arial;13;0", + "left": 2789, + "top": 1462, + "width": 114.84814453125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQJP6zjtbIHg=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjwCpo=" + }, + "model": { + "$ref": "AAAAAAGAQJP6pjtAYNM=" + }, + "font": "Arial;13;0", + "left": 2789, + "top": 1477, + "width": 114.84814453125, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQJP9JTvZiSI=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjwCpo=" + }, + "model": { + "$ref": "AAAAAAGAQJP8/ju+xJc=" + }, + "font": "Arial;13;0", + "left": 2789, + "top": 1492, + "width": 114.84814453125, + "height": 13, + "text": "+symbolLayers", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2784, + "top": 1457, + "width": 124.84814453125, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQJPNQDjxeds=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQJQJdjzP6kM=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjxeds=" + }, + "model": { + "$ref": "AAAAAAGAQJQJTTy0Pz0=" + }, + "font": "Arial;13;0", + "left": 2789, + "top": 1515, + "width": 114.84814453125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQJQQIz2Vo/k=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjxeds=" + }, + "model": { + "$ref": "AAAAAAGAQJQP+D16Vf8=" + }, + "font": "Arial;13;0", + "left": 2789, + "top": 1530, + "width": 114.84814453125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQJQShD4TuAw=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjxeds=" + }, + "model": { + "$ref": "AAAAAAGAQJQSWz34cwY=" + }, + "font": "Arial;13;0", + "left": 2789, + "top": 1545, + "width": 114.84814453125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2784, + "top": 1510, + "width": 124.84814453125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQJPNQDjybwU=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 120, + "top": 136, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQJPNQDjzOsI=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "model": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 120, + "top": 136, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2784, + "top": 1432, + "width": 124.84814453125, + "height": 131, + "nameCompartment": { + "$ref": "AAAAAAGAQJPNQDjrEHc=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQJPNQDjwCpo=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQJPNQDjxeds=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQJPNQDjybwU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQJPNQDjzOsI=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQJR3UkvOHJo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQJR3UUvMi3E=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJR3UkvPfd4=", + "_parent": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "model": { + "$ref": "AAAAAAGAQJR3UUvMi3E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2831, + "top": 1300, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJR3UkvQei4=", + "_parent": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "model": { + "$ref": "AAAAAAGAQJR3UUvMi3E=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2831, + "top": 1315, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQJR3UkvRy1w=", + "_parent": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "model": { + "$ref": "AAAAAAGAQJR3UUvMi3E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2832, + "top": 1270, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQJR3UkvOHJo=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "points": "2832:1432;2832:1291;2284:1291", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQJR3UkvPfd4=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQJR3UkvQei4=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQJR3UkvRy1w=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQKMeBnOU3pU=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQKMeBnOSzgA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMeBnOVxvY=", + "_parent": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "model": { + "$ref": "AAAAAAGAQKMeBnOSzgA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2894, + "top": 1979, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMeBnOWsmM=", + "_parent": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "model": { + "$ref": "AAAAAAGAQKMeBnOSzgA=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2894, + "top": 1994, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMeBnOXDsI=", + "_parent": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "model": { + "$ref": "AAAAAAGAQKMeBnOSzgA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2895, + "top": 1949, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQKMeBnOU3pU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "points": "2895:1831;2895:1970;2243:1970", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQKMeBnOVxvY=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQKMeBnOWsmM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQKMeBnOXDsI=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQKMnaHQfR5Y=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQgNHo=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2874, + "top": 1602, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQhhl4=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2889, + "top": 1602, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQi6TY=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2845, + "top": 1603, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQjj+M=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQc7Rs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2875, + "top": 1581, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQkBlA=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQc7Rs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2888, + "top": 1584, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQlgk0=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQc7Rs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2847, + "top": 1577, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQmq5o=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQdqUs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2875, + "top": 1624, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQnK7k=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQdqUs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2888, + "top": 1621, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQKMnaXQonBQ=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQdqUs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2847, + "top": 1628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQKMnaXQpT2Q=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQc7Rs=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQKMnaXQqcZE=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQfR5Y=" + }, + "model": { + "$ref": "AAAAAAGAQKMnaHQdqUs=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "points": "2860:1562;2860:1656", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQKMnaXQgNHo=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQKMnaXQhhl4=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQKMnaXQi6TY=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQKMnaXQjj+M=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQKMnaXQkBlA=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQKMnaXQlgk0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQKMnaXQmq5o=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQKMnaXQnK7k=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQKMnaXQonBQ=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQKMnaXQpT2Q=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQKMnaXQqcZE=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQLjRBoVMI9U=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQLjRBoVNFhk=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQLjRBoVO9Fw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 240, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLjRBoVPLIA=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "font": "Arial;13;1", + "left": 3133, + "top": 1431, + "width": 150.6689453125, + "height": 13, + "text": "LabelSymbol3D" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLjRBoVQcTM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 240, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLjRBoVRh+I=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 240, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 3128, + "top": 1424, + "width": 160.6689453125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLjRBoVO9Fw=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQLjRBoVPLIA=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQLjRBoVQcTM=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLjRBoVRh+I=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQLjRBoVSSjQ=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkJQIqgt9U=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkJF4qC7uw=" + }, + "font": "Arial;13;0", + "left": 3133, + "top": 1454, + "width": 150.6689453125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkP1Yt+nAw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkPq4tgUdM=" + }, + "font": "Arial;13;0", + "left": 3133, + "top": 1469, + "width": 150.6689453125, + "height": 13, + "text": "+callout", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkR04wL9EQ=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkRqYvtqAE=" + }, + "font": "Arial;13;0", + "left": 3133, + "top": 1484, + "width": 150.6689453125, + "height": 13, + "text": "+styleOrigin", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkUA4yYwFg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkT24x6g2s=" + }, + "font": "Arial;13;0", + "left": 3133, + "top": 1499, + "width": 150.6689453125, + "height": 13, + "text": "+symbolLayers", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLkWgI0lYgg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "model": { + "$ref": "AAAAAAGAQLkWVo0H4Q8=" + }, + "font": "Arial;13;0", + "left": 3133, + "top": 1514, + "width": 150.6689453125, + "height": 13, + "text": "+verticalOffset", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 3128, + "top": 1449, + "width": 160.6689453125, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQLjRBoVT+pk=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLjfqIbWTPM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVT+pk=" + }, + "model": { + "$ref": "AAAAAAGAQLjff4a4sxM=" + }, + "font": "Arial;13;0", + "left": 3133, + "top": 1537, + "width": 150.6689453125, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLjl84e03IQ=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVT+pk=" + }, + "model": { + "$ref": "AAAAAAGAQLjlyoeW4cw=" + }, + "font": "Arial;13;0", + "left": 3133, + "top": 1552, + "width": 150.6689453125, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLjoMohBjUc=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVT+pk=" + }, + "model": { + "$ref": "AAAAAAGAQLjoBYgjCv8=" + }, + "font": "Arial;13;0", + "left": 3133, + "top": 1567, + "width": 150.6689453125, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 3128, + "top": 1532, + "width": 160.6689453125, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQLjRBoVUyQg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": 120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQLjRB4VVp9k=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "model": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3157, + "top": 1424, + "width": 130.6689453125, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 3128, + "top": 1424, + "width": 160.6689453125, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAGAQLjRBoVNFhk=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQLjRBoVSSjQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQLjRBoVT+pk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQLjRBoVUyQg=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQLjRB4VVp9k=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQLnZqZjXg3U=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLnZqZjVkdk=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLnZqZjYgFI=", + "_parent": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "model": { + "$ref": "AAAAAAGAQLnZqZjVkdk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3215, + "top": 1300, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLnZqZjZLo0=", + "_parent": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "model": { + "$ref": "AAAAAAGAQLnZqZjVkdk=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3215, + "top": 1315, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLnZqZjaT2c=", + "_parent": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "model": { + "$ref": "AAAAAAGAQLnZqZjVkdk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3216, + "top": 1270, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLnZqZjXg3U=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP6S17MjIqpw=" + }, + "tail": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "points": "3216:1424;3216:1291;2284:1291", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQLnZqZjYgFI=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLnZqZjZLo0=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLnZqZjaT2c=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQLns6JmlVRk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQLns6ZmmuQ4=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQLns6ZmnQz0=", + "_parent": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 624, + "top": 240, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLns6ZmoUbY=", + "_parent": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "font": "Arial;13;1", + "left": 3165, + "top": 1655, + "width": 124.02685546875, + "height": 13, + "text": "TextSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLns6Zmp+VU=", + "_parent": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 624, + "top": 240, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQLns6ZmqOIg=", + "_parent": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 624, + "top": 240, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 3160, + "top": 1648, + "width": 134.02685546875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLns6ZmnQz0=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQLns6ZmoUbY=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQLns6Zmp+VU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLns6ZmqOIg=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQLns6Zmrs/4=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLoWUpuBuNA=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLoWJ5tje4c=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1678, + "width": 124.02685546875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLocfpxfnd8=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLocVpxB5AM=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1693, + "width": 124.02685546875, + "height": 13, + "text": "+background", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLofKJzsoYc=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLofAJzO1GA=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1708, + "width": 124.02685546875, + "height": 13, + "text": "+font", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLohDJ15dOM=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLog4Z1bzo4=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1723, + "width": 124.02685546875, + "height": 13, + "text": "+halo", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLojPJ4GhSY=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLojE53omX0=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1738, + "width": 124.02685546875, + "height": 13, + "text": "+horizontalAlignment", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLolfZ6T3fI=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLolVZ51Tdg=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1753, + "width": 124.02685546875, + "height": 13, + "text": "+lineHeight", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLonc58goqg=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLonSp8CGas=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1768, + "width": 124.02685546875, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLopup+tBm8=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLopjp+PrHs=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1783, + "width": 124.02685546875, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLosE6A6wU8=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLor6qAcWyY=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1798, + "width": 124.02685546875, + "height": 13, + "text": "+text", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQLq7R6iEU80=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "model": { + "$ref": "AAAAAAGAQLq7GahmsQQ=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1813, + "width": 124.02685546875, + "height": 13, + "text": "+verticalAlignment", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 3160, + "top": 1673, + "width": 134.02685546875, + "height": 158 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQLns6Zmsbbk=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLrMgqpWe4I=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmsbbk=" + }, + "model": { + "$ref": "AAAAAAGAQLrMV6o4fWE=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1836, + "width": 124.02685546875, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLrS4as0gpM=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmsbbk=" + }, + "model": { + "$ref": "AAAAAAGAQLrSt6sWGnA=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1851, + "width": 124.02685546875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQLrVDqvBW34=", + "_parent": { + "$ref": "AAAAAAGAQLns6Zmsbbk=" + }, + "model": { + "$ref": "AAAAAAGAQLrU4qujo+U=" + }, + "font": "Arial;13;0", + "left": 3165, + "top": 1866, + "width": 124.02685546875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 3160, + "top": 1831, + "width": 134.02685546875, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQLns6Zmtu+E=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 312, + "top": 120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQLns6ZmulWE=", + "_parent": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "model": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 312, + "top": 120, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 3160, + "top": 1648, + "width": 134.02685546875, + "height": 236, + "nameCompartment": { + "$ref": "AAAAAAGAQLns6ZmmuQ4=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQLns6Zmrs/4=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQLns6Zmsbbk=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQLns6Zmtu+E=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQLns6ZmulWE=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQLsG/7AEF2M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AFuFA=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3229, + "top": 1609, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AGddo=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3244, + "top": 1608, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AHS58=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3200, + "top": 1610, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AIFAY=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ABSMo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3229, + "top": 1603, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AJvLI=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ABSMo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3243, + "top": 1605, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AKKlA=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ABSMo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3201, + "top": 1601, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7ALPOs=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ACCWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3230, + "top": 1614, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7AMZ1k=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ACCWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3243, + "top": 1610, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsG/7ANfkw=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ACCWw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3203, + "top": 1620, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQLsG/7AOwEs=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ABSMo=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQLsG/7APzkw=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AEF2M=" + }, + "model": { + "$ref": "AAAAAAGAQLsG/7ACCWw=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "tail": { + "$ref": "AAAAAAGAQLjRBoVMI9U=" + }, + "lineStyle": 1, + "points": "3213:1585;3217:1647", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQLsG/7AFuFA=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLsG/7AGddo=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLsG/7AHS58=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQLsG/7AIFAY=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQLsG/7AJvLI=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQLsG/7AKKlA=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQLsG/7ALPOs=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQLsG/7AMZ1k=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQLsG/7ANfkw=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQLsG/7AOwEs=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQLsG/7APzkw=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQLsTnLEIRdg=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQLsTnLEG5Uo=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsTnLEJqIk=", + "_parent": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "model": { + "$ref": "AAAAAAGAQLsTnLEG5Uo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3225, + "top": 1979, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsTnLEKkkU=", + "_parent": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "model": { + "$ref": "AAAAAAGAQLsTnLEG5Uo=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3225, + "top": 1994, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQLsTnLELziw=", + "_parent": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "model": { + "$ref": "AAAAAAGAQLsTnLEG5Uo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3226, + "top": 1949, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQLsTnLEIRdg=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "points": "3226:1883;3226:1970;2243:1970", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQLsTnLEJqIk=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQLsTnLEKkkU=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQLsTnLELziw=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQPnVf+rFgxs=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQPnVf+rG/uI=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQPnVf+rH+X4=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -208, + "top": 224, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQPnVf+rIOQ8=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "font": "Arial;13;1", + "left": 2349, + "top": 1663, + "width": 138.71533203125, + "height": 13, + "text": "ObjectSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQPnVf+rJBmE=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -208, + "top": 224, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQPnVf+rKhyE=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -208, + "top": 224, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2344, + "top": 1656, + "width": 148.71533203125, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQPnVf+rH+X4=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQPnVf+rIOQ8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQPnVf+rJBmE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQPnVf+rKhyE=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQPnVf+rLrvw=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPoqJ+3fVWM=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPop+u2+iXY=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1686, + "width": 138.71533203125, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPozO+7VY3Y=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPozEe604dA=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1701, + "width": 138.71533203125, + "height": 13, + "text": "+anchor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo2Qu9xHwE=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo2Gu9Q5Ck=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1716, + "width": 138.71533203125, + "height": 13, + "text": "+anchorPosition", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo4sPANIaw=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo4he/sG20=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1731, + "width": 138.71533203125, + "height": 13, + "text": "+castShadows", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo7GfCpnZQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo66/CIc7k=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1746, + "width": 138.71533203125, + "height": 13, + "text": "+depth", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo9VvFFjYg=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo9LPEkQrk=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1761, + "width": 138.71533203125, + "height": 13, + "text": "+heading", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPo/evHhEZs=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPo/TvHAQDk=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1776, + "width": 138.71533203125, + "height": 13, + "text": "+height", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPpB7fJ90ko=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPpBxPJcIdQ=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1791, + "width": 138.71533203125, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPpEo/MZpZ8=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPpEefL4VGc=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1806, + "width": 138.71533203125, + "height": 13, + "text": "+resource", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPsGmfymRn8=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPsGafyFSfs=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1821, + "width": 138.71533203125, + "height": 13, + "text": "+roll", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPsI9P1C/aQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPsIyv0hvRE=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1836, + "width": 138.71533203125, + "height": 13, + "text": "+tilt", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQPsLS/3eFgo=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "model": { + "$ref": "AAAAAAGAQPsLH/2976o=" + }, + "font": "Arial;13;0", + "left": 2349, + "top": 1851, + "width": 138.71533203125, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2344, + "top": 1681, + "width": 148.71533203125, + "height": 188 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQPnVf+rMRGw=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "font": "Arial;13;0", + "left": 2344, + "top": 1869, + "width": 148.71533203125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQPnVf+rNwuY=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -104, + "top": 240, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQPnVf+rOqqQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "model": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -104, + "top": 240, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2344, + "top": 1656, + "width": 148.71533203125, + "height": 223, + "nameCompartment": { + "$ref": "AAAAAAGAQPnVf+rG/uI=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQPnVf+rLrvw=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQPnVf+rMRGw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQPnVf+rNwuY=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQPnVf+rOqqQ=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQPx5LwekjGk=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5LwelExo=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2376, + "top": 1617, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5LwemrGk=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2391, + "top": 1617, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5LwenPhw=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2347, + "top": 1618, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lweorws=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LwehMeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2377, + "top": 1611, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwep3bw=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LwehMeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2390, + "top": 1614, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwequps=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LwehMeE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2349, + "top": 1607, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwer26o=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LweiweU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2377, + "top": 1624, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwesa/g=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LweiweU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2390, + "top": 1621, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPx5Lwet0DI=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LweiweU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2349, + "top": 1628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQPx5MAeuGxQ=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LwehMeE=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQPx5MAevwVI=", + "_parent": { + "$ref": "AAAAAAGAQPx5LwekjGk=" + }, + "model": { + "$ref": "AAAAAAGAQPx5LweiweU=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "tail": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "points": "2362:1592;2362:1656", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQPx5LwelExo=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQPx5LwemrGk=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQPx5LwenPhw=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQPx5Lweorws=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQPx5Lwep3bw=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQPx5Lwequps=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQPx5Lwer26o=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQPx5Lwesa/g=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQPx5Lwet0DI=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQPx5MAeuGxQ=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQPx5MAevwVI=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQPyJKAjgoMc=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjheM8=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3175, + "top": 1529, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjifbw=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3190, + "top": 1529, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjj/Y8=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3145, + "top": 1530, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjkbqg=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjdEa4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2426, + "top": 1515, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjl6r0=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjdEa4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2429, + "top": 1501, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjm/ws=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjdEa4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2422, + "top": 1542, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjnFYU=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjecM4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3175, + "top": 1616, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjogAo=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjecM4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3188, + "top": 1613, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQPyJKAjpL0Q=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjecM4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3147, + "top": 1620, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQPyJKAjq8as=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjdEa4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQPyJKAjr9jk=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjgoMc=" + }, + "model": { + "$ref": "AAAAAAGAQPyJKAjecM4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "tail": { + "$ref": "AAAAAAGAQHO4GV0qRew=" + }, + "lineStyle": 2, + "points": "2401:1536;3160:1536;3160:1648", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQPyJKAjheM8=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQPyJKAjifbw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQPyJKAjj/Y8=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQPyJKAjkbqg=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQPyJKAjl6r0=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQPyJKAjm/ws=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQPyJKAjnFYU=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQPyJKAjogAo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQPyJKAjpL0Q=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQPyJKAjq8as=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQPyJKAjr9jk=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQP3Zl0BOeuY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQP3ZlkBMubY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQP3Zl0BPyaY=", + "_parent": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "model": { + "$ref": "AAAAAAGAQP3ZlkBMubY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2299, + "top": 1885, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQP3Zl0BQzP8=", + "_parent": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "model": { + "$ref": "AAAAAAGAQP3ZlkBMubY=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2309, + "top": 1896, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQP3Zl0BRot4=", + "_parent": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "model": { + "$ref": "AAAAAAGAQP3ZlkBMubY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2280, + "top": 1862, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQP3Zl0BOeuY=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "lineStyle": 1, + "points": "2343:1833;2237:1927", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQP3Zl0BPyaY=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQP3Zl0BQzP8=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQP3Zl0BRot4=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQQuTLkcBevI=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQQuTLkcC9fI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQQuTLkcDgPU=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -16, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQQuTLkcEsG0=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "font": "Arial;13;1", + "left": 2669, + "top": 1663, + "width": 126.4326171875, + "height": 13, + "text": "PathSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQQuTLkcF42M=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -16, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQQuTLkcGurk=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -80, + "top": -16, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2664, + "top": 1656, + "width": 136.4326171875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQQuTLkcDgPU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQQuTLkcEsG0=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQQuTLkcF42M=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQQuTLkcGurk=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQQuTLkcHnPo=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvIoU3KW5A=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvIck2jTQg=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1686, + "width": 126.4326171875, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvOwE7wXsc=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvOlU7J+Js=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1701, + "width": 126.4326171875, + "height": 13, + "text": "+anchor", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvRhE+qEgM=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvRWk+D8Kk=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1716, + "width": 126.4326171875, + "height": 13, + "text": "+cap", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvUL1Bk2Jw=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvUBFA9SC8=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1731, + "width": 126.4326171875, + "height": 13, + "text": "+castShadows", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvWKlEe1YQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvWAFD3ufw=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1746, + "width": 126.4326171875, + "height": 13, + "text": "+height", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvYzVHYs68=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvYoVGxGiQ=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1761, + "width": 126.4326171875, + "height": 13, + "text": "+join", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQva51KS5U8=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvaulJrSXY=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1776, + "width": 126.4326171875, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQvdWlNM1OI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQvdLlMlZuI=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1791, + "width": 126.4326171875, + "height": 13, + "text": "+profile", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQyX/2QpKPI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQyXzmQCWwQ=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1806, + "width": 126.4326171875, + "height": 13, + "text": "+profileRotation", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQQya+GTjnuA=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "model": { + "$ref": "AAAAAAGAQQyayGS8q5c=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1821, + "width": 126.4326171875, + "height": 13, + "text": "+width", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2664, + "top": 1681, + "width": 136.4326171875, + "height": 158 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQQuTLkcIZQI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQQvrFlTegUc=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcIZQI=" + }, + "model": { + "$ref": "AAAAAAGAQQvq6VS33RQ=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1844, + "width": 126.4326171875, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQQvyaFYESws=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcIZQI=" + }, + "model": { + "$ref": "AAAAAAGAQQvyP1Xdy/A=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1859, + "width": 126.4326171875, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQQv1q1a+rRA=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcIZQI=" + }, + "model": { + "$ref": "AAAAAAGAQQv1gFaXIyU=" + }, + "font": "Arial;13;0", + "left": 2669, + "top": 1874, + "width": 126.4326171875, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2664, + "top": 1839, + "width": 136.4326171875, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQQuTLkcJ1Lw=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": 120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQQuTLkcKQJM=", + "_parent": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "model": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": 120, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2664, + "top": 1656, + "width": 136.4326171875, + "height": 236, + "nameCompartment": { + "$ref": "AAAAAAGAQQuTLkcC9fI=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQQuTLkcHnPo=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQQuTLkcIZQI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQQuTLkcJ1Lw=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQQuTLkcKQJM=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQQzoZmpqp3M=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmprD4I=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2662, + "top": 1592, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpspdQ=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2675, + "top": 1585, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmptR4s=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2635, + "top": 1605, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpuXcM=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpnhlg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2649, + "top": 1565, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpv0rc=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpnhlg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2662, + "top": 1561, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpwlDI=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpnhlg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2623, + "top": 1573, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpxJrc=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWposbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2676, + "top": 1619, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpyIqM=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWposbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2686, + "top": 1611, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQzoZmpz2Hg=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWposbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2653, + "top": 1635, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQQzoZmp0WHs=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWpnhlg=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQQzoZmp1EFk=", + "_parent": { + "$ref": "AAAAAAGAQQzoZmpqp3M=" + }, + "model": { + "$ref": "AAAAAAGAQQzoZWposbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "tail": { + "$ref": "AAAAAAGAQI6jGOak5LQ=" + }, + "lineStyle": 1, + "points": "2625:1555;2674:1655", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQQzoZmprD4I=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQQzoZmpspdQ=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQQzoZmptR4s=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQQzoZmpuXcM=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQQzoZmpv0rc=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQQzoZmpwlDI=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQQzoZmpxJrc=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQQzoZmpyIqM=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQQzoZmpz2Hg=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQQzoZmp0WHs=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQQzoZmp1EFk=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQQz8yG323pI=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQQz8x230K8E=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQz8yG336r0=", + "_parent": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "model": { + "$ref": "AAAAAAGAQQz8x230K8E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2730, + "top": 1979, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQz8yG34XJw=", + "_parent": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "model": { + "$ref": "AAAAAAGAQQz8x230K8E=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2730, + "top": 1994, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQQz8yG35oyg=", + "_parent": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "model": { + "$ref": "AAAAAAGAQQz8x230K8E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2731, + "top": 1949, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQQz8yG323pI=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQQuTLkcBevI=" + }, + "points": "2731:1891;2731:1970;2243:1970", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQQz8yG336r0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQQz8yG34XJw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQQz8yG35oyg=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQI6qsOc2n1Y=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQI6qsOc3FW8=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6qsOc4SMo=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 272, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6qsOc5HLY=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "font": "Arial;13;1", + "left": 2517, + "top": 1663, + "width": 124.9853515625, + "height": 13, + "text": "LineSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6qsOc6mDQ=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 272, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQI6qsOc7Vpo=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 32, + "top": 272, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2512, + "top": 1656, + "width": 134.9853515625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQI6qsOc4SMo=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQI6qsOc5HLY=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQI6qsOc6mDQ=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQI6qsOc7Vpo=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQI6qsOc83nc=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/M2vf+oXE=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/Ms/fm62A=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1686, + "width": 124.9853515625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/S7fisuuE=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/SxfiUCXU=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1701, + "width": 124.9853515625, + "height": 13, + "text": "+cap", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/VHvkb5w4=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/U9/kDTG0=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1716, + "width": 124.9853515625, + "height": 13, + "text": "+join", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/XEfmKdbM=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/W6PlyuF4=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1731, + "width": 124.9853515625, + "height": 13, + "text": "+marker", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/yCvs2lr0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/x4vseoP0=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1746, + "width": 124.9853515625, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/0WfulqSU=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/0MvuNWWU=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1761, + "width": 124.9853515625, + "height": 13, + "text": "+pattern", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQI/2O/wUaY0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "model": { + "$ref": "AAAAAAGAQI/2Efv8elc=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1776, + "width": 124.9853515625, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2512, + "top": 1681, + "width": 134.9853515625, + "height": 113 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQI6qsOc9LOA=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI+3G/X0hfw=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc9LOA=" + }, + "model": { + "$ref": "AAAAAAGAQI+28vXcViw=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1799, + "width": 124.9853515625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI/BfPbh9OM=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc9LOA=" + }, + "model": { + "$ref": "AAAAAAGAQI/BU/bJXC8=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1814, + "width": 124.9853515625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQI/DyfdQ/Sc=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc9LOA=" + }, + "model": { + "$ref": "AAAAAAGAQI/Do/c45mg=" + }, + "font": "Arial;13;0", + "left": 2517, + "top": 1829, + "width": 124.9853515625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2512, + "top": 1794, + "width": 134.9853515625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQI6qsOc+n3A=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 24, + "top": 264, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQI6qsOc/vKw=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "model": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 24, + "top": 264, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2512, + "top": 1656, + "width": 134.9853515625, + "height": 191, + "nameCompartment": { + "$ref": "AAAAAAGAQI6qsOc3FW8=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQI6qsOc83nc=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQI6qsOc9LOA=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQI6qsOc+n3A=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQI6qsOc/vKw=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQYqXdn+2K7I=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQYqXdn+3DBc=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQYqXdn+4LmU=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": -608, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQYqXdn+5yHM=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "font": "Arial;13;1", + "left": 2989, + "top": 1663, + "width": 146.66259765625, + "height": 13, + "text": "ExtrudeSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQYqXdn+6S/c=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": -608, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQYqXdn+7ohw=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": -608, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2984, + "top": 1656, + "width": 156.66259765625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQYqXdn+4LmU=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQYqXdn+5yHM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQYqXdn+6S/c=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQYqXdn+7ohw=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQYqXdn+8FmQ=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYrtG4fWan4=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYrs74espQ8=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1686, + "width": 146.66259765625, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYr0dYks/wg=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYr0SYkCuFQ=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1701, + "width": 146.66259765625, + "height": 13, + "text": "+castShadows", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYr3GIoEiD8=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYr27InaovU=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1716, + "width": 146.66259765625, + "height": 13, + "text": "+edges", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYr5iorc0jw=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYr5XIqy5mU=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1731, + "width": 146.66259765625, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQYr+cou0D1I=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "model": { + "$ref": "AAAAAAGAQYr+RIuK/FY=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1746, + "width": 146.66259765625, + "height": 13, + "text": "+size", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2984, + "top": 1681, + "width": 156.66259765625, + "height": 83 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQYqXdn+9yYI=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQYt7fZSblX8=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+9yYI=" + }, + "model": { + "$ref": "AAAAAAGAQYt7S5Rx0RQ=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1769, + "width": 146.66259765625, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQYuCcZXxhxk=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+9yYI=" + }, + "model": { + "$ref": "AAAAAAGAQYuCRZXHU2w=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1784, + "width": 146.66259765625, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQYuFNJbJFPY=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+9yYI=" + }, + "model": { + "$ref": "AAAAAAGAQYuFBpaftPw=" + }, + "font": "Arial;13;0", + "left": 2989, + "top": 1799, + "width": 146.66259765625, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2984, + "top": 1764, + "width": 156.66259765625, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQYqXdn++XHc=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 136, + "top": -304, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQYqXdn+//9c=", + "_parent": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "model": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 136, + "top": -304, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2984, + "top": 1656, + "width": 156.66259765625, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAGAQYqXdn+3DBc=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQYqXdn+8FmQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQYqXdn+9yYI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQYqXdn++XHc=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQYqXdn+//9c=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQYq/foR37Qo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR4+uY=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2963, + "top": 1587, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR5GLE=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2963, + "top": 1572, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR64b0=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2963, + "top": 1617, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR7QWc=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR06rU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2886, + "top": 1581, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR8Oh4=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR06rU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2899, + "top": 1584, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR9S74=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR06rU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2858, + "top": 1577, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR+RBM=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR197U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3071, + "top": 1624, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foR/oTw=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR197U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3084, + "top": 1621, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYq/foSAW70=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR197U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3043, + "top": 1628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQYq/f4SB/Ng=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR06rU=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQYq/f4SCkwA=", + "_parent": { + "$ref": "AAAAAAGAQYq/foR37Qo=" + }, + "model": { + "$ref": "AAAAAAGAQYq/foR197U=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "points": "2871:1562;2871:1608;3056:1608;3056:1656", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQYq/foR4+uY=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQYq/foR5GLE=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQYq/foR64b0=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQYq/foR7QWc=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQYq/foR8Oh4=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQYq/foR9S74=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQYq/foR+RBM=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQYq/foR/oTw=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQYq/foSAW70=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQYq/f4SB/Ng=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQYq/f4SCkwA=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAGAQYrN7oX5Qwo=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQYrN7oX36Ng=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYrN7oX6FtM=", + "_parent": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "model": { + "$ref": "AAAAAAGAQYrN7oX36Ng=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3060, + "top": 1979, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYrN7oX7C7s=", + "_parent": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "model": { + "$ref": "AAAAAAGAQYrN7oX36Ng=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3060, + "top": 1994, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQYrN7oX8Jdk=", + "_parent": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "model": { + "$ref": "AAAAAAGAQYrN7oX36Ng=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3061, + "top": 1949, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQYrN7oX5Qwo=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAP8/5/T2zufk=" + }, + "tail": { + "$ref": "AAAAAAGAQYqXdn+2K7I=" + }, + "points": "3061:1816;3061:1970;2243:1970", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQYrN7oX6FtM=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQYrN7oX7C7s=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQYrN7oX8Jdk=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAGAQKIeqWLv2j0=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAGAQKIeqmLwPvU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAGAQKIeqmLxGTE=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 336, + "top": 256, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQKIeqmLyYNk=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "font": "Arial;13;1", + "left": 2837, + "top": 1663, + "width": 117.0380859375, + "height": 13, + "text": "FillSymbol3DLayer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQKIeqmLzzjA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 336, + "top": 256, + "width": 73.67724609375, + "height": 13, + "text": "(from Model)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAGAQKIeqmL0DUA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 336, + "top": 256, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 2832, + "top": 1656, + "width": 127.0380859375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAGAQKIeqmLxGTE=" + }, + "nameLabel": { + "$ref": "AAAAAAGAQKIeqmLyYNk=" + }, + "namespaceLabel": { + "$ref": "AAAAAAGAQKIeqmLzzjA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQKIeqmL0DUA=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAGAQKIeqmL15DU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKoDGxLvTU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKKn5Gwwvc4=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1686, + "width": 117.0380859375, + "height": 13, + "text": "+type", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKuJm0R9gw=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKKt/Wz2iEA=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1701, + "width": 117.0380859375, + "height": 13, + "text": "+castShadows", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKwDW2PUPU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKKv4210K3A=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1716, + "width": 117.0380859375, + "height": 13, + "text": "+edges", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKKywm4NF+I=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKKymW3yL3A=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1731, + "width": 117.0380859375, + "height": 13, + "text": "+material", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKK0tG6LD/o=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKK0i25wkdY=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1746, + "width": 117.0380859375, + "height": 13, + "text": "+outline", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAGAQKK2l28JCeE=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "model": { + "$ref": "AAAAAAGAQKK2bm7uffg=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1761, + "width": 117.0380859375, + "height": 13, + "text": "+pattern", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2832, + "top": 1681, + "width": 127.0380859375, + "height": 98 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAGAQKIeqmL2dy0=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "subViews": [ + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQKI2X2Rqdhc=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL2dy0=" + }, + "model": { + "$ref": "AAAAAAGAQKI2N2RPsfU=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1784, + "width": 117.0380859375, + "height": 13, + "text": "+clone()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQKI9uGUwjGE=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL2dy0=" + }, + "model": { + "$ref": "AAAAAAGAQKI9kGUVE0M=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1799, + "width": 117.0380859375, + "height": 13, + "text": "+fromJSON()", + "horizontalAlignment": 0 + }, + { + "_type": "UMLOperationView", + "_id": "AAAAAAGAQKJAC2WuxLo=", + "_parent": { + "$ref": "AAAAAAGAQKIeqmL2dy0=" + }, + "model": { + "$ref": "AAAAAAGAQKI/4mWTMrg=" + }, + "font": "Arial;13;0", + "left": 2837, + "top": 1814, + "width": 117.0380859375, + "height": 13, + "text": "+toJSON()", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 2832, + "top": 1779, + "width": 127.0380859375, + "height": 53 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAGAQKIeqmL3t4E=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 168, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAGAQKIeqmL4wsU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLv2j0=" + }, + "model": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 168, + "top": 128, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 2832, + "top": 1656, + "width": 127.0380859375, + "height": 176, + "nameCompartment": { + "$ref": "AAAAAAGAQKIeqmLwPvU=" + }, + "attributeCompartment": { + "$ref": "AAAAAAGAQKIeqmL15DU=" + }, + "operationCompartment": { + "$ref": "AAAAAAGAQKIeqmL2dy0=" + }, + "receptionCompartment": { + "$ref": "AAAAAAGAQKIeqmL3t4E=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAGAQKIeqmL4wsU=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQZEEMWQzWag=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ06Ho=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2646, + "top": 1633, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ1eXY=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2654, + "top": 1646, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ2OMA=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2629, + "top": 1608, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ3Fys=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQwxWs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2769, + "top": 1556, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ4Qow=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQwxWs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2774, + "top": 1569, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ5gR8=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQwxWs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2758, + "top": 1530, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ6sCU=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQx3vs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2522, + "top": 1711, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ75iI=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQx3vs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2532, + "top": 1721, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZEEMWQ8Hek=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQx3vs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2504, + "top": 1690, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZEEMWQ9h1s=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQwxWs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": -8, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZEEMWQ+R10=", + "_parent": { + "$ref": "AAAAAAGAQZEEMWQzWag=" + }, + "model": { + "$ref": "AAAAAAGAQZEEMGQx3vs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": -8, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQPnVf+rFgxs=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "lineStyle": 1, + "points": "2783:1536;2493:1719", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQZEEMWQ06Ho=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQZEEMWQ1eXY=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQZEEMWQ2OMA=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQZEEMWQ3Fys=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQZEEMWQ4Qow=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQZEEMWQ5gR8=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQZEEMWQ6sCU=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQZEEMWQ75iI=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQZEEMWQ8Hek=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQZEEMWQ9h1s=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQZEEMWQ+R10=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQZE2+meDj0I=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meE0dA=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2565, + "top": 1629, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meFKgw=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2571, + "top": 1643, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meGnAQ=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2552, + "top": 1602, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meHJn0=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meABCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2765, + "top": 1542, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meIuKI=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meABCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2768, + "top": 1555, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meJZnE=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meABCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2758, + "top": 1515, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meKXaM=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meB18I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2364, + "top": 1718, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meLG60=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meB18I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2372, + "top": 1729, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZE2+meM+Xk=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meB18I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2349, + "top": 1694, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZE2+meN3Qs=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meABCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": -8, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZE2+meO9iI=", + "_parent": { + "$ref": "AAAAAAGAQZE2+meDj0I=" + }, + "model": { + "$ref": "AAAAAAGAQZE2+meB18I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": -8, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQHci648v8Jg=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "lineStyle": 1, + "points": "2783:1524;2335:1721", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQZE2+meE0dA=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQZE2+meFKgw=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQZE2+meGnAQ=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQZE2+meHJn0=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQZE2+meIuKI=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQZE2+meJZnE=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQZE2+meKXaM=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQZE2+meLG60=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQZE2+meM+Xk=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQZE2+meN3Qs=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQZE2+meO9iI=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQZOWEGpdhEY=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpeioI=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3215, + "top": 1513, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpfios=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 3230, + "top": 1513, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpgu4U=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3185, + "top": 1514, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGph92Q=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpaZS4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2933, + "top": 1499, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpin14=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpaZS4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2936, + "top": 1485, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpjFv8=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpaZS4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2929, + "top": 1526, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpkaFo=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpb1vk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3215, + "top": 1616, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGplaes=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpb1vk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3228, + "top": 1613, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZOWEGpmhpw=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpb1vk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 3187, + "top": 1620, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZOWEGpnTsQ=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpaZS4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZOWEGpo40M=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpdhEY=" + }, + "model": { + "$ref": "AAAAAAGAQZOWEGpb1vk=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQLns6JmlVRk=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "points": "2908:1520;3200:1520;3200:1648", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQZOWEGpeioI=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQZOWEGpfios=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQZOWEGpgu4U=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQZOWEGph92Q=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQZOWEGpin14=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQZOWEGpjFv8=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQZOWEGpkaFo=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQZOWEGplaes=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQZOWEGpmhpw=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQZOWEGpnTsQ=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQZOWEGpo40M=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAGAQZO4TGv2Wb8=", + "_parent": { + "$ref": "AAAAAAFF+qBtyKM79qY=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv36pE=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2725, + "top": 1624, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv4yKA=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 2735, + "top": 1635, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv5lrs=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2704, + "top": 1603, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv6LtA=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvzO6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2774, + "top": 1578, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv7sK8=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvzO6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2781, + "top": 1589, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv8jXU=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvzO6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2758, + "top": 1555, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv9Ta4=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGv03hE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2676, + "top": 1672, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv+EKc=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGv03hE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2686, + "top": 1680, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAGAQZO4TGv/ouA=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGv03hE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 2654, + "top": 1655, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZO4TWwAL+8=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGvzO6Q=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAGAQZO4TWwBVw0=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGv2Wb8=" + }, + "model": { + "$ref": "AAAAAAGAQZO4TGv03hE=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAGAQI6qsOc2n1Y=" + }, + "tail": { + "$ref": "AAAAAAGAQJPNQDjq3dQ=" + }, + "lineStyle": 1, + "points": "2783:1556;2647:1685", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAGAQZO4TGv36pE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAGAQZO4TGv4yKA=" + }, + "propertyLabel": { + "$ref": "AAAAAAGAQZO4TGv5lrs=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAGAQZO4TGv6LtA=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAGAQZO4TGv7sK8=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAGAQZO4TGv8jXU=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAGAQZO4TGv9Ta4=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAGAQZO4TGv+EKc=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAGAQZO4TGv/ouA=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAGAQZO4TWwAL+8=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAGAQZO4TWwBVw0=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO1MYeU/HxR0=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1M4mE/xJtQ=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1NDTE/3Mpo=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO1NFuk/9tZ0=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "opacity", + "visibility": "private", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO1QIuVAHl58=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO1QRq1ANbHM=", + "_parent": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO4K5hVAX2y8=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "MarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAO4k9d5q8o/w=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "source": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4pz5Zr153M=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mTwJrPb7w=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4qdgZsAE80=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mfnZrVlig=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO4mihZrbRuU=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO4nh+prkPOw=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO4n8mJrrxks=", + "_parent": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAO5gALZsNaqc=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleMarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAO5hIZ5s7B30=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "source": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "target": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAUdsZyKUJw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAUdsZyL/EI=", + "_parent": { + "$ref": "AAAAAAGAPAUdsZyKUJw=" + }, + "reference": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAUdsZyMSoA=", + "_parent": { + "$ref": "AAAAAAGAPAUdsZyKUJw=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAZXyJz3JCA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAZXyJz4H6A=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "reference": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAZXyJz5qwM=", + "_parent": { + "$ref": "AAAAAAGAPAZXyJz3JCA=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hkNptMOqw=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hwUJtS32g=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5hygptYMPQ=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5pIqJud5fM=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "outline", + "type": "SimpleLineSymbol" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h09pteLz4=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "path", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h23Jtkc88=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h4k5tqygA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h7A5tw0cA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAO5h9B5t2d9Q=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iajJuIBOs=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iPxpt81pU=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAO5iX6JuC7TA=", + "_parent": { + "$ref": "AAAAAAGAO5gALZsNaqc=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAEEB5uzp5s=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPAMl+Jwq3y8=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "source": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKLVpvdNNE=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKRz5vj6lU=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAKan5vpoKk=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPALS25vyQdo=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPALeMZv49lY=", + "_parent": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAMK75wAYR4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleLineSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPAM0X5w7CQk=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "source": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "target": { + "$ref": "AAAAAAGAPAEEB5uzp5s=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPAgXl59swT0=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAgXl59tmOM=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPAgXl59uDWo=", + "_parent": { + "$ref": "AAAAAAGAPAgXl59swT0=" + }, + "reference": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQZ0pxMviw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQglpxSlAw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQjTpxYRgc=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQlXpxeKLg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQnhpxkzMk=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "marker", + "type": "LineSymbolMarker" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQprpxqv+k=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "miterLimit", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQr7pxwm+c=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAQuFpx2vEw=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvaqK3lziY=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvhf64bbOg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCvkHq4/nNg=", + "_parent": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPAZ6f51PAmE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbolMarker", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAad+p2dGzE=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAakl5275T8=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAamt53QDe4=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "placement", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPAapL53l9Sc=", + "_parent": { + "$ref": "AAAAAAGAPAZ6f51PAmE=" + }, + "name": "style", + "type": "" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPBd73aHqdKY=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PictureMarkerSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPBeg7KJvEiE=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "source": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "target": { + "$ref": "AAAAAAGAO4K5hVAX2y8=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBe8CaLygzQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfC3qMo4vU=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfFsKNMfiQ=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfH9qNwFW8=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "url", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfKDqOUl0Y=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "width", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfMJqO4ULE=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPBfOZ6Pcm9c=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBet6aK8jQc=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBhvx6Wusf8=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPBhx56XShSk=", + "_parent": { + "$ref": "AAAAAAGAPBd73aHqdKY=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPCD456eWclQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "FillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPCEOb6gbYVs=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "source": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCEdKahoOMM=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCEmEKiwQC0=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCEvg6jm2cI=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCE2f6kc9N4=", + "_parent": { + "$ref": "AAAAAAGAPCD456eWclQ=" + }, + "name": "toJSON" + } + ], + "isAbstract": true + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPCnyRqqQR0M=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "SimpleFillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPCwoxq9lm94=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "source": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "target": { + "$ref": "AAAAAAGAPCD456eWclQ=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPQTeDH3yZgM=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTeDH3zm0M=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "reference": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTeDH30fcw=", + "_parent": { + "$ref": "AAAAAAGAPQTeDH3yZgM=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqTEauYd9c=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqZd6vOxgQ=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqcjqvys9Y=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPCqfd6wWjho=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "style", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCp84qsIizc=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCqEt6s+HlI=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPCqIjqtiAxk=", + "_parent": { + "$ref": "AAAAAAGAPCnyRqqQR0M=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPQMJ6nhGP6w=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PictureFillSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPQQ/rX0Sm58=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "source": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "target": { + "$ref": "AAAAAAGAPCD456eWclQ=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPQTsGX5l7I8=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTsGX5mdOE=", + "_parent": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "reference": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPQTsGX5nfsI=", + "_parent": { + "$ref": "AAAAAAGAPQTsGX5l7I8=" + }, + "reference": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQM7WHi4dEU=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNDuXjuWOY=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNF6nkSbuY=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "outline", + "type": { + "$ref": "AAAAAAGAPAMK75wAYR4=" + } + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNIonk2nHk=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "url", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNKhXlabsA=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "width", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNMP3l+opg=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNOl3miql8=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "xscale", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNQUnnGgkw=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "yoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPQNVK3oOyW0=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "yscale", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP0jXviawc=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP6OHwYjDU=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPQP8/nw8tdI=", + "_parent": { + "$ref": "AAAAAAGAPQMJ6nhGP6w=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPQff+YT2kWw=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "TextSymbol", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAPQhWsoWl3dc=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "source": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAPS6KpKbbg5c=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPS6KpKbc4jk=", + "_parent": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "reference": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAPS6KpKbd/TA=", + "_parent": { + "$ref": "AAAAAAGAPS6KpKbbg5c=" + }, + "reference": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAICJA6v/o=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAOIJCgc6M=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "angle", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAQ2ZDiIF4=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "backgroundColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSATI5Ek4IM=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "borderLineColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAVEZFmIR8=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "borderLineSize", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAXEZGod8M=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "color", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAZV5HqksU=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "font", + "type": "Font" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAcR5Is1X4=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "haloColor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAeRZJuhG0=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "haloSize", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAgi5KwfFQ=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "horizontalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAitpLy8xw=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "kerning", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAk2pM04uU=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "lineHeight", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSAnFJN2K9s=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "lineWidth", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSApNZO4TrY=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "rotated", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSDpSpiG08U=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "text", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSDyipkENGA=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "verticalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSD1fJlGhvw=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "xoffset", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPSFIs5ttMYs=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "yoffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR/v2o8IG9I=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR/81I+SarM=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPR//MI/UW7w=", + "_parent": { + "$ref": "AAAAAAGAPQff+YT2kWw=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAPS3xX6LyqAQ=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Font", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4SfqOsEp4=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "decoration", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4ZY6QSK9k=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "family", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4b4KRUp0w=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4eKqSWMIQ=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "style", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAPS4gOqTYZto=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "weight", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8boazWojk=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8jDq1UJEA=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAPS8lYK2li7A=", + "_parent": { + "$ref": "AAAAAAGAPS3xX6LyqAQ=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAP6S168jGsxA=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAP6VdPsoeetU=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "source": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "target": { + "$ref": "AAAAAAGAO1MYeU/HxR0=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAP9XAwkPrzU4=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAP9XAwkPs9B8=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "reference": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAP9XAwkPtw8Y=", + "_parent": { + "$ref": "AAAAAAGAP9XAwkPrzU4=" + }, + "reference": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bx38w7uLM=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bpOstslHY=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP6bvnMvqZyg=", + "_parent": { + "$ref": "AAAAAAGAP6S168jGsxA=" + }, + "name": "symbolLayers", + "type": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAP8/5/D2x644=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "Symbol3DLayer", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAP9VqWEBDC5M=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "type", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAP9WNLEGF+44=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAP9WlJEMSNXw=", + "_parent": { + "$ref": "AAAAAAGAP8/5/D2x644=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQHO4GV0oLfI=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PointSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQHbWNI6eATI=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "source": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQHpofreL/lM=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQHpofreMF+Y=", + "_parent": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQHpofreNRd8=", + "_parent": { + "$ref": "AAAAAAGAQHpofreL/lM=" + }, + "reference": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQPx5Lwegxog=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPx5LwehMeE=", + "_parent": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPx5LweiweU=", + "_parent": { + "$ref": "AAAAAAGAQPx5Lwegxog=" + }, + "reference": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQPyJKAjcvoE=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPyJKAjdEa4=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "reference": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQPyJKAjecM4=", + "_parent": { + "$ref": "AAAAAAGAQPyJKAjcvoE=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPbk14qDNA=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPo018aeJo=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "callout", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPq7F96x14=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPtAV/aljM=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "symbolLayers", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHPuxGA6UBk=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "verticalOffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYPZmRQTEw=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYVz2Tm/qo=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHYYN2VGn1k=", + "_parent": { + "$ref": "AAAAAAGAQHO4GV0oLfI=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQHci6o8tBGM=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "IconSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQHcyhZBm0hs=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "source": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiR5aDzLYY=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiYP6GJhto=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHiaNaHpMeE=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "anchorPosition", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHicC6JJ2ps=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHidd6KpQY0=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "outline", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHifkKMJgeQ=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "resource", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQHihOaNp1o4=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlBEamVlhM=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlHU6orzwA=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQHlJbKqLtE0=", + "_parent": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQI6jF+ainB0=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJBZ8ACM7PY=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "source": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQJB91wHUuZ8=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQJB91wHV5+E=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "reference": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQJB91wHWZ0U=", + "_parent": { + "$ref": "AAAAAAGAQJB91wHUuZ8=" + }, + "reference": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQQzoZWpmJZ0=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQQzoZWpnhlg=", + "_parent": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "reference": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQQzoZWposbQ=", + "_parent": { + "$ref": "AAAAAAGAQQzoZWpmJZ0=" + }, + "reference": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7RO+gvDaw=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7YIujdTVQ=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI7fHum1PPw=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "symbolLayers", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI83Pu60uKU=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI89iO9irzg=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI8/v+/RXtM=", + "_parent": { + "$ref": "AAAAAAGAQI6jF+ainB0=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQI6qsOc0DIE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LineSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJBpFAEwA94=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "source": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/Ms/fm62A=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/SxfiUCXU=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/U9/kDTG0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/W6PlyuF4=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "marker", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/x4vseoP0=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/0MvuNWWU=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "pattern", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQI/2Efv8elc=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI+28vXcViw=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI/BU/bJXC8=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQI/Do/c45mg=", + "_parent": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQJPNQDjoUDE=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PolygonSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQJR3UUvMi3E=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "source": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQKMnaHQbRW0=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQKMnaHQc7Rs=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQKMnaHQdqUs=", + "_parent": { + "$ref": "AAAAAAGAQKMnaHQbRW0=" + }, + "reference": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQYq/foRzh3g=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQYq/foR06rU=", + "_parent": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQYq/foR197U=", + "_parent": { + "$ref": "AAAAAAGAQYq/foRzh3g=" + }, + "reference": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZEEMGQvP4A=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEEMGQwxWs=", + "_parent": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEEMGQx3vs=", + "_parent": { + "$ref": "AAAAAAGAQZEEMGQvP4A=" + }, + "reference": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZEYe2XL0XM=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEYe2XM+rA=", + "_parent": { + "$ref": "AAAAAAGAQZEYe2XL0XM=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZEYe2XNnz8=", + "_parent": { + "$ref": "AAAAAAGAQZEYe2XL0XM=" + }, + "reference": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZE2+md/zbs=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZE2+meABCg=", + "_parent": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZE2+meB18I=", + "_parent": { + "$ref": "AAAAAAGAQZE2+md/zbs=" + }, + "reference": { + "$ref": "AAAAAAGAQHci6o8tBGM=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZOWEGpZGhg=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZOWEGpaZS4=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZOWEGpb1vk=", + "_parent": { + "$ref": "AAAAAAGAQZOWEGpZGhg=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQZO4TGvycxc=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZO4TGvzO6Q=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "reference": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQZO4TGv03hE=", + "_parent": { + "$ref": "AAAAAAGAQZO4TGvycxc=" + }, + "reference": { + "$ref": "AAAAAAGAQI6qsOc0DIE=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJPvrzoyMNs=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJP6pjtAYNM=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQJP8/ju+xJc=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "symbolLayers", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQJTTy0Pz0=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQP+D16Vf8=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQJQSWz34cwY=", + "_parent": { + "$ref": "AAAAAAGAQJPNQDjoUDE=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQKIeqWLtb7A=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "FillSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQKMeBnOSzgA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "source": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKn5Gwwvc4=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKt/Wz2iEA=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKv4210K3A=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "edges", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKKymW3yL3A=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKK0i25wkdY=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "outline", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQKK2bm7uffg=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "pattern", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI2N2RPsfU=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI9kGUVE0M=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQKI/4mWTMrg=", + "_parent": { + "$ref": "AAAAAAGAQKIeqWLtb7A=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQLjRBoVK/Ro=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "LabelSymbol3D", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQLnZqZjVkdk=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "source": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "target": { + "$ref": "AAAAAAGAP6S168jGsxA=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAGAQLsG/7AAptg=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQLsG/7ABSMo=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "reference": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAGAQLsG/7ACCWw=", + "_parent": { + "$ref": "AAAAAAGAQLsG/7AAptg=" + }, + "reference": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkJF4qC7uw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkPq4tgUdM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "callout", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkRqYvtqAE=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "styleOrigin", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkT24x6g2s=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "symbolLayers", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLkWVo0H4Q8=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "verticalOffset", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjff4a4sxM=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjlyoeW4cw=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLjoBYgjCv8=", + "_parent": { + "$ref": "AAAAAAGAQLjRBoVK/Ro=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQLns6Jmj0x4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "TextSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQLsTnLEG5Uo=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "source": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLoWJ5tje4c=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLocVpxB5AM=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "background", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLofAJzO1GA=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "font", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLog4Z1bzo4=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "halo", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLojE53omX0=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "horizontalAlignment", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLolVZ51Tdg=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "lineHeight", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLonSp8CGas=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLopjp+PrHs=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "size", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLor6qAcWyY=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "text", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQLq7GahmsQQ=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "verticalAlignment", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrMV6o4fWE=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrSt6sWGnA=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQLrU4qujo+U=", + "_parent": { + "$ref": "AAAAAAGAQLns6Jmj0x4=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQPnVfurDxP4=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "ObjectSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQP3ZlkBMubY=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "source": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPop+u2+iXY=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPozEe604dA=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo2Gu9Q5Ck=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "anchorPosition", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo4he/sG20=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo66/CIc7k=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "depth", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo9LPEkQrk=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "heading", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPo/TvHAQDk=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPpBxPJcIdQ=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPpEefL4VGc=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "resource", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsGafyFSfs=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "roll", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsIyv0hvRE=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "tilt", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQPsLH/2976o=", + "_parent": { + "$ref": "AAAAAAGAQPnVfurDxP4=" + }, + "name": "width", + "type": "" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQQuTLUb/9Rg=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "PathSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQQz8x230K8E=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "source": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvIck2jTQg=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvOlU7J+Js=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "anchor", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvRWk+D8Kk=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "cap", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvUBFA9SC8=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvWAFD3ufw=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "height", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvYoVGxGiQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "join", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvaulJrSXY=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQvdLlMlZuI=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "profile", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQyXzmQCWwQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "profileRotation", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQQyayGS8q5c=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "width", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQvq6VS33RQ=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQvyP1Xdy/A=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQQv1gFaXIyU=", + "_parent": { + "$ref": "AAAAAAGAQQuTLUb/9Rg=" + }, + "name": "toJSON" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAGAQYqXdX+0wEk=", + "_parent": { + "$ref": "AAAAAAFF+qBWK6M3Z8Y=" + }, + "name": "ExtrudeSymbol3DLayer", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAGAQYrN7oX36Ng=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "source": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "target": { + "$ref": "AAAAAAGAP8/5/D2x644=" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYrs74espQ8=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "type", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr0SYkCuFQ=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "castShadows", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr27InaovU=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "edges", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr5XIqy5mU=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "material", + "type": "" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAGAQYr+RIuK/FY=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "size", + "type": "" + } + ], + "operations": [ + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYt7S5Rx0RQ=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "clone" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYuCRZXHU2w=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "fromJSON" + }, + { + "_type": "UMLOperation", + "_id": "AAAAAAGAQYuFBpaftPw=", + "_parent": { + "$ref": "AAAAAAGAQYqXdX+0wEk=" + }, + "name": "toJSON" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/service/utils/index.js b/src/service/utils/index.js new file mode 100644 index 000000000..6770237a0 --- /dev/null +++ b/src/service/utils/index.js @@ -0,0 +1,2 @@ +import { TileInfo, TileResolution } from './tile'; +export { TileInfo, TileResolution }; diff --git a/src/service/utils/tile/TileInfo.js b/src/service/utils/tile/TileInfo.js new file mode 100644 index 000000000..4bbb3f6b3 --- /dev/null +++ b/src/service/utils/tile/TileInfo.js @@ -0,0 +1,108 @@ +import xml from 'fast-xml-parser'; + +import { IgsServiceEnum, IgsServiceType } from '../../Igserver/common/IgsServiceType'; +import { PortalServiceEnum, PortalServiceType } from '../../Portal/PortalServiceType'; + +import { IgsServiceParse } from '../../Igserver/common/IgsServiceParse'; +import { PortalServiceParse } from '../../Portal/PortalServiceParse'; + +import { TileResolution } from './TileResolution'; +import { TileScale } from './TileScale'; + +const XmlFormat = [IgsServiceEnum.WMS, IgsServiceEnum.WMTS, IgsServiceEnum.WFS, IgsServiceEnum.WCS, PortalServiceEnum.WMTS, PortalServiceEnum.WMS]; + +/** + * @author 基础平台-潘卓然 + * @description 通过比例尺或者分辨率来计算是否是对应的瓦片错级 + * @example + let tileinfo = new TileInfo(); + let zoomOffset = await tileinfo.getZoomOffset( + IgsServiceEnum.WMTS, // IgsServiceEnum.IGSRestTile PortalServiceEnum.WMTS PortalServiceEnum.IGSTile + "localhost", + "6163", + "epsg_standard" + ); + */ +export class TileInfo { + constructor(options) { + let option = options || {}; + const { ip, port, serverName } = option; + this.ip = ip; + this.port = port; + this.serverName = serverName; + } + + async getZoomOffset(type, ip, port, serverName, options) { + options = options || {}; + let { mapmode = "mapboxgl", tileschame = "EPSG:3587", tilesize = 256 } = options; + let zoomoffset = 0; + ip = ip || this.ip; + port = port || this.port; + serverName = serverName || this.serverName; + + let isPortal = false; + let isIGServer = false; + let isJson = true; + + IgsServiceType.forEach((s) => { + if (s.type === type) { + isIGServer = true; + if (XmlFormat.indexOf(type) >= 0) { + isJson = false; + } + } + }); + PortalServiceType.forEach((s) => { + if (s.type === type) { + isPortal = true; + if (XmlFormat.indexOf(type) >= 0) { + isJson = false; + } + } + }); + + if (isPortal) { + this.parse = new PortalServiceParse(); + } else if (isIGServer) { + this.parse = new IgsServiceParse(); + } + if (this.parse) { + let capability = this.parse.GetCapabilities(type, ip, port, serverName); + if (isJson) { + try { + let res = await fetch(capability); + let json = await res.json(); + let util = new TileResolution(); + const { TileInfo2 } = json; + const { tileInfo } = TileInfo2; + zoomoffset = util.getZoomOffsetByTileInfo(tileInfo); + } catch (error) { } + } else { + let res = await fetch(capability); + let text = await res.text(); + let obj = xml.getTraversalObj(text, {}); + let json = xml.convertToJson(obj, {}); + let tms = json.Capabilities.Contents.TileMatrixSet; + let TileMatrixSet = tms[tms.length - 1]; + let tmsName = TileMatrixSet['ows:Identifier']; + let tmx = TileMatrixSet.TileMatrix; + let tmxobj = tmx && tmx.length > 0 ? tmx[0] : tmx; + let tmxname = tmxobj['ows:Identifier']; + let exp = new RegExp(/EPSG:[0-9]*/); + let schame = exp.exec(tmxname); + tileschame = schame && schame.length > 0 ? schame[0] : tileschame; + let tmxlevels = tmxname.split(`${tmsName}:`) + let tmxlevel = tmxlevels && tmxlevels.length > 1 ? parseInt(tmxlevels[1]) : 0; + let scale = tmxobj.ScaleDenominator; + let tileInfo = { lods: [{ resolution: scale, level: tmxlevel }] }; + let util = new TileScale(); + let isCesium = mapmode == "cesium"; + zoomoffset = util.getZoomOffsetByTileInfo(tileInfo, isCesium, tilesize, tileschame); + } + } + + return zoomoffset; + } +} + +export default TileInfo; diff --git a/src/service/utils/tile/TileResolution.js b/src/service/utils/tile/TileResolution.js new file mode 100644 index 000000000..23e7d3930 --- /dev/null +++ b/src/service/utils/tile/TileResolution.js @@ -0,0 +1,104 @@ +/** + * @author 基础平台-龚瑞强 + * @description 针对不同分辨率来计算对应的瓦片错级 + */ +export class TileResolution { + constructor() { + /** + * key:瓦片尺寸 “256,512,1024” + * val: 层级与分辨关系数组 + */ + this.levelResolutionToTileSizes = {}; + } + + // 赤道周长(单位:m) + static get EQUATOR_PERIMTER() { + return 6378137; + } + + /** + * 通过瓦片大小获取层级与分辨关系的数组 + * @param {*} tileSize 瓦片尺寸,三维用的瓦片尺寸为512的levelResolution数组 + * @returns 层级与分辨关系的数组 + */ + getLevelResolutionByTileSize(tileSize) { + if (!this.levelResolutionToTileSizes[tileSize]) { + const arr = []; + for (let level = 0; level <= 24; level++) { + const r = TileResolution.EQUATOR_PERIMTER; // 赤道半径 + const resolutionOnTheEquator = 360 / (tileSize * 2 ** level); + arr.push({ + level, + resolution: resolutionOnTheEquator + }); + } + this.levelResolutionToTileSizes[tileSize] = arr; + } + return this.levelResolutionToTileSizes[tileSize]; + } + + /** + * 获取cesium层级与分辨率关系的数组 + * @returns 层级与分辨率关系的数组 + */ + getLevelResolutionCesium() { + return this.getLevelResolutionByTileSize(512); + } + + /** + * 通过分辨率获取其在地图里面对应的层级 + * @param {number} resolution 当前层级分辨率 + * @param {Array>} levelResolutions 地图的层级与最大分辨率的对应关系 + * @returns 当前分辨对应地图里面的层级 + */ + getNearLevel(resolution, levelResolutions) { + const levelResolutionsTemp = JSON.parse(JSON.stringify(levelResolutions)); + const nearlevel = levelResolutionsTemp.sort(function (a, b) { + return Math.abs(a.resolution - resolution) - Math.abs(b.resolution - resolution); + })[0].level; + return nearlevel; + } + + /** + * 通过分辨率来计算偏移量 + * @param {number} resolution 当前层级分辨率 + * @param {Array>} levelResolutions 当前层级与分辨率关系数组 + * @param {number} levelValue 初始层级 + * @returns 偏移量 + */ + getZoomOffsetByResolution({ resolution, levelResolutions, levelValue }) { + // 获取当前分辨率对应cesium里面的层级,计算偏移量 + const level = this.getNearLevel(resolution, levelResolutions); + const zoomOffset = levelValue - level; + + return zoomOffset; + } + + /** + * 通过瓦片信息来计算偏移量 + * @param {number} tileInfo 瓦片信息 + * @param {boolean} isCesium 如果是三维图层,则不需要通过size去计算层级与瓦片的数组 + * @returns 偏移量 + */ + getZoomOffsetByTileInfo(tileInfo, isCesium = false, tileSize = 256) { + let levelResolutions = []; + const lodBegin = tileInfo.lods[0]; + if (!isCesium) { + tileSize = tileSize || 256; + if (tileInfo.size && tileInfo.size.length > 0) { + tileSize = tileInfo.size[0]; + } + levelResolutions = this.getLevelResolutionByTileSize(tileSize); + } else { + levelResolutions = this.getLevelResolutionCesium(); + } + let zoomOffset = this.getZoomOffsetByResolution({ + resolution: lodBegin.resolution, + levelResolutions: levelResolutions, + levelValue: lodBegin.level + }); + + return zoomOffset; + } +} +export default TileResolution; diff --git a/src/service/utils/tile/TileScale.js b/src/service/utils/tile/TileScale.js new file mode 100644 index 000000000..90c5d2cf4 --- /dev/null +++ b/src/service/utils/tile/TileScale.js @@ -0,0 +1,120 @@ +/** + * @author 基础平台-王魁帅 + * @description 针对不同比例尺来计算对应的瓦片错级 + */ +export class TileScale { + constructor() { + /** + * key:瓦片尺寸 “256,512,1024” + * val: 层级与分辨关系数组 + */ + this.levelScales = {}; + } + + // 赤道周长(单位:m) + static ZERO_SCALE(tileschame) { + let scale = 295829355.45 * 2; + + switch (tileschame) { + case 'EPSG:3857': + case '3857': + scale = 295829355.45 * 2 + break; + case 'EPSG:4326': + case '4326': + case 'EPSG:4490': + case '4490': + case 'EPSG:4610': + case '4610': + scale = 295829355.45; + break; + } + return scale; + } + + /** + * 通过瓦片大小获取层级与分辨关系的数组 + * @param {*} tileSize 瓦片尺寸,三维用的瓦片尺寸为512的levelResolution数组 + * @returns 层级与分辨关系的数组 + */ + getLevelScale(tileSize, tileschame) { + if (!this.levelScales[tileSize]) { + const arr = []; + for (let level = 0; level <= 24; level++) { + const zero = TileScale.ZERO_SCALE(tileschame); + const resolutionOnTheEquator = zero / 2 ** level; + arr.push({ + level, + resolution: resolutionOnTheEquator + }); + } + this.levelScales[tileSize] = arr; + } + return this.levelScales[tileSize]; + } + + /** + * 获取cesium层级与分辨率关系的数组 + * @returns 层级与分辨率关系的数组 + */ + getLevelScaleCesium(tileschame) { + return this.getLevelScale(512, tileschame); + } + + /** + * 通过分辨率获取其在地图里面对应的层级 + * @param {number} resolution 当前层级分辨率 + * @param {Array>} levelResolutions 地图的层级与最大分辨率的对应关系 + * @returns 当前分辨对应地图里面的层级 + */ + getNearLevel(resolution, levelResolutions) { + const levelResolutionsTemp = JSON.parse(JSON.stringify(levelResolutions)); + const nearlevel = levelResolutionsTemp.sort(function (a, b) { + return Math.abs(a.resolution - resolution) - Math.abs(b.resolution - resolution); + })[0].level; + return nearlevel; + } + + /** + * 通过分辨率来计算偏移量 + * @param {number} resolution 当前层级分辨率 + * @param {Array>} levelResolutions 当前层级与分辨率关系数组 + * @param {number} levelValue 初始层级 + * @returns 偏移量 + */ + getZoomOffsetByScale({ resolution, levelResolutions, levelValue }) { + // 获取当前分辨率对应cesium里面的层级,计算偏移量 + const level = this.getNearLevel(resolution, levelResolutions); + const zoomOffset = levelValue - level; + + return zoomOffset; + } + + /** + * 通过瓦片信息来计算偏移量 + * @param {number} tileInfo 瓦片信息 + * @param {boolean} isCesium 如果是三维图层,则不需要通过size去计算层级与瓦片的数组 + * @returns 偏移量 + */ + getZoomOffsetByTileInfo(tileInfo, isCesium = false, tileSize = 256, tileschame = 'EPSG:3857') { + let levelResolutions = []; + const lodBegin = tileInfo.lods[0]; + if (!isCesium) { + tileSize = tileSize || 256; + if (tileInfo.size && tileInfo.size.length > 0) { + tileSize = tileInfo.size[0]; + } + levelResolutions = this.getLevelScale(tileSize, tileschame); + } else { + levelResolutions = this.getLevelScaleCesium(tileschame); + } + let zoomOffset = this.getZoomOffsetByScale({ + resolution: lodBegin.resolution, + levelResolutions: levelResolutions, + levelValue: lodBegin.level + }); + + return zoomOffset; + } +} +export default TileScale; diff --git a/src/service/utils/tile/index.js b/src/service/utils/tile/index.js new file mode 100644 index 000000000..2c7a95c05 --- /dev/null +++ b/src/service/utils/tile/index.js @@ -0,0 +1,4 @@ +import { TileInfo } from './TileInfo'; +import { TileResolution } from './TileResolution'; + +export { TileInfo, TileResolution }; diff --git a/src/service/webpack/service-debug-config.js b/src/service/webpack/service-debug-config.js index 045fc84d7..d28aaf02b 100644 --- a/src/service/webpack/service-debug-config.js +++ b/src/service/webpack/service-debug-config.js @@ -11,7 +11,7 @@ module.exports = { output: { path: path.join(__dirname, '..', 'dist-libs'), //打包后的文件存放的地方 filename: 'webclient-es6-service.js', //打包后输出文件的文件名 - libraryTarget: 'commonjs' + libraryTarget: 'umd' }, externals: {}, module: { diff --git a/src/service/webpack/service-release-config.js b/src/service/webpack/service-release-config.js index 42bfd27bb..620713a92 100644 --- a/src/service/webpack/service-release-config.js +++ b/src/service/webpack/service-release-config.js @@ -12,7 +12,7 @@ module.exports = { output: { path: path.join(__dirname, '..', 'dist-libs'), //打包后的文件存放的地方 filename: 'webclient-es6-service.min.js', //打包后输出文件的文件名 - libraryTarget: 'commonjs' + libraryTarget: 'umd' }, devtool: 'sourcemap', //生成用来调试的map externals: {}, @@ -49,4 +49,4 @@ module.exports = { } }) ] -}; +}; \ No newline at end of file diff --git a/website/README.md b/website/README.md index eb1831490..b0cde491b 100644 --- a/website/README.md +++ b/website/README.md @@ -116,7 +116,6 @@ yarn build ### 1. Windows > 对于 Windows 2008 后(包括 2008)的版本,直接使用 IIS 将 website/dist 目录发布到 IIS 服务中即可正常使用。 - #### MIME | 后缀 | 类型 | @@ -140,6 +139,7 @@ yarn build #### IIS WebConfig > 为了解决 jsdoc 在 window 下的`IIS请求筛选模块被配置为拒绝包含双重转义序列的请求`,需要设置以下安全策略 +web.config 文件如下: ```xml diff --git a/website/package.json b/website/package.json index 0193180a4..e258348ce 100644 --- a/website/package.json +++ b/website/package.json @@ -1,6 +1,6 @@ { "name": "webclient-javascript-website", - "version": "10.5.0", + "version": "10.5.5", "private": true, "scripts": { "start": "npm run serve", @@ -16,11 +16,11 @@ "element-ui": "^2.12.0", "github-markdown-css": "^4.0.0", "js-cookie": "^2.2.1", - "less": "^3.10.3", - "less-loader": "^5.0.0", - "node-sass": "^4.13.0", + "less": "3.12.2", + "less-loader": "7.0.2", + "node-sass": "4.12.0", "prismjs": "^1.20.0", - "sass-loader": "^8.0.0", + "sass-loader": "10.1.1", "splitpanes": "^2.0.0", "vue": "^2.6.10", "vue-codemirror": "^4.0.6", @@ -63,4 +63,4 @@ "> 1%", "last 2 versions" ] -} \ No newline at end of file +} diff --git a/website/public/static/assets/guid/vectorStep1.png b/website/public/static/assets/guid/vectorStep1.png new file mode 100644 index 000000000..6f5f69e6e Binary files /dev/null and b/website/public/static/assets/guid/vectorStep1.png differ diff --git a/website/public/static/assets/guid/vectorStep2.png b/website/public/static/assets/guid/vectorStep2.png new file mode 100644 index 000000000..b75915196 Binary files /dev/null and b/website/public/static/assets/guid/vectorStep2.png differ diff --git a/website/public/static/assets/guid/vectorStep3.png b/website/public/static/assets/guid/vectorStep3.png new file mode 100644 index 000000000..be18762ed Binary files /dev/null and b/website/public/static/assets/guid/vectorStep3.png differ diff --git a/website/public/static/assets/guid/vectorStep4.png b/website/public/static/assets/guid/vectorStep4.png new file mode 100644 index 000000000..d4acf599f Binary files /dev/null and b/website/public/static/assets/guid/vectorStep4.png differ diff --git a/website/public/static/assets/guid/vectorStep5.png b/website/public/static/assets/guid/vectorStep5.png new file mode 100644 index 000000000..2fdbb3003 Binary files /dev/null and b/website/public/static/assets/guid/vectorStep5.png differ diff --git a/website/public/static/assets/guid/vectorStep6.png b/website/public/static/assets/guid/vectorStep6.png new file mode 100644 index 000000000..142b28469 Binary files /dev/null and b/website/public/static/assets/guid/vectorStep6.png differ diff --git a/website/public/static/assets/guid/vectorStep7.png b/website/public/static/assets/guid/vectorStep7.png new file mode 100644 index 000000000..e852bf2c4 Binary files /dev/null and b/website/public/static/assets/guid/vectorStep7.png differ diff --git a/website/public/static/assets/logo/mapgis_logo.png b/website/public/static/assets/logo/mapgis_logo.png new file mode 100644 index 000000000..29e2a3a0c Binary files /dev/null and b/website/public/static/assets/logo/mapgis_logo.png differ diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-animation.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-animation.htm new file mode 100644 index 000000000..9fb058f1c --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-animation.htm @@ -0,0 +1,266 @@ + + + + + + + 动画漫游 + + + + + + + + + +
+
+ + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
漫游方式 + + + + +
俯仰角 + + +
方位角 + + +
距离 + + +
播放速度 + + +
+
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-aspectAnalysis-normal.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-aspectAnalysis-normal.htm new file mode 100644 index 000000000..6ec1148d9 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-aspectAnalysis-normal.htm @@ -0,0 +1,107 @@ + + + + + + 坡向分析 + + + + + + + + + +
+ + diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-aspectAnalysis.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-aspectAnalysis.htm new file mode 100644 index 000000000..a449b7e24 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-aspectAnalysis.htm @@ -0,0 +1,79 @@ + + + + + + + 坡向分析 + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-cube.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-cube.htm new file mode 100644 index 000000000..752e51bdf --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-cube.htm @@ -0,0 +1,234 @@ + + + + + + + 填挖方计算 + + + + + + + + + + +
+
+

参数

+ + + + + + + + + + + + + + + +
x方向采样点个数 + +
y方向采样点个数 + +
填挖规整高度 + +
+
+
+

填挖结果

+ + + + + + + + + + + + + + + + + + + +
高程范围: + +
表面积: + +
挖体积: + +
填体积: + +
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-dynamiccut.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-dynamiccut.htm new file mode 100644 index 000000000..94797a9ed --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-dynamiccut.htm @@ -0,0 +1,104 @@ + + + + + + + 动态剖切 + + + + + + + + + +
+
+ + 剖切距离: + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-excavate.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-excavate.htm new file mode 100644 index 000000000..b36245112 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-excavate.htm @@ -0,0 +1,132 @@ + + + + + + + 开挖分析 + + + + + + + + + +
+
+ + 开挖深度: + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-explosion.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-explosion.htm new file mode 100644 index 000000000..de6bec5d3 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-explosion.htm @@ -0,0 +1,92 @@ + + + + + + + 爆炸分析 + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-floor.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-floor.htm new file mode 100644 index 000000000..1c061bd80 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-floor.htm @@ -0,0 +1,207 @@ + + + + + + + 洪水淹没分析 + + + + + + + + + + +
+
+

参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
淹没最底高度 + +
淹没最高高度 + +
洪水上涨速度 + +
波浪个数 + +
波浪速度 + +
波浪高度 + +
+
+ + + +
+
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-modelflatten.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-modelflatten.htm new file mode 100644 index 000000000..4b4037d00 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-modelflatten.htm @@ -0,0 +1,123 @@ + + + + + + + 模型压平 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-rollershutters.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-rollershutters.htm new file mode 100644 index 000000000..d9bea7081 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-rollershutters.htm @@ -0,0 +1,129 @@ + + + + + + + 动态卷帘 + + + + + + + + + + +
+
+ + 卷帘距离: + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-sceneprojection copy.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-sceneprojection copy.htm new file mode 100644 index 000000000..b0d1484e8 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-sceneprojection copy.htm @@ -0,0 +1,277 @@ + + + + + + 场景投放 + + + + + + + + + + +
+ + + + + + + +
+
+ 鼠标左键选择观察点 +
+ 点击鼠标右键完成场景投放 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-sceneprojection.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-sceneprojection.htm new file mode 100644 index 000000000..5d95240f0 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-sceneprojection.htm @@ -0,0 +1,149 @@ + + + + + + + 场景投放 + + + + + + + + + +
+
+ 鼠标左键选择观察点 +
+ 点击鼠标左键或右键完成场景投放 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-skyline.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-skyline.htm new file mode 100644 index 000000000..d1a41cd20 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-skyline.htm @@ -0,0 +1,102 @@ + + + + + + + 天际线分析 + + + + + + + + + +
+
+ 鼠标左键点击执行天际线分析 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-slopeAnalysis-normal.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-slopeAnalysis-normal.htm new file mode 100644 index 000000000..ebff391d3 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-slopeAnalysis-normal.htm @@ -0,0 +1,107 @@ + + + + + + 坡度分析 + + + + + + + + + +
+ + diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-slopeAnalysis.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-slopeAnalysis.htm new file mode 100644 index 000000000..4aa7fd363 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-slopeAnalysis.htm @@ -0,0 +1,79 @@ + + + + + + + 坡度分析 + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-visibility.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-visibility.htm new file mode 100644 index 000000000..3ac30ba29 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-visibility.htm @@ -0,0 +1,165 @@ + + + + + + + 通视分析 + + + + + + + + + + + +
+
+ 鼠标左键选择起点 +
+ 右键选择结束点并执行通视分析 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/analysis/analysis-visiblerange.htm b/website/public/static/demo/cesium-new/example/analysis/analysis-visiblerange.htm new file mode 100644 index 000000000..148a4656b --- /dev/null +++ b/website/public/static/demo/cesium-new/example/analysis/analysis-visiblerange.htm @@ -0,0 +1,163 @@ + + + + + + + 可视域分析 + + + + + + + + + + +
+
+ 鼠标左键选择观察点 +
+ 点击鼠标左键或右键完成可视域分析 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/m3d/m3d-instance.htm b/website/public/static/demo/cesium-new/example/m3d/m3d-instance.htm new file mode 100644 index 000000000..9fb058f1c --- /dev/null +++ b/website/public/static/demo/cesium-new/example/m3d/m3d-instance.htm @@ -0,0 +1,266 @@ + + + + + + + 动画漫游 + + + + + + + + + +
+
+ + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
漫游方式 + + + + +
俯仰角 + + +
方位角 + + +
距离 + + +
播放速度 + + +
+
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapboxstyle.htm b/website/public/static/demo/cesium-new/example/mapgis/mapboxstyle.htm new file mode 100644 index 000000000..8f292cc05 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapboxstyle.htm @@ -0,0 +1,57 @@ + + + + + + + 地层分析 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-doc.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-doc.htm new file mode 100644 index 000000000..36c3738f8 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-doc.htm @@ -0,0 +1,90 @@ + + + + + + 加载IGServer二维矢量地图服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-layer.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-layer.htm new file mode 100644 index 000000000..944dbe478 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-layer.htm @@ -0,0 +1,89 @@ + + + + + + 加载IGServer二维矢量图层服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-tile.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-tile.htm new file mode 100644 index 000000000..b93650cd8 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2d-tile.htm @@ -0,0 +1,69 @@ + + + + + + 加载IGServer二维瓦片地图服务 + + + + + + + + + + + +
+
+ + + diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-2dtile.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2dtile.htm new file mode 100644 index 000000000..a0d147592 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2dtile.htm @@ -0,0 +1,89 @@ + + + + + + + 加载二维瓦片地图 + + + + + + + + + +
+
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-2dvector.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2dvector.htm new file mode 100644 index 000000000..6528830ea --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-2dvector.htm @@ -0,0 +1,96 @@ + + + + + + + 加载WMS服务 + + + + + + + +
+ + +
+
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-dem.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-dem.htm new file mode 100644 index 000000000..044e3339d --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-dem.htm @@ -0,0 +1,79 @@ + + + + + + 加载WMS服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-dem250.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-dem250.htm new file mode 100644 index 000000000..49cfad60f --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-dem250.htm @@ -0,0 +1,84 @@ + + + + + + + 加载WMS服务 + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-oblique.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-oblique.htm new file mode 100644 index 000000000..5ea1eac0e --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-oblique.htm @@ -0,0 +1,78 @@ + + + + + + 倾斜摄影 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-raster.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-raster.htm new file mode 100644 index 000000000..e0800c937 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-raster.htm @@ -0,0 +1,73 @@ + + + + + + 加载WMS服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-raster250.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-raster250.htm new file mode 100644 index 000000000..09ec84c3e --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-raster250.htm @@ -0,0 +1,63 @@ + + + + + + 加载WMS服务 + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-terrain.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-terrain.htm new file mode 100644 index 000000000..5b6a1e408 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-terrain.htm @@ -0,0 +1,80 @@ + + + + + + 地形数据显示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-4326.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-4326.htm new file mode 100644 index 000000000..6df0791f6 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-4326.htm @@ -0,0 +1,78 @@ + + + + + 地层分析 + + + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-darkstyle.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-darkstyle.htm new file mode 100644 index 000000000..971f12ffc --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-darkstyle.htm @@ -0,0 +1,72 @@ + + + + + + + 地层分析 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-lightstyle.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-lightstyle.htm new file mode 100644 index 000000000..f83b6e777 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-lightstyle.htm @@ -0,0 +1,72 @@ + + + + + + + 地层分析 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-streetstyle.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-streetstyle.htm new file mode 100644 index 000000000..6d87d42d5 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile-streetstyle.htm @@ -0,0 +1,72 @@ + + + + + + + 地层分析 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile.htm b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile.htm new file mode 100644 index 000000000..477bc27e7 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/mapgis/mapgis-vectortile.htm @@ -0,0 +1,87 @@ + + + + + + 地层分析 + + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/style.css b/website/public/static/demo/cesium-new/example/style.css new file mode 100644 index 000000000..1518ae0bb --- /dev/null +++ b/website/public/static/demo/cesium-new/example/style.css @@ -0,0 +1,14 @@ +#mapgis-3d-viewer { + width: 100%; + height: 100%; + position: absolute; +} + +.mapgis-3d-output-cemera { + position: absolute; + z-index: 2000; + top: 10px; + right: 10px; + background: #ffffff; + border-radius: 2px; +} diff --git a/website/public/static/demo/cesium-new/example/symbols/point-symbol-3d.htm b/website/public/static/demo/cesium-new/example/symbols/point-symbol-3d.htm new file mode 100644 index 000000000..2bf2598ac --- /dev/null +++ b/website/public/static/demo/cesium-new/example/symbols/point-symbol-3d.htm @@ -0,0 +1,55 @@ + + + + + + + 动画漫游 + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/terrian/cesium-terrian-common.htm b/website/public/static/demo/cesium-new/example/terrian/cesium-terrian-common.htm new file mode 100644 index 000000000..9fb058f1c --- /dev/null +++ b/website/public/static/demo/cesium-new/example/terrian/cesium-terrian-common.htm @@ -0,0 +1,266 @@ + + + + + + + 动画漫游 + + + + + + + + + +
+
+ + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
漫游方式 + + + + +
俯仰角 + + +
方位角 + + +
距离 + + +
播放速度 + + +
+
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/terrian/cesium-terrian-stk.htm b/website/public/static/demo/cesium-new/example/terrian/cesium-terrian-stk.htm new file mode 100644 index 000000000..9fb058f1c --- /dev/null +++ b/website/public/static/demo/cesium-new/example/terrian/cesium-terrian-stk.htm @@ -0,0 +1,266 @@ + + + + + + + 动画漫游 + + + + + + + + + +
+
+ + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
漫游方式 + + + + +
俯仰角 + + +
方位角 + + +
距离 + + +
播放速度 + + +
+
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/terrian/mapgis-terrian-common.htm b/website/public/static/demo/cesium-new/example/terrian/mapgis-terrian-common.htm new file mode 100644 index 000000000..176ffc12b --- /dev/null +++ b/website/public/static/demo/cesium-new/example/terrian/mapgis-terrian-common.htm @@ -0,0 +1,76 @@ + + + + + + + 动画漫游 + + + + + + + + + +
+
+
输出相机视角
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/terrian/mapgis-terrian-normal.htm b/website/public/static/demo/cesium-new/example/terrian/mapgis-terrian-normal.htm new file mode 100644 index 000000000..e9791cb28 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/terrian/mapgis-terrian-normal.htm @@ -0,0 +1,77 @@ + + + + + + + 动画漫游 + + + + + + + + + +
+
+
输出相机视角
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/tool/graohic-layer-2d-advance.htm b/website/public/static/demo/cesium-new/example/tool/graohic-layer-2d-advance.htm new file mode 100644 index 000000000..58c8ae0a9 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/tool/graohic-layer-2d-advance.htm @@ -0,0 +1,227 @@ + + + + + + + 标绘工具(二维)- 进阶 + + + + + + + + + + +
+
+ +
开始绘制
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/tool/graohic-layer-2d.htm b/website/public/static/demo/cesium-new/example/tool/graohic-layer-2d.htm new file mode 100644 index 000000000..6a2b3106c --- /dev/null +++ b/website/public/static/demo/cesium-new/example/tool/graohic-layer-2d.htm @@ -0,0 +1,185 @@ + + + + + + + 标绘工具(二维) + + + + + + + + + + +
+
+ +
开始绘制
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/tool/graohic-layer-3d.htm b/website/public/static/demo/cesium-new/example/tool/graohic-layer-3d.htm new file mode 100644 index 000000000..3232c243b --- /dev/null +++ b/website/public/static/demo/cesium-new/example/tool/graohic-layer-3d.htm @@ -0,0 +1,103 @@ + + + + + + + 标绘工具(三维) + + + + + + + + + + +
+
+ +
开始绘制
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/example/view/theme-layer.htm b/website/public/static/demo/cesium-new/example/view/theme-layer.htm new file mode 100644 index 000000000..ea4716ec0 --- /dev/null +++ b/website/public/static/demo/cesium-new/example/view/theme-layer.htm @@ -0,0 +1,129 @@ + + + + + + + 洪水淹没分析 + + + + + + + + + + +
+
+
+ + + + +
+
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-animation.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-animation.png new file mode 100644 index 000000000..028e41e50 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-animation.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-aspectAnalysis-normal.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-aspectAnalysis-normal.png new file mode 100644 index 000000000..5fe81cff2 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-aspectAnalysis-normal.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-aspectAnalysis.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-aspectAnalysis.png new file mode 100644 index 000000000..a811e5890 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-aspectAnalysis.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-cube.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-cube.png new file mode 100644 index 000000000..93586eaea Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-cube.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-dynamiccut.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-dynamiccut.png new file mode 100644 index 000000000..9d953e695 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-dynamiccut.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-excavate.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-excavate.png new file mode 100644 index 000000000..5607baec5 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-excavate.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-explosion.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-explosion.png new file mode 100644 index 000000000..2b69ef1d8 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-explosion.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-floor.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-floor.png new file mode 100644 index 000000000..af7cafe7b Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-floor.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-modelflatten.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-modelflatten.png new file mode 100644 index 000000000..008dceaf2 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-modelflatten.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-rollershutters.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-rollershutters.png new file mode 100644 index 000000000..0f35b87e1 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-rollershutters.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-sceneprojection.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-sceneprojection.png new file mode 100644 index 000000000..40b8d1454 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-sceneprojection.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-skyline.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-skyline.png new file mode 100644 index 000000000..499619f12 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-skyline.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-slopeAnalysis-normal.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-slopeAnalysis-normal.png new file mode 100644 index 000000000..14ef37693 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-slopeAnalysis-normal.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-slopeAnalysis.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-slopeAnalysis.png new file mode 100644 index 000000000..21078934c Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-slopeAnalysis.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-visibility.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-visibility.png new file mode 100644 index 000000000..7f52192cb Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-visibility.png differ diff --git a/website/public/static/demo/cesium-new/gallery/analysis/analysis-visiblerange.png b/website/public/static/demo/cesium-new/gallery/analysis/analysis-visiblerange.png new file mode 100644 index 000000000..6b61647ce Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/analysis/analysis-visiblerange.png differ diff --git a/website/public/static/demo/cesium-new/gallery/terrian/mapgis-terrian-common.png b/website/public/static/demo/cesium-new/gallery/terrian/mapgis-terrian-common.png new file mode 100644 index 000000000..569e2aba6 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/terrian/mapgis-terrian-common.png differ diff --git a/website/public/static/demo/cesium-new/gallery/terrian/mapgis-terrian-normal.png b/website/public/static/demo/cesium-new/gallery/terrian/mapgis-terrian-normal.png new file mode 100644 index 000000000..97f74b492 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/terrian/mapgis-terrian-normal.png differ diff --git a/website/public/static/demo/cesium-new/gallery/view/theme-layer.png b/website/public/static/demo/cesium-new/gallery/view/theme-layer.png new file mode 100644 index 000000000..4175d6a34 Binary files /dev/null and b/website/public/static/demo/cesium-new/gallery/view/theme-layer.png differ diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-animation.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-animation.md new file mode 100644 index 000000000..857c86b58 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-animation.md @@ -0,0 +1,197 @@ +## 动画漫游 + +### 常见问题 +1. 轨迹出来了,模型不移动 + ![speed](../../static/demo/cesium/markdown/analysis/bug/speed.png) +2. 轨迹出来了,模型看不见 + 1. 模型太大,还在网络传输中 + ![speed](../../static/demo/cesium/markdown/analysis/bug/delay.png) + 2. 缺失模型,网络报错 + ![speed](../../static/demo/cesium/markdown/analysis/bug/nofind.png) +3. 模型下载地址 + 1. [MapGIS默认模型](/#/total/download) + 2. https://sketchfab.com/3d-models?date=week&features=downloadable&sort_by=-likeCount + 3. https://free3d.com/zh/ + +### 示例功能 + +    此功能用于在三维场景中实现动画漫游功能,即让模型沿着路径漫游,默认为第一人称漫游,可修改动画漫游方式。本示例实现让飞机模型按既定的路径漫游。在实际应用中,可结合具体应用场景开发,如绘制路径进行动画漫游等功能需求等。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager` 对象,调用高级分析功能管理类的 `createAnimation()` 方法创建动画漫游对象实例实现动画漫游功能。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载底图数据**: +    初始化第三方图层类`CesiumZondy.Layer.ThirdPartyLayer`对象,调用 `appendGoogleMapExt()` 方法加载谷歌地图数据作为底图; + +* Example: + ``` Javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer + }); + //加载天地图 + var tdtLayer = thirdPartyLayer.appendTDTuMap({ + //天地图经纬度数据 + url: 'http://t0.tianditu.com/DataServer?T=vec_c&X={x}&Y={y}&L={l}', + //开发token (请到天地图官网申请自己的开发token,自带token仅做功能验证随时可能失效) + token: "9c157e9585486c02edf817d2ecbc7752", + //地图类型 'vec'矢量 'img'影像 'ter'地形 + ptype: "img" + }); + ``` + +**Step 4. 显示常用控件,并实现跳转定位**: +    调用`showPosition()`、`createNavigationTool()`方法显示常用控件,调用 `flyToEx()` 方法定位到指定点; + +* Example: + ``` Javascript + //视点跳转(经度,纬度,视角高度,方位角,俯仰角,翻滚角) + webGlobe.flyToEx(117.213063, 31.812956, { + height: 200, + heading: 90, + pitch: 0, + roll: 0 + }); + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location'); + //显示导航控件(罗盘、比例尺、场景导航) + webGlobe.createNavigationTool({ + enableCompass: true, + enableZoomControls: true, + enableDistanceLegend: true + }); + ``` + +**Step 5. 创建动画漫游对象**: +    初始化高级分析功能管理类对象`CesiumZondy.Manager.AdvancedAnalysisManager`,调用`createAnimation()`方法创建动画漫游对象; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //创建动画漫游对象 + animation = advancedAnalysisManager.createAnimation({ + exHeight: 9, + isLoop: false, + //漫游模型url + modelUrl: './static/data/model/WuRenJi.glb', + //完成动画漫游回调函数 + complete: function () { + alert('完毕'); + } + }); + ``` + +**Step 6. 实现动画漫游控制**: +    通过动画漫游对象的属性和方法实现动画漫游控制,即通过属性设置漫游路径、漫游方式、速度、俯仰角、方位角等参数,分别通过调用方法`start()`、`stop()`开始和结束漫游。 + +* Example: + ``` Javascript + //漫游路径 + positions = Cesium.Cartesian3.fromDegreesArray([ + 117.213063, 31.812956, 117.213162, 31.812389, 117.212929, 31.812056, 117.213275, 31.811582, + 117.21348, 31.811513, 117.214141, 31.811682, 117.21497, 31.811691, 117.216318, 31.811454, + 117.216962, 31.812037, 117.217893, 31.812298, 117.218607, 31.811488, 117.219466, 31.810935, + 117.224439, 31.810929, 117.225266, 31.811119, 117.225308, 31.81131, 117.224819, 31.811724, + 117.225189, 31.811928, 117.225676, 31.811624, 117.225843, 31.811943, 117.22625, 31.812183, + 117.226292, 31.81281, 117.225888, 31.813287, 117.226093, 31.814059, 117.22564, 31.814582, + 117.225953, 31.814731, 117.225611, 31.814954, 117.22576, 31.815233, 117.224073, 31.816329, + 117.223694, 31.81627, 117.222769, 31.817007, 117.222259, 31.816871, 117.221922, 31.816707, + 117.221653, 31.816788, 117.22151, 31.817002, 117.221039, 31.816891, 117.220395, 31.816352, + 117.220166, 31.815734, 117.219804, 31.815607, 117.219461, 31.815122, 117.21878, 31.814846, + 117.218297, 31.815275, 117.217975, 31.815172, 117.217142, 31.815229, 117.216753, 31.815124, + 117.216652, 31.814308, 117.215726, 31.814049, 117.214769, 31.813517, 117.214111, 31.813717, + 117.213552, 31.814099, 117.213024, 31.813954, 117.212897, 31.813892, 117.213224, 31.813681, + 117.212788, 31.813147, 117.212928, 31.813018, 117.213063, 31.812956 + ]); + //设置路径 + animation.positions = positions; + //漫游方式:1-跟随、2-锁定第一视角、3-上帝视角 + animation.animationType = 2; + //漫游速度 + animation.speed = 1; + ``` + +* Example: + ``` Javascript + function start() { + //开始漫游 + animation.start(); + } + function pause() { + //暂停漫游 + animation.pause = true; + } + function stop() { + //停止漫游 + animation.stop(); + } + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【场景视图管理类】 `CesiumZondy.Manager.SceneManager` + +##### 【method】 `showPosition()`: 鼠标坐标位置控件 + +##### 【method】 `createNavigationTool()`: 常用导航控件 + +##### 【method】 `flyToEx()`: 视点跳转 + + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createAnimation(optionsParam) → {Object}` :创建动画漫游对象, 返回动画漫游实例Animation(Object) + +|参数名|类型|说明| +|-|-|-| +|optionsParam|Object|动画漫游参数| + +* `optionsParam` 主要参数 + +|参数名|类型|说 明| +|-|-|-| +|exHeight|Number|(可选)附加高程| +|isLoop|Boolean|(可选)是否循环| +|modelUrl|Object|模型url| +|callback|function|(可选)完成动漫漫游后的回调函数| + +##### 【返回值】 `Animation`的属性与方法 + +|属性名|类型|说 明| +|-|-|-| +|positions|Array|漫游路径,Cesium.Cartesian3.fromDegreesArray的经纬度值数组| +|animationType|Number|漫游方式:1-跟随、2-锁定第一视角、3-上帝视角| +|speed|Number|漫游速度| + + +|方法名|说 明| +|-|-| +|start|开始漫游| +|stop|结束漫游| diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-aspectAnalysis.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-aspectAnalysis.md new file mode 100644 index 000000000..0e3526f53 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-aspectAnalysis.md @@ -0,0 +1,99 @@ +## 坡向分析 + +### 示例功能 + +    此功能用于地形数据的坡向分析。 坡向是指地表面上一点的切平面的法线在水平面的投影与该点的正北方向的夹角,描述该点高程值改变量的最大变化方向。坡向分析作用是:决定地表面局部地面接收阳光和重新分配太阳辐射量的重要地形因子,直接造成局部地区气候特征差异,影响各项农业生产指标。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法加载地形数据后,跳转视点,创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createAspectAnalysis()` 方法进行坡向分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法传入三维地形数据地图服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造地形图层管理类 + var terrain = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer + }); + //加载三维地形地图文档(服务地址,配置参数) + var { protocol, ip, port } = window.webclient; + var terrainlayer = terrain.append(`http://develop.smaryun.com:6163/igs/rest/g3d/terrain`, {}); + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +**Step 4. 坡向分析**: +    创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createAspectAnalysis()` 方法进行坡向分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //进行坡向分析 + var aspectAna = advancedAnalysisManager.createAspectAnalysis([ + Cesium.Color.ALICEBLUE, + Cesium.Color.ANTIQUEWHITE, + Cesium.Color.AQUA, + Cesium.Color.AQUAMARINE, + Cesium.Color.AZURE, + Cesium.Color.BEIGE + ]); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【地形图层管理类】`CesiumZondy.Layer.TerrainLayer` + +##### 【method】 `append(url, options)` :添加地形地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------- | ------------ | -------- | ------------------ | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| 代理 | DefaultProxy | 暂无 | 暂无 | + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createAspectAnalysis(color) → {Object}`: 坡向分析,返回坡向分析实例 + +| 参数名 | 类型 | 说 明 | +| ------ | ------------- | ------------------------- | +| color | Array. | 坡向分层颜色信息,分 6 层 | diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-cube.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-cube.md new file mode 100644 index 000000000..e0ba1de39 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-cube.md @@ -0,0 +1,142 @@ +## 填挖方计算 + +### 示例功能 + +    此功能提供用于计算将一定范围内的地形填平到某一高度时,需要挖开或填充的空间体积,可以应用于智慧城市,地质,公安等多个领域的业务功能,实用性强。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer()` 的 `append()` 方法加载地形数据后,初始化 `Cesium.DrawElement()` 对象在三维场景中添加交互式绘制区控件用来界定量算区域,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createCutFill()` 方法创建填挖方分析对象, 调用高级分析功能管理类的 `startCutFill()` 方法执行填挖方分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer()` 的 `append()` 方法加载地形数据,完成此步后可在三维场景中加载三维球控件并加载数据; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + //添加Google地图 + webGlobe.appendGoogleMapExt({ + ptype: 's@130' + }); + //构造地形图层管理类 + var terrain = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer + }); + //加载三维地形地图文档(服务地址,配置参数) + terrainlayer = terrain.append("http://develop.smaryun.com:6163/igs/rest/g3d/terrain", {}); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 创建交互式绘制工具**: +    初始化 `Cesium.DrawElement()` 对象,完成交互式绘制工具的创建; + +* Example: + ``` Javascript + //创建交互式绘制工具 + var drawElement = new Cesium.DrawElement(webGlobe.viewer); + ``` + +**Step 4. 激活交互式绘制区工具**: +    调用 `Cesium.DrawElement()` 对象的startDrawingPolygon()方法,激活交互式绘制区工具,完成此步后,可在三维场景中通过鼠标左键点击绘制多边形; + +* Example: + ``` Javascript + //激活交互式绘制区工具 + drawElement.startDrawingPolygon(); + ``` + +**Step 5. 创建填挖方分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createCutFill()` 方法创建填挖方分析对象; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //创建填挖方实例 + cutFill = advancedAnalysisManager.createCutFill(0.0, { + //设置x方向采样点个数 + xPaneNum: document.getElementById("x").value <= 0 ? 16 : document.getElementById("x").value, + //设置y方向采样点个数参数 + yPaneNum: document.getElementById("y").value <= 0 ? 16 : document.getElementById("y").value, + //设置填挖规整高度 + Height: document.getElementById("z").value <= 0 ? 16 : document.getElementById("z").value, + //返回结果的回调函数 + callback: function(result) { + document.getElementById("height").value = result.minHeight.toFixed(2) + '~' + result.maxHeight.toFixed(2); + document.getElementById("surfaceArea").value = result.surfaceArea; + document.getElementById("cutVolume").value = result.cutVolume; + document.getElementById("fillVolume").value = result.fillVolume; + } + }); + ``` + +**Step 6. 执行填挖方分析**: +    调用高级分析功能管理类的 `startCutFill()` 方法执行填挖方分析。 + +* Example: + ``` Javascript + //开始执行填挖方分析 + advancedAnalysisManager.startCutFill(cutFill, positions); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【地形图层管理类】`CesiumZondy.Layer.TerrainLayer` + +##### 【method】 `append(url, options)` :添加地形地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|代理|DefaultProxy|暂无|暂无| + +#### 2.【交互式绘制类】`Cesium. DrawElement` + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createCutFill(dataType, options)` :创建填挖方实例 + +|参数名|类型|说明| +|-|-|-| +|dataType|Number|针对地形进行填挖方分析| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|说明| +|-|-|-|-| +|xPaneNum|Number|x方向采样点个数| +|yPaneNum|Number|y方向采样点个数| +|Height|Number|设定的填挖规整高度| +|callback|function|返回结果的回调函数| + +##### 【method】 `startCutFill(cutFill, positions)` :开始执行填挖方分析 + +|参数名|类型|说明| +|-|-|-| +|cutFill|object|填挖方实例| +|positions|Array|填挖区域多边形的顶点数组| diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-dynamiccut.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-dynamiccut.md new file mode 100644 index 000000000..bd58ed0a2 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-dynamiccut.md @@ -0,0 +1,144 @@ +## 动态剖切 + +### 示例功能 + +    此功能对已加载的M3D数据进行任意距离的剖切,动态的显示或隐藏一部分数据。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例,通过设置剖切面距离进行数据剖切分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + var drilllayer = m3dLayer.append( + "http://develop.smaryun.com:6163/igs/rest/g3d/钻孔_2_钻孔模型s", { + autoReset: false, + } + ); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {}); + ``` + +**Step 4. 跳转定位**: +    调用视图功能管理类 CesiumZondy. Manager. SceneManager() ` 的 ` flyToEx()` 方法跳转到数据显示的范围; + +* Example: + ``` Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //视点跳转 + sceneManager.flyToEx(112.94845170512113, 30.004246325952618, { + height: 2600, + heading: 67, + pitch: -30, + roll: 0 + }); + ``` + +**Step 5. 创建切面**: +    初始化切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //进行剖切分析的面,从上往下切,Cesium.Cartesian3中第一个参数是左右,第二个参数是前后,第三个参数是上下 + var plane = new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, -1.0), -500.0) + ``` + +**Step 6. 获取剖切切面**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建剖切对象实例 + dynaCut = analysisManager.createDynamicCutting(landscapeLayer, [plane], { + color: new Cesium.Color(0.0, 1.0, 1.0, 0.3) + }); + ``` + +**Step 7. 设置剖切面距离**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + //设置切面回调函数 + dynaCut.planes[0].plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane.distance = distance; + return Cesium.Plane.transform(plane, landscapeLayer[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3. 【裁剪平面类】 `Cesium.ClippingPlane` + +|参数名|类型|说 明| +|-|-|-| +|normal|Cartesian3|法线| +|distance|Number|最短距离| + +#### 4.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createDynamicCutting(tileSets, planes, options)`:创建动态剖切实例 + +|参数名|类型|说明| +|-|-|-| +|tileSets|Object|图层集| +|planes|Object|平面集| +|options|Object|暂无| diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-excavate.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-excavate.md new file mode 100644 index 000000000..f83b056b4 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-excavate.md @@ -0,0 +1,163 @@ +## 开挖深度 + +### 示例功能 + +    此功能对已加载的M3D数据进行任意距离深度开挖,动态的显示或隐藏一部分数据。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` , 初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建 `Cesium.ClippingPlane()` 切面对象,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建开挖分析对象通过设置剖切面距离进行数据开挖分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + var drilllayer = m3dLayer.append( + "http://develop.smaryun.com:6163/igs/rest/g3d/钻孔_2_钻孔模型s", { + autoReset: false, + } + ); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {}); + ``` + +**Step 4. 创建切面**: +    初始化切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //开挖面设置,这五个面分别表示前后左右,底面,其中底面用于控制开挖深度 + var clippingPlanes = [ + new Cesium.ClippingPlane(new Cesium.Cartesian3(3, 0.0, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(-3, 0.0, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 3, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, -3, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, -5), 0.0) + ] + ``` + +**Step 5. 创建开挖分析**: +    化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建 `Cesium.ClippingPlane()` 切面对象,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建开挖分析对象, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建开挖分析实例 + dynaCut = analysisManager.createExcavateAnalysis({ + //图层信息 + tileSet: landscapeLayer[0], + //开挖面的形状 + planes: planes, + //裁剪面材质 + material: new Cesium.Color(0.2, 0.4, 0.3, 0.7), + //边界线颜色 + edgeColor: new Cesium.Color(0.2, 0.4, 0.3, 0.7), + //边界线宽度 + edgeWidth: 3, + //裁减法线方向,默认值为 false + unionClippingRegions: false, + //开挖坐标 + longitude: 113.0402, + latitude: 30.0264, + height: 0 + }); + ``` + +**Step 6. 设置剖切面距离**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + dynaCut.planes[0].plane.plane = new Cesium.CallbackProperty(function(date) { + console.log(planes); + for (var i = 0; i < planes.length; i++) { + if (i === planes.length - 1) { + var plane = planes[i]; + plane.distance = distance; + Cesium.Plane.transform(plane, landscapeLayer[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + } + } + }, false); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3.【裁剪平面类】 `Cesium.ClippingPlane(normal, distance)` + +|参数名|类型|说 明| +|-|-|-| +|normal|Cartesian3|法线| +|distance|Number|最短距离| + +#### 4.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createExcavateAnalysis(option)`:创建开挖实例 + +|参数名|类型|说明| +|-|-|-| +|option|Object|参数设置| + +* `options` 主要参数 + +|参数名|类型|说明| +|---|---|---| +|tileSet|Object|图层信息| +|planes|Object|开挖面的形状| +|material|Object|裁剪面材质| +|edgeColor|Object|边界线颜色| +|edgeWidth|Object|边界线宽度| +|unionClippingRegions|Object|裁减法线方向,默认值为 false| +|longitude|Object|开挖面定位点经度| +|latitude|Object|开挖面定位点纬度| +|height|Object|开挖面定位点高度| \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-explosion.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-explosion.md new file mode 100644 index 000000000..c829097b2 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-explosion.md @@ -0,0 +1,92 @@ +## 爆炸分析 + +### 示例功能 + +    此功能用于将M3D数据爆炸分析,将数据朝指定炸开。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createExplosion()` 方法爆炸模型。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 爆炸模型**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createExplosion()` 方法爆炸模型。 + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + analysisManager.createExplosion(option); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createExplosion(options)` :创建模型爆炸动画实例 + +* `options` 主要参数 + +|参数名|类型|说明| +|---|---|---| +|children|Array|当前图层子节点| +|center|Cartesian3|爆炸中心| +|direction|Cartesian3|图层整体爆炸方向| +|distance|Number|沿当前方向移动距离| \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-floor.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-floor.md new file mode 100644 index 000000000..37dbb7a76 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-floor.md @@ -0,0 +1,175 @@ +## 洪水淹没分析 + +### 示例功能 + +    此功能用于在三维场景中添加洪水淹没的效果。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` , 初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,添加交互式绘制工具 `Cesium.DrawPolygonTool()` 选择绘制区域, 初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createFlood()` 方法创建洪水淹没分析示例,将结果显示到三维球控件上。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + geobodyLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建交互式绘制区工具**: +    初始化 `Cesium.DrawPolygonTool()` 对象,完成交互式绘制区工具的创建; + +* Example: + ``` Javascript + //创建交互式绘制区工具 + var drawPolygon = new Cesium.DrawPolygonTool(webGlobe.viewer, getDrawResult); + ``` + +**Step 5. 激活交互式绘制区工具**: +    调用 `Cesium.DrawPolygonTool()` 对象的activeTool()方法,激活交互式绘制区工具,完成此步后,可在三维场景中通过鼠标左键点击绘制多边形。 + +* Example: + ``` Javascript + //激活交互式绘制区工具 + drawPolygon.activeTool(); + ``` + +**Step 6. 统一高度**: +    将交互式选取的点的高度统一; + +* Example: + ``` Javascript + var array = new Array(); + for (let i = 0; i < e.points.length; i++) { + let point = e.points[i]; + let resPoint = new Cesium.Cartesian3; + let invserTran = new Cesium.Matrix4; + Cesium.Matrix4.inverse(tileset[0].root.transform, invserTran); + Cesium.Matrix4.multiplyByPoint(invserTran, point, resPoint); + array.push(new Cesium.Cartesian3(resPoint.x, resPoint.y, resPoint.z)); + } + var hight = null; + for (var arraylength = 0; arraylength < array.length; arraylength++) { + hight = hight < array[arraylength].z ? array[arraylength].z : hight; + } + var newArray = new Array(); + for (var arraylength = 0; arraylength < array.length; arraylength++) { + array[arraylength].z = hight; + let point = array[arraylength]; + let resPoint = new Cesium.Cartesian3; + let invserTran = new Cesium.Matrix4; + Cesium.Matrix4.multiplyByPoint(tileset[0].root.transform, point, resPoint); + newArray.push(new Cesium.Cartesian3(resPoint.x, resPoint.y, resPoint.z)); + } + ``` + +**Step 7. 创建洪水淹没分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createFlood()` 方法创建洪水淹没分析示例; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //初始化洪水淹没分析类 + flood = advancedAnalysisManager.createFlood(); + //设置洪水淹没分析区域点集 + flood.dotsList = newArray; + //设置洪水淹没区域最底高度 + flood.minHeight = Number(document.getElementById('minHeight').value <= 0 ? 0 : document.getElementById('minHeight').value); + //设置洪水淹没区域最高高度 + flood.maxHeight = Number(document.getElementById('maxHeight').value <= 0 ? 30 : document.getElementById('maxHeight').value); + //设置洪水上涨速度 + flood.floodSpeed = Number(document.getElementById('floodSpeed').value <= 0 ? 1 : document.getElementById('floodSpeed').value); + //水纹频率 指波浪的个数 + flood.frequency = Number(document.getElementById('frequency').value <= 0 ? 1000 : document.getElementById('frequency').value); + //水纹速度 + flood.animationSpeed = Number(document.getElementById('animationSpeed').value <= 0 ? 0.01 : document.getElementById('animationSpeed').value); + //水波的高度 + flood.amplitude = Number(document.getElementById('amplitude').value <= 0 ? 10 : document.getElementById('amplitude').value); + //指定水面颜色 和 透明度 + flood.floodColor = new Cesium.Color(0.2, 0.5, 0.4, 0.7); + // 指定光线强度 + flood.specularIntensity = 3.0; + ``` + +**Step 8. 洪水淹没结果显示**: +    将结果显示到三维球控件上。 + +* Example: + ``` Javascript + //添加洪水淹没结果显示 + webGlobe.scene.VisualAnalysisManager.add(flood); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3. 【交互式绘制区工具类】 `Cesium.DrawPolygonTool` + +|参数名|类型|说 明| +|-|-|-| +|viewer|View|视图| +|getDrawResult|function|回调函数| + +##### 【method】 `activeTool()` :激活交互式绘制区工具方法 + +#### 4.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createFlood(options)`: 创建填挖方实例 + +* `options` 主要参数 + +|参数名|类型|说 明| +|-|-|-| +|minHeight|Number|最低洪水水位高度| +|maxHeight|Number|最高洪水水位高度| +|floodSpeed|Number|洪水上涨速度| diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-modelflatten.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-modelflatten.md new file mode 100644 index 000000000..9d5ac0cb2 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-modelflatten.md @@ -0,0 +1,161 @@ +## 模型压平 + +### 示例功能 + +    此功能用于将加载完成的M3D数据进行压平处理。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` , 初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,添加交互式绘制工具 `Cesium.DrawPolygonTool()` 选择绘制区域, 初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createModelFlatten()` 方法,创建模型压平分析,将结果显示到三维球控件上。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建交互式绘制区工具**: +    初始化 `Cesium.DrawPolygonTool()` 对象,完成交互式绘制区工具的创建; + +* Example: + ``` Javascript + //创建交互式绘制区工具 + var drawPolygon = new Cesium.DrawPolygonTool(webGlobe.viewer, getDrawResult); + ``` + +**Step 5. 激活交互式绘制区工具**: +    调用 `Cesium.DrawPolygonTool()` 对象的activeTool()方法,激活交互式绘制区工具,完成此步后,可在三维场景中通过鼠标左键点击绘制多边形。 + +* Example: + ``` Javascript + //激活交互式绘制区工具 + drawPolygon.activeTool(); + ``` + +**Step 6. 顶点处理**: +    将交互式选取的点处理; + +* Example: + ``` Javascript + /*对绘制区域的顶点循环处理一下,以便用于模型压平参数的赋值*/ + var array = []; + for (let i = 0; i < positionsArray.length; i++) { + let point = positionsArray[i]; + let resPoint = new Cesium.Cartesian3; + let invserTran = new Cesium.Matrix4; + Cesium.Matrix4.inverse(tileset[0]._root.transform, invserTran); + Cesium.Matrix4.multiplyByPoint(invserTran, point, resPoint); + resPoint.y = -resPoint.y; + array.push(new Cesium.Cartesian2(resPoint.x, resPoint.y)); + } + array.push(array[0]); + ``` + +**Step 7. 创建模型压平分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createModelFlatten()` 方法,创建模型压平分析 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + advancedAnalysisManager.createModelFlatten(landscapeLayer[0], { + //是否进行压平。值为true时执行压平 + isFlatten: true, + //将高度压到0 + height: 0, + //压平多边形的顶点序列长度 + arrayLength: positionsArray.length, + //顶点序列。顶点序列需要闭合,也就是说,例如一个矩形是四个顶点ABCD,那序列就应该是【ABCDA】 + array: array + }); + ``` + +**Step 8. 结果显示**: +    将结果显示到三维球控件上。 + +* Example: + ``` Javascript + //场景渲染(渲染最新的压平效果) + webGlobe.viewer.scene.requestRender(); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)`:添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3. 【交互式绘制区工具类】 `Cesium.DrawPolygonTool` + +|参数名|类型|说 明| +|-|-|-| +|viewer|View|视图| +|getDrawResult|function|回调函数| + +##### 【method】 `activeTool()` :激活交互式绘制区工具方法 + +#### 4.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createModelFlatten(tileset, options)` :创建模型压平分析实例 + +|参数名|类型|说 明| +|-|-|-| +|tileset|object|图层信息| +|options|object|参数设置| + +* `options` 主要参数 + +|参数名|类型|说 明| +|-|-|-| +|isFlatten|Boolean|是否执行模型压平| +|height|Number|压平到指定高度| +|arrayLength|Number|压平区域顶点数组长度| +|array|Array|压平区域顶点数组| \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-rollershutters.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-rollershutters.md new file mode 100644 index 000000000..aa9506ede --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-rollershutters.md @@ -0,0 +1,153 @@ +## 卷帘分析 + +### 示例功能 + +    此功能对已加载的两个M3D数据进行任意距离的剖切,动态的显示或隐藏一部分数据,一个显示的同时不显示另一个数据,打到卷帘效果。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建两个M3D数据的切面对象通过设置剖切面距离进行数据剖切分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + * Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + var drilllayer = m3dLayer.append( + "http://develop.smaryun.com:6163/igs/rest/g3d/钻孔_2_钻孔模型s", { + autoReset: false, + } + ); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {}); + ``` + +**Step 4. 地图跳转**: +    调用视图功能管理类 CesiumZondy. Manager. SceneManager() ` 的 ` flyToEx()` 方法跳转到数据显示的范围; + +* Example: + ``` Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //视点跳转 + sceneManager.flyToEx(112.94845170512113, 30.004246325952618, { + height: 2600, + heading: 67, + pitch: -30, + roll: 0 + }); + ``` + +**Step 5. 创建切面对象**: +    创建切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //进行剖切分析的面,向右切 + var plane = new Cesium.ClippingPlane(new Cesium.Cartesian3(1, 0, 0), -200.0) + //进行剖切分析的面,向左切 + var plane1 = new Cesium.ClippingPlane(new Cesium.Cartesian3(-1, 0, 0), -200.0) + ``` + +**Step 6. 创建剖切对象**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建剖切对象实例 + dynaCut = analysisManager.createDynamicCutting(landscapeLayer, [plane], { + color: new Cesium.Color(0.0, 1.0, 1.0, 0.3) + }); + ``` + +**Step 7. 通过切面回调完成动态剖切分析**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + //设置切面回调函数 + planetEntity.plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane.distance = distance; + return Cesium.Plane.transform(plane, tileset[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + //设置切面回调函数 + planetEntity1.plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane1.distance = distance1; + return Cesium.Plane.transform(plane1, tileset[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)`:添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3. 【裁剪平面类】 `Cesium.ClippingPlane` + +|参数名|类型|说 明| +|-|-|-| +|normal|Cartesian3|法线| +|distance|Number|最短距离| + +#### 4.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createDynamicCutting(tileSets, planes, options)` :创建动态剖切实例 + +|参数名|类型|说明| +|-|-|-| +|tileSets|Object|图层集| +|planes|Object|平面集| +|options|Object|暂无| + diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-sceneprojection.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-sceneprojection.md new file mode 100644 index 000000000..d78897174 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-sceneprojection.md @@ -0,0 +1,125 @@ +## 场景投放 + +### 示例功能 + +    此功能用于在三维场景中加载色块、图片、视屏等功能。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,通过Cesium三维球控件 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法在三维场景里面自定义注册鼠标事件完成场景投放点的拾取,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSceneProjector` 方法创建场景投放示例,实现场景投影分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建场景投影对象**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSceneProjector` 方法创建场景投放示例; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //初始化场景投影对象 + scenePro = advancedAnalysisManager.createSceneProjector(2); + ``` + +**Step 5. 注册鼠标事件**: +    调用Cesium三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +* Example: + ``` Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + ``` + +**Step 6. 设置场景投影参数**: +    给场景投影对象设置进行场景投影使用的必要参数。 + +* Example: + ``` Javascript + //设置投影观察点 + scenePro.viewPosition = cartesian; + //数据url路径 + scenePro.textureSource = './static/data/picture/world.jpg'; + //设置场景投影结果点 + scenePro.targetPosition = cartesian; + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +##### 【method】 `registerMouseEvent(eventType, callbackFun, handler)`:注册鼠标事件方法 + +|参数名|类型|说明| +|-|-|-| +|eventType|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|callbackFun|function|回调函数| +|handler|Object|回调函数| + +##### 【method】 `unRegisterMouseEvent(eventType)`:注销鼠标事件方法 + +|参数名|类型|说明| +|-|-|-| +|eventType|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)`:添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createSceneProjector(type) `:创建场景投放实例 + +|参数名|类型|说明| +|-|-|-| +|type|Number|场景投放的类型| diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-skyline.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-skyline.md new file mode 100644 index 000000000..37554c534 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-skyline.md @@ -0,0 +1,85 @@ +## 天际线 + +### 示例功能 + +    此功能用于检测当前视角的天际线,并绘制在三维场景中。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载 M3D 数据后,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSkyLine()` 方法创建天际线分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建天际线分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSkyLine()` 方法创建天际线分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //创建天际线实例 + skyLineAn = advancedAnalysisManager.createSkyLine() + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D 模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加 M3D 地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------------------- | ------------ | ------------ | -------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | 代理 | +| showBoundingVolume | Boolean | false | 是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | 用于控制模型显示细节 | + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createSkyLine()` :创建天际线实例 diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-slopeAnalysis.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-slopeAnalysis.md new file mode 100644 index 000000000..3af23ea97 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-slopeAnalysis.md @@ -0,0 +1,99 @@ +## 坡度分析 + +### 示例功能 + +    此功能用于地形数据的坡度分析。 坡度是指过地表一点的切平面与水平面的夹角,描述地表面在该点的倾斜程度。坡度分析的作用是:影响地表物质流动与能量转换的规模与强度,制约生产力空间布局。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法加载地形数据后,跳转视点,创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createSlopeAnalysis()` 方法进行坡度分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法传入三维地形数据地图服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造地形图层管理类 + var terrain = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer + }); + //加载三维地形地图文档(服务地址,配置参数) + var { protocol, ip, port } = window.webclient; + var terrainlayer = terrain.append(`http://develop.smaryun.com:6163/igs/rest/g3d/terrain`, {}); + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +**Step 4. 坡度分析**: +    创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createSlopeAnalysis()` 方法进行坡度分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //进行坡度分析 + var slopeAna = advancedAnalysisManager.createSlopeAnalysis([ + Cesium.Color.ALICEBLUE, + Cesium.Color.ANTIQUEWHITE, + Cesium.Color.AQUA, + Cesium.Color.AQUAMARINE, + Cesium.Color.AZURE, + Cesium.Color.BEIGE + ]); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【地形图层管理类】`CesiumZondy.Layer.TerrainLayer` + +##### 【method】 `append(url, options)` :添加地形地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------- | ------------ | -------- | ------------------ | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| 代理 | DefaultProxy | 暂无 | 暂无 | + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createSlopeAnalysis(color) → {Object}`: 坡度分析,返回坡度分析实例 + +| 参数名 | 类型 | 说 明 | +| ------ | ------------- | ------------------------- | +| color | Array. | 坡度分层颜色信息,分 6 层 | diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-visibility.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-visibility.md new file mode 100644 index 000000000..45cdf8ce3 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-visibility.md @@ -0,0 +1,116 @@ +## 通视分析 + +### 示例功能 + +    此功能用于检测当前三维场景中两点之间是否可以没有阻碍的看到。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `append()` 加载 M3D 数据后,通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法在三维场景里面自定义注册鼠标事件完成通视分析两个点的拾取,通过两点通视分析对象 `Cesium.VisiblityAnalysis()`实现两点通视分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //加载数据 + var tileset = webGlobe.append('http://develop.smaryun.com:6163/igs/rest/g3d/M3D', {}); + ``` + +**Step 4. 创建通视分析**: +    初始化两点通视分析对象 `Cesium.VisiblityAnalysis()` ; + +- Example: + ```Javascript + //初始化通视分析类 + visiblity = new Cesium.VisiblityAnalysis(); + ``` + +**Step 5. 添加通视分析**: +    将两点通视分析对象 `Cesium.VisiblityAnalysis()` 添加到 Cesium 三维球控件中; + +- Example: + ```Javascript + //添加通视分析显示 + viewer.scene.VisualAnalysisManager.add(visiblity); + ``` + +**Step 6. 注册鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +- Example: + ```Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('MOUSE_MOVE', function(e) {}); + ``` + +**Step 7. 设置两点通视分析参数**: +    给两点通视分析对象设置进行两点通视分析使用的必要参数。 + +- Example: + ```Javascript + //设置通视分析观察点 + visiblity.viewPosition = cartesian; + //设置通视分析结果点 + visiblity.targetPosition = cartesian; + ``` + +### 关键接口 + +#### 1. 【三维视图的主要类】`Cesium.WebSceneControl(elementId, options)` + +##### 【method】 `append(url, options, 代理)` :添加地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | +| 代理 | DefaultProxy | 暂无 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------- | -------- | -------- | ------------------ | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | + +##### 【method】 `registerMouseEvent(eventType, callbackFun, handler)` :注册鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| ----------- | -------- | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| callbackFun | function | 回调函数 | +| handler | Object | 回调函数 | + +##### 【method】 `unRegisterMouseEvent(eventType)` :注销鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| --------- | ------ | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | + +#### 2.【两点通视分析主要类】 `Cesium.VisiblityAnalysis()` diff --git a/website/public/static/demo/cesium-new/markdown/analysis/analysis-visiblerange.md b/website/public/static/demo/cesium-new/markdown/analysis/analysis-visiblerange.md new file mode 100644 index 000000000..d676b7f70 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/analysis/analysis-visiblerange.md @@ -0,0 +1,130 @@ +## 可视分析 + +### 示例功能 + +    此功能用于检测当前三维场景中某个点朝一个方向看的时候可以看到的区域。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载 M3D 数据后,通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法在三维场景里面自定义注册鼠标事件完成可视域分析点的拾取,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createViewshedAnalysis()` 方法实现可视域分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建可视域分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createViewshedAnalysis()` 方法实现可视域分析; + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //创建可视化分析对象 + viewshed3d = advancedAnalysisManager.createViewshedAnalysis(); + ``` + +**Step 5. 注册鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +- Example: + ```Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('MOUSE_MOVE', function(e) {}); + ``` + +**Step 6. 设置可视域分析参数**: +    给可视域分析对象设置进行可视域分析使用的必要参数; + +- Example: + ```Javascript + //设置观察点坐标 + viewshed3d.viewPosition = cartesian; + //设置可视域结果点 + viewshed3d.targetPosition = cartesian; + ``` + +**Step 7. 添加可视域分析**: +    将可视域分析对象 `Cesium.ViewshedAnalysis()` 添加到 Cesium 三维球控件中。 + +- Example: + ```Javascript + //添加可视域分析结果显示 + viewer.scene.VisualAnalysisManager.add(viewshed3d); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +##### 【method】 `registerMouseEvent(eventType, callbackFun, handler)` :注册鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| ----------- | -------- | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| callbackFun | function | 回调函数 | +| handler | Object | 回调函数 | + +##### 【method】 `unRegisterMouseEvent(eventType)` :注销鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| --------- | ------ | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | + +#### 2.【M3D 模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加 M3D 地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------------------- | ------------ | ------------ | -------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | 代理 | +| showBoundingVolume | Boolean | false | 是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | 用于控制模型显示细节 | + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createViewshedAnalysis()` :创建可视域实例 diff --git a/website/public/static/demo/cesium-new/markdown/analysis/bug/delay.png b/website/public/static/demo/cesium-new/markdown/analysis/bug/delay.png new file mode 100644 index 000000000..0b4d67f77 Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/analysis/bug/delay.png differ diff --git a/website/public/static/demo/cesium-new/markdown/analysis/bug/gltf.png b/website/public/static/demo/cesium-new/markdown/analysis/bug/gltf.png new file mode 100644 index 000000000..82a28ada8 Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/analysis/bug/gltf.png differ diff --git a/website/public/static/demo/cesium-new/markdown/analysis/bug/nofind.png b/website/public/static/demo/cesium-new/markdown/analysis/bug/nofind.png new file mode 100644 index 000000000..a18c61ff6 Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/analysis/bug/nofind.png differ diff --git a/website/public/static/demo/cesium-new/markdown/analysis/bug/preview.png b/website/public/static/demo/cesium-new/markdown/analysis/bug/preview.png new file mode 100644 index 000000000..295afde38 Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/analysis/bug/preview.png differ diff --git a/website/public/static/demo/cesium-new/markdown/analysis/bug/speed.png b/website/public/static/demo/cesium-new/markdown/analysis/bug/speed.png new file mode 100644 index 000000000..bb54f0c4d Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/analysis/bug/speed.png differ diff --git a/website/public/static/demo/cesium-new/markdown/internet/baidu.md b/website/public/static/demo/cesium-new/markdown/internet/baidu.md new file mode 100644 index 000000000..6e041cda1 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/internet/baidu.md @@ -0,0 +1,94 @@ +# 原理 + +国内的图商数据都强制要求数据加密一次火星坐标系 (GCJ-02) ,因此整个地图是产生了偏移。 + +## 核心原理 + +1. 通过 **反解析** 火星坐标系 (GCJ-02) 得到 **WGS84(CGCS2000椭球)无偏数据** +2. 然后根据无偏数据在Cesium的切分模型上进行对应的**纠偏校正处理** +3. ![](./images/tileschame.png) + +## 高德 + +高德相对简单就是基于墨卡托投影的前提下进行简单的位置纠偏 + +![](./images/mercator.png) + +![](./images/format.png) + +![](./images/geom.png) + + + +| 纠偏前 | 纠偏后 | +| ------------------------------ | ----------------------------- | +| ![](./images/gaode_before.png) | ![](./images/gaode_after.png) | + +## 百度 + +分2类:WGS84椭球纠偏和 BD09坐标系的偏移 + +``` js +this._crs = options.crs || 'BD09'; + if (options.crs === 'WGS84') { + var resolutions = []; + for (var i = 0; i < 19; i++) { + resolutions[i] = 256 * Math.pow(2, 18 - i); + } + this._tilingScheme = new BaiduTilingScheme({ + resolutions: resolutions, + rectangleSouthwestInMeters: new Cartesian2(-20037726.37, -12474104.17), + rectangleNortheastInMeters: new Cartesian2(20037726.37, 12474104.17) + }); + } else { + this._tilingScheme = new WebMercatorTilingScheme({ + rectangleSouthwestInMeters: new Cartesian2(-33554054, -33746824), + rectangleNortheastInMeters: new Cartesian2(33554054, 33746824) + }); + } +``` + + + +### BD09坐标系 + +原理和高德纠偏几乎一致 + +![](./images/mercator.png) + +### WGS84坐标系 + +基于百度独特的**最后一级256像素**的分辨率机制进行对应的计算 + +| 级别 | 分辨率 resolutions = 256 * Math.pow(2, 18 - level) | +| ---- | ------------------------------------------------------ | +| 0 | 33554432 | +| 1 | 16777216 | +| 2 | 8388608 | +| 3 | 4194304 | +| 4 | 2097152 | +| 5 | 1048576 | +| 6 | 524288 | +| 7 | 262144 | +| 8 | 131072 | +| 9 | 65536 | +| 10 | 32768 | +| 11 | 16384 | +| 12 | 8192 | +| 13 | 4096 | +| 14 | 2048 | +| 15 | 1024 | +| 16 | 512 | +| 17 | 256 | + +上面的表格对应百度独特的切分模型经纬网,需要建立一个百度特有的网格切分模型**BaiduTilingScheme** + +| 纠偏前 | 纠偏后 | +| ------------------------------ | ----------------------------- | +| ![](./images/baidu_before.png) | ![](./images/baidu_after.png) | + + + +## 任意投影 + 瓦片切分规则 + +**已实现,不公开原理** \ No newline at end of file diff --git a/website/public/static/demo/cesium-new/markdown/internet/images/baidu_after.png b/website/public/static/demo/cesium-new/markdown/internet/images/baidu_after.png new file mode 100644 index 000000000..a1d64cb3b Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/internet/images/baidu_after.png differ diff --git a/website/public/static/demo/cesium-new/markdown/internet/images/baidu_before.png b/website/public/static/demo/cesium-new/markdown/internet/images/baidu_before.png new file mode 100644 index 000000000..52dc7579f Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/internet/images/baidu_before.png differ diff --git a/website/public/static/demo/cesium-new/markdown/internet/images/format.png b/website/public/static/demo/cesium-new/markdown/internet/images/format.png new file mode 100644 index 000000000..d8fe8c0e2 Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/internet/images/format.png differ diff --git a/website/public/static/demo/cesium-new/markdown/internet/images/gaode_after.png b/website/public/static/demo/cesium-new/markdown/internet/images/gaode_after.png new file mode 100644 index 000000000..392a3b32b Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/internet/images/gaode_after.png differ diff --git a/website/public/static/demo/cesium-new/markdown/internet/images/gaode_before.png b/website/public/static/demo/cesium-new/markdown/internet/images/gaode_before.png new file mode 100644 index 000000000..b8e41a479 Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/internet/images/gaode_before.png differ diff --git a/website/public/static/demo/cesium-new/markdown/internet/images/geom.png b/website/public/static/demo/cesium-new/markdown/internet/images/geom.png new file mode 100644 index 000000000..6b8649e4a Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/internet/images/geom.png differ diff --git a/website/public/static/demo/cesium-new/markdown/internet/images/mercator.png b/website/public/static/demo/cesium-new/markdown/internet/images/mercator.png new file mode 100644 index 000000000..d7bd72691 Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/internet/images/mercator.png differ diff --git a/website/public/static/demo/cesium-new/markdown/internet/images/tileschame.png b/website/public/static/demo/cesium-new/markdown/internet/images/tileschame.png new file mode 100644 index 000000000..8f5641d8c Binary files /dev/null and b/website/public/static/demo/cesium-new/markdown/internet/images/tileschame.png differ diff --git a/website/public/static/demo/cesium-new/markdown/view/theme-layer.md b/website/public/static/demo/cesium-new/markdown/view/theme-layer.md new file mode 100644 index 000000000..65c2ac795 --- /dev/null +++ b/website/public/static/demo/cesium-new/markdown/view/theme-layer.md @@ -0,0 +1,184 @@ +## 统计专题图 + +### 示例功能 + +    此功能用于在三维场景中添加专题图,包括垂直柱状图、水平柱状图、饼状图,可以根据需要选择。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化专题图类 `Cesium.ThemeManager` 对象,调用专题图类的`query()`方法查询结果,并通过 `addByQueryResult()` 方法将查询结果用于添加专题图,或者使用`addByGeoJson()`方法将geojson数据用于添加专题图。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.Viewer()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var viewer = new Cesium.Viewer('GlobeView', { + infoBox: false, + selectionIndicator: false, + shouldAnimate: true + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载底图数据**: +    初始化天地图`Cesium.TiandituImageryProvider`对象,调用viewer.imageryLayers的 `addImageryProvider()` 方法加载天地图作为底图; + +* Example: + ``` Javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer + }); + //加载天地图 + var tdt = new Cesium.TiandituImageryProvider({ + url: 'http://t1.tianditu.com/DataServer', + tileType: 'vec', + token: '2ddaabf906d4b5418aed0078e1657029' + }); + + viewer.imageryLayers.addImageryProvider(tdt); + ``` + +**Step 4. 显示常用控件,并实现跳转定位**: +    调用`showPosition()`、`createNavigationTool()`方法显示常用控件; + +* Example: + ``` Javascript + //显示鼠标位置控件 + viewer.showPosition('coordinate_location'); + //显示导航控件(罗盘、比例尺、场景导航) + viewer.createNavigationTool({ + enableCompass: true, + enableZoomControls: true, + enableDistanceLegend: true + }); + ``` + +**Step 5. 创建专题图对象**: +    初始化专题图类对象`Cesium.ThemeManager`,调用`createAnimation()`方法创建动画漫游对象; + +* Example: + ``` Javascript + //初始化专题图类 + var themeLayer = new Cesium.ThemeManager(viewer, { + successCallback: successCallback, + errorCallback: errorCallback, + // 在定义专题图对象时,设置好属性与对应颜色 + attributeName: ['GDP_2007', 'GDP_2008'], + attributeColor: [new Cesium.Color(234 / 255, 175 / 255, 200 / 255), new Cesium.Color(/ 255, 239 / 255, 125 / 255)], + width: 50000 + }); + var queryResult; + function successCallback(result) { + console.log('查询成功'); + queryResult = result; + } + function errorCallback(result) { + console.log(result); + } + ``` + +**Step 6. 添加专题图**: +    通过专题图类的属性和方法实现添加对应的专题图,即通过属性设置用于生成专题图的属性及其对应颜色、添加专题类型等参数,分别通过调用专题图类的`query()`方法查询结果,并通过 `addByQueryResult()` 方法将查询结果用于添加专题图,或者使用`addByGeoJson()`方法将geojson数据用于添加专题图。 + +* Example: + ``` Javascript + //通过查询结果添加水平柱状专题图 + function addByQuery() { + this.removeLayer(); + //加载矢量地图 + var url = 'http://192.168.21.191:6163/igs/rest/mrfs/layer'; + var layers = 'gdbp://MapGISLocal/专题图数据/sfcls/省级行政区x'; + viewer.scene.layers.appendVectorLayer(url, { + loadAll: true, + layers: layers, + getDocLayerIndexes: function (indexs) { + var layerIndex = indexs[0]; + var layer = viewer.scene.layers.getLayer(layerIndex); + } + }); + + var queryUrl ="http://192.168.21.191:6163/igs/rest/mrfs/layer/query?page=0&pageCount=9999f=json&structs={'IncludeAttribute':true,'IncludeGeometry':true,'IncludeWebGraphic':false}&rule{'CompareRectOnly':false,'EnableDisplayCondition':false,'Intersect':true,'MustInside':false}rtnLabel=true&fields=面积,周长,省名,GDP_2007,GDP_2008&coordPrecision=2&guid=__readonly_user__cursorType=forward&gdbp=gdbp://MapGISLocal/专题图数据/sfcls/省级行政区x"; + themeLayer.query(queryUrl); + + // 设置用于展示的属性名 + themeLayer.attributeName = ['GDP_2007', 'GDP_2008']; + themeLayer.attributeColor = [new Cesium.Color(234 / 255, 175 / 255, 200 / 255), new Cesium.Colo(56 / 255, 239 / 255, 125 / 255)]; + themeLayer.width = 50000; + //水平柱状图 + themeLayer.addByQueryResult('HorizontalColumn'); + } + ``` + +* Example: + ``` Javascript + //通过geojson添加垂直柱状图 + function addByGeojson() { + this.removeLayer(); + var geojsonUrl = './static/data/geojson/省级行政区.geojson'; + var geojsonResource = Cesium.Resource.createIfNeeded(geojsonUrl); + var geojson; + var promise = geojsonResource.fetchJson(); + promise.then(function (json) { + geojson = json; + }); + + themeLayer.addGeoGeometry = false; + themeLayer.attributeName = ['GDP_2007', 'GDP_2008']; + themeLayer.attributeColor = [new Cesium.Color(234 / 255, 175 / 255, 200 / 255), new Cesium.Colo(56 / 255, 239 / 255, 125 / 255)]; + //垂直柱状图 + themeLayer.addByGeoJson(geojson, 'VerticalColumn'); + } + ``` + +* Example: + ``` Javascript + //移除专题图 + function removeLayer() { + themeLayer.remove(); + } + ``` + + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.Viewer` + +##### 【method】 `showPosition()`: 鼠标坐标位置控件 + +##### 【method】 `createNavigationTool()`: 常用导航控件 + +#### 2.【专题图类】`Cesium.ThemeManager` + +##### 【method】 `query(queryUrl) → {Object}` :查询。 + +##### 【method】 `addByQueryResult(optionsParam) ` :通过查询结果添加专题图。 + +##### 【method】 `addByGeoJson(optionsParam)` :通过geojson数据添加专题图。 + +##### 【method】 `remove()` :移除添加的专题图。 + +|参数名|类型|说明| +|-|-|-| +|optionsParam|Object|动画漫游参数| + +* `optionsParam` 主要参数 + +|参数名|类型|说 明| +|-|-|-| +|queryUrl|String|(可选)通过查询结果添加时使用的查询地址。| +|successCallback|function|(可选)查询成功的回调函数| +|errorCallback|function|(可选)查询失败的回调函数| +|attributeName|Array|生成专题图的属性| +|attributeColor|Array|专题图属性的颜色| \ No newline at end of file diff --git a/website/public/static/demo/cesium/example/analysis/analysis-animation.htm b/website/public/static/demo/cesium/example/analysis/analysis-animation.htm index 9fb058f1c..575aee49e 100644 --- a/website/public/static/demo/cesium/example/analysis/analysis-animation.htm +++ b/website/public/static/demo/cesium/example/analysis/analysis-animation.htm @@ -7,7 +7,7 @@ 动画漫游 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-bezierspline.htm b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-bezierspline.htm index 7f23d7dd0..1c1d25433 100644 --- a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-bezierspline.htm +++ b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-bezierspline.htm @@ -8,7 +8,7 @@ - + diff --git a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-buffer.htm b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-buffer.htm index 06dc23407..ea4ba1a4d 100644 --- a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-buffer.htm +++ b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-buffer.htm @@ -6,7 +6,7 @@ Buffer缓冲区分析 - + diff --git a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-centroid.htm b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-centroid.htm index 5ce9f6e0b..c606c6932 100644 --- a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-centroid.htm +++ b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-centroid.htm @@ -6,7 +6,7 @@ Measure distances - + diff --git a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-intersect.htm b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-intersect.htm index ad8337e82..bc6d44bca 100644 --- a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-intersect.htm +++ b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-intersect.htm @@ -6,7 +6,7 @@ Along - + diff --git a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-tin.htm b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-tin.htm index 57a4ea12c..6ac29ca87 100644 --- a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-tin.htm +++ b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-tin.htm @@ -6,7 +6,7 @@ Measure distances - + diff --git a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-voronoi.htm b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-voronoi.htm index fd87e68c1..0b1c4a703 100644 --- a/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-voronoi.htm +++ b/website/public/static/demo/cesium/example/clientAnalysis/clientAnalysis-voronoi.htm @@ -6,7 +6,7 @@ Measure distances - + diff --git a/website/public/static/demo/cesium/example/clientView/clientView-.htm b/website/public/static/demo/cesium/example/clientView/clientView-.htm index e0f573765..255a38050 100644 --- a/website/public/static/demo/cesium/example/clientView/clientView-.htm +++ b/website/public/static/demo/cesium/example/clientView/clientView-.htm @@ -7,7 +7,7 @@ 添加图片 - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigline.htm b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigline.htm index ec5da4186..694e23403 100644 --- a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigline.htm +++ b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigline.htm @@ -6,7 +6,7 @@ 渐进线-纽约街道 - + diff --git a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigpoint.htm b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigpoint.htm index 0d13b2371..e4f4f294e 100644 --- a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigpoint.htm +++ b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigpoint.htm @@ -6,7 +6,7 @@ 散点图-纽约热力 - + diff --git a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigroad.htm b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigroad.htm index 0dbcde836..b6ceb1f16 100644 --- a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigroad.htm +++ b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-bigroad.htm @@ -6,7 +6,7 @@ 路径图-中国主干 - + diff --git a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-grid.htm b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-grid.htm index ab3d32338..9fcc643bb 100644 --- a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-grid.htm +++ b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-grid.htm @@ -7,7 +7,7 @@ 自定义-网格专题 - + diff --git a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-heater.htm b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-heater.htm index ed967c126..450b77281 100644 --- a/website/public/static/demo/cesium/example/clientView_Echarts/echarts-heater.htm +++ b/website/public/static/demo/cesium/example/clientView_Echarts/echarts-heater.htm @@ -7,7 +7,7 @@ 热力图-空气质量 - + - + - + - + - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-heater.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-heater.htm index a05c1bd2b..7fcd90c93 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-heater.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-heater.htm @@ -6,7 +6,7 @@ 热力图 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-migrate.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-migrate.htm index e91233e7e..c7022779b 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-migrate.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-migrate.htm @@ -6,7 +6,7 @@ 迁移图 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-path_converge.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-path_converge.htm index 63f3a3acf..20f4e82bb 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-path_converge.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-path_converge.htm @@ -6,7 +6,7 @@ 轨迹汇聚 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_animate.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_animate.htm index e6e0d83ba..363f3c857 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_animate.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_animate.htm @@ -6,7 +6,7 @@ 点数据播放 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_grid.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_grid.htm index 9633d8c81..a241720ae 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_grid.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_grid.htm @@ -6,7 +6,7 @@ Along - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_honeycomb.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_honeycomb.htm index db6cb1312..56fb68891 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_honeycomb.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_honeycomb.htm @@ -6,7 +6,7 @@ 蜂窝形密度 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_mutilanimate.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_mutilanimate.htm index 7de8b61b8..7cf28992f 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_mutilanimate.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_mutilanimate.htm @@ -5,7 +5,7 @@ 点重叠播放 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_weibo.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_weibo.htm index 0b6b16854..9f0c2e27c 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_weibo.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-point_weibo.htm @@ -5,7 +5,7 @@ 点微博数据 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-render_polygon.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-render_polygon.htm index c5bfa3356..64d19014c 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-render_polygon.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-render_polygon.htm @@ -6,7 +6,7 @@ 区数据渲染 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-simplemigrate.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-simplemigrate.htm index fce6d87a9..95f4e9c54 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-simplemigrate.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-simplemigrate.htm @@ -6,7 +6,7 @@ 单一迁移轨迹 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-tracker.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-tracker.htm index 09dec0527..30b3f9981 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-tracker.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-tracker.htm @@ -6,7 +6,7 @@ 动态轨迹 - + diff --git a/website/public/static/demo/cesium/example/clientView_MapV/mapv-trackerline.htm b/website/public/static/demo/cesium/example/clientView_MapV/mapv-trackerline.htm index 18f49331d..4493bc0eb 100644 --- a/website/public/static/demo/cesium/example/clientView_MapV/mapv-trackerline.htm +++ b/website/public/static/demo/cesium/example/clientView_MapV/mapv-trackerline.htm @@ -8,7 +8,7 @@ content="initial-scale=1,maximum-scale=1,user-scalable=no" /> - + diff --git a/website/public/static/demo/cesium/example/data/data-3Dtiles.htm b/website/public/static/demo/cesium/example/data/data-3Dtiles.htm index 8ae8c6fd1..3cd9b63f2 100644 --- a/website/public/static/demo/cesium/example/data/data-3Dtiles.htm +++ b/website/public/static/demo/cesium/example/data/data-3Dtiles.htm @@ -7,7 +7,7 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - #map { - position: absolute; - top: 0; - bottom: 0; - width: 100%; - } - - + +
+ - - - \ No newline at end of file + function updateView() { + L.geoJson(simpleLine).addTo(map); + L.geoJson(route).addTo(map); + } + + + diff --git a/website/public/static/demo/leaflet/example/realtime/multi-target.htm b/website/public/static/demo/leaflet/example/realtime/multi-target.htm new file mode 100644 index 000000000..0d20c9e3a --- /dev/null +++ b/website/public/static/demo/leaflet/example/realtime/multi-target.htm @@ -0,0 +1,165 @@ + + + + WFS地图显示 + + + + + + +
+ + diff --git a/website/public/static/demo/leaflet/gallery/realtime/multi-target.png b/website/public/static/demo/leaflet/gallery/realtime/multi-target.png new file mode 100644 index 000000000..15579b4c8 Binary files /dev/null and b/website/public/static/demo/leaflet/gallery/realtime/multi-target.png differ diff --git a/website/public/static/demo/leaflet/source/produce_leaflet.md b/website/public/static/demo/leaflet/source/produce_leaflet.md index 6fe321c3b..92d5f76ea 100644 --- a/website/public/static/demo/leaflet/source/produce_leaflet.md +++ b/website/public/static/demo/leaflet/source/produce_leaflet.md @@ -259,17 +259,17 @@ MapGIS Client for JavaScript(Leaflet)对接云GIS产品,提供地图显示 -- Leaflet:领先的用于移动友好交互式地图的开源JavaScript库,目前主流地图可视化引擎之一(https://leafletjs.com/) +- Leaflet:领先的用于移动友好交互式地图的开源JavaScript库,目前主流地图可视化引擎之一(https://leafletjs.com/) -- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) +- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) -- MapV:地理信息可视化开源库(https://mapv.baidu.com/) +- MapV:地理信息可视化开源库(https://mapv.baidu.com/) -- Turf:客户端空间分析开源库(https://turfjs.org/) +- Turf:客户端空间分析开源库(https://turfjs.org/) -- ElasticSearch:分布式搜索与分析引擎(https://www.elastic.co/cn/) +- ElasticSearch:分布式搜索与分析引擎(https://www.elastic.co/cn/) -- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) +- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) diff --git a/website/public/static/demo/mapboxgl/example/client-view/vectortile/tiledelay.htm b/website/public/static/demo/mapboxgl/example/client-view/vectortile/tiledelay.htm new file mode 100644 index 000000000..ee6e85032 --- /dev/null +++ b/website/public/static/demo/mapboxgl/example/client-view/vectortile/tiledelay.htm @@ -0,0 +1,124 @@ + + + + + + 瓦片延申 + + + + + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/example/industry/military/cluster.htm b/website/public/static/demo/mapboxgl/example/industry/military/cluster.htm new file mode 100644 index 000000000..14cd7164c --- /dev/null +++ b/website/public/static/demo/mapboxgl/example/industry/military/cluster.htm @@ -0,0 +1,277 @@ + + + + + + 聚类分析 + + + + + + + + +
+
+ 热力展示 + 网格展示 +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/example/industry/military/echart_line.htm b/website/public/static/demo/mapboxgl/example/industry/military/echart_line.htm new file mode 100644 index 000000000..3d6ab6249 --- /dev/null +++ b/website/public/static/demo/mapboxgl/example/industry/military/echart_line.htm @@ -0,0 +1,136 @@ + + + + + + 公交路线 + + + + + + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/example/industry/military/multil_line.htm b/website/public/static/demo/mapboxgl/example/industry/military/multil_line.htm new file mode 100644 index 000000000..97c2390cf --- /dev/null +++ b/website/public/static/demo/mapboxgl/example/industry/military/multil_line.htm @@ -0,0 +1,202 @@ + + + + + + 北京公交夜景 + + + + + + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/example/industry/military/tracker.htm b/website/public/static/demo/mapboxgl/example/industry/military/tracker.htm new file mode 100644 index 000000000..bd4c4036e --- /dev/null +++ b/website/public/static/demo/mapboxgl/example/industry/military/tracker.htm @@ -0,0 +1,211 @@ + + + + + + + 轨迹显示 + + + + + + + +
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/example/industry/military/webclient.code-workspace b/website/public/static/demo/mapboxgl/example/industry/military/webclient.code-workspace new file mode 100644 index 000000000..41be6472b --- /dev/null +++ b/website/public/static/demo/mapboxgl/example/industry/military/webclient.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": "..\\..\\..\\..\\..\\..\\..\\..\\..\\WebClient-GNSS" + }, + { + "path": "..\\..\\..\\..\\..\\..\\..\\.." + }, + { + "path": "..\\..\\..\\..\\..\\..\\..\\..\\..\\Webclient-Plot" + } + ] +} \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/gallery/client-view/vectortile/tiledelay.png b/website/public/static/demo/mapboxgl/gallery/client-view/vectortile/tiledelay.png new file mode 100644 index 000000000..a7dffca94 Binary files /dev/null and b/website/public/static/demo/mapboxgl/gallery/client-view/vectortile/tiledelay.png differ diff --git a/website/public/static/demo/mapboxgl/gallery/industry/military/cluster.png b/website/public/static/demo/mapboxgl/gallery/industry/military/cluster.png new file mode 100644 index 000000000..98dd976e9 Binary files /dev/null and b/website/public/static/demo/mapboxgl/gallery/industry/military/cluster.png differ diff --git a/website/public/static/demo/mapboxgl/gallery/industry/military/courgette.log b/website/public/static/demo/mapboxgl/gallery/industry/military/courgette.log new file mode 100644 index 000000000..e69de29bb diff --git a/website/public/static/demo/mapboxgl/gallery/industry/military/echart_line.png b/website/public/static/demo/mapboxgl/gallery/industry/military/echart_line.png new file mode 100644 index 000000000..b51c54aed Binary files /dev/null and b/website/public/static/demo/mapboxgl/gallery/industry/military/echart_line.png differ diff --git a/website/public/static/demo/mapboxgl/gallery/industry/military/multil_line.png b/website/public/static/demo/mapboxgl/gallery/industry/military/multil_line.png new file mode 100644 index 000000000..0f11bb7d2 Binary files /dev/null and b/website/public/static/demo/mapboxgl/gallery/industry/military/multil_line.png differ diff --git a/website/public/static/demo/mapboxgl/helper/tilesize/tile/256.png b/website/public/static/demo/mapboxgl/helper/tilesize/tile/256.png new file mode 100644 index 000000000..a12b551d0 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/tilesize/tile/256.png differ diff --git a/website/public/static/demo/mapboxgl/helper/tilesize/tile/512.png b/website/public/static/demo/mapboxgl/helper/tilesize/tile/512.png new file mode 100644 index 000000000..758df4a85 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/tilesize/tile/512.png differ diff --git a/website/public/static/demo/mapboxgl/helper/tilesize/tilesize.md b/website/public/static/demo/mapboxgl/helper/tilesize/tilesize.md new file mode 100644 index 000000000..45c397d2c --- /dev/null +++ b/website/public/static/demo/mapboxgl/helper/tilesize/tilesize.md @@ -0,0 +1,73 @@ +# 显示模糊 + +## `tileSize` + - **类型:** `Number` +- **默认值:** `512` +- **描述:** 加载瓦片的大小,如果数据瓦片本身是256大小的设置512大小会被强制拉伸至512大小。 + +| 512 | 256 | +| :---------------------------------------------------------- | :---------------------------------------------------------- | +| ![512](./static/demo/mapboxgl/helper/tilesize/tile/512.png) | ![256](./static/demo/mapboxgl/helper/tilesize/tile/256.png) | + +> tip 天地图模糊 +>> 请传入tileSize为256即可,2种方式 + +``` js +//实例化要加载的source来源对象(世界矢量地图) + var tianditu4326 = { + type: "raster", + tiles: [ + //来源请求地址,请求天地图提供的全球矢量地图WMTS服务 + "http://t" + + Math.round(Math.random() * 7) + + ".tianditu.gov.cn/img_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0" + + "&LAYER=img&STYLE=default&TILEMATRIXSET=c&FORMAT=tiles" + + "&TILECOL=" + + "{x}" + + "&TILEROW=" + + "{y}" + + "&TILEMATRIX=" + + "{z}" + + "&tk=" + + tiandituKey, + ], + //栅格瓦片的分辨率 + tileSize: 256, + }; + //实例化Map对象加载地图 + map = new mapboxgl.Map({ + crs: "EPSG:4326", //经纬度一定要设置crs参数 + maxBounds: [ + [-180, -90], + [180, 90], + ], + //地图容器div的id + container: "map", + //设置地图样式信息 + style: { + //设置版本号,一定要设置 + version: 8, + //添加来源 + sources: { + tianditu4326: tianditu4326, + }, + //设置加载并显示来源的图层信息 + layers: [ + { + //图层id,要保证唯一性 + id: "tianditu4326", + //图层类型 + type: "raster", + //连接图层来源 + source: "tianditu4326", + //图层最小缩放级数 + minzoom: 0, + //图层最大缩放级数 + maxzoom: 22, + }, + ], + }, + zoom: 7.5, + center: [116.39, 40.20] + }); +``` \ No newline at end of file diff --git "a/website/public/static/demo/mapboxgl/helper/vectortile/delay/\351\273\230\350\256\244\350\243\201\345\211\252\347\272\247\345\210\253.png" "b/website/public/static/demo/mapboxgl/helper/vectortile/delay/\351\273\230\350\256\244\350\243\201\345\211\252\347\272\247\345\210\253.png" new file mode 100644 index 000000000..88e74ceee Binary files /dev/null and "b/website/public/static/demo/mapboxgl/helper/vectortile/delay/\351\273\230\350\256\244\350\243\201\345\211\252\347\272\247\345\210\253.png" differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/java.md b/website/public/static/demo/mapboxgl/helper/vectortile/java.md new file mode 100644 index 000000000..141f4e6e6 --- /dev/null +++ b/website/public/static/demo/mapboxgl/helper/vectortile/java.md @@ -0,0 +1,41 @@ +## 问题描述 + +> mapgis桌面程序导出矢量瓦片数据是,里面所有的链接地址都是localhost:6163,上传到igs(JAVA)服务器后,链接地址仍未做修改,因此或造成客户端无法访问服务器资源的问题。 + +## 如何解决 + +# 一、矢量瓦片数据已经上传到到igs(JAVA)服务器,但未保存最原始的样式文件 + +> 1、进入管理台 +> 2、点击左边菜单栏的地图与数据服务 + +步骤一 + +> 3、点击矢量瓦片资源管理,选择上传按钮,上传数据 + +步骤二 + +> 4、上传完成后点击矢量瓦片资源管理,选择查看按钮 + +步骤三 + +> 5、这里可以看到已上传的矢量瓦片资源 + +步骤四 + +> 6、在右侧的资源列表里选择你刚刚发布的资源,我这里选择名称为‘北京市_Java’的矢量瓦片,并点击预览按钮,进入到矢量瓦片编辑页面 + +步骤五 + +> 7、在编辑界面的最上方的工具栏中选择保存按钮,点击下载样式按钮,下载刚刚上传矢量瓦片资源 + +步骤五 +步骤五 + +> 8、打开下载好的样式文件,将所有的locaolhost:6163替换为当前igs(JAVA)服务的地址即可,之后重复第三步上传矢量瓦片资源, +> 由于下载的文件名英文字母会全部变成小写,请在上传前确保文件名与地图名称完全一致,这样即可正常访问矢量瓦片。 + +# 二、可以拿到最原始的样式文件 + +> 1、打开原样式文件,将所有的locaolhost:6163替换为当前igs(JAVA)服务的地址即可,之后重复上述第三步上传矢量瓦片资源, +> 由于下载的文件名英文字母会全部变成小写,请在上传前确保文件名与地图名称完全一致,这样即可正常访问矢量瓦片。 \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles.md b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles.md new file mode 100644 index 000000000..cc9959576 --- /dev/null +++ b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles.md @@ -0,0 +1,149 @@ +# 0 矢量瓦片的核心5大服务 +1. 元数据信息服务 (**mbtile**中的**metadata**表) +2. 瓦片服务 (**mbtile**中的**tiles**表/视图) +3. 地图文档服务 (**mapgis**生成的样式文件 **xxx_style.json**) ~~mbtile未定义~~ +4. 字体服务 (**mapgis**生成的样式文件 xxx_style.json中的**glyphs**) ~~mbtile未定义~~ +5. 符号库服务 (**mapgis**生成的样式文件 xxx_style.json中的**sprite**) ~~mbtile未定义~~ + +# 1 MBTiles格式 +1. 为什么要使用MBTiles? +2. MBTiles解决了什么问题? +3. MBTiles的局限? +4. MBTiles注意的细节? + +## 1. 为什么要使用MBTiles +1.1 mbtiles本质上是sqlite,sqlite是开源公有领域项目。它的设计目标是嵌入式的,占用资源非常的低,适合嵌入式设备/移动端设备。 +1.2 mbtiles本质上文件数据库,方便拷贝与传输。 +1.3 mapboxgl公司规定了mbtiles的规范与[协议](https://github.com/mapbox/mbtiles-spec) +1.4 简单方便容易上手 + +## 2. MBTiles解决了什么问题 +2.1 矢量瓦片的元数据信息和瓦片信息 + 1. 元数据信息,下图中的空间范围、发布的图层、中心点、最大最小级别等 + 2. 瓦片信息,下图中的实际的点线面图元 +2.2 方便geoserver/qgis/mapbox-mobile等不同的开源体系之间数据交换(未解决制图综合的交换问题) +> 以下是4种不同平台打开/生产mbtiles的效果图 + +| **mapgis** | +| :------------------------------------------------------------------------------- | +| ![mapgis](../../static/demo/mapboxgl/helper/vectortile/mbtiles/mapgis.png) | +| **geoserver** + mbtiles-store-plugin + mbtiles-plugin | +| ![geoserver](../../static/demo/mapboxgl/helper/vectortile/mbtiles/geoserver.png) | +| **qgis** | +| ![qgis](../../static/demo/mapboxgl/helper/vectortile/mbtiles/qgis.png) | +| **mapbox-mobile** | +| ![qgis](../../static/demo/mapboxgl/helper/vectortile/mbtiles/mapbox-mobile.png) | + +2.3 可以发现一个mbtile在不同的平台都可以展示对应的底图信息,但是不同平台的展示效果各不相同,这是因为mbtiles没有记录对应的地图文档信息导致的。这也是下一章节要重点说明的。 + +## 3. MBTiles没解决什么问题 +1. ~~地图文档服务~~ ~~mbtile未定义~~ (**mapgis**生成的样式文件 **xxx_style.json**中) +2. ~~字体服务~~ ~~mbtile未定义~~ (**mapgis**生成的样式文件 xxx_style.json中的**glyphs**) +3. ~~符号库服务~~ ~~mbtile未定义~~ (**mapgis**生成的样式文件 xxx_style.json中的**sprite**) + +### 3.1 针对地图文档服务: +(**mapgis**生成的样式文件 **xxx_style.json**) 通过文件服务转发即可。内部做了规则转换保证桌面和web端的显示保持尽可能一致,**一次编图制图,全平台重复使用** +| 平台样式 | web端样式 | +| :------------------------------------------------------------------------- | :-------- | +| ![mapgis](../../static/demo/mapboxgl/helper/vectortile/mbtiles/mapgis.png) | ![mapgis](../../static/demo/mapboxgl/helper/vectortile/mbtiles/web.png) | + + +### 3.2 针对字体服务: + (**mapgis**提供的字体文件库) 通过文件服务转发即可 +![字体](../../static/demo/mapboxgl/helper/vectortile/mbtiles/font.png) + +### 3.3 针对符号服务: +(**mapgis**提供的符号库 sprite.json sprite.png sprite@2x.json sprite@2x.png) 通过文件服务转发即可 +**会在裁剪目录下生成** sprite.json sprite.png sprite@2x.json sprite@2x.png 4个文件 +![符号](../../static/demo/mapboxgl/helper/vectortile/mbtiles/sprites.png) + +## 4. MBTiles的局限 +由于MBTiles本身没有设计对应的机制,因此需要人为的约定一些规范操作 + +### 4.1 **数据量上限**,由于瓦片在切片+过滤的过程中会出现如下的情况 + +| 级别 | 平均大小 | 该级别瓦片张数 | +| :--- | :------- | :------------- | +| 1 | 1.69M | 1 | +| 2 | 471Kb | 4 | +| 3 | 256Kb | 8 | +| 4 | 144Kb | 17 | +| 5 | 61Kb | 47 | +| 6 | 40Kb | 155 | +| 7 | 20Kb | 559 | +| 8 | 2 Kb | 2117 | +| 9 | 800字节 | 8208 | +| 10 | 250字节 | 366 | + + 简而言之就是: + 1. 前面几级单张瓦片存储空间大(空间范围过大导致的图元化简力度大+图元过滤多) + 2. 中间几级瓦片图元数量多(化简力度适中+图元过滤少) + 3. 尾部几级(图元无过滤+图元无化简) + 4. **关系型数据库**(按行存储)在处理这类每条记录都大小不一致(**方差较大**)的情形下没有**NoSQL**(按列存储 monggodb)的高效 +### 4.2 坐标系支持相对单一 + 1. 瓦片数据**只支持EPSG:3857** web墨卡托投影 + ![EPSG:3857](../../static/demo/mapboxgl/helper/vectortile/mbtiles/epsg3857.png) + 2. mapboxgl-2.6.0的版本支持了6类投影,但是最新的1.3的版本协议中仍然只支持EPSG:3857 + 3. 元数据的坐标却是采取经纬度表示,没有从坐标上统一参考系 + ![EPSG:4326](../../static/demo/mapboxgl/helper/vectortile/mbtiles/epsg4326.png) +### 4.3 数据只记录了元数据信息和瓦片信息,缺失**符号**信息和**字体**信息与**地图文档**信息 +### 4.4 不明确是否**采取gzip的compress**[压缩策略](https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md#future-directions) + ![compress](../../static/demo/mapboxgl/helper/vectortile/mbtiles/compress.png) +### 4.5. tms的瓦片切片策略与直观的xyz不符合,需要前端主动传入(tms切片格式)或者后台转发处理成xyz格式 + +## 5. 如何避免MBTiles的局限 +### 5.1 针对数据量上限 +MapGIS桌面生成矢量瓦片的时候尽量只生成0-16级的瓦片,剩余的17-20通过mapbox的[瓦片延申机制实现](/#/demo/mapboxgl/client-view/vectortile/tiledelay) +### 5.2 针对坐标系 +统一采取 **EPSG3857-Web墨卡托坐标系** +![compress](../../static/demo/mapboxgl/helper/vectortile/mbtiles/proj.png) + +### 5.3 针对符号/字体/地图文档 +通过上面提到文件服务发布对应的3类服务 + +### 5.4 针对压缩策略 +**特别注意** geoserver/qgis需要二次压缩操作 +请生产端和服务端保持下面**策略一致**即可 + +|桌面生产端 |服务端| +|:---|:---| +|![压缩](../../static/demo/mapboxgl/helper/vectortile/mbtiles/compress_bool.png)|**1.** sprint/nodejs/NET需要主动给对应的瓦片服务一个G-ZIP的标识**Accept-Encoding: gzip** **Content-Encodin:gzip**| +|![未压缩](../../static/demo/mapboxgl/helper/vectortile/mbtiles/compress_unbool.png)|**2.** spring/nodejs/NET**直接转发**即可| +|![未压缩](../../static/demo/mapboxgl/helper/vectortile/mbtiles/compress_unbool.png)|**3.** spring/nodejs/NET **服务端进行gzip二次压缩**,并加入G-ZIP的标识**Accept-Encoding: gzip** **Content-Encodin:gzip**| + +### 5.5 针对瓦片切片策略 +1. [xyz](http://docs.opengeospatial.org/is/13-082r2/13-082r2.html#32)瓦片 最容易理解与认识 (monggo postgis mapgis mapboxgl arcgis的默认规则) + 1. 原点在左上角 + ![左上角](../../static/demo/mapboxgl/helper/vectortile/mbtiles/xyz_rule.png) + 2. 计算规则得出的xyz就是文件夹中的 x <-> column; y <-> row; z <-> level + ``` js + let x = x; + let y = y; + let z = z; + ``` +2. [tms](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification)瓦片 移动设备的切片策略 (mapboxgl-mobile的默认规则) + 1. 原点在左下角 + ![左下角](../../static/demo/mapboxgl/helper/vectortile/mbtiles/tms_rule.png) + 2. 计算规则,得出的xyz就是mbtiles中的 x <-> tile_column; y <-> tile_row; z <-> tile_level + ``` js + let x = x; + let y = Math.pow(2, z) - y - 1; // Tiles on database are tms (inverted y axis) + let z = z; + ``` + +|桌面生产端 |服务端| +|:---|:---| +|![xyz](../../static/demo/mapboxgl/helper/vectortile/mbtiles/xyz.png)|**1.** sprint/nodejs/NET发布一个**xyz**的瓦片服务即可| +|![tms](../../static/demo/mapboxgl/helper/vectortile/mbtiles/tms.png)|**2.** sprint/nodejs/NET发布一个**tms**的瓦片服务即可| + +目录型瓦片(xyz)转 MBtiles (tms) +|桌面生产端 |服务端| +|:---|:---| +|![xyz](../../static/demo/mapboxgl/helper/vectortile/mbtiles/xyz_tms.png)|**3.** sprint/nodejs/NET发布一个**tms**的瓦片服务即可| + +## 6.建议 +1. 生成**文件型**的目录瓦片作为**中间交换格式**,然后**不设置**对应的压缩策略 +2. 根据需求定制不同的策略 + 1. 针对**移动端**通过矢量瓦片转换目录型-> mbtiles,移动端**离线**使用 + 2. 针**对在线大数据**,通过批处理脚本加入mongodb中(**3台节点**配置) +3. 如果需要二次压缩建议是**服务端**进行操作,这样加gzip的标签由服务端**统一规划** \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress.png new file mode 100644 index 000000000..1fba361c1 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress_bool.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress_bool.png new file mode 100644 index 000000000..ff30e682f Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress_bool.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress_unbool.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress_unbool.png new file mode 100644 index 000000000..4c1a8a139 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/compress_unbool.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/epsg3857.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/epsg3857.png new file mode 100644 index 000000000..5a27ccb05 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/epsg3857.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/epsg4326.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/epsg4326.png new file mode 100644 index 000000000..8cc8f089d Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/epsg4326.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/font.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/font.png new file mode 100644 index 000000000..9e169eb5b Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/font.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/geoserver.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/geoserver.png new file mode 100644 index 000000000..d0e5d26ad Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/geoserver.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/mapbox-mobile.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/mapbox-mobile.png new file mode 100644 index 000000000..43502094b Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/mapbox-mobile.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/mapgis.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/mapgis.png new file mode 100644 index 000000000..a0fb1fc7d Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/mapgis.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/proj.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/proj.png new file mode 100644 index 000000000..e4d5100b9 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/proj.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/qgis.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/qgis.png new file mode 100644 index 000000000..6418e01d6 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/qgis.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/sprites.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/sprites.png new file mode 100644 index 000000000..62a691ed7 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/sprites.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/tms.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/tms.png new file mode 100644 index 000000000..f1fd2ac9d Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/tms.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/tms_rule.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/tms_rule.png new file mode 100644 index 000000000..e31f2dcc7 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/tms_rule.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/web.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/web.png new file mode 100644 index 000000000..ad4f858c7 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/web.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz.png new file mode 100644 index 000000000..7f79c7ac0 Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz_rule.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz_rule.png new file mode 100644 index 000000000..04082b18c Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz_rule.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz_tms.png b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz_tms.png new file mode 100644 index 000000000..600f0352a Binary files /dev/null and b/website/public/static/demo/mapboxgl/helper/vectortile/mbtiles/xyz_tms.png differ diff --git a/website/public/static/demo/mapboxgl/helper/vectortile/publish.md b/website/public/static/demo/mapboxgl/helper/vectortile/publish.md new file mode 100644 index 000000000..141f4e6e6 --- /dev/null +++ b/website/public/static/demo/mapboxgl/helper/vectortile/publish.md @@ -0,0 +1,41 @@ +## 问题描述 + +> mapgis桌面程序导出矢量瓦片数据是,里面所有的链接地址都是localhost:6163,上传到igs(JAVA)服务器后,链接地址仍未做修改,因此或造成客户端无法访问服务器资源的问题。 + +## 如何解决 + +# 一、矢量瓦片数据已经上传到到igs(JAVA)服务器,但未保存最原始的样式文件 + +> 1、进入管理台 +> 2、点击左边菜单栏的地图与数据服务 + +步骤一 + +> 3、点击矢量瓦片资源管理,选择上传按钮,上传数据 + +步骤二 + +> 4、上传完成后点击矢量瓦片资源管理,选择查看按钮 + +步骤三 + +> 5、这里可以看到已上传的矢量瓦片资源 + +步骤四 + +> 6、在右侧的资源列表里选择你刚刚发布的资源,我这里选择名称为‘北京市_Java’的矢量瓦片,并点击预览按钮,进入到矢量瓦片编辑页面 + +步骤五 + +> 7、在编辑界面的最上方的工具栏中选择保存按钮,点击下载样式按钮,下载刚刚上传矢量瓦片资源 + +步骤五 +步骤五 + +> 8、打开下载好的样式文件,将所有的locaolhost:6163替换为当前igs(JAVA)服务的地址即可,之后重复第三步上传矢量瓦片资源, +> 由于下载的文件名英文字母会全部变成小写,请在上传前确保文件名与地图名称完全一致,这样即可正常访问矢量瓦片。 + +# 二、可以拿到最原始的样式文件 + +> 1、打开原样式文件,将所有的locaolhost:6163替换为当前igs(JAVA)服务的地址即可,之后重复上述第三步上传矢量瓦片资源, +> 由于下载的文件名英文字母会全部变成小写,请在上传前确保文件名与地图名称完全一致,这样即可正常访问矢量瓦片。 \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/helper/web/publish.md b/website/public/static/demo/mapboxgl/helper/web/publish.md new file mode 100644 index 000000000..aaa4408a4 --- /dev/null +++ b/website/public/static/demo/mapboxgl/helper/web/publish.md @@ -0,0 +1,95 @@ +# Nginx + +## 安装 & 权限 +> Nginx最常见的问题是安全权限问题 + +1. 安装指南 + ``` sh + yum install epel-release -y + yum install nginx -y + ``` +2. 配置规则 /etc/nginx/nginx.conf + ``` conf + user root; # 用户建议改成root + server { + listen 8086; + + root /opt/webclient/site; # 指定位置,关键点1 + index index.html # 指定入口得index.html + } + ``` +3. 修改指定位置权限,由于关键点1使用的是自定义的位置 /opt/webclient/site,因此需要修改系统权限,详情请看[Nginx-SELinux](https://goodmemory.cc/selinux%E7%9B%B8%E5%85%B3%E7%9A%84permission-denied%E9%97%AE%E9%A2%98/) + ``` sh + chcon -R -u system_u /opt/webclient/site/ + chcon -R -t usr_t /opt/webclient/site/ + ``` + +## Https / Http的处理方式 + +``` conf +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/octet-stream; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + + server { + listen 6163; + server_name develop.smaryun.com; + root html; + index index.html index.htm; + location / { + #下面的改成自己tomcat项目的地址 9007必须是内部非对外开放的端口 可以再igserver里面修改 + proxy_pass http://127.0.0.1:9007; + } + } + server { + listen 443 ssl; + server_name develop.smaryun.com; + + ssl_certificate cert/develop.pem; + ssl_certificate_key cert/develop.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + location / { + #下面的改成自己tomcat项目的地址 9007必须是内部非对外开放的端口 可以再igserver里面修改 + proxy_pass http://127.0.0.1:9007; + } + + # location / { + # root html; + # index index.html index.htm; + # } + } +} +``` \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/markdown/client-view/vectortile/tiledelay.md b/website/public/static/demo/mapboxgl/markdown/client-view/vectortile/tiledelay.md new file mode 100644 index 000000000..5819063b5 --- /dev/null +++ b/website/public/static/demo/mapboxgl/markdown/client-view/vectortile/tiledelay.md @@ -0,0 +1,86 @@ +# 瓦片延申显示 +> 实际在生产瓦片的时候无法一次性生产大数据大范围下的瓦片,尤其是16级以后的瓦片,因此可以利用mapboxgl延申瓦片的特性减少瓦片的裁剪 +> +> mapboxgl最大的精度为向后延申4级 默认extent `4096 = 256 * 2^4` +> +> 只需将图层的"maxzoom": level + 4, //往后延申设置4级为8级 + +## 桌面生产 +![默认裁剪级别](../../static/demo/mapboxgl/helper/vectortile/delay/默认裁剪级别.png) + +## 前端修改样式 +``` json +{ + "version": 8, + "name": "世界行政区 Style", + "sources": { + "世界行政区": { + "type": "vector", + "tiles": [ + "http://develop.smaryun.com:6163/igs/rest/mrms/tile/世界行政区/{z}/{y}/{x}?type=cpbf" + ], + "minZoom": 0, + "maxZoom": 4 + } + }, + "sprite": "http://develop.smaryun.com:6163/igs/rest/mrms/vtiles/sprite", + "glyphs": "http://develop.smaryun.com:6163/igs/rest/mrms/vtiles/fonts/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "背景", + "type": "background", + "paint": { + "background-color": "rgba(247, 247, 247, 1)" + } + }, + { + "id": "世界海洋", + "type": "fill", + "source": "世界行政区", + "source-layer": "世界海洋", + "minzoom": 0, + "maxzoom": 4, + "layout": { + "visibility": "visible" + }, + "paint": { + "fill-outline-color": "rgba(221, 92, 92, 1)", + "fill-color": "rgba(241, 109, 122, 1)" + } + }, + { + "id": "世界行政区", + "type": "fill", + "source": "世界行政区", + "source-layer": "世界行政区", + "minzoom": 0, + "maxzoom": 4, + "layout": { + "visibility": "visible" + }, + "paint": { + "fill-outline-color": "rgba(221, 92, 92, 1)", + "fill-color": "rgba(184, 241, 237, 1)" + } + }, + { + "id": "中国", + "type": "fill", + "source": "世界行政区", + "source-layer": "中国", + "minzoom": 0, + "maxzoom": 8, //往后延申设置4级为8级 + "layout": { + "visibility": "visible" + }, + "paint": { + "fill-outline-color": "rgba(221, 92, 92, 1)", + "fill-color": "rgba(225, 98, 47, 1)" + } + } + ], + "id": "世界行政区-id", + "crs": null, + "path": "D:\\平台二次开发部门资源\\阿里云服务器数据\\new\\webClient\\世界行政区\\世界行政区" +} +``` \ No newline at end of file diff --git a/website/public/static/demo/mapboxgl/source/produce_mapboxgl.md b/website/public/static/demo/mapboxgl/source/produce_mapboxgl.md index 82b7b5287..54f5d57c0 100644 --- a/website/public/static/demo/mapboxgl/source/produce_mapboxgl.md +++ b/website/public/static/demo/mapboxgl/source/produce_mapboxgl.md @@ -244,19 +244,19 @@ MapGIS Client for JavaScript(MapboxGL)对接云GIS产品,提供地图显 -- MapboxGL:使用WebGL技术独立渲染的开源JavaScript库,作为前端渲染矢量瓦片交互地图的工具(https://docs.mapbox.com/mapbox-gl-js/api/) +- MapboxGL:使用WebGL技术独立渲染的开源JavaScript库,作为前端渲染矢量瓦片交互地图的工具(https://docs.mapbox.com/mapbox-gl-js/api/) -- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) +- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) -- MapV:地理信息可视化开源库(https://mapv.baidu.com/) +- MapV:地理信息可视化开源库(https://mapv.baidu.com/) -- Turf:客户端空间分析开源库(https://turfjs.org/) +- Turf:客户端空间分析开源库(https://turfjs.org/) -- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) +- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) -- ElasticSearch:分布式搜索与分析引擎(https://www.elastic.co/cn/) +- ElasticSearch:分布式搜索与分析引擎(https://www.elastic.co/cn/) -- PostGIS:是PostgreSQL的一个扩展,遵循OpenGIS的规范,提供空间信息服务功能-空间对象、空间索引、空间操作函数和空间操作符(http://postgis.net/) +- PostGIS:是PostgreSQL的一个扩展,遵循OpenGIS的规范,提供空间信息服务功能-空间对象、空间索引、空间操作函数和空间操作符(http://postgis.net/) diff --git a/website/public/static/demo/military/example/analysis/analysis-animation.htm b/website/public/static/demo/military/example/analysis/analysis-animation.htm new file mode 100644 index 000000000..9fb058f1c --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-animation.htm @@ -0,0 +1,266 @@ + + + + + + + 动画漫游 + + + + + + + + + +
+
+ + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
漫游方式 + + + + +
俯仰角 + + +
方位角 + + +
距离 + + +
播放速度 + + +
+
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-aspectAnalysis-normal.htm b/website/public/static/demo/military/example/analysis/analysis-aspectAnalysis-normal.htm new file mode 100644 index 000000000..6ec1148d9 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-aspectAnalysis-normal.htm @@ -0,0 +1,107 @@ + + + + + + 坡向分析 + + + + + + + + + +
+ + diff --git a/website/public/static/demo/military/example/analysis/analysis-aspectAnalysis.htm b/website/public/static/demo/military/example/analysis/analysis-aspectAnalysis.htm new file mode 100644 index 000000000..a449b7e24 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-aspectAnalysis.htm @@ -0,0 +1,79 @@ + + + + + + + 坡向分析 + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-cube.htm b/website/public/static/demo/military/example/analysis/analysis-cube.htm new file mode 100644 index 000000000..752e51bdf --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-cube.htm @@ -0,0 +1,234 @@ + + + + + + + 填挖方计算 + + + + + + + + + + +
+
+

参数

+ + + + + + + + + + + + + + + +
x方向采样点个数 + +
y方向采样点个数 + +
填挖规整高度 + +
+
+
+

填挖结果

+ + + + + + + + + + + + + + + + + + + +
高程范围: + +
表面积: + +
挖体积: + +
填体积: + +
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-dynamiccut.htm b/website/public/static/demo/military/example/analysis/analysis-dynamiccut.htm new file mode 100644 index 000000000..94797a9ed --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-dynamiccut.htm @@ -0,0 +1,104 @@ + + + + + + + 动态剖切 + + + + + + + + + +
+
+ + 剖切距离: + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-excavate.htm b/website/public/static/demo/military/example/analysis/analysis-excavate.htm new file mode 100644 index 000000000..b36245112 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-excavate.htm @@ -0,0 +1,132 @@ + + + + + + + 开挖分析 + + + + + + + + + +
+
+ + 开挖深度: + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-explosion.htm b/website/public/static/demo/military/example/analysis/analysis-explosion.htm new file mode 100644 index 000000000..de6bec5d3 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-explosion.htm @@ -0,0 +1,92 @@ + + + + + + + 爆炸分析 + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-floor.htm b/website/public/static/demo/military/example/analysis/analysis-floor.htm new file mode 100644 index 000000000..1c061bd80 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-floor.htm @@ -0,0 +1,207 @@ + + + + + + + 洪水淹没分析 + + + + + + + + + + +
+
+

参数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
淹没最底高度 + +
淹没最高高度 + +
洪水上涨速度 + +
波浪个数 + +
波浪速度 + +
波浪高度 + +
+
+ + + +
+
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-modelflatten.htm b/website/public/static/demo/military/example/analysis/analysis-modelflatten.htm new file mode 100644 index 000000000..4b4037d00 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-modelflatten.htm @@ -0,0 +1,123 @@ + + + + + + + 模型压平 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-rollershutters.htm b/website/public/static/demo/military/example/analysis/analysis-rollershutters.htm new file mode 100644 index 000000000..d9bea7081 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-rollershutters.htm @@ -0,0 +1,129 @@ + + + + + + + 动态卷帘 + + + + + + + + + + +
+
+ + 卷帘距离: + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-sceneprojection copy.htm b/website/public/static/demo/military/example/analysis/analysis-sceneprojection copy.htm new file mode 100644 index 000000000..b0d1484e8 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-sceneprojection copy.htm @@ -0,0 +1,277 @@ + + + + + + 场景投放 + + + + + + + + + + +
+ + + + + + + +
+
+ 鼠标左键选择观察点 +
+ 点击鼠标右键完成场景投放 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-sceneprojection.htm b/website/public/static/demo/military/example/analysis/analysis-sceneprojection.htm new file mode 100644 index 000000000..5d95240f0 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-sceneprojection.htm @@ -0,0 +1,149 @@ + + + + + + + 场景投放 + + + + + + + + + +
+
+ 鼠标左键选择观察点 +
+ 点击鼠标左键或右键完成场景投放 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-skyline.htm b/website/public/static/demo/military/example/analysis/analysis-skyline.htm new file mode 100644 index 000000000..d1a41cd20 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-skyline.htm @@ -0,0 +1,102 @@ + + + + + + + 天际线分析 + + + + + + + + + +
+
+ 鼠标左键点击执行天际线分析 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-slopeAnalysis-normal.htm b/website/public/static/demo/military/example/analysis/analysis-slopeAnalysis-normal.htm new file mode 100644 index 000000000..ebff391d3 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-slopeAnalysis-normal.htm @@ -0,0 +1,107 @@ + + + + + + 坡度分析 + + + + + + + + + +
+ + diff --git a/website/public/static/demo/military/example/analysis/analysis-slopeAnalysis.htm b/website/public/static/demo/military/example/analysis/analysis-slopeAnalysis.htm new file mode 100644 index 000000000..4aa7fd363 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-slopeAnalysis.htm @@ -0,0 +1,79 @@ + + + + + + + 坡度分析 + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-visibility.htm b/website/public/static/demo/military/example/analysis/analysis-visibility.htm new file mode 100644 index 000000000..3ac30ba29 --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-visibility.htm @@ -0,0 +1,165 @@ + + + + + + + 通视分析 + + + + + + + + + + + +
+
+ 鼠标左键选择起点 +
+ 右键选择结束点并执行通视分析 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/analysis/analysis-visiblerange.htm b/website/public/static/demo/military/example/analysis/analysis-visiblerange.htm new file mode 100644 index 000000000..148a4656b --- /dev/null +++ b/website/public/static/demo/military/example/analysis/analysis-visiblerange.htm @@ -0,0 +1,163 @@ + + + + + + + 可视域分析 + + + + + + + + + + +
+
+ 鼠标左键选择观察点 +
+ 点击鼠标左键或右键完成可视域分析 +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-along.htm b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-along.htm new file mode 100644 index 000000000..d612a737c --- /dev/null +++ b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-along.htm @@ -0,0 +1,160 @@ + + + + + + Along + + + + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-bezierspline.htm b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-bezierspline.htm new file mode 100644 index 000000000..7f23d7dd0 --- /dev/null +++ b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-bezierspline.htm @@ -0,0 +1,105 @@ + + + + + + Along + + + + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-buffer.htm b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-buffer.htm new file mode 100644 index 000000000..06dc23407 --- /dev/null +++ b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-buffer.htm @@ -0,0 +1,111 @@ + + + + + + Buffer缓冲区分析 + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-centroid.htm b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-centroid.htm new file mode 100644 index 000000000..5ce9f6e0b --- /dev/null +++ b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-centroid.htm @@ -0,0 +1,93 @@ + + + + + + Measure distances + + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-intersect.htm b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-intersect.htm new file mode 100644 index 000000000..ad8337e82 --- /dev/null +++ b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-intersect.htm @@ -0,0 +1,105 @@ + + + + + + Along + + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-tin.htm b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-tin.htm new file mode 100644 index 000000000..57a4ea12c --- /dev/null +++ b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-tin.htm @@ -0,0 +1,75 @@ + + + + + + Measure distances + + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-voronoi.htm b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-voronoi.htm new file mode 100644 index 000000000..fd87e68c1 --- /dev/null +++ b/website/public/static/demo/military/example/clientAnalysis/clientAnalysis-voronoi.htm @@ -0,0 +1,78 @@ + + + + + + Measure distances + + + + + + + + + +
+ + + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-.htm b/website/public/static/demo/military/example/clientView/clientView-.htm new file mode 100644 index 000000000..e0f573765 --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-.htm @@ -0,0 +1,121 @@ + + + + + + + 添加图片 + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-appendImage.htm b/website/public/static/demo/military/example/clientView/clientView-appendImage.htm new file mode 100644 index 000000000..fbecbbda4 --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-appendImage.htm @@ -0,0 +1,74 @@ + + + + + + + 添加图片 + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-dynamiccircle.htm b/website/public/static/demo/military/example/clientView/clientView-dynamiccircle.htm new file mode 100644 index 000000000..b273bcf2f --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-dynamiccircle.htm @@ -0,0 +1,82 @@ + + + + + + + 动态圆 + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-fire.htm b/website/public/static/demo/military/example/clientView/clientView-fire.htm new file mode 100644 index 000000000..381713d5c --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-fire.htm @@ -0,0 +1,217 @@ + + + + + + + 火焰特效 + + + + + + + + + +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
排放率(emissionRate) + + +
图像尺寸(imageSize) + + +
粒子生命(particleLife) + + +
速度(speed) + + +
起始规模(startScale) + + +
终止规模(endScale) + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-firework.htm b/website/public/static/demo/military/example/clientView/clientView-firework.htm new file mode 100644 index 000000000..bd5322dc1 --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-firework.htm @@ -0,0 +1,60 @@ + + + + + + + 烟花特效 + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-fog.htm b/website/public/static/demo/military/example/clientView/clientView-fog.htm new file mode 100644 index 000000000..46c89fa26 --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-fog.htm @@ -0,0 +1,71 @@ + + + + + + + 雾特效 + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-heatmap.htm b/website/public/static/demo/military/example/clientView/clientView-heatmap.htm new file mode 100644 index 000000000..b9e8eedf8 --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-heatmap.htm @@ -0,0 +1,163 @@ + + + + + + 热力图计算 + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-radarscanning.htm b/website/public/static/demo/military/example/clientView/clientView-radarscanning.htm new file mode 100644 index 000000000..7ee87947d --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-radarscanning.htm @@ -0,0 +1,103 @@ + + + + + + 雷达扫描圆 + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-rain.htm b/website/public/static/demo/military/example/clientView/clientView-rain.htm new file mode 100644 index 000000000..848326345 --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-rain.htm @@ -0,0 +1,70 @@ + + + + + + 下雨特效 + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-smoke.htm b/website/public/static/demo/military/example/clientView/clientView-smoke.htm new file mode 100644 index 000000000..d111530f5 --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-smoke.htm @@ -0,0 +1,224 @@ + + + + + + + 烟雾特效 + + + + + + + + + +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
排放率(emissionRate) + + +
图像尺寸(imageSize) + + +
粒子生命(particleLife) + + +
速度(speed) + + +
起始规模(startScale) + + +
终止规模(endScale) + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView/clientView-snow.htm b/website/public/static/demo/military/example/clientView/clientView-snow.htm new file mode 100644 index 000000000..ef54de489 --- /dev/null +++ b/website/public/static/demo/military/example/clientView/clientView-snow.htm @@ -0,0 +1,78 @@ + + + + + + 下雪特效 + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-air.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-air.htm new file mode 100644 index 000000000..fd1f37547 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-air.htm @@ -0,0 +1,1122 @@ + + + + + + + 散点图-空气质量 + + + + + + + + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-biggps.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-biggps.htm new file mode 100644 index 000000000..12f0d145a --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-biggps.htm @@ -0,0 +1,126 @@ + + + + + + 散点图-世界GPS + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-bigline.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-bigline.htm new file mode 100644 index 000000000..ec5da4186 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-bigline.htm @@ -0,0 +1,130 @@ + + + + + + 渐进线-纽约街道 + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-bigpoint.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-bigpoint.htm new file mode 100644 index 000000000..0d13b2371 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-bigpoint.htm @@ -0,0 +1,122 @@ + + + + + + 散点图-纽约热力 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-bigroad.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-bigroad.htm new file mode 100644 index 000000000..0dbcde836 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-bigroad.htm @@ -0,0 +1,122 @@ + + + + + + 路径图-中国主干 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-grid.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-grid.htm new file mode 100644 index 000000000..ab3d32338 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-grid.htm @@ -0,0 +1,196 @@ + + + + + + + 自定义-网格专题 + + + + + + + + + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-heater.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-heater.htm new file mode 100644 index 000000000..ed967c126 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-heater.htm @@ -0,0 +1,1066 @@ + + + + + + + 热力图-空气质量 + + + + + + + + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-line.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-line.htm new file mode 100644 index 000000000..b41cbc23c --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-line.htm @@ -0,0 +1,107 @@ + + + + + + + 路径图-渐进绘制 + + + + + + + + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-lineanimate.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-lineanimate.htm new file mode 100644 index 000000000..4e6a35bea --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-lineanimate.htm @@ -0,0 +1,134 @@ + + + + + + + 路径图-公交路线 + + + + + + + + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-migarate.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-migarate.htm new file mode 100644 index 000000000..5dc17dbf6 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-migarate.htm @@ -0,0 +1,587 @@ + + + + + + + 路径图-模拟迁徙 + + + + + + + + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_Echarts/echarts-weibo.htm b/website/public/static/demo/military/example/clientView_Echarts/echarts-weibo.htm new file mode 100644 index 000000000..7c8e08e15 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_Echarts/echarts-weibo.htm @@ -0,0 +1,154 @@ + + + + + + + 散点图-微博签到 + + + + + + + + + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-heater.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-heater.htm new file mode 100644 index 000000000..a05c1bd2b --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-heater.htm @@ -0,0 +1,135 @@ + + + + + + 热力图 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-migrate.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-migrate.htm new file mode 100644 index 000000000..e91233e7e --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-migrate.htm @@ -0,0 +1,163 @@ + + + + + + 迁移图 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-path_converge.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-path_converge.htm new file mode 100644 index 000000000..63f3a3acf --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-path_converge.htm @@ -0,0 +1,196 @@ + + + + + + 轨迹汇聚 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-point_animate.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-point_animate.htm new file mode 100644 index 000000000..e6e0d83ba --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-point_animate.htm @@ -0,0 +1,104 @@ + + + + + + 点数据播放 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-point_grid.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-point_grid.htm new file mode 100644 index 000000000..9633d8c81 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-point_grid.htm @@ -0,0 +1,102 @@ + + + + + + Along + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-point_honeycomb.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-point_honeycomb.htm new file mode 100644 index 000000000..db6cb1312 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-point_honeycomb.htm @@ -0,0 +1,98 @@ + + + + + + 蜂窝形密度 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-point_mutilanimate.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-point_mutilanimate.htm new file mode 100644 index 000000000..7de8b61b8 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-point_mutilanimate.htm @@ -0,0 +1,118 @@ + + + + + 点重叠播放 + + + + + + + + +
+ + + diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-point_weibo.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-point_weibo.htm new file mode 100644 index 000000000..0b6b16854 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-point_weibo.htm @@ -0,0 +1,137 @@ + + + + + 点微博数据 + + + + + + + + +
+ + + diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-render_polygon.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-render_polygon.htm new file mode 100644 index 000000000..c5bfa3356 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-render_polygon.htm @@ -0,0 +1,61 @@ + + + + + + 区数据渲染 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-simplemigrate.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-simplemigrate.htm new file mode 100644 index 000000000..fce6d87a9 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-simplemigrate.htm @@ -0,0 +1,267 @@ + + + + + + 单一迁移轨迹 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-tracker.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-tracker.htm new file mode 100644 index 000000000..09dec0527 --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-tracker.htm @@ -0,0 +1,119 @@ + + + + + + 动态轨迹 + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/clientView_MapV/mapv-trackerline.htm b/website/public/static/demo/military/example/clientView_MapV/mapv-trackerline.htm new file mode 100644 index 000000000..18f49331d --- /dev/null +++ b/website/public/static/demo/military/example/clientView_MapV/mapv-trackerline.htm @@ -0,0 +1,59 @@ + + + + + 交通轨迹 + + + + + + + + +
+ + + diff --git a/website/public/static/demo/military/example/data/data-3Dtiles.htm b/website/public/static/demo/military/example/data/data-3Dtiles.htm new file mode 100644 index 000000000..8ae8c6fd1 --- /dev/null +++ b/website/public/static/demo/military/example/data/data-3Dtiles.htm @@ -0,0 +1,61 @@ + + + + + + 3DTile数据加载 + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-addgltf.htm b/website/public/static/demo/military/example/data/data-addgltf.htm new file mode 100644 index 000000000..db1e6b160 --- /dev/null +++ b/website/public/static/demo/military/example/data/data-addgltf.htm @@ -0,0 +1,93 @@ + + + + + + 添加Gltf模型 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-addgltfs.htm b/website/public/static/demo/military/example/data/data-addgltfs.htm new file mode 100644 index 000000000..453fe2ee4 --- /dev/null +++ b/website/public/static/demo/military/example/data/data-addgltfs.htm @@ -0,0 +1,142 @@ + + + + + + 批量添加Gltf模型 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-czml.htm b/website/public/static/demo/military/example/data/data-czml.htm new file mode 100644 index 000000000..74d37986f --- /dev/null +++ b/website/public/static/demo/military/example/data/data-czml.htm @@ -0,0 +1,85 @@ + + + + + + 添加CZML数据 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-geojson.htm b/website/public/static/demo/military/example/data/data-geojson.htm new file mode 100644 index 000000000..6291970b4 --- /dev/null +++ b/website/public/static/demo/military/example/data/data-geojson.htm @@ -0,0 +1,74 @@ + + + + + + 添加GeoJson数据 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-kml.htm b/website/public/static/demo/military/example/data/data-kml.htm new file mode 100644 index 000000000..a3a0c5e45 --- /dev/null +++ b/website/public/static/demo/military/example/data/data-kml.htm @@ -0,0 +1,80 @@ + + + + + + 添加KML数据 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-kmz.htm b/website/public/static/demo/military/example/data/data-kmz.htm new file mode 100644 index 000000000..e08a6dca1 --- /dev/null +++ b/website/public/static/demo/military/example/data/data-kmz.htm @@ -0,0 +1,74 @@ + + + + + + 添加KMZ数据 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-movegltf.htm b/website/public/static/demo/military/example/data/data-movegltf.htm new file mode 100644 index 000000000..0324bec8b --- /dev/null +++ b/website/public/static/demo/military/example/data/data-movegltf.htm @@ -0,0 +1,151 @@ + + + + + + 交互式移动模型数据 + + + + + + + + + + + +
+
+ +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-onlineImage.htm b/website/public/static/demo/military/example/data/data-onlineImage.htm new file mode 100644 index 000000000..2faef74f1 --- /dev/null +++ b/website/public/static/demo/military/example/data/data-onlineImage.htm @@ -0,0 +1,89 @@ + + + + + + + 添加在线图片数据 + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/data/data-outlineImage.htm b/website/public/static/demo/military/example/data/data-outlineImage.htm new file mode 100644 index 000000000..6d8961550 --- /dev/null +++ b/website/public/static/demo/military/example/data/data-outlineImage.htm @@ -0,0 +1,64 @@ + + + + + + 添加本地图片数据 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundhole.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundhole.htm new file mode 100644 index 000000000..a5d95771d --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundhole.htm @@ -0,0 +1,157 @@ + + + + + + 贴地带洞多边形 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundline.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundline.htm new file mode 100644 index 000000000..59b497a76 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundline.htm @@ -0,0 +1,86 @@ + + + + + + 贴地球线绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundpolygon.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundpolygon.htm new file mode 100644 index 000000000..a372de96b --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-groundpolygon.htm @@ -0,0 +1,93 @@ + + + + + + 贴地多边形绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-hole.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-hole.htm new file mode 100644 index 000000000..a7008d98b --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-hole.htm @@ -0,0 +1,129 @@ + + + + + + 绘制带洞区 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-icon.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-icon.htm new file mode 100644 index 000000000..a196b0107 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-icon.htm @@ -0,0 +1,86 @@ + + + + + + 图片标签 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-interaction.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-interaction.htm new file mode 100644 index 000000000..ccd62b68a --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-interaction.htm @@ -0,0 +1,268 @@ + + + + + + 交互式图形绘制 + + + + + + + + + + + +
+
+ + + + +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-label.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-label.htm new file mode 100644 index 000000000..5c31aede0 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-label.htm @@ -0,0 +1,101 @@ + + + + + + 文本标注 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-labelicon.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-labelicon.htm new file mode 100644 index 000000000..072c4210d --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-labelicon.htm @@ -0,0 +1,143 @@ + + + + + + 地标绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-line.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-line.htm new file mode 100644 index 000000000..3d8324f45 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-line.htm @@ -0,0 +1,109 @@ + + + + + + 线实体绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-militarysymbol.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-militarysymbol.htm new file mode 100644 index 000000000..3c894f366 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-militarysymbol.htm @@ -0,0 +1,30 @@ + + + + + + 动态圆 + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-picsymbol.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-picsymbol.htm new file mode 100644 index 000000000..0c3624193 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-picsymbol.htm @@ -0,0 +1,115 @@ + + + + + + 地标绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-picture.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-picture.htm new file mode 100644 index 000000000..b5bda4545 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-picture.htm @@ -0,0 +1,64 @@ + + + + + + 图片展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-point.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-point.htm new file mode 100644 index 000000000..93d981d37 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-point.htm @@ -0,0 +1,105 @@ + + + + + + 点实体绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-polygon.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-polygon.htm new file mode 100644 index 000000000..c8f727d05 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-polygon.htm @@ -0,0 +1,102 @@ + + + + + + 立体区绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-popup.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-popup.htm new file mode 100644 index 000000000..47d2f7650 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-popup.htm @@ -0,0 +1,101 @@ + + + + + + 气泡弹窗 + + + + + + + + + + + +
+ + +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-stretchpolygon.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-stretchpolygon.htm new file mode 100644 index 000000000..95d81030f --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-stretchpolygon.htm @@ -0,0 +1,123 @@ + + + + + + 拉伸区绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-symbol.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-symbol.htm new file mode 100644 index 000000000..8e43832d4 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-symbol.htm @@ -0,0 +1,81 @@ + + + + + + + 注记 + + + + + + + + +
+
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-terrainline.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-terrainline.htm new file mode 100644 index 000000000..258361baa --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-terrainline.htm @@ -0,0 +1,117 @@ + + + + + + 贴地形线绘制 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/drawGraphic/drawGraphic-terrainpolygon.htm b/website/public/static/demo/military/example/drawGraphic/drawGraphic-terrainpolygon.htm new file mode 100644 index 000000000..1bd542677 --- /dev/null +++ b/website/public/static/demo/military/example/drawGraphic/drawGraphic-terrainpolygon.htm @@ -0,0 +1,107 @@ + + + + + + 贴地形区绘制 + + + + + + + + + + + +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/globe/chicago.htm b/website/public/static/demo/military/example/globe/chicago.htm new file mode 100644 index 000000000..c0f58b043 --- /dev/null +++ b/website/public/static/demo/military/example/globe/chicago.htm @@ -0,0 +1,166 @@ + + + + + + + 加载WMS服务 + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/globe/paris.htm b/website/public/static/demo/military/example/globe/paris.htm new file mode 100644 index 000000000..afef91ccb --- /dev/null +++ b/website/public/static/demo/military/example/globe/paris.htm @@ -0,0 +1,169 @@ + + + + + + + 加载WMS服务 + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/globe/washington.htm b/website/public/static/demo/military/example/globe/washington.htm new file mode 100644 index 000000000..995b7a087 --- /dev/null +++ b/website/public/static/demo/military/example/globe/washington.htm @@ -0,0 +1,200 @@ + + + + + + + 加载WMS服务 + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/animiator.htm b/website/public/static/demo/military/example/gnss/animiator.htm new file mode 100644 index 000000000..ccd1f0734 --- /dev/null +++ b/website/public/static/demo/military/example/gnss/animiator.htm @@ -0,0 +1,38 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/boom.htm b/website/public/static/demo/military/example/gnss/boom.htm new file mode 100644 index 000000000..9dcb32dcd --- /dev/null +++ b/website/public/static/demo/military/example/gnss/boom.htm @@ -0,0 +1,368 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/communicate.htm b/website/public/static/demo/military/example/gnss/communicate.htm new file mode 100644 index 000000000..4ea72f38d --- /dev/null +++ b/website/public/static/demo/military/example/gnss/communicate.htm @@ -0,0 +1,38 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/fire.htm b/website/public/static/demo/military/example/gnss/fire.htm new file mode 100644 index 000000000..5b4028393 --- /dev/null +++ b/website/public/static/demo/military/example/gnss/fire.htm @@ -0,0 +1,37 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/flight.htm b/website/public/static/demo/military/example/gnss/flight.htm new file mode 100644 index 000000000..9430f6eeb --- /dev/null +++ b/website/public/static/demo/military/example/gnss/flight.htm @@ -0,0 +1,38 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/mutil_bloom.htm b/website/public/static/demo/military/example/gnss/mutil_bloom.htm new file mode 100644 index 000000000..5e208a037 --- /dev/null +++ b/website/public/static/demo/military/example/gnss/mutil_bloom.htm @@ -0,0 +1,38 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/saastamonien.htm b/website/public/static/demo/military/example/gnss/saastamonien.htm new file mode 100644 index 000000000..6fff70d82 --- /dev/null +++ b/website/public/static/demo/military/example/gnss/saastamonien.htm @@ -0,0 +1,38 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/satellite.htm b/website/public/static/demo/military/example/gnss/satellite.htm new file mode 100644 index 000000000..fdd858f2d --- /dev/null +++ b/website/public/static/demo/military/example/gnss/satellite.htm @@ -0,0 +1,61 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/ship.htm b/website/public/static/demo/military/example/gnss/ship.htm new file mode 100644 index 000000000..cf053c737 --- /dev/null +++ b/website/public/static/demo/military/example/gnss/ship.htm @@ -0,0 +1,37 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/gnss/track.htm b/website/public/static/demo/military/example/gnss/track.htm new file mode 100644 index 000000000..6a9737e39 --- /dev/null +++ b/website/public/static/demo/military/example/gnss/track.htm @@ -0,0 +1,38 @@ + + + + + + Along + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-analysis.htm b/website/public/static/demo/military/example/m3d/m3d-analysis.htm new file mode 100644 index 000000000..059969fde --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-analysis.htm @@ -0,0 +1,203 @@ + + + + + + 地层分析 + + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-bim.htm b/website/public/static/demo/military/example/m3d/m3d-bim.htm new file mode 100644 index 000000000..246719493 --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-bim.htm @@ -0,0 +1,69 @@ + + + + + + M3D-BIM模型数据展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-drill.htm b/website/public/static/demo/military/example/m3d/m3d-drill.htm new file mode 100644 index 000000000..9c8685784 --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-drill.htm @@ -0,0 +1,176 @@ + + + + + + M3D-地质钻孔数据展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-fileserver.htm b/website/public/static/demo/military/example/m3d/m3d-fileserver.htm new file mode 100644 index 000000000..a2425a39d --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-fileserver.htm @@ -0,0 +1,76 @@ + + + + + M3D-景观模型数据展示 + + + + + + + + + + + +
+ +
+ +
+ + diff --git a/website/public/static/demo/military/example/m3d/m3d-geobody-showlayer.htm b/website/public/static/demo/military/example/m3d/m3d-geobody-showlayer.htm new file mode 100644 index 000000000..a0a53bc2d --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-geobody-showlayer.htm @@ -0,0 +1,215 @@ + + + + + + M3D-地质体分层展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-geobody.htm b/website/public/static/demo/military/example/m3d/m3d-geobody.htm new file mode 100644 index 000000000..f0b53a43e --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-geobody.htm @@ -0,0 +1,131 @@ + + + + + + M3D-地质体数据展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-geobody1.htm b/website/public/static/demo/military/example/m3d/m3d-geobody1.htm new file mode 100644 index 000000000..d3212dcbf --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-geobody1.htm @@ -0,0 +1,67 @@ + + + + + + M3D-地质体数据展示1 + + + + + + + + + + +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-geobody2.htm b/website/public/static/demo/military/example/m3d/m3d-geobody2.htm new file mode 100644 index 000000000..60b70a75f --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-geobody2.htm @@ -0,0 +1,95 @@ + + + + + + + 加载WMS服务 + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-geobodygrid.htm b/website/public/static/demo/military/example/m3d/m3d-geobodygrid.htm new file mode 100644 index 000000000..209978e98 --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-geobodygrid.htm @@ -0,0 +1,76 @@ + + + + + + M3D-地质体网格数据展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-landscape.htm b/website/public/static/demo/military/example/m3d/m3d-landscape.htm new file mode 100644 index 000000000..db7c02634 --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-landscape.htm @@ -0,0 +1,82 @@ + + + + + + M3D-景观模型数据展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-oblique.htm b/website/public/static/demo/military/example/m3d/m3d-oblique.htm new file mode 100644 index 000000000..24073315c --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-oblique.htm @@ -0,0 +1,80 @@ + + + + + + M3D-倾斜摄影数据展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-pointcloud.htm b/website/public/static/demo/military/example/m3d/m3d-pointcloud.htm new file mode 100644 index 000000000..71d77b813 --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-pointcloud.htm @@ -0,0 +1,76 @@ + + + + + + M3D-点云数据展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-roughmodel.htm b/website/public/static/demo/military/example/m3d/m3d-roughmodel.htm new file mode 100644 index 000000000..886252a2e --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-roughmodel.htm @@ -0,0 +1,83 @@ + + + + + + M3D-建筑粗模数据展示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-terrain.htm b/website/public/static/demo/military/example/m3d/m3d-terrain.htm new file mode 100644 index 000000000..c1be06f5a --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-terrain.htm @@ -0,0 +1,71 @@ + + + + + + M3D-地形数据展示 + + + + + + + + + + +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/m3d/m3d-underpipe.htm b/website/public/static/demo/military/example/m3d/m3d-underpipe.htm new file mode 100644 index 000000000..76e8b7616 --- /dev/null +++ b/website/public/static/demo/military/example/m3d/m3d-underpipe.htm @@ -0,0 +1,92 @@ + + + + + + M3D-地下管线数据展示 + + + + + + + + + + + +
+
+ + 透明度: +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapboxstyle.htm b/website/public/static/demo/military/example/mapgis/mapboxstyle.htm new file mode 100644 index 000000000..cd7989d99 --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapboxstyle.htm @@ -0,0 +1,57 @@ + + + + + + + 地层分析 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-2d-doc.htm b/website/public/static/demo/military/example/mapgis/mapgis-2d-doc.htm new file mode 100644 index 000000000..37424a208 --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-2d-doc.htm @@ -0,0 +1,90 @@ + + + + + + 加载IGServer二维矢量地图服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-2d-layer.htm b/website/public/static/demo/military/example/mapgis/mapgis-2d-layer.htm new file mode 100644 index 000000000..7e8505299 --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-2d-layer.htm @@ -0,0 +1,89 @@ + + + + + + 加载IGServer二维矢量图层服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-2d-tile.htm b/website/public/static/demo/military/example/mapgis/mapgis-2d-tile.htm new file mode 100644 index 000000000..1a100ab4a --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-2d-tile.htm @@ -0,0 +1,90 @@ + + + + + + 加载IGServer二维瓦片地图服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-2dtile.htm b/website/public/static/demo/military/example/mapgis/mapgis-2dtile.htm new file mode 100644 index 000000000..572517194 --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-2dtile.htm @@ -0,0 +1,89 @@ + + + + + + + 加载二维瓦片地图 + + + + + + + + + +
+
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-2dvector.htm b/website/public/static/demo/military/example/mapgis/mapgis-2dvector.htm new file mode 100644 index 000000000..281d5ea0e --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-2dvector.htm @@ -0,0 +1,96 @@ + + + + + + + 加载WMS服务 + + + + + + + +
+ + +
+
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-dem.htm b/website/public/static/demo/military/example/mapgis/mapgis-dem.htm new file mode 100644 index 000000000..65f55ec3e --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-dem.htm @@ -0,0 +1,79 @@ + + + + + + 加载WMS服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-dem250.htm b/website/public/static/demo/military/example/mapgis/mapgis-dem250.htm new file mode 100644 index 000000000..dce08fc0f --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-dem250.htm @@ -0,0 +1,84 @@ + + + + + + + 加载WMS服务 + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-oblique.htm b/website/public/static/demo/military/example/mapgis/mapgis-oblique.htm new file mode 100644 index 000000000..5c9ba499c --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-oblique.htm @@ -0,0 +1,78 @@ + + + + + + 倾斜摄影 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-raster.htm b/website/public/static/demo/military/example/mapgis/mapgis-raster.htm new file mode 100644 index 000000000..3fa03404c --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-raster.htm @@ -0,0 +1,73 @@ + + + + + + 加载WMS服务 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-raster250.htm b/website/public/static/demo/military/example/mapgis/mapgis-raster250.htm new file mode 100644 index 000000000..a1e540500 --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-raster250.htm @@ -0,0 +1,63 @@ + + + + + + 加载WMS服务 + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/military/example/mapgis/mapgis-terrain.htm b/website/public/static/demo/military/example/mapgis/mapgis-terrain.htm new file mode 100644 index 000000000..96f15d28d --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-terrain.htm @@ -0,0 +1,80 @@ + + + + + + 地形数据显示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-vectortile-4326.htm b/website/public/static/demo/military/example/mapgis/mapgis-vectortile-4326.htm new file mode 100644 index 000000000..d139f6f42 --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-vectortile-4326.htm @@ -0,0 +1,78 @@ + + + + + 地层分析 + + + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/military/example/mapgis/mapgis-vectortile-darkstyle.htm b/website/public/static/demo/military/example/mapgis/mapgis-vectortile-darkstyle.htm new file mode 100644 index 000000000..dd068c478 --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-vectortile-darkstyle.htm @@ -0,0 +1,72 @@ + + + + + + + 地层分析 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-vectortile-lightstyle.htm b/website/public/static/demo/military/example/mapgis/mapgis-vectortile-lightstyle.htm new file mode 100644 index 000000000..c9ba4ae1c --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-vectortile-lightstyle.htm @@ -0,0 +1,72 @@ + + + + + + + 地层分析 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-vectortile-streetstyle.htm b/website/public/static/demo/military/example/mapgis/mapgis-vectortile-streetstyle.htm new file mode 100644 index 000000000..4e42fce2b --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-vectortile-streetstyle.htm @@ -0,0 +1,72 @@ + + + + + + + 地层分析 + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/mapgis/mapgis-vectortile.htm b/website/public/static/demo/military/example/mapgis/mapgis-vectortile.htm new file mode 100644 index 000000000..59740e44f --- /dev/null +++ b/website/public/static/demo/military/example/mapgis/mapgis-vectortile.htm @@ -0,0 +1,87 @@ + + + + + + 地层分析 + + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/measure/measure-area.htm b/website/public/static/demo/military/example/measure/measure-area.htm new file mode 100644 index 000000000..3e8a21de9 --- /dev/null +++ b/website/public/static/demo/military/example/measure/measure-area.htm @@ -0,0 +1,96 @@ + + + + + + + 计算面积 + + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/measure/measure-length.htm b/website/public/static/demo/military/example/measure/measure-length.htm new file mode 100644 index 000000000..7baf8a5f9 --- /dev/null +++ b/website/public/static/demo/military/example/measure/measure-length.htm @@ -0,0 +1,96 @@ + + + + + + + 计算长度 + + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/measure/measure-slpoe.htm b/website/public/static/demo/military/example/measure/measure-slpoe.htm new file mode 100644 index 000000000..fc28d2c53 --- /dev/null +++ b/website/public/static/demo/military/example/measure/measure-slpoe.htm @@ -0,0 +1,96 @@ + + + + + + + 测量坡度 + + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/measure/measure-triangle.htm b/website/public/static/demo/military/example/measure/measure-triangle.htm new file mode 100644 index 000000000..7ed5db4a6 --- /dev/null +++ b/website/public/static/demo/military/example/measure/measure-triangle.htm @@ -0,0 +1,96 @@ + + + + + + + 三角测量 + + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/ogc/ogc-wms.htm b/website/public/static/demo/military/example/ogc/ogc-wms.htm new file mode 100644 index 000000000..59f64b206 --- /dev/null +++ b/website/public/static/demo/military/example/ogc/ogc-wms.htm @@ -0,0 +1,80 @@ + + + + + + 加载WMS服务地图 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/ogc/ogc-wmts.htm b/website/public/static/demo/military/example/ogc/ogc-wmts.htm new file mode 100644 index 000000000..bff310a03 --- /dev/null +++ b/website/public/static/demo/military/example/ogc/ogc-wmts.htm @@ -0,0 +1,81 @@ + + + + + + 加载WMTS服务地图 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/query/query-2dByAtt.htm b/website/public/static/demo/military/example/query/query-2dByAtt.htm new file mode 100644 index 000000000..1cf221fb9 --- /dev/null +++ b/website/public/static/demo/military/example/query/query-2dByAtt.htm @@ -0,0 +1,176 @@ + + + + + + 加载IGServer二维矢量地图服务 + + + + + + + + + + + +
+
+ +
+
+

查询结果

+ + + + + + + + + + + + + + + + + + + +
行政区代码: + +
省名: + +
拼音: + +
人口数 + +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/query/query-2dByOID.htm b/website/public/static/demo/military/example/query/query-2dByOID.htm new file mode 100644 index 000000000..ed1a9fcea --- /dev/null +++ b/website/public/static/demo/military/example/query/query-2dByOID.htm @@ -0,0 +1,174 @@ + + + + + + 加载IGServer二维矢量地图服务 + + + + + + + + + + + +
+
+ +
+
+

查询结果

+ + + + + + + + + + + + + + + + + + + +
行政区代码: + +
省名: + +
拼音: + +
人口数 + +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/query/query-2dBygeometry.htm b/website/public/static/demo/military/example/query/query-2dBygeometry.htm new file mode 100644 index 000000000..0fb3fa110 --- /dev/null +++ b/website/public/static/demo/military/example/query/query-2dBygeometry.htm @@ -0,0 +1,175 @@ + + + + + + 加载IGServer二维矢量地图服务 + + + + + + + + + + + +
+
+ +
+
+

查询结果

+ + + + + + + + + + + + + + + + + + + +
行政区代码: + +
省名: + +
拼音: + +
人口数 + +
+
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/query/query-attquery.htm b/website/public/static/demo/military/example/query/query-attquery.htm new file mode 100644 index 000000000..297a8b431 --- /dev/null +++ b/website/public/static/demo/military/example/query/query-attquery.htm @@ -0,0 +1,128 @@ + + + + + + + 属性查询 + + + + + + + + + +
+
+

查询结果

+ + + + + + + + + + + + + + + + + + + +
楼层: + +
层高: + +
房屋类型: + +
test: + +
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/query/query-geomquery.htm b/website/public/static/demo/military/example/query/query-geomquery.htm new file mode 100644 index 000000000..9e1abb3be --- /dev/null +++ b/website/public/static/demo/military/example/query/query-geomquery.htm @@ -0,0 +1,130 @@ + + + + + + + 动态圆 + + + + + + + + + +
+
+

查询结果

+ + + + + + + + + + + + + + + + + + + +
楼层: + +
层高: + +
房屋类型: + +
test: + +
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/query/query-m3deditor.htm b/website/public/static/demo/military/example/query/query-m3deditor.htm new file mode 100644 index 000000000..f1420ac79 --- /dev/null +++ b/website/public/static/demo/military/example/query/query-m3deditor.htm @@ -0,0 +1,138 @@ + + + + + + 交互式移动M3D数据 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/query/query-m3dquery.htm b/website/public/static/demo/military/example/query/query-m3dquery.htm new file mode 100644 index 000000000..bf6dd109b --- /dev/null +++ b/website/public/static/demo/military/example/query/query-m3dquery.htm @@ -0,0 +1,171 @@ + + + + + + M3D数据单体查询 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/query/query-oidquery.htm b/website/public/static/demo/military/example/query/query-oidquery.htm new file mode 100644 index 000000000..706d0804f --- /dev/null +++ b/website/public/static/demo/military/example/query/query-oidquery.htm @@ -0,0 +1,127 @@ + + + + + + + 动态圆 + + + + + + + + + +
+
+

查询结果

+ + + + + + + + + + + + + + + + + + + +
楼层: + +
层高: + +
房屋类型: + +
test: + +
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-2D.htm b/website/public/static/demo/military/example/scene/scene-2D.htm new file mode 100644 index 000000000..a28e3e494 --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-2D.htm @@ -0,0 +1,53 @@ + + + + + + + 二维模式 + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-3Dground.htm b/website/public/static/demo/military/example/scene/scene-3Dground.htm new file mode 100644 index 000000000..caa67fcec --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-3Dground.htm @@ -0,0 +1,53 @@ + + + + + + + 平面三维 + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-changeSkyBox.htm b/website/public/static/demo/military/example/scene/scene-changeSkyBox.htm new file mode 100644 index 000000000..ec7a58406 --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-changeSkyBox.htm @@ -0,0 +1,53 @@ + + + + + + + 修改场景的天空盒 + + + + + + + + + +
+
+ +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-fly.htm b/website/public/static/demo/military/example/scene/scene-fly.htm new file mode 100644 index 000000000..77926d04b --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-fly.htm @@ -0,0 +1,132 @@ + + + + + + + 跳转定位 + + + + + + + + + + +
+
+ + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-openRotation.htm b/website/public/static/demo/military/example/scene/scene-openRotation.htm new file mode 100644 index 000000000..1b86f590a --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-openRotation.htm @@ -0,0 +1,53 @@ + + + + + + + 自转与复位 + + + + + + + + + +
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-operation.htm b/website/public/static/demo/military/example/scene/scene-operation.htm new file mode 100644 index 000000000..9ee3b48b9 --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-operation.htm @@ -0,0 +1,159 @@ + + + + + + + 场景操作 + + + + + + + + + +
+
+ + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-rotationView.htm b/website/public/static/demo/military/example/scene/scene-rotationView.htm new file mode 100644 index 000000000..fc733a192 --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-rotationView.htm @@ -0,0 +1,114 @@ + + + + + + + 绕点旋转 + + + + + + + + + +
+
+ + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-sceneMode.htm b/website/public/static/demo/military/example/scene/scene-sceneMode.htm new file mode 100644 index 000000000..907078a2e --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-sceneMode.htm @@ -0,0 +1,71 @@ + + + + + + + 场景视图模式 + + + + + + + + + + +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-sceneOut.htm b/website/public/static/demo/military/example/scene/scene-sceneOut.htm new file mode 100644 index 000000000..234b23a69 --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-sceneOut.htm @@ -0,0 +1,105 @@ + + + + + + + 图片输出 + + + + + + + + + + +
+
+ + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-screenPosition.htm b/website/public/static/demo/military/example/scene/scene-screenPosition.htm new file mode 100644 index 000000000..ea41f1e1c --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-screenPosition.htm @@ -0,0 +1,177 @@ + + + + + + 屏幕坐标转换计算 + + + + + + + + + + +
+
+ + + +
+
+ 操作:先单击功能按钮,然后鼠标左键单击 +
+
+

屏幕坐标转换计算

+ + 屏幕坐标值: + + +
+ + 转换坐标值: + + +
+ + 高度值: + +
+
+
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-setView.htm b/website/public/static/demo/military/example/scene/scene-setView.htm new file mode 100644 index 000000000..d9a02a2d0 --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-setView.htm @@ -0,0 +1,70 @@ + + + + + + + 设置当前视图范围 + + + + + + + + + +
+
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-showPosition.htm b/website/public/static/demo/military/example/scene/scene-showPosition.htm new file mode 100644 index 000000000..0f6d10eee --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-showPosition.htm @@ -0,0 +1,49 @@ + + + + + + + 常用控件 + + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-undergroundMode.htm b/website/public/static/demo/military/example/scene/scene-undergroundMode.htm new file mode 100644 index 000000000..940d4bcee --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-undergroundMode.htm @@ -0,0 +1,86 @@ + + + + + + + 地下模式 + + + + + + + + + + +
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-undergroundOne.htm b/website/public/static/demo/military/example/scene/scene-undergroundOne.htm new file mode 100644 index 000000000..678d3be64 --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-undergroundOne.htm @@ -0,0 +1,36 @@ + + + + + + + 地下模式 + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/scene/scene-undergroundTwo.htm b/website/public/static/demo/military/example/scene/scene-undergroundTwo.htm new file mode 100644 index 000000000..f822b3939 --- /dev/null +++ b/website/public/static/demo/military/example/scene/scene-undergroundTwo.htm @@ -0,0 +1,40 @@ + + + + + + + 地下模式 + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/third/third-amap.htm b/website/public/static/demo/military/example/third/third-amap.htm new file mode 100644 index 000000000..11fbad3f1 --- /dev/null +++ b/website/public/static/demo/military/example/third/third-amap.htm @@ -0,0 +1,92 @@ + + + + + + 高德地图显示 + + + + + + + + + + + +
+
+ +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/third/third-baidu.htm b/website/public/static/demo/military/example/third/third-baidu.htm new file mode 100644 index 000000000..a0bf4f2c9 --- /dev/null +++ b/website/public/static/demo/military/example/third/third-baidu.htm @@ -0,0 +1,85 @@ + + + + + + 百度地图显示 + + + + + + + + + + + +
+ + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/third/third-geoway.htm b/website/public/static/demo/military/example/third/third-geoway.htm new file mode 100644 index 000000000..c6c360ba1 --- /dev/null +++ b/website/public/static/demo/military/example/third/third-geoway.htm @@ -0,0 +1,57 @@ + + + + + + GeoWay地图显示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/third/third-google.htm b/website/public/static/demo/military/example/third/third-google.htm new file mode 100644 index 000000000..fa60b9d9c --- /dev/null +++ b/website/public/static/demo/military/example/third/third-google.htm @@ -0,0 +1,118 @@ + + + + + + 谷歌地图显示 + + + + + + + + + + + +
+ + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/third/third-openweather.htm b/website/public/static/demo/military/example/third/third-openweather.htm new file mode 100644 index 000000000..2b9032b9c --- /dev/null +++ b/website/public/static/demo/military/example/third/third-openweather.htm @@ -0,0 +1,57 @@ + + + + + + OpenWeather地图显示 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/third/third-osm.htm b/website/public/static/demo/military/example/third/third-osm.htm new file mode 100644 index 000000000..714a762b8 --- /dev/null +++ b/website/public/static/demo/military/example/third/third-osm.htm @@ -0,0 +1,57 @@ + + + + + + osm显示 + + + + + + + + + + + +
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/third/third-osm.md b/website/public/static/demo/military/example/third/third-osm.md new file mode 100644 index 000000000..c61612daf --- /dev/null +++ b/website/public/static/demo/military/example/third/third-osm.md @@ -0,0 +1,77 @@ +## 加载 OSM 地图 + +### 示例功能 + +        本示例对接高德地图服务,实现在三维场景中加载高德地图,坐标系为 EPSG:3857,即 Web 墨卡托坐标系,网络为公网地址。 + +### 示例实现 + +        本示例需要使用【include-cesium-local.js】开发库实现,关键接口为 `CesiumZondy. Layer. ThirdPartyLayer` 类提供的 `appendOsmMap()` 方法,以此来加载高德地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 特别说明:使用 osm 地图请注意 `藏南` 与 `南海九段线` 问题,建议使用天地图。 + +### 实现步骤 + +**Step 1. 引用开发库**: + +        本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: + +        创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: + +        实例化 `Cesium. WebSceneControl` 对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + + ```javascript + //构造三维视图对象(视图容器 div 的 id,三维视图设置参数) + webGlobe = new Cesium.WebSceneControl('GlobeView', {}); + ``` + +**Step 4. 加载数据**: + +        加载数据:创建第三方数据图层类 `CesiumZondy. Layer. ThirdPartyLayer` 的对象,调用 `appendOsmMap()` 方法加载 osm 地图。 + +- Example: + + ```javascript + //构造第三方图层对象 + thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer + }); + //加载OSM地图 + var osm = thirdPartyLayer.appendOsmMap(); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】 `Cesium. WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【第三方数据图层类】 `CesiumZondy. Layer. ThirdPartyLayer` + +##### 【method】 `appendOsmMap(optionsParam) → {ImageryLayer}` :添加 osm 地图服务。 + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| optionsParam | Object | 附加属性 | diff --git a/website/public/static/demo/military/example/third/third-tianditu-wmts.htm b/website/public/static/demo/military/example/third/third-tianditu-wmts.htm new file mode 100644 index 000000000..76739f3f7 --- /dev/null +++ b/website/public/static/demo/military/example/third/third-tianditu-wmts.htm @@ -0,0 +1,92 @@ + + + + + + 天地图WMTS显示 + + + + + + + + + + + +
+ + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/third/third-tianditu.htm b/website/public/static/demo/military/example/third/third-tianditu.htm new file mode 100644 index 000000000..720f8bce9 --- /dev/null +++ b/website/public/static/demo/military/example/third/third-tianditu.htm @@ -0,0 +1,109 @@ + + + + + + 天地图显示 + + + + + + + + + + + +
+ + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/track/track-dynamicflight.htm b/website/public/static/demo/military/example/track/track-dynamicflight.htm new file mode 100644 index 000000000..d9b050e28 --- /dev/null +++ b/website/public/static/demo/military/example/track/track-dynamicflight.htm @@ -0,0 +1,138 @@ + + + + + + 动态航线 + + + + + + + + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/track/track-flow.htm b/website/public/static/demo/military/example/track/track-flow.htm new file mode 100644 index 000000000..772b98685 --- /dev/null +++ b/website/public/static/demo/military/example/track/track-flow.htm @@ -0,0 +1,127 @@ + + + + + + 模型漫游 + + + + + + + + + + + +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/track/track-groundflow.htm b/website/public/static/demo/military/example/track/track-groundflow.htm new file mode 100644 index 000000000..1bb860b4a --- /dev/null +++ b/website/public/static/demo/military/example/track/track-groundflow.htm @@ -0,0 +1,166 @@ + + + + + + 模型沿地形漫游 + + + + + + + + + + + +
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/vectortile/darkstyle.htm b/website/public/static/demo/military/example/vectortile/darkstyle.htm new file mode 100644 index 000000000..e2a3ed1f3 --- /dev/null +++ b/website/public/static/demo/military/example/vectortile/darkstyle.htm @@ -0,0 +1,84 @@ + + + + + + 地层分析 + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/military/example/vectortile/lightstyle.htm b/website/public/static/demo/military/example/vectortile/lightstyle.htm new file mode 100644 index 000000000..aba4b0ece --- /dev/null +++ b/website/public/static/demo/military/example/vectortile/lightstyle.htm @@ -0,0 +1,84 @@ + + + + + + 地层分析 + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/military/example/vectortile/mapboxstyle.htm b/website/public/static/demo/military/example/vectortile/mapboxstyle.htm new file mode 100644 index 000000000..e9502bf0c --- /dev/null +++ b/website/public/static/demo/military/example/vectortile/mapboxstyle.htm @@ -0,0 +1,70 @@ + + + + + + 地层分析 + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/military/example/vectortile/mapgis-vectortile-3857.htm b/website/public/static/demo/military/example/vectortile/mapgis-vectortile-3857.htm new file mode 100644 index 000000000..b51a90191 --- /dev/null +++ b/website/public/static/demo/military/example/vectortile/mapgis-vectortile-3857.htm @@ -0,0 +1,93 @@ + + + + + 地层分析 + + + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/military/example/vectortile/mapgis-vectortile-4326.htm b/website/public/static/demo/military/example/vectortile/mapgis-vectortile-4326.htm new file mode 100644 index 000000000..85d97409d --- /dev/null +++ b/website/public/static/demo/military/example/vectortile/mapgis-vectortile-4326.htm @@ -0,0 +1,126 @@ + + + + + 地层分析 + + + + + + + + + + + +
+ +
+ + +
+
+
改变布局属性
+
改变画笔属性
+
改变过滤属性
+
改变整体样式
+
+ + diff --git a/website/public/static/demo/military/example/vectortile/mapgis-vectortile-ast.htm b/website/public/static/demo/military/example/vectortile/mapgis-vectortile-ast.htm new file mode 100644 index 000000000..4fd9721f8 --- /dev/null +++ b/website/public/static/demo/military/example/vectortile/mapgis-vectortile-ast.htm @@ -0,0 +1,79 @@ + + + + + 地层分析 + + + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/military/example/vectortile/mapgis-vectortile-symbol.htm b/website/public/static/demo/military/example/vectortile/mapgis-vectortile-symbol.htm new file mode 100644 index 000000000..73e407068 --- /dev/null +++ b/website/public/static/demo/military/example/vectortile/mapgis-vectortile-symbol.htm @@ -0,0 +1,70 @@ + + + + + + 地层分析 + + + + + + + + + + +
+ +
+ + +
+ + + \ No newline at end of file diff --git a/website/public/static/demo/military/example/vectortile/mapgisstyle.htm b/website/public/static/demo/military/example/vectortile/mapgisstyle.htm new file mode 100644 index 000000000..99c8c25b0 --- /dev/null +++ b/website/public/static/demo/military/example/vectortile/mapgisstyle.htm @@ -0,0 +1,84 @@ + + + + + + 地层分析 + + + + + + + + +
+ +
+ + +
+ + diff --git a/website/public/static/demo/military/gallery/analysis/analysis-animation.png b/website/public/static/demo/military/gallery/analysis/analysis-animation.png new file mode 100644 index 000000000..028e41e50 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-animation.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-aspectAnalysis-normal.png b/website/public/static/demo/military/gallery/analysis/analysis-aspectAnalysis-normal.png new file mode 100644 index 000000000..5fe81cff2 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-aspectAnalysis-normal.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-aspectAnalysis.png b/website/public/static/demo/military/gallery/analysis/analysis-aspectAnalysis.png new file mode 100644 index 000000000..a811e5890 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-aspectAnalysis.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-cube.png b/website/public/static/demo/military/gallery/analysis/analysis-cube.png new file mode 100644 index 000000000..93586eaea Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-cube.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-dynamiccut.png b/website/public/static/demo/military/gallery/analysis/analysis-dynamiccut.png new file mode 100644 index 000000000..9d953e695 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-dynamiccut.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-excavate.png b/website/public/static/demo/military/gallery/analysis/analysis-excavate.png new file mode 100644 index 000000000..5607baec5 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-excavate.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-explosion.png b/website/public/static/demo/military/gallery/analysis/analysis-explosion.png new file mode 100644 index 000000000..2b69ef1d8 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-explosion.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-floor.png b/website/public/static/demo/military/gallery/analysis/analysis-floor.png new file mode 100644 index 000000000..af7cafe7b Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-floor.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-modelflatten.png b/website/public/static/demo/military/gallery/analysis/analysis-modelflatten.png new file mode 100644 index 000000000..008dceaf2 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-modelflatten.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-rollershutters.png b/website/public/static/demo/military/gallery/analysis/analysis-rollershutters.png new file mode 100644 index 000000000..0f35b87e1 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-rollershutters.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-sceneprojection.png b/website/public/static/demo/military/gallery/analysis/analysis-sceneprojection.png new file mode 100644 index 000000000..40b8d1454 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-sceneprojection.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-skyline.png b/website/public/static/demo/military/gallery/analysis/analysis-skyline.png new file mode 100644 index 000000000..499619f12 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-skyline.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-slopeAnalysis-normal.png b/website/public/static/demo/military/gallery/analysis/analysis-slopeAnalysis-normal.png new file mode 100644 index 000000000..14ef37693 Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-slopeAnalysis-normal.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-slopeAnalysis.png b/website/public/static/demo/military/gallery/analysis/analysis-slopeAnalysis.png new file mode 100644 index 000000000..21078934c Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-slopeAnalysis.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-visibility.png b/website/public/static/demo/military/gallery/analysis/analysis-visibility.png new file mode 100644 index 000000000..7f52192cb Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-visibility.png differ diff --git a/website/public/static/demo/military/gallery/analysis/analysis-visiblerange.png b/website/public/static/demo/military/gallery/analysis/analysis-visiblerange.png new file mode 100644 index 000000000..6b61647ce Binary files /dev/null and b/website/public/static/demo/military/gallery/analysis/analysis-visiblerange.png differ diff --git a/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-along.png b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-along.png new file mode 100644 index 000000000..ee1f0ce2f Binary files /dev/null and b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-along.png differ diff --git a/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-bezierspline.png b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-bezierspline.png new file mode 100644 index 000000000..b8fb63b4f Binary files /dev/null and b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-bezierspline.png differ diff --git a/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-buffer.png b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-buffer.png new file mode 100644 index 000000000..60d56044f Binary files /dev/null and b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-buffer.png differ diff --git a/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-centroid.png b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-centroid.png new file mode 100644 index 000000000..511342ae4 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-centroid.png differ diff --git a/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-intersect.png b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-intersect.png new file mode 100644 index 000000000..c2a1dc233 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-intersect.png differ diff --git a/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-tin.png b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-tin.png new file mode 100644 index 000000000..58ed2c751 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-tin.png differ diff --git a/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-voronoi.png b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-voronoi.png new file mode 100644 index 000000000..133d48c01 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientAnalysis/clientAnalysis-voronoi.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-appendImage.png b/website/public/static/demo/military/gallery/clientView/clientView-appendImage.png new file mode 100644 index 000000000..53bb46a2e Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-appendImage.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-dynamiccircle.png b/website/public/static/demo/military/gallery/clientView/clientView-dynamiccircle.png new file mode 100644 index 000000000..95c477918 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-dynamiccircle.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-fire.png b/website/public/static/demo/military/gallery/clientView/clientView-fire.png new file mode 100644 index 000000000..9ea10dc91 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-fire.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-fireword.png b/website/public/static/demo/military/gallery/clientView/clientView-fireword.png new file mode 100644 index 000000000..ffcff1528 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-fireword.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-firework.png b/website/public/static/demo/military/gallery/clientView/clientView-firework.png new file mode 100644 index 000000000..ffcff1528 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-firework.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-fog.png b/website/public/static/demo/military/gallery/clientView/clientView-fog.png new file mode 100644 index 000000000..31574f4ee Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-fog.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-heatmap.png b/website/public/static/demo/military/gallery/clientView/clientView-heatmap.png new file mode 100644 index 000000000..b741f303b Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-heatmap.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-radarscanning.png b/website/public/static/demo/military/gallery/clientView/clientView-radarscanning.png new file mode 100644 index 000000000..105b749b8 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-radarscanning.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-rain.png b/website/public/static/demo/military/gallery/clientView/clientView-rain.png new file mode 100644 index 000000000..676cf336f Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-rain.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-smoke.png b/website/public/static/demo/military/gallery/clientView/clientView-smoke.png new file mode 100644 index 000000000..2101f5d30 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-smoke.png differ diff --git a/website/public/static/demo/military/gallery/clientView/clientView-snow.png b/website/public/static/demo/military/gallery/clientView/clientView-snow.png new file mode 100644 index 000000000..d2c029303 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView/clientView-snow.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-air.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-air.png new file mode 100644 index 000000000..86ccdfaae Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-air.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-biggps.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-biggps.png new file mode 100644 index 000000000..81ef97344 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-biggps.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigline.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigline.png new file mode 100644 index 000000000..7f9ed8fd9 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigline.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigpoint.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigpoint.png new file mode 100644 index 000000000..a48623c51 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigpoint.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigroad.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigroad.png new file mode 100644 index 000000000..2d48bb8e8 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-bigroad.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-grid.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-grid.png new file mode 100644 index 000000000..bc529ecf1 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-grid.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-heater.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-heater.png new file mode 100644 index 000000000..8a267cc7d Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-heater.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-line.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-line.png new file mode 100644 index 000000000..0592ca987 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-line.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-lineanimate.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-lineanimate.png new file mode 100644 index 000000000..76d802aa3 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-lineanimate.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-migarate.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-migarate.png new file mode 100644 index 000000000..a0247612f Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-migarate.png differ diff --git a/website/public/static/demo/military/gallery/clientView_Echarts/echarts-weibo.png b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-weibo.png new file mode 100644 index 000000000..3604c9d43 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_Echarts/echarts-weibo.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-heater.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-heater.png new file mode 100644 index 000000000..8b477d85d Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-heater.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-migrate.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-migrate.png new file mode 100644 index 000000000..c064cb5d5 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-migrate.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-path_converge.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-path_converge.png new file mode 100644 index 000000000..a7f7b83c1 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-path_converge.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_animate.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_animate.png new file mode 100644 index 000000000..992086040 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_animate.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_grid.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_grid.png new file mode 100644 index 000000000..3bfff42ea Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_grid.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_honeycomb.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_honeycomb.png new file mode 100644 index 000000000..4e18aab7b Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_honeycomb.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_mutilanimate.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_mutilanimate.png new file mode 100644 index 000000000..186122851 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_mutilanimate.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_weibo.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_weibo.png new file mode 100644 index 000000000..25c117659 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-point_weibo.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-render_polygon.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-render_polygon.png new file mode 100644 index 000000000..cdf77b644 Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-render_polygon.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-simplemigrate.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-simplemigrate.png new file mode 100644 index 000000000..676aa0ffc Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-simplemigrate.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-tracker.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-tracker.png new file mode 100644 index 000000000..b8d43bc2e Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-tracker.png differ diff --git a/website/public/static/demo/military/gallery/clientView_MapV/mapv-trackerline.png b/website/public/static/demo/military/gallery/clientView_MapV/mapv-trackerline.png new file mode 100644 index 000000000..6e5ee993c Binary files /dev/null and b/website/public/static/demo/military/gallery/clientView_MapV/mapv-trackerline.png differ diff --git a/website/public/static/demo/military/gallery/data/data-3Dtiles.png b/website/public/static/demo/military/gallery/data/data-3Dtiles.png new file mode 100644 index 000000000..af71bc8d6 Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-3Dtiles.png differ diff --git a/website/public/static/demo/military/gallery/data/data-addgltf.png b/website/public/static/demo/military/gallery/data/data-addgltf.png new file mode 100644 index 000000000..38ed792c0 Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-addgltf.png differ diff --git a/website/public/static/demo/military/gallery/data/data-addgltfs.png b/website/public/static/demo/military/gallery/data/data-addgltfs.png new file mode 100644 index 000000000..c9a1ac8cc Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-addgltfs.png differ diff --git a/website/public/static/demo/military/gallery/data/data-czml.png b/website/public/static/demo/military/gallery/data/data-czml.png new file mode 100644 index 000000000..9f30757e3 Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-czml.png differ diff --git a/website/public/static/demo/military/gallery/data/data-geojson.png b/website/public/static/demo/military/gallery/data/data-geojson.png new file mode 100644 index 000000000..b8aa7abb8 Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-geojson.png differ diff --git a/website/public/static/demo/military/gallery/data/data-kml.png b/website/public/static/demo/military/gallery/data/data-kml.png new file mode 100644 index 000000000..a40677e40 Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-kml.png differ diff --git a/website/public/static/demo/military/gallery/data/data-kmz.png b/website/public/static/demo/military/gallery/data/data-kmz.png new file mode 100644 index 000000000..b74fc90a0 Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-kmz.png differ diff --git a/website/public/static/demo/military/gallery/data/data-movegltf.png b/website/public/static/demo/military/gallery/data/data-movegltf.png new file mode 100644 index 000000000..2148968ee Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-movegltf.png differ diff --git a/website/public/static/demo/military/gallery/data/data-onlineImage.png b/website/public/static/demo/military/gallery/data/data-onlineImage.png new file mode 100644 index 000000000..53bb46a2e Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-onlineImage.png differ diff --git a/website/public/static/demo/military/gallery/data/data-outlineImage.png b/website/public/static/demo/military/gallery/data/data-outlineImage.png new file mode 100644 index 000000000..173f8d4ca Binary files /dev/null and b/website/public/static/demo/military/gallery/data/data-outlineImage.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundhole.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundhole.png new file mode 100644 index 000000000..f64fb0664 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundhole.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundline.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundline.png new file mode 100644 index 000000000..27e02863e Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundline.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundpolygon.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundpolygon.png new file mode 100644 index 000000000..564dc1232 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-groundpolygon.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-hole.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-hole.png new file mode 100644 index 000000000..5f818afb2 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-hole.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-icon.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-icon.png new file mode 100644 index 000000000..ff9dcf815 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-icon.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-interaction.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-interaction.png new file mode 100644 index 000000000..88ff3f726 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-interaction.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-label.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-label.png new file mode 100644 index 000000000..0328363e8 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-label.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-labelicon.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-labelicon.png new file mode 100644 index 000000000..0981eb15a Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-labelicon.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-line.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-line.png new file mode 100644 index 000000000..023287c7f Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-line.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-militarysymbol.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-militarysymbol.png new file mode 100644 index 000000000..ffcff1528 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-militarysymbol.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-picsymbol.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-picsymbol.png new file mode 100644 index 000000000..4268d539c Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-picsymbol.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-picture.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-picture.png new file mode 100644 index 000000000..173f8d4ca Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-picture.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-point.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-point.png new file mode 100644 index 000000000..594ca8dc7 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-point.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-polygon.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-polygon.png new file mode 100644 index 000000000..4f8146c2e Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-polygon.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-popup.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-popup.png new file mode 100644 index 000000000..273d1facc Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-popup.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-stretchpolygon.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-stretchpolygon.png new file mode 100644 index 000000000..fbb0eca45 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-stretchpolygon.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-symbol.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-symbol.png new file mode 100644 index 000000000..0c1b5a397 Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-symbol.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-terrainline.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-terrainline.png new file mode 100644 index 000000000..e5422b52d Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-terrainline.png differ diff --git a/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-terrainpolygon.png b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-terrainpolygon.png new file mode 100644 index 000000000..31f671f7c Binary files /dev/null and b/website/public/static/demo/military/gallery/drawGraphic/drawGraphic-terrainpolygon.png differ diff --git a/website/public/static/demo/military/gallery/globe/chicago.png b/website/public/static/demo/military/gallery/globe/chicago.png new file mode 100644 index 000000000..70f90b29f Binary files /dev/null and b/website/public/static/demo/military/gallery/globe/chicago.png differ diff --git a/website/public/static/demo/military/gallery/globe/paris.png b/website/public/static/demo/military/gallery/globe/paris.png new file mode 100644 index 000000000..feb2b7f4c Binary files /dev/null and b/website/public/static/demo/military/gallery/globe/paris.png differ diff --git a/website/public/static/demo/military/gallery/globe/washington.png b/website/public/static/demo/military/gallery/globe/washington.png new file mode 100644 index 000000000..c9aa1adab Binary files /dev/null and b/website/public/static/demo/military/gallery/globe/washington.png differ diff --git a/website/public/static/demo/military/gallery/gnss/boom.gif b/website/public/static/demo/military/gallery/gnss/boom.gif new file mode 100644 index 000000000..71c425514 Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/boom.gif differ diff --git a/website/public/static/demo/military/gallery/gnss/boom.png b/website/public/static/demo/military/gallery/gnss/boom.png new file mode 100644 index 000000000..633cbf62a Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/boom.png differ diff --git a/website/public/static/demo/military/gallery/gnss/communicate.png b/website/public/static/demo/military/gallery/gnss/communicate.png new file mode 100644 index 000000000..4001952d7 Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/communicate.png differ diff --git a/website/public/static/demo/military/gallery/gnss/fire.png b/website/public/static/demo/military/gallery/gnss/fire.png new file mode 100644 index 000000000..1a5319583 Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/fire.png differ diff --git a/website/public/static/demo/military/gallery/gnss/flight.png b/website/public/static/demo/military/gallery/gnss/flight.png new file mode 100644 index 000000000..4b88eca5d Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/flight.png differ diff --git a/website/public/static/demo/military/gallery/gnss/mutil_bloom.png b/website/public/static/demo/military/gallery/gnss/mutil_bloom.png new file mode 100644 index 000000000..de018ee34 Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/mutil_bloom.png differ diff --git a/website/public/static/demo/military/gallery/gnss/saastamonien.png b/website/public/static/demo/military/gallery/gnss/saastamonien.png new file mode 100644 index 000000000..ca1c717e6 Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/saastamonien.png differ diff --git a/website/public/static/demo/military/gallery/gnss/satellite.png b/website/public/static/demo/military/gallery/gnss/satellite.png new file mode 100644 index 000000000..5707f993d Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/satellite.png differ diff --git a/website/public/static/demo/military/gallery/gnss/ship.png b/website/public/static/demo/military/gallery/gnss/ship.png new file mode 100644 index 000000000..cf2a9b4d5 Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/ship.png differ diff --git a/website/public/static/demo/military/gallery/gnss/track.png b/website/public/static/demo/military/gallery/gnss/track.png new file mode 100644 index 000000000..c07e9f3c3 Binary files /dev/null and b/website/public/static/demo/military/gallery/gnss/track.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-analysis.png b/website/public/static/demo/military/gallery/m3d/m3d-analysis.png new file mode 100644 index 000000000..59b17d63b Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-analysis.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-bim.png b/website/public/static/demo/military/gallery/m3d/m3d-bim.png new file mode 100644 index 000000000..e065634ea Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-bim.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-drill.png b/website/public/static/demo/military/gallery/m3d/m3d-drill.png new file mode 100644 index 000000000..b80b6d25e Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-drill.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-geobody-showlayer.png b/website/public/static/demo/military/gallery/m3d/m3d-geobody-showlayer.png new file mode 100644 index 000000000..1b525ec05 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-geobody-showlayer.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-geobody.png b/website/public/static/demo/military/gallery/m3d/m3d-geobody.png new file mode 100644 index 000000000..d2bd2fe86 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-geobody.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-geobody1.png b/website/public/static/demo/military/gallery/m3d/m3d-geobody1.png new file mode 100644 index 000000000..fb4df1bc3 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-geobody1.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-geobody2.png b/website/public/static/demo/military/gallery/m3d/m3d-geobody2.png new file mode 100644 index 000000000..757e5618d Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-geobody2.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-geobodygrid.png b/website/public/static/demo/military/gallery/m3d/m3d-geobodygrid.png new file mode 100644 index 000000000..0feba1f54 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-geobodygrid.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-landscape.png b/website/public/static/demo/military/gallery/m3d/m3d-landscape.png new file mode 100644 index 000000000..f044c29b1 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-landscape.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-oblique.png b/website/public/static/demo/military/gallery/m3d/m3d-oblique.png new file mode 100644 index 000000000..7ac0b02b2 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-oblique.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-pointcloud.png b/website/public/static/demo/military/gallery/m3d/m3d-pointcloud.png new file mode 100644 index 000000000..4855383a9 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-pointcloud.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-roughmodel.png b/website/public/static/demo/military/gallery/m3d/m3d-roughmodel.png new file mode 100644 index 000000000..317d987b9 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-roughmodel.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-terrain.png b/website/public/static/demo/military/gallery/m3d/m3d-terrain.png new file mode 100644 index 000000000..29453cb8d Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-terrain.png differ diff --git a/website/public/static/demo/military/gallery/m3d/m3d-underpipe.png b/website/public/static/demo/military/gallery/m3d/m3d-underpipe.png new file mode 100644 index 000000000..96d769688 Binary files /dev/null and b/website/public/static/demo/military/gallery/m3d/m3d-underpipe.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-2d-doc.png b/website/public/static/demo/military/gallery/mapgis/mapgis-2d-doc.png new file mode 100644 index 000000000..28d5897c5 Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-2d-doc.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-2d-layer.png b/website/public/static/demo/military/gallery/mapgis/mapgis-2d-layer.png new file mode 100644 index 000000000..9af49252a Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-2d-layer.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-2d-tile.png b/website/public/static/demo/military/gallery/mapgis/mapgis-2d-tile.png new file mode 100644 index 000000000..44d2e8cf0 Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-2d-tile.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-2dtile.png b/website/public/static/demo/military/gallery/mapgis/mapgis-2dtile.png new file mode 100644 index 000000000..bd7c8666f Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-2dtile.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-2dvector.png b/website/public/static/demo/military/gallery/mapgis/mapgis-2dvector.png new file mode 100644 index 000000000..b96cbb1c2 Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-2dvector.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-dem.png b/website/public/static/demo/military/gallery/mapgis/mapgis-dem.png new file mode 100644 index 000000000..2981fd85e Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-dem.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-dem250.png b/website/public/static/demo/military/gallery/mapgis/mapgis-dem250.png new file mode 100644 index 000000000..2981fd85e Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-dem250.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-oblique.png b/website/public/static/demo/military/gallery/mapgis/mapgis-oblique.png new file mode 100644 index 000000000..5543b2809 Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-oblique.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-raster.png b/website/public/static/demo/military/gallery/mapgis/mapgis-raster.png new file mode 100644 index 000000000..81f23237f Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-raster.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-raster250.png b/website/public/static/demo/military/gallery/mapgis/mapgis-raster250.png new file mode 100644 index 000000000..63e8769b5 Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-raster250.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-terrain.png b/website/public/static/demo/military/gallery/mapgis/mapgis-terrain.png new file mode 100644 index 000000000..29453cb8d Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-terrain.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-darkstyle.png b/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-darkstyle.png new file mode 100644 index 000000000..65714c10a Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-darkstyle.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-lightstyle.png b/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-lightstyle.png new file mode 100644 index 000000000..684ede35b Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-lightstyle.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-streetstyle.png b/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-streetstyle.png new file mode 100644 index 000000000..9dd970beb Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile-streetstyle.png differ diff --git a/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile.png b/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile.png new file mode 100644 index 000000000..1bb4b5ad9 Binary files /dev/null and b/website/public/static/demo/military/gallery/mapgis/mapgis-vectortile.png differ diff --git a/website/public/static/demo/military/gallery/measure/measure-area.png b/website/public/static/demo/military/gallery/measure/measure-area.png new file mode 100644 index 000000000..af45fbfac Binary files /dev/null and b/website/public/static/demo/military/gallery/measure/measure-area.png differ diff --git a/website/public/static/demo/military/gallery/measure/measure-length.png b/website/public/static/demo/military/gallery/measure/measure-length.png new file mode 100644 index 000000000..a78850da1 Binary files /dev/null and b/website/public/static/demo/military/gallery/measure/measure-length.png differ diff --git a/website/public/static/demo/military/gallery/measure/measure-slpoe.png b/website/public/static/demo/military/gallery/measure/measure-slpoe.png new file mode 100644 index 000000000..20814ab5b Binary files /dev/null and b/website/public/static/demo/military/gallery/measure/measure-slpoe.png differ diff --git a/website/public/static/demo/military/gallery/measure/measure-triangle.png b/website/public/static/demo/military/gallery/measure/measure-triangle.png new file mode 100644 index 000000000..fd095a5bc Binary files /dev/null and b/website/public/static/demo/military/gallery/measure/measure-triangle.png differ diff --git a/website/public/static/demo/military/gallery/ogc/ogc-wms.png b/website/public/static/demo/military/gallery/ogc/ogc-wms.png new file mode 100644 index 000000000..11ecb09e5 Binary files /dev/null and b/website/public/static/demo/military/gallery/ogc/ogc-wms.png differ diff --git a/website/public/static/demo/military/gallery/ogc/ogc-wmts.png b/website/public/static/demo/military/gallery/ogc/ogc-wmts.png new file mode 100644 index 000000000..160a066a9 Binary files /dev/null and b/website/public/static/demo/military/gallery/ogc/ogc-wmts.png differ diff --git a/website/public/static/demo/military/gallery/query/query-2dByAtt.png b/website/public/static/demo/military/gallery/query/query-2dByAtt.png new file mode 100644 index 000000000..42ca105b8 Binary files /dev/null and b/website/public/static/demo/military/gallery/query/query-2dByAtt.png differ diff --git a/website/public/static/demo/military/gallery/query/query-2dByOID.png b/website/public/static/demo/military/gallery/query/query-2dByOID.png new file mode 100644 index 000000000..d843d6eea Binary files /dev/null and b/website/public/static/demo/military/gallery/query/query-2dByOID.png differ diff --git a/website/public/static/demo/military/gallery/query/query-2dBygeometry.png b/website/public/static/demo/military/gallery/query/query-2dBygeometry.png new file mode 100644 index 000000000..c71d1825c Binary files /dev/null and b/website/public/static/demo/military/gallery/query/query-2dBygeometry.png differ diff --git a/website/public/static/demo/military/gallery/query/query-attquery.png b/website/public/static/demo/military/gallery/query/query-attquery.png new file mode 100644 index 000000000..7dd3f4279 Binary files /dev/null and b/website/public/static/demo/military/gallery/query/query-attquery.png differ diff --git a/website/public/static/demo/military/gallery/query/query-geomquery.png b/website/public/static/demo/military/gallery/query/query-geomquery.png new file mode 100644 index 000000000..c469790c9 Binary files /dev/null and b/website/public/static/demo/military/gallery/query/query-geomquery.png differ diff --git a/website/public/static/demo/military/gallery/query/query-m3deditor.png b/website/public/static/demo/military/gallery/query/query-m3deditor.png new file mode 100644 index 000000000..73174c4af Binary files /dev/null and b/website/public/static/demo/military/gallery/query/query-m3deditor.png differ diff --git a/website/public/static/demo/military/gallery/query/query-m3dquery.png b/website/public/static/demo/military/gallery/query/query-m3dquery.png new file mode 100644 index 000000000..c38528736 Binary files /dev/null and b/website/public/static/demo/military/gallery/query/query-m3dquery.png differ diff --git a/website/public/static/demo/military/gallery/query/query-oidquery.png b/website/public/static/demo/military/gallery/query/query-oidquery.png new file mode 100644 index 000000000..acae04dfc Binary files /dev/null and b/website/public/static/demo/military/gallery/query/query-oidquery.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-2D.png b/website/public/static/demo/military/gallery/scene/scene-2D.png new file mode 100644 index 000000000..0c1d56883 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-2D.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-3Dground.png b/website/public/static/demo/military/gallery/scene/scene-3Dground.png new file mode 100644 index 000000000..8e8db9767 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-3Dground.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-changeSkyBox.png b/website/public/static/demo/military/gallery/scene/scene-changeSkyBox.png new file mode 100644 index 000000000..59b17d63b Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-changeSkyBox.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-fly.png b/website/public/static/demo/military/gallery/scene/scene-fly.png new file mode 100644 index 000000000..c6a742192 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-fly.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-operation.png b/website/public/static/demo/military/gallery/scene/scene-operation.png new file mode 100644 index 000000000..f909a2446 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-operation.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-rotationView.png b/website/public/static/demo/military/gallery/scene/scene-rotationView.png new file mode 100644 index 000000000..d0a943084 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-rotationView.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-sceneMode.png b/website/public/static/demo/military/gallery/scene/scene-sceneMode.png new file mode 100644 index 000000000..0c1d56883 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-sceneMode.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-sceneOut.png b/website/public/static/demo/military/gallery/scene/scene-sceneOut.png new file mode 100644 index 000000000..60a51c037 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-sceneOut.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-screenPosition.png b/website/public/static/demo/military/gallery/scene/scene-screenPosition.png new file mode 100644 index 000000000..5777fdd83 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-screenPosition.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-setView.png b/website/public/static/demo/military/gallery/scene/scene-setView.png new file mode 100644 index 000000000..df1bd2590 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-setView.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-showPosition.png b/website/public/static/demo/military/gallery/scene/scene-showPosition.png new file mode 100644 index 000000000..0b3310dee Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-showPosition.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-undergroundMode.png b/website/public/static/demo/military/gallery/scene/scene-undergroundMode.png new file mode 100644 index 000000000..8e1b4667e Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-undergroundMode.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-undergroundOne.png b/website/public/static/demo/military/gallery/scene/scene-undergroundOne.png new file mode 100644 index 000000000..8e1b4667e Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-undergroundOne.png differ diff --git a/website/public/static/demo/military/gallery/scene/scene-undergroundTwo.png b/website/public/static/demo/military/gallery/scene/scene-undergroundTwo.png new file mode 100644 index 000000000..a43eae552 Binary files /dev/null and b/website/public/static/demo/military/gallery/scene/scene-undergroundTwo.png differ diff --git a/website/public/static/demo/military/gallery/third/third-amap.png b/website/public/static/demo/military/gallery/third/third-amap.png new file mode 100644 index 000000000..5cd893bd1 Binary files /dev/null and b/website/public/static/demo/military/gallery/third/third-amap.png differ diff --git a/website/public/static/demo/military/gallery/third/third-baidu.png b/website/public/static/demo/military/gallery/third/third-baidu.png new file mode 100644 index 000000000..8444e1be3 Binary files /dev/null and b/website/public/static/demo/military/gallery/third/third-baidu.png differ diff --git a/website/public/static/demo/military/gallery/third/third-geoway.png b/website/public/static/demo/military/gallery/third/third-geoway.png new file mode 100644 index 000000000..3b801430e Binary files /dev/null and b/website/public/static/demo/military/gallery/third/third-geoway.png differ diff --git a/website/public/static/demo/military/gallery/third/third-google.png b/website/public/static/demo/military/gallery/third/third-google.png new file mode 100644 index 000000000..9a630f926 Binary files /dev/null and b/website/public/static/demo/military/gallery/third/third-google.png differ diff --git a/website/public/static/demo/military/gallery/third/third-openweather.png b/website/public/static/demo/military/gallery/third/third-openweather.png new file mode 100644 index 000000000..fd4ceb714 Binary files /dev/null and b/website/public/static/demo/military/gallery/third/third-openweather.png differ diff --git a/website/public/static/demo/military/gallery/third/third-osm.png b/website/public/static/demo/military/gallery/third/third-osm.png new file mode 100644 index 000000000..acd7f8e45 Binary files /dev/null and b/website/public/static/demo/military/gallery/third/third-osm.png differ diff --git a/website/public/static/demo/military/gallery/third/third-tianditu-wmts.png b/website/public/static/demo/military/gallery/third/third-tianditu-wmts.png new file mode 100644 index 000000000..eefaac56f Binary files /dev/null and b/website/public/static/demo/military/gallery/third/third-tianditu-wmts.png differ diff --git a/website/public/static/demo/military/gallery/third/third-tianditu.png b/website/public/static/demo/military/gallery/third/third-tianditu.png new file mode 100644 index 000000000..d12a413ea Binary files /dev/null and b/website/public/static/demo/military/gallery/third/third-tianditu.png differ diff --git a/website/public/static/demo/military/gallery/track/track-dynamicflight.png b/website/public/static/demo/military/gallery/track/track-dynamicflight.png new file mode 100644 index 000000000..a9523e816 Binary files /dev/null and b/website/public/static/demo/military/gallery/track/track-dynamicflight.png differ diff --git a/website/public/static/demo/military/gallery/track/track-flow.png b/website/public/static/demo/military/gallery/track/track-flow.png new file mode 100644 index 000000000..4cfee56c8 Binary files /dev/null and b/website/public/static/demo/military/gallery/track/track-flow.png differ diff --git a/website/public/static/demo/military/gallery/track/track-groundflow.png b/website/public/static/demo/military/gallery/track/track-groundflow.png new file mode 100644 index 000000000..a804dbe6c Binary files /dev/null and b/website/public/static/demo/military/gallery/track/track-groundflow.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/bluestyle.png b/website/public/static/demo/military/gallery/vectortile/bluestyle.png new file mode 100644 index 000000000..5c89f2262 Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/bluestyle.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/darkstyle.png b/website/public/static/demo/military/gallery/vectortile/darkstyle.png new file mode 100644 index 000000000..9d55f761c Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/darkstyle.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/lightstyle.png b/website/public/static/demo/military/gallery/vectortile/lightstyle.png new file mode 100644 index 000000000..5b9364b81 Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/lightstyle.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/mapboxstyle.png b/website/public/static/demo/military/gallery/vectortile/mapboxstyle.png new file mode 100644 index 000000000..32987b483 Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/mapboxstyle.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/mapgis-vectortile-3857.png b/website/public/static/demo/military/gallery/vectortile/mapgis-vectortile-3857.png new file mode 100644 index 000000000..1bb4b5ad9 Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/mapgis-vectortile-3857.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/mapgis-vectortile-4326.png b/website/public/static/demo/military/gallery/vectortile/mapgis-vectortile-4326.png new file mode 100644 index 000000000..d3191b216 Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/mapgis-vectortile-4326.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/mapgisstyle.png b/website/public/static/demo/military/gallery/vectortile/mapgisstyle.png new file mode 100644 index 000000000..e1dc63f33 Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/mapgisstyle.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/vt-dark.png b/website/public/static/demo/military/gallery/vectortile/vt-dark.png new file mode 100644 index 000000000..6e6a66372 Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/vt-dark.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/vt-light.png b/website/public/static/demo/military/gallery/vectortile/vt-light.png new file mode 100644 index 000000000..2f37129ab Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/vt-light.png differ diff --git a/website/public/static/demo/military/gallery/vectortile/vt-street.png b/website/public/static/demo/military/gallery/vectortile/vt-street.png new file mode 100644 index 000000000..75c66d657 Binary files /dev/null and b/website/public/static/demo/military/gallery/vectortile/vt-street.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/2397.png b/website/public/static/demo/military/helper/ogc/wmts/2397.png new file mode 100644 index 000000000..eaa0dac96 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/2397.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/WMTS.md b/website/public/static/demo/military/helper/ogc/wmts/WMTS.md new file mode 100644 index 000000000..3ff5a6b51 --- /dev/null +++ b/website/public/static/demo/military/helper/ogc/wmts/WMTS.md @@ -0,0 +1,107 @@ +# 0. wmts - 教程 + +[标准的 WMTS 元数据](http://develop.smaryun.com:6163/igs/rest/ogc/SAMPLETILE/WMTSServer) + +![说明](./static/demo/cesium/helper/ogc/wmts/gettile.png) + +## 1. restful 调用 - 使用受限 + +> `restful调用`的核心是将所有的 级别 行列 图层 样式 的参数统一明码的标记在 url 请求中 +> 使用这种方式 级别 行列号 都一定是`数字型` 这里很关键 , 常见的金字塔模型里面的级别 都`一般是整数表示`。 + +```js +var tianditu = new Cesium.WebMapTileServiceImageryProvider({ + url: 'http://t0.tianditu.com/DataServer?T=vec_w&L={TileMatrix}&Y={TileRow}&X={TileCol}&tk=9c157e9585486c02edf817d2ecbc7752', + maximumLevel: 19, + credit: new Cesium.Credit('3857') +}); +webGlobe.viewer.imageryLayers.addImageryProvider(tianditu); +``` + +![restful](./static/demo/cesium/helper/ogc/wmts/restful.png) + +> 这一种是最常见的 WMTS 加载方式, 但这种方式一般只能处理全球裁瓦片的方式: 如经纬度 EPSG:4326/4490/4610 或者墨卡托 EPSG:3857 + +## 2. kvp - 推荐使用 + +> restful 调用 一般处理数值型的 全球金字塔瓦片, kvp 一般处理高斯 或者 局部裁剪的金字塔瓦片 + +### 2.1 kvp 参数说明 + +| 参数 | 类型 | OGC-名称 | 图片说明 | +| :------------------- | :------------ | :------------------------ | :------------------------------------------------------------------- | +| layer | 字符串 | Layer | ![图层](./static/demo/cesium/helper/ogc/wmts/layer.png) | +| style | 字符串 | Style | ![样式](./static/demo/cesium/helper/ogc/wmts/style-type.png) | +| format | 字符串 | Format | ![样式](./static/demo/cesium/helper/ogc/wmts/wmts-format.png) | +| tileMatrixLabels | Array<字符串> | ArrayM | ![级别](./static/demo/cesium/helper/ogc/wmts/tilematrixset.png) | +| layertileMatrixSetID | 字符串 | TileMatrixSet | ![总称](./static/demo/cesium/helper/ogc/wmts/tilematrixset-name.png) | + +> 用通俗的话说 +> +> 1. `TileMatrix`对应瓦片的某一级 +> 1. `TileMatrixSet` 对应多个级别合并成的金字塔集合, +> 1. `TileMatrixLabels` 对应各个级别的称呼(一般是整数,特定情况是`字符串型`) +> 1. `layertileMatrixSetID` 对应整个金字塔的模型的名称 + +`tileMatrixLabels` 一般 restful 的金字塔级别都是数值型。 但是一些特定的投影方式或者坐标处理方式无法采取对应的整数级别来表示,需要一长串的字符型来具体表达对应的数据细节,因此这个地方就是来替代原来的整数级别。 + +如传统的 [0 , 1, 2, 3 , 4] 替换成 ['EPSG:2379_SAMPLETILE_dpi96_GB:11', EPSG:2379_SAMPLETILE_dpi96_GB:12', 'EPSG:2379_SAMPLETILE_dpi96_GB:13', 'EPSG:2379_SAMPLETILE_dpi96_GB:14'] + +上面的 EPSG:2379_SAMPLETILE_dpi96_GB:11 的名字命名不重要,关键的是对应的自定义裁图的方式,如果此处是 EPSG:3857_SAMPLETILE_dpi96_GB:0 几乎等效于 墨卡托的 0 级。 + +### 2.2 kvp 举例说明 + +原始数据是高斯投影的 ,其元数据信息如下: +![gauss](./static/demo/cesium/helper/ogc/wmts/2397.png) + +对应的 wmts 的描述如下: +![原始瓦片](./static/demo/cesium/helper/ogc/wmts/origin-data.png) + +```js +var lnglat = new Cesium.WebMapTileServiceImageryProvider({ + url: 'http://develop.smaryun.com:6163/igs/rest/ogc/SAMPLETILE/WMTSServer', + layer: 'SAMPLETILE', + style: 'default', + format: 'image/png', + tilingScheme: new Cesium.WebMercatorTilingScheme(), + tileMatrixLabels: [ + 'EPSG:2379_SAMPLETILE_dpi96_GB:11', + 'EPSG:2379_SAMPLETILE_dpi96_GB:12', + 'EPSG:2379_SAMPLETILE_dpi96_GB:13', + 'EPSG:2379_SAMPLETILE_dpi96_GB:14', + 'EPSG:2379_SAMPLETILE_dpi96_GB:15', + 'EPSG:2379_SAMPLETILE_dpi96_GB:16', + 'EPSG:2379_SAMPLETILE_dpi96_GB:17' + ], + tileMatrixSetID: 'GoogleMapsCompatible_GB', + maximumLevel: 19, + credit: new Cesium.Credit('3857') +}); +``` + +结果如下: +![kvp](./static/demo/cesium/helper/ogc/wmts/wmts-kvp.png) + +## 3. WMTS 元数据信息不可信!! + +与其说 WMTS 元数据信息不可信,本质上是说实际线下实操人员的操作不可信。以上面为例 + +> 原始数据明明只有 1 种 高斯的处理方式 +> ![原始数据](./static/demo/cesium/helper/ogc/wmts/origin-data.png) +> 但是元数据信息描述里面的矩阵集居然有 2 类,其中一类是全球墨卡托, Orz.... +> ![错误描述](./static/demo/cesium/helper/ogc/wmts/error-info.png) + +### 3.1 出现过该场景的情况 + +> 从下面数据情况几乎可以得出结论,无法避免不同平台不同版本带来的差异, `强烈推荐`使用`KVP`的方式`手动匹配`来统一处理,而不是自动解析 WMTS.xml 的元数据信息 + +1. MapGIS 平台官方测试数据 [MapGIS 10.3 & OGC 1.0.0](http://develop.smaryun.com:6163/igs/rest/ogc/SAMPLETILE/WMTSServer) +1. MapGIS 九州官方测试数据 [MapGIS 10.5 & OGC 1.0.0]() +1. ArcGIS 官方测试数据 [ArcServer 10.8 & OGC 1.0.0](https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/1.0.0/WMTSCapabilities.xml) +1. ArcGIS 官方测试数据 [ArcServer 10.7 OGC 1.0.0](http://219.142.81.85/arcgis/rest/services/10wanZH/MapServer/WMTS/1.0.0/WMTSCapabilities.xml) +1. 西安测绘总站 ArcMap 10.2 & OGC 1.0.0 +1. 北京发改委 ArcMap 10.5 & OGC 1.0.0 +1. 深圳信息中心 ArcMap 10.6 & OGC 1.3.0 +1. 深圳工程中心 ArcMap 10.6 & OGC 1.3.0 +1. 深圳规划中心 ArcMap 10.6 & OGC 1.3.0 +1. 地矿云南项目 MapGIS 10.3 & OGC 1.0.0 diff --git a/website/public/static/demo/military/helper/ogc/wmts/error-info.png b/website/public/static/demo/military/helper/ogc/wmts/error-info.png new file mode 100644 index 000000000..c7ccce7c0 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/error-info.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/gettile.png b/website/public/static/demo/military/helper/ogc/wmts/gettile.png new file mode 100644 index 000000000..99eab9301 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/gettile.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/layer.png b/website/public/static/demo/military/helper/ogc/wmts/layer.png new file mode 100644 index 000000000..f7d976c61 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/layer.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/origin-data.png b/website/public/static/demo/military/helper/ogc/wmts/origin-data.png new file mode 100644 index 000000000..890690e06 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/origin-data.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/restful.png b/website/public/static/demo/military/helper/ogc/wmts/restful.png new file mode 100644 index 000000000..60618a748 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/restful.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/style-type.png b/website/public/static/demo/military/helper/ogc/wmts/style-type.png new file mode 100644 index 000000000..14ab00b26 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/style-type.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/style.png b/website/public/static/demo/military/helper/ogc/wmts/style.png new file mode 100644 index 000000000..69d6a3b99 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/style.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/tilematrixset-name.png b/website/public/static/demo/military/helper/ogc/wmts/tilematrixset-name.png new file mode 100644 index 000000000..c1e4af8ae Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/tilematrixset-name.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/tilematrixset.png b/website/public/static/demo/military/helper/ogc/wmts/tilematrixset.png new file mode 100644 index 000000000..c5427eac3 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/tilematrixset.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/wmts-format.png b/website/public/static/demo/military/helper/ogc/wmts/wmts-format.png new file mode 100644 index 000000000..b2294a8b0 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/wmts-format.png differ diff --git a/website/public/static/demo/military/helper/ogc/wmts/wmts-kvp.png b/website/public/static/demo/military/helper/ogc/wmts/wmts-kvp.png new file mode 100644 index 000000000..143193274 Binary files /dev/null and b/website/public/static/demo/military/helper/ogc/wmts/wmts-kvp.png differ diff --git a/website/public/static/demo/military/helper/vue/import/cesium_dist.png b/website/public/static/demo/military/helper/vue/import/cesium_dist.png new file mode 100644 index 000000000..ee03c73fd Binary files /dev/null and b/website/public/static/demo/military/helper/vue/import/cesium_dist.png differ diff --git a/website/public/static/demo/military/helper/vue/import/index.md b/website/public/static/demo/military/helper/vue/import/index.md new file mode 100644 index 000000000..539d60552 --- /dev/null +++ b/website/public/static/demo/military/helper/vue/import/index.md @@ -0,0 +1,117 @@ +# Vue组件引入 +> 由于 Cesium 本身就存在纹理/多线程等重框架,导致无法像 leaflet/openalers 一样简单的独立引用,因此很容易导致引入失败 + +[官方解决方案-强烈不推荐-除非你使用纯开源版本Cesium](https://cesium.com/docs/tutorials/cesium-and-webpack/); + +> 由于 cesium 本身`涉及大量的纹理材质以及多线程Worker`, 公司内部修改版实现`M3D格式`, M3D`不是`3dtile,是中地数码自己独特的格式,与开源的 3dtile 不是一种格式。很多高级分析功能`只能作用于M3D`,而不支持 3d tile. + +webclient-vue-cesium 支持一层封装,除了本身需要安装以外,你还需要拷贝@mapgis/cesium + +## 源问题 +如果使用`淘宝源`,则导致下载的@mapgis/cesium很容易是1.0.0或者较低的版本.通过npm的淘宝镜像源下载的@mapgis/cesium库存在版本偏差问题,例如当前最新版本为1.59.0,使用淘宝镜像源下载的最新的版本只有1.0.0,可以关掉淘宝镜再行下载。 +目前最新的公网版本是 [NPM-Verison](https://www.npmjs.com/package/@mapgis/cesium?activeTab=versions) +![代码结构](./static/demo/cesium/helper/vue/import/version.png) + +```bash +# 不同时安装@mapgis/cesium的原因在于这个对外的是非高级版本,事业部一般全内部使用高级版本开发 +npm install --save @mapgis/webclient-vue-cesium +``` +> 要实现 cesium 主体的引入,一定要看下面的`文件拷贝`章节, 光是@mapgis/webclient-vue-cesium 是无法正常开发的 Orz... + +## 文件拷贝 + +由于标准的 Cesium 在支持 Webpack 编译的时候也是采取的 copy 插件来执行对应的文件夹拷贝操作。 因此为了统一处理,这里`统一不采取`手动修改 webpack.config 的方式,而是将 cesium 的所有文件放在 public 或者 asset 的某个目录下,自己`手动实现`静态资料的拷贝 + +> 这样做的本质原因是,MapGIS 的高级版本的 Cesium 是只对内不对外提供,导致不同事业部的 Cesium 版本各不一致 + +以`@mapgis/cesium`的包结构展示如下: +![代码结构](./static/demo/cesium/helper/vue/import/cesium_dist.png) + +> 请将上述文件统一拷贝到你的 vue 工程对应的 public 文件夹下的某个目录中,记录对应的路径为 + +```sh +# quasar 的静态资源目录为src/static +# 常见的静态资源目录为 public +# 主Cesium主体路径 +path/to/statics/cesium/Cesium.js +# Cesium拓展插件路径 +path/to/statics/cesium/webclient-cesium-plugins.min.js +``` + +> 如果在浏览器中 访问 `http://localhost:xxxx/path/to/statics/cesium/Cesium.js` 成功则说明整个 Cesium 的环境准备已经完毕。 + +## 引入 + +### 全局引入 +在main.js中实现以下代码 +``` javascript +import VueCesium from '@mapgis/webclient-vue-cesium'; +vue.use(VueCesium); +``` + +### 局部引入 +``` javascript +import { MapgisWebScene } from '@mapgis/webclient-vue-cesium'; + +export default { + components: { + MapgisWebScene + }, +} +``` + +## 开发结构 + +> 强烈建议使用前了解基本的cesium引导[Cesium - 向导](https://cesium.com/docs/) 以及 cesium 的开发方式[cesium - API](https://cesium.com/docs/cesiumjs-ref-doc/) + +如果你使用的地形是 cesium 提供的地形, 需要设置[Cesium ion](https://cesium.com/docs/oauth/). 更多细节请查看[Ion](https://cesium.com/ion). + +如果你使用`MapGIS-IGServer`提供的地形数据,你可以忽略该参数 + +上一章节文件`拷贝目录`中的2个路径,这里初始化的时候就需要传入`libPath`以及`pluginPath` 如果不传入则从司马云上自动下载对应的网络地址,没有互联网则无法下载 + +``` sh +# quasar 的静态资源目录为src/static +# 常见的静态资源目录为 public +# 主Cesium主体路径 对应 libPath +path/to/statics/cesium/Cesium.js +# Cesium拓展插件路径 对应 pluginPath +path/to/statics/cesium/webclient-cesium-plugin.min.js +``` + +``` javascript + + + + + +``` + + + diff --git a/website/public/static/demo/military/helper/vue/import/version.png b/website/public/static/demo/military/helper/vue/import/version.png new file mode 100644 index 000000000..7ca3a8ec9 Binary files /dev/null and b/website/public/static/demo/military/helper/vue/import/version.png differ diff --git a/website/public/static/demo/military/helper/vue/memery/error.png b/website/public/static/demo/military/helper/vue/memery/error.png new file mode 100644 index 000000000..e17897022 Binary files /dev/null and b/website/public/static/demo/military/helper/vue/memery/error.png differ diff --git a/website/public/static/demo/military/helper/vue/memery/index.md b/website/public/static/demo/military/helper/vue/memery/index.md new file mode 100644 index 000000000..61dacc63c --- /dev/null +++ b/website/public/static/demo/military/helper/vue/memery/index.md @@ -0,0 +1,69 @@ +# Vue 内存溢出 + +> 由于 Cesium 本身就存在纹理/多线程等重框架,导致无法像 leaflet/openalers 一样简单的独立引用,因此很容易导致内存溢出问题 + +## 表现 + +```sh +// JVM Out Of Memery +使用最新的@mapgis/webclient-vue-cesium组件库时,可能会遇到内存不足而导致编译失败的问题,可以在package.json文件中添加启动命令行"node --max_old_space_size=8196 ./node_modules/@vue/cli-service/bin/vue-cli-service serve",增加编译允许的最大内存,编译运行时使用该命令行,如下所示编译时使用npm run dev-memery命令 +``` +> 由于内存不够可能导致一些特殊的情况,在调用一些正常的功能的时候报错如下:经排查是@mapgis/webclient-vue-cesium组件库版本的问题,我使用的版本为1.0.4,更新到目前最新的版本1.0.6后,报错解决,igserver瓦片正常加载。 +![错误](./static/demo/cesium/helper/vue/memery/error.png) + +## 解决方式 + +针对该问题的统一解决方式是提升 NodeJS 的运行内存 `node --max_old_space_size=8196` + +1. `Vue CLi 2.0` 的工程命令 + 通过 Vue Cli 2.0 建立的工程的 package.json 的内容如下: + + ```json + { + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + } + } + ``` + + 将上面的`vue-cli-service`修改为`node --max_old_space_size=8196 ./node_modules/@vue/cli-service/bin/vue-cli-service serve` + + 修改后结果为 + + ```json + { + "scripts": { + "serve": "node --max_old_space_size=8196 ./node_modules/@vue/cli-service/bin/vue-cli-service serve", + "build": "node --max_old_space_size=8196 ./node_modules/@vue/cli-service/bin/vue-cli-service build", + "lint": "node --max_old_space_size=8196 ./node_modules/@vue/cli-service/bin/vue-cli-service lint" + } + } + ``` + +2. 自定义运行命令 + 参照上面的命名按照 ./node_modules/目录下的内容进行修改替换 + +3. 屏蔽编译选项 + 在 ./node_modules/@mapgis/webclient-vue-cesium/package.json 下,其内容如下: + ```json + { + "name": "@mapgis/webclient-vue-cesium", + "version": "1.0.6", + "description": "mapgis webclient-vue-cesium", + "main": "dist/webclient-vue-cesium.umd.1.js", + "module": "src/index.js" + } + ``` + 上面的module表示,如果你的工程存在对应的ES6依赖环境,会走编译模式,`可以进行代码调试`,main表示直接走编译后的运行包,`无法代码调试`。 + 直接`删除module`或者`重命名module`, 让其直接走main分支,进行运行时开发。 + ```json + { + "name": "@mapgis/webclient-vue-cesium", + "version": "1.0.5", + "description": "mapgis webclient-vue-cesium", + "main": "dist/webclient-vue-cesium.umd.1.js", + "module-bakup": "src/index.js" + } + ``` \ No newline at end of file diff --git a/website/public/static/demo/military/helper/vue/route/index.md b/website/public/static/demo/military/helper/vue/route/index.md new file mode 100644 index 000000000..5e9cf22d6 --- /dev/null +++ b/website/public/static/demo/military/helper/vue/route/index.md @@ -0,0 +1,36 @@ +# Vue 路由问题 + +> 由于中地数码-Cesium在销毁的时候需要考虑多线程问题以及卸载WebGL不能即刻销毁的原因,因此如果需要切换cesium视图的时候需要将cesium组件保活处理。 + +常见情况: +> 二维和三维地图需要在同一页面上加载和切换展示时,只能用v-show来控制组件的显示与隐藏,同时需要用来包裹三维地图组件,否则组件来回切换时,三维地球会加载不出来,出现空白。代码示例如下所示 + +1. 路由切换,导致Cesium视图创建/销毁 +2. v-if/v-show切换,导致 Cesium视图创建/销毁 + +核心解决方案如下: `keep-alive` +``` javascript + +``` + diff --git a/website/public/static/demo/military/markdown/analysis/analysis-animation.md b/website/public/static/demo/military/markdown/analysis/analysis-animation.md new file mode 100644 index 000000000..16e56f717 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-animation.md @@ -0,0 +1,184 @@ +## 动画漫游 + +### 示例功能 + +    此功能用于在三维场景中实现动画漫游功能,即让模型沿着路径漫游,默认为第一人称漫游,可修改动画漫游方式。本示例实现让飞机模型按既定的路径漫游。在实际应用中,可结合具体应用场景开发,如绘制路径进行动画漫游等功能需求等。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager` 对象,调用高级分析功能管理类的 `createAnimation()` 方法创建动画漫游对象实例实现动画漫游功能。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载底图数据**: +    初始化第三方图层类`CesiumZondy.Layer.ThirdPartyLayer`对象,调用 `appendGoogleMapExt()` 方法加载谷歌地图数据作为底图; + +* Example: + ``` Javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer + }); + //加载天地图 + var tdtLayer = thirdPartyLayer.appendTDTuMap({ + //天地图经纬度数据 + url: 'http://t0.tianditu.com/DataServer?T=vec_c&X={x}&Y={y}&L={l}', + //开发token (请到天地图官网申请自己的开发token,自带token仅做功能验证随时可能失效) + token: "9c157e9585486c02edf817d2ecbc7752", + //地图类型 'vec'矢量 'img'影像 'ter'地形 + ptype: "img" + }); + ``` + +**Step 4. 显示常用控件,并实现跳转定位**: +    调用`showPosition()`、`createNavigationTool()`方法显示常用控件,调用 `flyToEx()` 方法定位到指定点; + +* Example: + ``` Javascript + //视点跳转(经度,纬度,视角高度,方位角,俯仰角,翻滚角) + webGlobe.flyToEx(117.213063, 31.812956, { + height: 200, + heading: 90, + pitch: 0, + roll: 0 + }); + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location'); + //显示导航控件(罗盘、比例尺、场景导航) + webGlobe.createNavigationTool({ + enableCompass: true, + enableZoomControls: true, + enableDistanceLegend: true + }); + ``` + +**Step 5. 创建动画漫游对象**: +    初始化高级分析功能管理类对象`CesiumZondy.Manager.AdvancedAnalysisManager`,调用`createAnimation()`方法创建动画漫游对象; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //创建动画漫游对象 + animation = advancedAnalysisManager.createAnimation({ + exHeight: 9, + isLoop: false, + //漫游模型url + modelUrl: './static/data/model/WuRenJi.glb', + //完成动画漫游回调函数 + complete: function () { + alert('完毕'); + } + }); + ``` + +**Step 6. 实现动画漫游控制**: +    通过动画漫游对象的属性和方法实现动画漫游控制,即通过属性设置漫游路径、漫游方式、速度、俯仰角、方位角等参数,分别通过调用方法`start()`、`stop()`开始和结束漫游。 + +* Example: + ``` Javascript + //漫游路径 + positions = Cesium.Cartesian3.fromDegreesArray([ + 117.213063, 31.812956, 117.213162, 31.812389, 117.212929, 31.812056, 117.213275, 31.811582, + 117.21348, 31.811513, 117.214141, 31.811682, 117.21497, 31.811691, 117.216318, 31.811454, + 117.216962, 31.812037, 117.217893, 31.812298, 117.218607, 31.811488, 117.219466, 31.810935, + 117.224439, 31.810929, 117.225266, 31.811119, 117.225308, 31.81131, 117.224819, 31.811724, + 117.225189, 31.811928, 117.225676, 31.811624, 117.225843, 31.811943, 117.22625, 31.812183, + 117.226292, 31.81281, 117.225888, 31.813287, 117.226093, 31.814059, 117.22564, 31.814582, + 117.225953, 31.814731, 117.225611, 31.814954, 117.22576, 31.815233, 117.224073, 31.816329, + 117.223694, 31.81627, 117.222769, 31.817007, 117.222259, 31.816871, 117.221922, 31.816707, + 117.221653, 31.816788, 117.22151, 31.817002, 117.221039, 31.816891, 117.220395, 31.816352, + 117.220166, 31.815734, 117.219804, 31.815607, 117.219461, 31.815122, 117.21878, 31.814846, + 117.218297, 31.815275, 117.217975, 31.815172, 117.217142, 31.815229, 117.216753, 31.815124, + 117.216652, 31.814308, 117.215726, 31.814049, 117.214769, 31.813517, 117.214111, 31.813717, + 117.213552, 31.814099, 117.213024, 31.813954, 117.212897, 31.813892, 117.213224, 31.813681, + 117.212788, 31.813147, 117.212928, 31.813018, 117.213063, 31.812956 + ]); + //设置路径 + animation.positions = positions; + //漫游方式:1-跟随、2-锁定第一视角、3-上帝视角 + animation.animationType = 2; + //漫游速度 + animation.speed = 1; + ``` + +* Example: + ``` Javascript + function start() { + //开始漫游 + animation.start(); + } + function pause() { + //暂停漫游 + animation.pause = true; + } + function stop() { + //停止漫游 + animation.stop(); + } + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【场景视图管理类】 `CesiumZondy.Manager.SceneManager` + +##### 【method】 `showPosition()`: 鼠标坐标位置控件 + +##### 【method】 `createNavigationTool()`: 常用导航控件 + +##### 【method】 `flyToEx()`: 视点跳转 + + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createAnimation(optionsParam) → {Object}` :创建动画漫游对象, 返回动画漫游实例Animation(Object) + +|参数名|类型|说明| +|-|-|-| +|optionsParam|Object|动画漫游参数| + +* `optionsParam` 主要参数 + +|参数名|类型|说 明| +|-|-|-| +|exHeight|Number|(可选)附加高程| +|isLoop|Boolean|(可选)是否循环| +|modelUrl|Object|模型url| +|callback|function|(可选)完成动漫漫游后的回调函数| + +##### 【返回值】 `Animation`的属性与方法 + +|属性名|类型|说 明| +|-|-|-| +|positions|Array|漫游路径,Cesium.Cartesian3.fromDegreesArray的经纬度值数组| +|animationType|Number|漫游方式:1-跟随、2-锁定第一视角、3-上帝视角| +|speed|Number|漫游速度| + + +|方法名|说 明| +|-|-| +|start|开始漫游| +|stop|结束漫游| diff --git a/website/public/static/demo/military/markdown/analysis/analysis-aspectAnalysis.md b/website/public/static/demo/military/markdown/analysis/analysis-aspectAnalysis.md new file mode 100644 index 000000000..0e3526f53 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-aspectAnalysis.md @@ -0,0 +1,99 @@ +## 坡向分析 + +### 示例功能 + +    此功能用于地形数据的坡向分析。 坡向是指地表面上一点的切平面的法线在水平面的投影与该点的正北方向的夹角,描述该点高程值改变量的最大变化方向。坡向分析作用是:决定地表面局部地面接收阳光和重新分配太阳辐射量的重要地形因子,直接造成局部地区气候特征差异,影响各项农业生产指标。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法加载地形数据后,跳转视点,创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createAspectAnalysis()` 方法进行坡向分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法传入三维地形数据地图服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造地形图层管理类 + var terrain = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer + }); + //加载三维地形地图文档(服务地址,配置参数) + var { protocol, ip, port } = window.webclient; + var terrainlayer = terrain.append(`http://develop.smaryun.com:6163/igs/rest/g3d/terrain`, {}); + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +**Step 4. 坡向分析**: +    创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createAspectAnalysis()` 方法进行坡向分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //进行坡向分析 + var aspectAna = advancedAnalysisManager.createAspectAnalysis([ + Cesium.Color.ALICEBLUE, + Cesium.Color.ANTIQUEWHITE, + Cesium.Color.AQUA, + Cesium.Color.AQUAMARINE, + Cesium.Color.AZURE, + Cesium.Color.BEIGE + ]); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【地形图层管理类】`CesiumZondy.Layer.TerrainLayer` + +##### 【method】 `append(url, options)` :添加地形地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------- | ------------ | -------- | ------------------ | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| 代理 | DefaultProxy | 暂无 | 暂无 | + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createAspectAnalysis(color) → {Object}`: 坡向分析,返回坡向分析实例 + +| 参数名 | 类型 | 说 明 | +| ------ | ------------- | ------------------------- | +| color | Array. | 坡向分层颜色信息,分 6 层 | diff --git a/website/public/static/demo/military/markdown/analysis/analysis-cube.md b/website/public/static/demo/military/markdown/analysis/analysis-cube.md new file mode 100644 index 000000000..e0ba1de39 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-cube.md @@ -0,0 +1,142 @@ +## 填挖方计算 + +### 示例功能 + +    此功能提供用于计算将一定范围内的地形填平到某一高度时,需要挖开或填充的空间体积,可以应用于智慧城市,地质,公安等多个领域的业务功能,实用性强。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer()` 的 `append()` 方法加载地形数据后,初始化 `Cesium.DrawElement()` 对象在三维场景中添加交互式绘制区控件用来界定量算区域,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createCutFill()` 方法创建填挖方分析对象, 调用高级分析功能管理类的 `startCutFill()` 方法执行填挖方分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer()` 的 `append()` 方法加载地形数据,完成此步后可在三维场景中加载三维球控件并加载数据; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + //添加Google地图 + webGlobe.appendGoogleMapExt({ + ptype: 's@130' + }); + //构造地形图层管理类 + var terrain = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer + }); + //加载三维地形地图文档(服务地址,配置参数) + terrainlayer = terrain.append("http://develop.smaryun.com:6163/igs/rest/g3d/terrain", {}); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 创建交互式绘制工具**: +    初始化 `Cesium.DrawElement()` 对象,完成交互式绘制工具的创建; + +* Example: + ``` Javascript + //创建交互式绘制工具 + var drawElement = new Cesium.DrawElement(webGlobe.viewer); + ``` + +**Step 4. 激活交互式绘制区工具**: +    调用 `Cesium.DrawElement()` 对象的startDrawingPolygon()方法,激活交互式绘制区工具,完成此步后,可在三维场景中通过鼠标左键点击绘制多边形; + +* Example: + ``` Javascript + //激活交互式绘制区工具 + drawElement.startDrawingPolygon(); + ``` + +**Step 5. 创建填挖方分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createCutFill()` 方法创建填挖方分析对象; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //创建填挖方实例 + cutFill = advancedAnalysisManager.createCutFill(0.0, { + //设置x方向采样点个数 + xPaneNum: document.getElementById("x").value <= 0 ? 16 : document.getElementById("x").value, + //设置y方向采样点个数参数 + yPaneNum: document.getElementById("y").value <= 0 ? 16 : document.getElementById("y").value, + //设置填挖规整高度 + Height: document.getElementById("z").value <= 0 ? 16 : document.getElementById("z").value, + //返回结果的回调函数 + callback: function(result) { + document.getElementById("height").value = result.minHeight.toFixed(2) + '~' + result.maxHeight.toFixed(2); + document.getElementById("surfaceArea").value = result.surfaceArea; + document.getElementById("cutVolume").value = result.cutVolume; + document.getElementById("fillVolume").value = result.fillVolume; + } + }); + ``` + +**Step 6. 执行填挖方分析**: +    调用高级分析功能管理类的 `startCutFill()` 方法执行填挖方分析。 + +* Example: + ``` Javascript + //开始执行填挖方分析 + advancedAnalysisManager.startCutFill(cutFill, positions); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【地形图层管理类】`CesiumZondy.Layer.TerrainLayer` + +##### 【method】 `append(url, options)` :添加地形地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|代理|DefaultProxy|暂无|暂无| + +#### 2.【交互式绘制类】`Cesium. DrawElement` + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createCutFill(dataType, options)` :创建填挖方实例 + +|参数名|类型|说明| +|-|-|-| +|dataType|Number|针对地形进行填挖方分析| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|说明| +|-|-|-|-| +|xPaneNum|Number|x方向采样点个数| +|yPaneNum|Number|y方向采样点个数| +|Height|Number|设定的填挖规整高度| +|callback|function|返回结果的回调函数| + +##### 【method】 `startCutFill(cutFill, positions)` :开始执行填挖方分析 + +|参数名|类型|说明| +|-|-|-| +|cutFill|object|填挖方实例| +|positions|Array|填挖区域多边形的顶点数组| diff --git a/website/public/static/demo/military/markdown/analysis/analysis-dynamiccut.md b/website/public/static/demo/military/markdown/analysis/analysis-dynamiccut.md new file mode 100644 index 000000000..bd58ed0a2 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-dynamiccut.md @@ -0,0 +1,144 @@ +## 动态剖切 + +### 示例功能 + +    此功能对已加载的M3D数据进行任意距离的剖切,动态的显示或隐藏一部分数据。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例,通过设置剖切面距离进行数据剖切分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + var drilllayer = m3dLayer.append( + "http://develop.smaryun.com:6163/igs/rest/g3d/钻孔_2_钻孔模型s", { + autoReset: false, + } + ); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {}); + ``` + +**Step 4. 跳转定位**: +    调用视图功能管理类 CesiumZondy. Manager. SceneManager() ` 的 ` flyToEx()` 方法跳转到数据显示的范围; + +* Example: + ``` Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //视点跳转 + sceneManager.flyToEx(112.94845170512113, 30.004246325952618, { + height: 2600, + heading: 67, + pitch: -30, + roll: 0 + }); + ``` + +**Step 5. 创建切面**: +    初始化切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //进行剖切分析的面,从上往下切,Cesium.Cartesian3中第一个参数是左右,第二个参数是前后,第三个参数是上下 + var plane = new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, -1.0), -500.0) + ``` + +**Step 6. 获取剖切切面**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建剖切对象实例 + dynaCut = analysisManager.createDynamicCutting(landscapeLayer, [plane], { + color: new Cesium.Color(0.0, 1.0, 1.0, 0.3) + }); + ``` + +**Step 7. 设置剖切面距离**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + //设置切面回调函数 + dynaCut.planes[0].plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane.distance = distance; + return Cesium.Plane.transform(plane, landscapeLayer[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3. 【裁剪平面类】 `Cesium.ClippingPlane` + +|参数名|类型|说 明| +|-|-|-| +|normal|Cartesian3|法线| +|distance|Number|最短距离| + +#### 4.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createDynamicCutting(tileSets, planes, options)`:创建动态剖切实例 + +|参数名|类型|说明| +|-|-|-| +|tileSets|Object|图层集| +|planes|Object|平面集| +|options|Object|暂无| diff --git a/website/public/static/demo/military/markdown/analysis/analysis-excavate.md b/website/public/static/demo/military/markdown/analysis/analysis-excavate.md new file mode 100644 index 000000000..f83b056b4 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-excavate.md @@ -0,0 +1,163 @@ +## 开挖深度 + +### 示例功能 + +    此功能对已加载的M3D数据进行任意距离深度开挖,动态的显示或隐藏一部分数据。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` , 初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建 `Cesium.ClippingPlane()` 切面对象,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建开挖分析对象通过设置剖切面距离进行数据开挖分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + var drilllayer = m3dLayer.append( + "http://develop.smaryun.com:6163/igs/rest/g3d/钻孔_2_钻孔模型s", { + autoReset: false, + } + ); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {}); + ``` + +**Step 4. 创建切面**: +    初始化切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //开挖面设置,这五个面分别表示前后左右,底面,其中底面用于控制开挖深度 + var clippingPlanes = [ + new Cesium.ClippingPlane(new Cesium.Cartesian3(3, 0.0, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(-3, 0.0, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 3, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, -3, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, -5), 0.0) + ] + ``` + +**Step 5. 创建开挖分析**: +    化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建 `Cesium.ClippingPlane()` 切面对象,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建开挖分析对象, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建开挖分析实例 + dynaCut = analysisManager.createExcavateAnalysis({ + //图层信息 + tileSet: landscapeLayer[0], + //开挖面的形状 + planes: planes, + //裁剪面材质 + material: new Cesium.Color(0.2, 0.4, 0.3, 0.7), + //边界线颜色 + edgeColor: new Cesium.Color(0.2, 0.4, 0.3, 0.7), + //边界线宽度 + edgeWidth: 3, + //裁减法线方向,默认值为 false + unionClippingRegions: false, + //开挖坐标 + longitude: 113.0402, + latitude: 30.0264, + height: 0 + }); + ``` + +**Step 6. 设置剖切面距离**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + dynaCut.planes[0].plane.plane = new Cesium.CallbackProperty(function(date) { + console.log(planes); + for (var i = 0; i < planes.length; i++) { + if (i === planes.length - 1) { + var plane = planes[i]; + plane.distance = distance; + Cesium.Plane.transform(plane, landscapeLayer[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + } + } + }, false); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3.【裁剪平面类】 `Cesium.ClippingPlane(normal, distance)` + +|参数名|类型|说 明| +|-|-|-| +|normal|Cartesian3|法线| +|distance|Number|最短距离| + +#### 4.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createExcavateAnalysis(option)`:创建开挖实例 + +|参数名|类型|说明| +|-|-|-| +|option|Object|参数设置| + +* `options` 主要参数 + +|参数名|类型|说明| +|---|---|---| +|tileSet|Object|图层信息| +|planes|Object|开挖面的形状| +|material|Object|裁剪面材质| +|edgeColor|Object|边界线颜色| +|edgeWidth|Object|边界线宽度| +|unionClippingRegions|Object|裁减法线方向,默认值为 false| +|longitude|Object|开挖面定位点经度| +|latitude|Object|开挖面定位点纬度| +|height|Object|开挖面定位点高度| \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/analysis/analysis-explosion.md b/website/public/static/demo/military/markdown/analysis/analysis-explosion.md new file mode 100644 index 000000000..c829097b2 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-explosion.md @@ -0,0 +1,92 @@ +## 爆炸分析 + +### 示例功能 + +    此功能用于将M3D数据爆炸分析,将数据朝指定炸开。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createExplosion()` 方法爆炸模型。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 爆炸模型**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createExplosion()` 方法爆炸模型。 + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + analysisManager.createExplosion(option); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createExplosion(options)` :创建模型爆炸动画实例 + +* `options` 主要参数 + +|参数名|类型|说明| +|---|---|---| +|children|Array|当前图层子节点| +|center|Cartesian3|爆炸中心| +|direction|Cartesian3|图层整体爆炸方向| +|distance|Number|沿当前方向移动距离| \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/analysis/analysis-floor.md b/website/public/static/demo/military/markdown/analysis/analysis-floor.md new file mode 100644 index 000000000..37dbb7a76 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-floor.md @@ -0,0 +1,175 @@ +## 洪水淹没分析 + +### 示例功能 + +    此功能用于在三维场景中添加洪水淹没的效果。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` , 初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,添加交互式绘制工具 `Cesium.DrawPolygonTool()` 选择绘制区域, 初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createFlood()` 方法创建洪水淹没分析示例,将结果显示到三维球控件上。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + geobodyLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建交互式绘制区工具**: +    初始化 `Cesium.DrawPolygonTool()` 对象,完成交互式绘制区工具的创建; + +* Example: + ``` Javascript + //创建交互式绘制区工具 + var drawPolygon = new Cesium.DrawPolygonTool(webGlobe.viewer, getDrawResult); + ``` + +**Step 5. 激活交互式绘制区工具**: +    调用 `Cesium.DrawPolygonTool()` 对象的activeTool()方法,激活交互式绘制区工具,完成此步后,可在三维场景中通过鼠标左键点击绘制多边形。 + +* Example: + ``` Javascript + //激活交互式绘制区工具 + drawPolygon.activeTool(); + ``` + +**Step 6. 统一高度**: +    将交互式选取的点的高度统一; + +* Example: + ``` Javascript + var array = new Array(); + for (let i = 0; i < e.points.length; i++) { + let point = e.points[i]; + let resPoint = new Cesium.Cartesian3; + let invserTran = new Cesium.Matrix4; + Cesium.Matrix4.inverse(tileset[0].root.transform, invserTran); + Cesium.Matrix4.multiplyByPoint(invserTran, point, resPoint); + array.push(new Cesium.Cartesian3(resPoint.x, resPoint.y, resPoint.z)); + } + var hight = null; + for (var arraylength = 0; arraylength < array.length; arraylength++) { + hight = hight < array[arraylength].z ? array[arraylength].z : hight; + } + var newArray = new Array(); + for (var arraylength = 0; arraylength < array.length; arraylength++) { + array[arraylength].z = hight; + let point = array[arraylength]; + let resPoint = new Cesium.Cartesian3; + let invserTran = new Cesium.Matrix4; + Cesium.Matrix4.multiplyByPoint(tileset[0].root.transform, point, resPoint); + newArray.push(new Cesium.Cartesian3(resPoint.x, resPoint.y, resPoint.z)); + } + ``` + +**Step 7. 创建洪水淹没分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createFlood()` 方法创建洪水淹没分析示例; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //初始化洪水淹没分析类 + flood = advancedAnalysisManager.createFlood(); + //设置洪水淹没分析区域点集 + flood.dotsList = newArray; + //设置洪水淹没区域最底高度 + flood.minHeight = Number(document.getElementById('minHeight').value <= 0 ? 0 : document.getElementById('minHeight').value); + //设置洪水淹没区域最高高度 + flood.maxHeight = Number(document.getElementById('maxHeight').value <= 0 ? 30 : document.getElementById('maxHeight').value); + //设置洪水上涨速度 + flood.floodSpeed = Number(document.getElementById('floodSpeed').value <= 0 ? 1 : document.getElementById('floodSpeed').value); + //水纹频率 指波浪的个数 + flood.frequency = Number(document.getElementById('frequency').value <= 0 ? 1000 : document.getElementById('frequency').value); + //水纹速度 + flood.animationSpeed = Number(document.getElementById('animationSpeed').value <= 0 ? 0.01 : document.getElementById('animationSpeed').value); + //水波的高度 + flood.amplitude = Number(document.getElementById('amplitude').value <= 0 ? 10 : document.getElementById('amplitude').value); + //指定水面颜色 和 透明度 + flood.floodColor = new Cesium.Color(0.2, 0.5, 0.4, 0.7); + // 指定光线强度 + flood.specularIntensity = 3.0; + ``` + +**Step 8. 洪水淹没结果显示**: +    将结果显示到三维球控件上。 + +* Example: + ``` Javascript + //添加洪水淹没结果显示 + webGlobe.scene.VisualAnalysisManager.add(flood); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3. 【交互式绘制区工具类】 `Cesium.DrawPolygonTool` + +|参数名|类型|说 明| +|-|-|-| +|viewer|View|视图| +|getDrawResult|function|回调函数| + +##### 【method】 `activeTool()` :激活交互式绘制区工具方法 + +#### 4.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createFlood(options)`: 创建填挖方实例 + +* `options` 主要参数 + +|参数名|类型|说 明| +|-|-|-| +|minHeight|Number|最低洪水水位高度| +|maxHeight|Number|最高洪水水位高度| +|floodSpeed|Number|洪水上涨速度| diff --git a/website/public/static/demo/military/markdown/analysis/analysis-modelflatten.md b/website/public/static/demo/military/markdown/analysis/analysis-modelflatten.md new file mode 100644 index 000000000..9d5ac0cb2 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-modelflatten.md @@ -0,0 +1,161 @@ +## 模型压平 + +### 示例功能 + +    此功能用于将加载完成的M3D数据进行压平处理。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` , 初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,添加交互式绘制工具 `Cesium.DrawPolygonTool()` 选择绘制区域, 初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createModelFlatten()` 方法,创建模型压平分析,将结果显示到三维球控件上。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建交互式绘制区工具**: +    初始化 `Cesium.DrawPolygonTool()` 对象,完成交互式绘制区工具的创建; + +* Example: + ``` Javascript + //创建交互式绘制区工具 + var drawPolygon = new Cesium.DrawPolygonTool(webGlobe.viewer, getDrawResult); + ``` + +**Step 5. 激活交互式绘制区工具**: +    调用 `Cesium.DrawPolygonTool()` 对象的activeTool()方法,激活交互式绘制区工具,完成此步后,可在三维场景中通过鼠标左键点击绘制多边形。 + +* Example: + ``` Javascript + //激活交互式绘制区工具 + drawPolygon.activeTool(); + ``` + +**Step 6. 顶点处理**: +    将交互式选取的点处理; + +* Example: + ``` Javascript + /*对绘制区域的顶点循环处理一下,以便用于模型压平参数的赋值*/ + var array = []; + for (let i = 0; i < positionsArray.length; i++) { + let point = positionsArray[i]; + let resPoint = new Cesium.Cartesian3; + let invserTran = new Cesium.Matrix4; + Cesium.Matrix4.inverse(tileset[0]._root.transform, invserTran); + Cesium.Matrix4.multiplyByPoint(invserTran, point, resPoint); + resPoint.y = -resPoint.y; + array.push(new Cesium.Cartesian2(resPoint.x, resPoint.y)); + } + array.push(array[0]); + ``` + +**Step 7. 创建模型压平分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createModelFlatten()` 方法,创建模型压平分析 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + advancedAnalysisManager.createModelFlatten(landscapeLayer[0], { + //是否进行压平。值为true时执行压平 + isFlatten: true, + //将高度压到0 + height: 0, + //压平多边形的顶点序列长度 + arrayLength: positionsArray.length, + //顶点序列。顶点序列需要闭合,也就是说,例如一个矩形是四个顶点ABCD,那序列就应该是【ABCDA】 + array: array + }); + ``` + +**Step 8. 结果显示**: +    将结果显示到三维球控件上。 + +* Example: + ``` Javascript + //场景渲染(渲染最新的压平效果) + webGlobe.viewer.scene.requestRender(); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)`:添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3. 【交互式绘制区工具类】 `Cesium.DrawPolygonTool` + +|参数名|类型|说 明| +|-|-|-| +|viewer|View|视图| +|getDrawResult|function|回调函数| + +##### 【method】 `activeTool()` :激活交互式绘制区工具方法 + +#### 4.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createModelFlatten(tileset, options)` :创建模型压平分析实例 + +|参数名|类型|说 明| +|-|-|-| +|tileset|object|图层信息| +|options|object|参数设置| + +* `options` 主要参数 + +|参数名|类型|说 明| +|-|-|-| +|isFlatten|Boolean|是否执行模型压平| +|height|Number|压平到指定高度| +|arrayLength|Number|压平区域顶点数组长度| +|array|Array|压平区域顶点数组| \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/analysis/analysis-rollershutters.md b/website/public/static/demo/military/markdown/analysis/analysis-rollershutters.md new file mode 100644 index 000000000..aa9506ede --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-rollershutters.md @@ -0,0 +1,153 @@ +## 卷帘分析 + +### 示例功能 + +    此功能对已加载的两个M3D数据进行任意距离的剖切,动态的显示或隐藏一部分数据,一个显示的同时不显示另一个数据,打到卷帘效果。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建两个M3D数据的切面对象通过设置剖切面距离进行数据剖切分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + * Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + var drilllayer = m3dLayer.append( + "http://develop.smaryun.com:6163/igs/rest/g3d/钻孔_2_钻孔模型s", { + autoReset: false, + } + ); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {}); + ``` + +**Step 4. 地图跳转**: +    调用视图功能管理类 CesiumZondy. Manager. SceneManager() ` 的 ` flyToEx()` 方法跳转到数据显示的范围; + +* Example: + ``` Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //视点跳转 + sceneManager.flyToEx(112.94845170512113, 30.004246325952618, { + height: 2600, + heading: 67, + pitch: -30, + roll: 0 + }); + ``` + +**Step 5. 创建切面对象**: +    创建切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //进行剖切分析的面,向右切 + var plane = new Cesium.ClippingPlane(new Cesium.Cartesian3(1, 0, 0), -200.0) + //进行剖切分析的面,向左切 + var plane1 = new Cesium.ClippingPlane(new Cesium.Cartesian3(-1, 0, 0), -200.0) + ``` + +**Step 6. 创建剖切对象**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建剖切对象实例 + dynaCut = analysisManager.createDynamicCutting(landscapeLayer, [plane], { + color: new Cesium.Color(0.0, 1.0, 1.0, 0.3) + }); + ``` + +**Step 7. 通过切面回调完成动态剖切分析**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + //设置切面回调函数 + planetEntity.plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane.distance = distance; + return Cesium.Plane.transform(plane, tileset[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + //设置切面回调函数 + planetEntity1.plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane1.distance = distance1; + return Cesium.Plane.transform(plane1, tileset[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)`:添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3. 【裁剪平面类】 `Cesium.ClippingPlane` + +|参数名|类型|说 明| +|-|-|-| +|normal|Cartesian3|法线| +|distance|Number|最短距离| + +#### 4.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createDynamicCutting(tileSets, planes, options)` :创建动态剖切实例 + +|参数名|类型|说明| +|-|-|-| +|tileSets|Object|图层集| +|planes|Object|平面集| +|options|Object|暂无| + diff --git a/website/public/static/demo/military/markdown/analysis/analysis-sceneprojection.md b/website/public/static/demo/military/markdown/analysis/analysis-sceneprojection.md new file mode 100644 index 000000000..d78897174 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-sceneprojection.md @@ -0,0 +1,125 @@ +## 场景投放 + +### 示例功能 + +    此功能用于在三维场景中加载色块、图片、视屏等功能。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,通过Cesium三维球控件 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法在三维场景里面自定义注册鼠标事件完成场景投放点的拾取,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSceneProjector` 方法创建场景投放示例,实现场景投影分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建场景投影对象**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSceneProjector` 方法创建场景投放示例; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //初始化场景投影对象 + scenePro = advancedAnalysisManager.createSceneProjector(2); + ``` + +**Step 5. 注册鼠标事件**: +    调用Cesium三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +* Example: + ``` Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + ``` + +**Step 6. 设置场景投影参数**: +    给场景投影对象设置进行场景投影使用的必要参数。 + +* Example: + ``` Javascript + //设置投影观察点 + scenePro.viewPosition = cartesian; + //数据url路径 + scenePro.textureSource = './static/data/picture/world.jpg'; + //设置场景投影结果点 + scenePro.targetPosition = cartesian; + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +##### 【method】 `registerMouseEvent(eventType, callbackFun, handler)`:注册鼠标事件方法 + +|参数名|类型|说明| +|-|-|-| +|eventType|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|callbackFun|function|回调函数| +|handler|Object|回调函数| + +##### 【method】 `unRegisterMouseEvent(eventType)`:注销鼠标事件方法 + +|参数名|类型|说明| +|-|-|-| +|eventType|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| + +#### 2.【M3D模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)`:添加M3D地图文档 + +|参数名|类型|说明| +|-|-|-| +|url|String|事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮)| +|options|Object|可选参数| + +* `options` 主要参数 + +|参数名|类型|默认值|说明| +|-|-|-|-| +|autoReset|Boolean|true|(可选)是否自动定位| +|synchronous|Boolean|true|(可选)是否异步请求| +|loaded|function|function|(可选)回调函数| +|proxy|DefaultProxy|defaultProxy|代理| +|showBoundingVolume|Boolean|false|是否显示包围盒| +|maximumScreenSpaceError|Number|16|用于控制模型显示细节| + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createSceneProjector(type) `:创建场景投放实例 + +|参数名|类型|说明| +|-|-|-| +|type|Number|场景投放的类型| diff --git a/website/public/static/demo/military/markdown/analysis/analysis-skyline.md b/website/public/static/demo/military/markdown/analysis/analysis-skyline.md new file mode 100644 index 000000000..37554c534 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-skyline.md @@ -0,0 +1,85 @@ +## 天际线 + +### 示例功能 + +    此功能用于检测当前视角的天际线,并绘制在三维场景中。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载 M3D 数据后,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSkyLine()` 方法创建天际线分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建天际线分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSkyLine()` 方法创建天际线分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //创建天际线实例 + skyLineAn = advancedAnalysisManager.createSkyLine() + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【M3D 模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加 M3D 地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------------------- | ------------ | ------------ | -------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | 代理 | +| showBoundingVolume | Boolean | false | 是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | 用于控制模型显示细节 | + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createSkyLine()` :创建天际线实例 diff --git a/website/public/static/demo/military/markdown/analysis/analysis-slopeAnalysis.md b/website/public/static/demo/military/markdown/analysis/analysis-slopeAnalysis.md new file mode 100644 index 000000000..3af23ea97 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-slopeAnalysis.md @@ -0,0 +1,99 @@ +## 坡度分析 + +### 示例功能 + +    此功能用于地形数据的坡度分析。 坡度是指过地表一点的切平面与水平面的夹角,描述地表面在该点的倾斜程度。坡度分析的作用是:影响地表物质流动与能量转换的规模与强度,制约生产力空间布局。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法加载地形数据后,跳转视点,创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createSlopeAnalysis()` 方法进行坡度分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法传入三维地形数据地图服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造地形图层管理类 + var terrain = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer + }); + //加载三维地形地图文档(服务地址,配置参数) + var { protocol, ip, port } = window.webclient; + var terrainlayer = terrain.append(`http://develop.smaryun.com:6163/igs/rest/g3d/terrain`, {}); + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +**Step 4. 坡度分析**: +    创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createSlopeAnalysis()` 方法进行坡度分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //进行坡度分析 + var slopeAna = advancedAnalysisManager.createSlopeAnalysis([ + Cesium.Color.ALICEBLUE, + Cesium.Color.ANTIQUEWHITE, + Cesium.Color.AQUA, + Cesium.Color.AQUAMARINE, + Cesium.Color.AZURE, + Cesium.Color.BEIGE + ]); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2.【地形图层管理类】`CesiumZondy.Layer.TerrainLayer` + +##### 【method】 `append(url, options)` :添加地形地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------- | ------------ | -------- | ------------------ | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| 代理 | DefaultProxy | 暂无 | 暂无 | + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createSlopeAnalysis(color) → {Object}`: 坡度分析,返回坡度分析实例 + +| 参数名 | 类型 | 说 明 | +| ------ | ------------- | ------------------------- | +| color | Array. | 坡度分层颜色信息,分 6 层 | diff --git a/website/public/static/demo/military/markdown/analysis/analysis-visibility.md b/website/public/static/demo/military/markdown/analysis/analysis-visibility.md new file mode 100644 index 000000000..45cdf8ce3 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-visibility.md @@ -0,0 +1,116 @@ +## 通视分析 + +### 示例功能 + +    此功能用于检测当前三维场景中两点之间是否可以没有阻碍的看到。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `append()` 加载 M3D 数据后,通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法在三维场景里面自定义注册鼠标事件完成通视分析两个点的拾取,通过两点通视分析对象 `Cesium.VisiblityAnalysis()`实现两点通视分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //加载数据 + var tileset = webGlobe.append('http://develop.smaryun.com:6163/igs/rest/g3d/M3D', {}); + ``` + +**Step 4. 创建通视分析**: +    初始化两点通视分析对象 `Cesium.VisiblityAnalysis()` ; + +- Example: + ```Javascript + //初始化通视分析类 + visiblity = new Cesium.VisiblityAnalysis(); + ``` + +**Step 5. 添加通视分析**: +    将两点通视分析对象 `Cesium.VisiblityAnalysis()` 添加到 Cesium 三维球控件中; + +- Example: + ```Javascript + //添加通视分析显示 + viewer.scene.VisualAnalysisManager.add(visiblity); + ``` + +**Step 6. 注册鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +- Example: + ```Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('MOUSE_MOVE', function(e) {}); + ``` + +**Step 7. 设置两点通视分析参数**: +    给两点通视分析对象设置进行两点通视分析使用的必要参数。 + +- Example: + ```Javascript + //设置通视分析观察点 + visiblity.viewPosition = cartesian; + //设置通视分析结果点 + visiblity.targetPosition = cartesian; + ``` + +### 关键接口 + +#### 1. 【三维视图的主要类】`Cesium.WebSceneControl(elementId, options)` + +##### 【method】 `append(url, options, 代理)` :添加地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | +| 代理 | DefaultProxy | 暂无 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------- | -------- | -------- | ------------------ | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | + +##### 【method】 `registerMouseEvent(eventType, callbackFun, handler)` :注册鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| ----------- | -------- | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| callbackFun | function | 回调函数 | +| handler | Object | 回调函数 | + +##### 【method】 `unRegisterMouseEvent(eventType)` :注销鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| --------- | ------ | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | + +#### 2.【两点通视分析主要类】 `Cesium.VisiblityAnalysis()` diff --git a/website/public/static/demo/military/markdown/analysis/analysis-visiblerange.md b/website/public/static/demo/military/markdown/analysis/analysis-visiblerange.md new file mode 100644 index 000000000..d676b7f70 --- /dev/null +++ b/website/public/static/demo/military/markdown/analysis/analysis-visiblerange.md @@ -0,0 +1,130 @@ +## 可视分析 + +### 示例功能 + +    此功能用于检测当前三维场景中某个点朝一个方向看的时候可以看到的区域。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载 M3D 数据后,通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法在三维场景里面自定义注册鼠标事件完成可视域分析点的拾取,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createViewshedAnalysis()` 方法实现可视域分析。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 加载数据**: +    初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 4. 创建可视域分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createViewshedAnalysis()` 方法实现可视域分析; + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //创建可视化分析对象 + viewshed3d = advancedAnalysisManager.createViewshedAnalysis(); + ``` + +**Step 5. 注册鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +- Example: + ```Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('MOUSE_MOVE', function(e) {}); + ``` + +**Step 6. 设置可视域分析参数**: +    给可视域分析对象设置进行可视域分析使用的必要参数; + +- Example: + ```Javascript + //设置观察点坐标 + viewshed3d.viewPosition = cartesian; + //设置可视域结果点 + viewshed3d.targetPosition = cartesian; + ``` + +**Step 7. 添加可视域分析**: +    将可视域分析对象 `Cesium.ViewshedAnalysis()` 添加到 Cesium 三维球控件中。 + +- Example: + ```Javascript + //添加可视域分析结果显示 + viewer.scene.VisualAnalysisManager.add(viewshed3d); + ``` + +### 关键接口 + +#### 1.【三维视图的主要类】 `Cesium.WebSceneControl` + +##### 【method】 `registerMouseEvent(eventType, callbackFun, handler)` :注册鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| ----------- | -------- | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| callbackFun | function | 回调函数 | +| handler | Object | 回调函数 | + +##### 【method】 `unRegisterMouseEvent(eventType)` :注销鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| --------- | ------ | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | + +#### 2.【M3D 模型层管理类】 `CesiumZondy.Layer.M3DLayer` + +##### 【method】 `append(url, options)` :添加 M3D 地图文档 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ----------------------------------------------------------------------------------------------- | +| url | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| options | Object | 可选参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ----------------------- | ------------ | ------------ | -------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | 代理 | +| showBoundingVolume | Boolean | false | 是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | 用于控制模型显示细节 | + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createViewshedAnalysis()` :创建可视域实例 diff --git a/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-along.md b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-along.md new file mode 100644 index 000000000..f1716d225 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-along.md @@ -0,0 +1,163 @@ +## 线插值操作 Along + +### 示例功能 + +    本示例用于线插值,线插值操作是通过 `计算起点-终点长度` , 然后再根据长度等分计算需要插值的点, 最后再把这些点插入到原始数据中. + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,过 Cesium 三维球控件 `Cesium.WebSceneControl()` 加载三维场景控件后根据已有的线计算插值点形成新的线数据,添加线显示完成此功能。 + +#### Turf.js + +> turf 是 JavaScript 编写的模块化地理空间引擎,具体使用请查看turf 官方教程下载 + +#### GeoJSON.js + +> 地理数据转换成GeoJSON格式,GeoJSON.js 官方地址 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 计算线长度**: +    通过 `turf` 对象的 `distance()` 方法计算线长度; + +- Example: + ```Javascript + //计算距离 + var lineDistance = turf.distance(origin, destination, { + units: 'kilometers' + }); + ``` + +**Step 4. 等分线长度**: +    将线长度平均分; + +- Example: + ```Javascript + //将均分线插值 + for (var i = 0; i < lineDistance; i += clip) { + //计算对应第i个插值点的位置 + var segment = turf.along(route.features[0], i, { + units: 'kilometers' + }); + //将插值点加入到原始数据中 + arc.push(segment.geometry.coordinates); + } + ``` + +**Step 5. 显示结果**: +    将插完值的线显示出来。 + +- Example: + ```Javascript + //更新视图函数 + function updateView() { + //添加路线显示 + var routedatasource = map.dataSources.add(Cesium.GeoJsonDataSource.load(route, { + //线颜色 + stroke: Cesium.Color.GRAY, + //填充色 + fill: Cesium.Color.GRAY, + //线宽 + strokeWidth: 5 + })); + //添加简单线显示 + var simpledatasource = map.dataSources.add(Cesium.GeoJsonDataSource.load(simpleLine, { + //线颜色 + stroke: Cesium.Color.RED, + //填充色 + fill: Cesium.Color.RED, + //线宽 + strokeWidth: 5 + })); + //跳转至路线 + map.flyTo(routedatasource); + } + ``` + +### 关键接口 + +#### 1.【客户端空间分析库】`Turf` + +##### 【method】`turf.distance(from,to,options)`:量算距离 + +    计算两点之间的距离,以度、弧度、英里或公里为单位。 + +| 参数 | 类型 | 说明 | +| ------- | ------------------------------------------------------------------------------------- | ---------------------------- | +| from | Coord | 起点 | +| to | Coord | 终点 | +| options | Object | 其他参数,请看下面的单位参数 | + +- `options`参数属性说明 + +| 名称 | 类型 | 描述 | +| ----- | ------ | ------------ | +| units | string | "kilometers" | 可以是 `degrees` 度, `radians` 弧度, `miles` 英里, or `kilometers` 千米 | + +- `distance()`返回值 + +> number - 两点之间的距离 + +- Example: + + ```javascript + var from = turf.point([-75.343, 39.984]) + var to = turf.point([-75.534, 39.123]) + var options = { units: 'miles' } + var distance = turf.distance(from, to, options) + ``` + +##### 【method】`turf.along(line,distance,options)`:线插值 + +    线插值,接收一个线要素,并沿线返回指定距离处的点。 + +| 参数 | 类型 | 描述 | +| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | +| line | Feature<LineString> | 原始线段,至少要有 2 个点 | +| distance | number | 距离起点的插入距离 | +| options | Object | 其他参数,请看下面的单位参数 | + +- `options`参数属性说明 + +| 名称 | 类型 | 默认值 | 描述 | +| ----- | ------ | ------------ | ------------------------------------------------------------------ | +| units | string | "kilometers" | 可以是`degrees`度, `radians`弧度, `miles`英里, or `kilometers`千米 | + +> Feature 指得是 GeoJSON 格式的要素集合,因此请重点复习`GeoJSON专题`,`GeoJSON.parse`方法在后面的场景中将会反复出现,请熟练掌握其用法 + +- `along()`返回值 + +> Feature<Point > - Point 距离起点长度为 distance 的点 + +- Example: + + ```javascript + var line = turf.lineString([ + [-83, 30], + [-84, 36], + [-78, 41], + ]) + var options = { units: 'miles' } + var along = turf.along(line, 200, options) + ``` diff --git a/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-bezierspline.md b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-bezierspline.md new file mode 100644 index 000000000..09dc33185 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-bezierspline.md @@ -0,0 +1,92 @@ +## 贝塞尔曲线 bezierspline + +### 示例功能 + +    本示例用于针对给定的线生成对应的贝塞尔曲线。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,过 Cesium 三维球控件 `Cesium.WebSceneControl()` 加载三维场景控件后使用 `Turf.js` 空间分析库的 `bezierSpline()` 方法对指定线进行贝塞尔曲线分析。 + +#### Turf.js + +> turf 是 JavaScript 编写的模块化地理空间引擎,具体使用请查看turf 官方教程下载 + +#### GeoJSON.js + +> 地理数据转换成GeoJSON格式,GeoJSON.js 官方地址 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 执行贝塞尔曲线分析**: +    创建一条线, `Turf.js` 空间分析库的 `bezierSpline()` 方法对该线进行贝塞尔曲线分析; + +- Example: + ```Javascript + line = turf.lineString([ + [-76.091308, 18.427501], + [-76.695556, 18.729501], + [-76.552734, 19.40443], + [-74.61914, 19.134789], + [-73.652343, 20.07657], + [-73.157958, 20.210656] + ]); + geojson = turf.bezierSpline(line); + ``` + +**Step 4. 显示分析结果**: +    将线和经过贝塞尔曲线分析得到的线显示出来。 + +- Example: + ```Javascript + //添加线显示 + var routedatasource = map.dataSources.add(Cesium.GeoJsonDataSource.load(line, { + //线颜色 + stroke: Cesium.Color.GRAY, + //填充色 + fill: Cesium.Color.GRAY, + //线宽 + strokeWidth: 5 + })); + //添加贝兹曲线显示 + var simpledatasource = map.dataSources.add(Cesium.GeoJsonDataSource.load(geojson, { + //线颜色 + stroke: Cesium.Color.RED, + //填充色 + fill: Cesium.Color.RED, + //线宽 + strokeWidth: 5 + })); + //跳转至显示线的区域 + map.flyTo(routedatasource); + ``` + +#### 参数 + +#### 1.【客户端空间分析库】`Turf` + +##### 【method】`turf.bezierSpline(line)`:根据输入线生成贝塞尔曲线 + +| 参数 | 类型 | 描述 | +| :--- | ----------------------- | :------------------------- | +| line | GeoJSON< `LineString` > | 输入线, 用于生成贝塞尔曲线 | diff --git a/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-buffer.md b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-buffer.md new file mode 100644 index 000000000..e454c7dc3 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-buffer.md @@ -0,0 +1,156 @@ +## 缓冲区分析 + +### 示例功能 + +    给定一个缓冲半径进行缓冲区分析,单位支持 `miles 米`,`kilometers 千米`,`degrees 度`。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,先通过Cesium三维球控件 `Cesium.WebSceneControl()` 加载三维场景控件后,使用 `Turf.js` 空间分析库的 `turf.buffer()` 方法进行缓冲区分析。 + + +#### Turf.js + +> turf是JavaScript编写的模块化地理空间引擎,具体使用请查看turf官方教程下载 + +#### GeoJSON.js + +> 地理数据转换成GeoJSON格式,GeoJSON.js官方地址 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 执行缓冲区分析**: +      准备`点`、`线`、`面`要素数据,根据`缓冲区分析算法`得到缓冲区分析结果,实现关键步骤如下: + +   (1)准备`点`、`线`、`面`要素数据 + +* Example: + ```javascript + var origindata = { + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [114.24270629882811,30.622550184776674] + } + }, + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "LineString", + "coordinates": [ + [114.34810638427734,30.634958017061198], + [114.2856216430664,30.554869984737515], + [114.246826171875,30.4954261715298] + ] + } + }, + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [114.33815002441406,30.502230042106245], + [114.34398651123045,30.485071542395932], + [114.3728256225586,30.472348632640834], + [114.38278198242188,30.49010107130931], + [114.35256958007811,30.50518809826035], + [114.33815002441406,30.502230042106245] + ] + ] + } + } + ] + }; + ``` + +   (2)执行 `缓冲区分析算法`,返回缓冲结果要素数据 + +* Example: + ```javascript + geojson = turf.buffer(origindata, 1.5, { + units: 'miles' + }); + ``` + +**Step 4. 显示缓冲区分析结果**: +      更新数据,将得到的缓冲结果要素数据添加到地图中。 + +* Example: + ```javascript + map.dataSources.add(Cesium.GeoJsonDataSource.load(geojson, { + stroke: Cesium.Color.BLACK, + fill: Cesium.Color.GRAY, + strokeWidth: 15 + })); + ``` + +### 关键接口 + +#### 1.【客户端空间分析库】`Turf` + +##### 【method】`turf.buffer(coordinates,properties,options)`:缓冲分析方法 + +    计算给定半径的输入要素的缓冲区。 支持的单位是英里,公里和度。 + +|参数 |类型 |描述| +|---|---|---| +|geojson |任何Geojson格式|输入数据,标准的geojson格式即可| +|radius |number |缓冲距离(`允许负数`)| +|options |Object| 其他参数,请看下面的单位参数| + +* `options`参数属性说明 + +|名称 |类型 |默认值| 描述| +|---|---|---|---| +|units |string |"kilometers" |turf支持的任何单位选项| +|steps| number |64| 步数 | + +* `buffer()`返回值 + +> - FeatureCollection `geojson要素集合` +> - Feature `<(Polygon|MultiPolygon)>` 区或者多区 +> - undefined `失败`返回 undefined + + +* Example: + ```javascript + var point = turf.point([-90.548630, 14.616599]); + var buffered = turf.buffer(point, 500, {units: 'miles'}); + //----------建议使用下面的标准的geojson格式----------- + var GeoPoint = { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [114.289398,30.59418] + }, + "properties": { + "name": "点", + } + }; + var buffered = turf.buffer(GeoPoint, 500, {units: 'miles'}); + ``` diff --git a/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-centroid.md b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-centroid.md new file mode 100644 index 000000000..252be984f --- /dev/null +++ b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-centroid.md @@ -0,0 +1,131 @@ +## 中心点提取 + +### 示例功能 + +    计算给定GeoJSON的数据中心,支持所有的GeoJSON类型。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,先通过Cesium三维球控件 `Cesium.WebSceneControl()` 加载三维场景控件后,使用 `Turf.js` 空间分析库的关键接口`turf.centroid()`进行中心点提取。 + +#### Turf.js + +> turf是JavaScript编写的模块化地理空间引擎,具体使用请查看turf官方教程下载 + +#### GeoJSON.js + +> 地理数据转换成GeoJSON格式,GeoJSON.js官方地址 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 执行中心点提取操作**: +      准备要素数据用作提取中心点, `中心点提取`关键步骤,**一共分为二步**: + +   (1)准备要素数据 + +* Example: + ```javascript + $.getJSON('./static/data/client-analysis/buffer-hash-4.json', function(data) { + convertDataToGeoJson(data); + }); + + function convertDataToGeoJson(origindata) { + var columnarPoints = []; + var points; + origindata.aggregations.geohash.buckets.forEach(function(bucket) { + var coordinates = decodeGeoHash(bucket.key); + var countNumber = bucket.doc_count; + var point = { + pointKey: [ + coordinates.longitude[2], coordinates.latitude[2] + ], + count: bucket.doc_count + }; //[0] min [1]max [2] 中心点 + columnarPoints.push(point); + }); + points = GeoJSON.parse(columnarPoints, { + 'Point': 'pointKey' + }); + } + ``` + +   (2)执行 `提取中心点算法`,返回中心点要素数据 + +* Example: + ```javascript + geojson = turf.centroid(points); + ``` + +**Step 4. 显示分析结果**: +      更新数据,将得到的中心点要素数据添加到地图中。 + +* Example: + ```javascript + updateView(geojson); + function updateView(data) { + var centerdatasource = map.dataSources.add(Cesium.GeoJsonDataSource.load(data, { + markerColor: Cesium.Color.RED, + markerSize: 50 + })); + } + ``` + +### 关键接口 + +#### 1.【客户端空间分析库】`Turf` + +##### 【method】`turf.centroid(geojson,properties)`:提取中心点 + +     选取一个或多个要素,并使用所有顶点的平均值计算质心。 + +| 参数 | 类型 | 描述 | +| --------- | ----------- | ---------------------------- | +| geojson | GeoJSON格式 | 输入Geojson,用于计算中心点 | +| properties | Object | 使用geojson中的properties字段 | + +* `centroid()`返回值 + +> Feature <`Point`> - GeoJSON的中心点 + +* Example: + ```javascript + var polygon = turf.polygon([[[-81, 41], [-88, 36], [-84, 31], [-80, 33], [-77, 39], [-81, 41]]]); + var centroid = turf.centroid(polygon); + + //----------建议使用下面的标准的geojson格式----------- + var FeatureCollection = { + "type":"FeatureCollection", + "features":[GeoPoint1, GeoPoint2, ... GeoPoint100] + }; + var GeoPoint = { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [114.289398,30.59418] + }, + "properties": { + "name": "点", + } + }; + var buffered = turf.centroid(FeatureCollection); + ``` + diff --git a/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-intersect.md b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-intersect.md new file mode 100644 index 000000000..bbec647cf --- /dev/null +++ b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-intersect.md @@ -0,0 +1,212 @@ +## 多边形相交 + +### 示例功能 + +    两个多边形求取交集。 如果他们共享边界,则返回边界;如果它们不相交,则返回 undefined。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,先通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 加载三维场景控件后,使用 `Turf.js` 空间分析库的关键接口`turf.intersect()`进行多边形相交计算。 + +#### Turf.js + +> turf 是 JavaScript 编写的模块化地理空间引擎,具体使用请查看turf 官方教程下载 + +#### GeoJSON.js + +> 地理数据转换成GeoJSON格式,GeoJSON.js 官方地址 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +- Example: + ```html +
+ ``` + +**Step 3. 执行多边形相交操作**: +     准备 2 个多边形要素数据用作相交运算,`多边形相交`关键步骤**一共分为二步**: + +  (1)准备 2 个多边形要素数据 + +- Example: + + ```javascript + poly1 = turf.polygon([ + [ + [-122.801742, 45.48565], + [-122.801742, 45.60491], + [-122.584762, 45.60491], + [-122.584762, 45.48565], + [-122.801742, 45.48565], + ], + ]) + poly2 = turf.polygon([ + [ + [-122.520217, 45.535693], + [-122.64038, 45.553967], + [-122.720031, 45.526554], + [-122.669906, 45.507309], + [-122.723464, 45.446643], + [-122.532577, 45.408574], + [-122.487258, 45.477466], + [-122.520217, 45.535693], + ], + ]) + ``` + +  (2)执行 `多边形相交算法`,返回相交的结果多边形要素数据 + +- Example: + ```javascript + geojson = turf.intersect(poly1, poly2) + ``` + +**Step 4. 显示分析结果**: +     更新数据,将得到的相交的结果多边形要素数据添加到地图中。 + +- Example: + ```javascript + var simpledatasource = map.dataSources.add( + Cesium.GeoJsonDataSource.load(geojson, { + stroke: Cesium.Color.RED, + fill: Cesium.Color.RED, + strokeWidth: 5, + }) + ) + ``` + +### 关键接口 + +#### 1.【客户端空间分析库】`Turf` + +##### 【method】`turf.intersect(poly1,poly2)`:多边形相交 + +     取两个多边形并找到它们的交点。 如果他们共享边界,则返回边界;否则,返回边界。 如果它们不相交,则返回 undefined。 + +| 参数 | 类型 | 描述 | +| ----- | ---------------------------- | ------------------------------ | +| poly1 | FeatureCollection(`Polygon`) | 输入数据,用于生成第一个多边形 | +| poly2 | FeatureCollection(`Polygon`) | 输入数据,用于生成第二个多边形 | + +- `intersect()`返回值 + +> - FeatureCollection<`Polygon`> 当共享点或线时,`返回geojson相交区要素集`. +> - null 当没有共享点时,`则返回空值`. + +- Example: + ```javascript + var poly1 = turf.polygon([ + [ + [-122.801742, 45.48565], + [-122.801742, 45.60491], + [-122.584762, 45.60491], + [-122.584762, 45.48565], + [-122.801742, 45.48565], + ], + ]) + var poly2 = turf.polygon([ + [ + [-122.520217, 45.535693], + [-122.64038, 45.553967], + [-122.720031, 45.526554], + [-122.669906, 45.507309], + [-122.723464, 45.446643], + [-122.532577, 45.408574], + [-122.487258, 45.477466], + [-122.520217, 45.535693], + ], + ]) + var intersection = turf.intersect(poly1, poly2) + //----------建议使用下面的标准的geojson格式----------- + var FeatureCollection = { + type: 'Feature', + geometry: { + type: 'Polygon', + coordinates: [114.289398, 30.59418], + }, + properties: { + name: '面', + }, + } + var intersection = turf.intersect(FeatureCollection) + ``` + +> 两个多边形求取交集。 如果他们共享边界,则返回边界; 如果它们不相交,则返回 undefined。 + +--- + +#### 提交 BUG + +> 找到 bug 请提交[issue](https://github.com/ParnDeedlit/WebClient-Leaflet/issues) + +--- + +#### 参数 + +| 参数 | 类型 | 描述 | +| :---- | ---------------------------- | :----------------------------- | +| poly1 | FeatureCollection(`Polygon`) | 输入数据,用于生成第一个多边形 | +| poly2 | FeatureCollection(`Polygon`) | 输入数据,用于生成第二个多边形 | + +--- + +#### 返回值 + +> - FeatureCollection<`Polygon`> 当共享点或线时,`返回geojson相交区要素集`. +> - null 当没有共享点时,`则返回空值`. + +--- + +#### 示例 + +```javascript +var poly1 = turf.polygon([ + [ + [-122.801742, 45.48565], + [-122.801742, 45.60491], + [-122.584762, 45.60491], + [-122.584762, 45.48565], + [-122.801742, 45.48565], + ], +]) +var poly2 = turf.polygon([ + [ + [-122.520217, 45.535693], + [-122.64038, 45.553967], + [-122.720031, 45.526554], + [-122.669906, 45.507309], + [-122.723464, 45.446643], + [-122.532577, 45.408574], + [-122.487258, 45.477466], + [-122.520217, 45.535693], + ], +]) +var intersection = turf.intersect(poly1, poly2) +//----------建议使用下面的标准的geojson格式----------- +var FeatureCollection = { + type: 'Feature', + geometry: { + type: 'Polygon', + coordinates: [114.289398, 30.59418], + }, + properties: { + name: '面', + }, +} +var intersection = turf.intersect(FeatureCollection) +``` diff --git a/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-tin.md b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-tin.md new file mode 100644 index 000000000..ba777652e --- /dev/null +++ b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-tin.md @@ -0,0 +1,119 @@ +## 不规则三角网分析 TIN + +### 示例功能 + +    TIN方法将无重复点的散乱数据点集按某种规则(如Delaunay 规则) 进行三角剖分,使这些散乱点形成连续但不重叠的不规则三角面片网,并以此来描述3D 物体的表面。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,先通过Cesium三维球控件 `Cesium.WebSceneControl()` 加载三维场景控件后,使用 `Turf.js` 空间分析库的关键接口`turf.tin()`进行不规则三角网分析。 + +#### Turf.js + +> turf是JavaScript编写的模块化地理空间引擎,具体使用请查看turf官方教程下载 + +#### GeoJSON.js + +> 地理数据转换成GeoJSON格式,GeoJSON.js官方地址 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 执行不规则三角网分析**: +      `不规则三角网分析`关键步骤,准备不规则的点要素数据用作不规则三角网分析,**一共分为二步**: + +   (1)准备点要素数据 + + * Example: + ```javascript + $.getJSON('./static/data/client-analysis/point.json', function(data) { + convertDataToGeoJson(data); + updateView(geojson); + }); + ``` + +   (2)执行 `不规则三角网分析算法`,返回结果三角网多边形要素数据 + +* Example: + ```javascript + function convertDataToGeoJson(origindata) { + var points = origindata; + geojson = turf.tin(points); + } + ``` + +**Step 4. 显示分析结果**: +      更新数据,将得到的三角网多边形要素数据添加到地图中。 + +* Example: + ```javascript + function updateView(data) { + var tindatasource = map.dataSources.add(Cesium.GeoJsonDataSource.load(data, { + stroke: Cesium.Color.BLACK, + fill: Cesium.Color.GRAY, + strokeWidth: 15 + })); + map.flyTo(tindatasource); + } + ``` + +### 关键接口 + +#### 1.【客户端空间分析库】`Turf` + +##### 【method】`turf.tin(points,z)`:不规则三角网分析 + +      取得一组点,然后创建不规则三角测量网络(简称TIN),以多边形集合的形式返回。 这些通常用于开发高程等高线图或阶梯式热可视化。 + +| 参数 | 类型 | 描述 | +| ----- | ------------------------ | ----------------------------------------------------------- | +| points | FeatureCollection | Geojson点要素集合 | +| z | (String) | 要从哪个属性中提取z值,可选参数:如果没有给,那么就不会有额外的信息添加到派生的三角形中 | + +* `tin()`返回值 + +> FeatureCollection <`Polygon`> - TIN输出GeoJSON的要素区集合 + +* Example: + ```javascript + var points = turf.randomPoint(30, {bbox: [50, 30, 70, 50]}); + for (var i = 0; i < points.features.length; i++) { + points.features[i].properties.z = ~~(Math.random() * 9); + } + var tin = turf.tin(points, 'z'); + + //----------建议使用下面的标准的geojson格式----------- + var FeatureCollection = { + "type":"FeatureCollection", + "features":[GeoPoint1, GeoPoint2, ... GeoPoint100] + }; + var GeoPoint = { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [114.289398,30.59418] + }, + "properties": { + "name": "点", + } + }; + var buffered = turf.tin(FeatureCollection); + ``` diff --git a/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-voronoi.md b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-voronoi.md new file mode 100644 index 000000000..1903d7365 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientAnalysis/clientAnalysis-voronoi.md @@ -0,0 +1,128 @@ +## 泰森多边形 + +### 示例功能 + +    针对给定的点生成泰森多边形,请注意一定要传入bbox参数,`如果没有绘制对应的多边形,那么肯定是bbox的范围没有包含住所有的点集`,*这点非常重要*。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,先通过Cesium三维球控件 `Cesium.WebSceneControl()` 加载三维场景控件后,使用 `Turf.js` 空间分析库的关键接口`turf.voronoi()`进行泰森多边形分析。 + +#### Turf.js + +> turf是JavaScript编写的模块化地理空间引擎,具体使用请查看turf官方教程下载 + +#### GeoJSON.js + +> 地理数据转换成GeoJSON格式,GeoJSON.js官方地址 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 执行泰森多边形分析**: +      准备点要素数据用作泰森多边形分析, `泰森多边形分析`关键步骤如下: + +   (1)准备点要素数据 + +* Example: + ```javascript + $.getJSON('./static/data/client-analysis/point.json', function (data) { + convertDataToGeoJson(data); + }); + ``` + +   (2)执行 `泰森多边形分析算法`,返回结果三角网多边形要素数据 + +* Example: + ```javascript + function convertDataToGeoJson(origindata) { + var points = origindata; + geojson = turf.voronoi(points, { + bbox: [113.67, 30.00, 115.20, 31.41] + }); + } + ``` + +**Step 4. 显示分析结果**: +     更新数据,将得到的三角网多边形要素数据添加到地图中。 + +* Example: + ```javascript + var voronoidatasource = map.dataSources.add(Cesium.GeoJsonDataSource.load(data, { + stroke: Cesium.Color.BLACK, + fill: Cesium.Color.GRAY, + strokeWidth: 15 + })); + ``` + +### 关键接口 + +#### 1.【客户端空间分析库】`Turf` + +##### 【method】`turf.voronoi(points,options)`:泰森多边形分析 + +    根据点的要素数据集和边界框返回泰森多边形的要素数据集。 + +| 参数 | 类型 | 描述 | +| ------ | -------------------------- | -------------------------- | +| points | FeatureCollection<`Point`> | 输入数据,用于生成泰森多边形 | +| options | Object对象 | 其他参数,请看下面的参数 | + +* options参数属性说明 + +| 名称 | 类型 | 默认值 | 描述 | +| --- | -------- | ----------------- | -------- | +| bbox | Array数组 | [-180,-85,180,-85] | `裁剪框` | + +`注意`:*bbox特别重要一定要包含所有的点,要不然无法生成泰森多边形,换言之,这个矩形的范围要够大* + +* `voronoi()`返回值 + +> FeatureCollection<`Polygon`> `geojson区要素集合`,每一个输入点都一定有一个输出区与之一一对应。 + +* Example: + ```javascript + var options = { + bbox: [-70, 40, -60, 60] + }; + var points = turf.randomPoint(100, options); + var voronoiPolygons = turf.voronoi(points, options); + //----------建议使用下面的标准的geojson格式----------- + var FeatureCollection = { + "type":"FeatureCollection", + "features":[GeoPoint1, GeoPoint2, ... GeoPoint100] + }; + var GeoPoint = { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [114.289398,30.59418] + }, + "properties": { + "name": "点", + } + }; + var options = { + bbox: [-180,-85,180,-85] + }; + var voronois = turf.voronoi(FeatureCollection, options); + ``` + diff --git a/website/public/static/demo/military/markdown/clientView/clientView-appendImage.md b/website/public/static/demo/military/markdown/clientView/clientView-appendImage.md new file mode 100644 index 000000000..e892841fa --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-appendImage.md @@ -0,0 +1,70 @@ +## 叠加图片数据 + +### 示例功能 + +    此功能用于在当前场景中叠加显示图片文件数据,支持本地数据和网络数据加载。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendImageByUrl()`方法与`removeImage()`方法,实现图片叠加显示与移除功能。 + +> 开发库使用请参见首页-概述-原生 JS 调用内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,并调用`appendTDTuMap()` 方法加载天地图数据作为底图显示; + +**Step 3. 叠加显示图片文件数据**: +    首先构造`CesiumZondy.Manager.CommonDataManager`通用数据管理类对象,然后调用`appendImageByUrl()`方法加载,须设置图片的 URL 与经纬度参数。相对加载功能,移除则调用`removeImage()`方法实现。 + +- Example: + + ```javascript + //实例化通用数据管理类 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //通过地址添加图片,支持本地图片和网络图片 + var imgObj = commonDataManager.appendImageByUrl( + //图片URL + 'http://5b0988e595225.cdn.sohucs.com/images/20180917/455c51316ec24a97958a254dc66c18f6.jpeg', + //东经 + 114.3473, + //北纬 + 30.5479, + //西经 + 114.4637, + //南纬 + 30.612 + ) + //定位跳转 + sceneManager.flyToComm(114.4, 30.55, 30000) + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【通用数据管理类】 `CesiumZondy.Manager.CommonDataManager` + +##### 【method】 `appendImageByUrl(url, west, south, east, north, options) → {Object}` :通过路径添加图片数据,返回图片数据对象(Object) + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ------------------------------------------------------------------------------------------------------- | +| url | String | 图片地址,本地数据路径设置如“./static/data/imge/xxx.png”,网络数据路径设置如“http://{域名或IP}/xxx.jpg” | +| west | Number | 西经 | +| south | Number | 南纬 | +| east | Number | 东经 | +| north | Number | 北纬 | +| options | Object | 扩展参数 | + +##### 【method】 `removeImage(imageryLayer, isDestroy)` :移除添加的图片 + +| 参数名 | 类型 | 说明 | +| ------------ | ------- | ------------------------------------------------------ | +| imageryLayer | Object | 添加的图片对象,即 appendImageByUrl 方法返回的数据对象 | +| isDestroy | Boolean | 是否销毁图片对象 | diff --git a/website/public/static/demo/military/markdown/clientView/clientView-dynamiccircle.md b/website/public/static/demo/military/markdown/clientView/clientView-dynamiccircle.md new file mode 100644 index 000000000..84164ef8d --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-dynamiccircle.md @@ -0,0 +1,85 @@ +## 动态圆 + +### 示例功能 + +    此功能用于在当前场景中绘制动态的圆显示效果,可应用于任意场景中。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 `Cesium.CircleScanEffect()` 动态圆对象,然后通过分析功能管理类`CesiumZondy.Manager.AnalysisManager` 的`addSceneEffect()`方法添加动态圆显示;`removeSceneEffect()`方法移除动态圆显示。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,并调用`appendGoogleMapExt()` 方法加载Google地图作为底图显示; + +**Step 3. 跳转定位**: +    调用Cesium三维球场景视图管理类 `CesiumZondy.Manager.SceneManager` 的 `flyTo()` 方法定位到指定点; + +* Example: + ``` Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //定位跳转 + sceneManager.flyTo(114.06, 22.54, 20000, 2); + ``` + +**Step 4. 创建动态圆**: +    初始化动态圆对象 `Cesium.CircleScanEffect()`,注意使用动态圆功能`必须开启深度检测` ; + +* Example: + ``` Javascript + //开启地形深度检测(必须) + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //初始化动态圆对象 + var scanEffect = new Cesium.CircleScanEffect(webGlobe.viewer, { + center: Cesium.Cartesian3.fromDegrees(114.06, 22.54, 20), + maxRadius: 5000, + scanColor: new Cesium.Color(1, 0, 0, 1), + duration: 8000 + }); + ``` + +**Step 5. 添加/移除动态圆**: +    调用Cesium三维球分析功能管理类`CesiumZondy.Manager.AnalysisManager` 的`addSceneEffect()`方法添加动态圆显示,相应可调用`removeSceneEffect()`方法移除。 + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //添加添加场景特效-动态圆 + analysisManager.addSceneEffect(scanEffect); + //通过removeSceneEffect()移除场景特效 + //analysisManager.removeSceneEffect(scanEffect); + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【实体绘制控制器类】 `CesiumZondy.Manager.CommonDataManager` + +##### 【method】 `appendPoint()` :添加点 + +#### 3.【动态圆对象类】 `Cesium.CircleScanEffect`,Cesium原生类 + +#### 4.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `addSceneEffect(effect)` :添加场景特效 + +|参数名|类型|说明| +|-|-|-| +|effect|Object|场景特效实例,如动态圆场景特效Cesium.CircleScanEffect对象| + +##### 【method】 `removeSceneEffect(effect)` :移除场景特效 + +|参数名|类型|说明| +|-|-|-| +|effect|Object|场景特效实例,如动态圆场景特效Cesium.CircleScanEffect对象| diff --git a/website/public/static/demo/military/markdown/clientView/clientView-fire.md b/website/public/static/demo/military/markdown/clientView/clientView-fire.md new file mode 100644 index 000000000..05413157c --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-fire.md @@ -0,0 +1,92 @@ +## 粒子特效-火焰 + +### 示例功能 + +    此功能用于添加火焰粒子特效,可以模拟火灾等各类火焰相关的场景。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.AdvancedAnalysisManager`类提供的`createFire()`方法,实现添加火焰粒子特效功能。 + +> 开发库使用请参见首页-概述-原生 JS 调用内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,并调用`appendTDTuMap()` 方法加载天地图数据作为底图显示,然后再叠加显示 M3D 服务的建筑模型; + +**Step 3. 添加火焰粒子特效**: +    首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createFire()`方法添加火焰粒子特效,可通过可选参数实现火焰特效的调整。 + +- Example: + + ```javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }) + //位置点 + let position = [114.40103, 30.4679, 12] + //火焰图片url + let imageUrl = './static/data/effect/fire.png' + //添加火焰粒子特效 + fireObj = advancedAnalysisManager.createFire(imageUrl, position) + ``` + +- Example: + ```Javascript + if (name === 'emissionRate') { + //排放率 + fireObj.emissionRate = parseFloat(newValue); + } + if (name === 'particleSize') { + var particleSize = parseFloat(newValue); + //图像尺寸 + fireObj.imageSize = new Cesium.Cartesian2(particleSize, particleSize); + } + if (name === 'particleLife') { + //粒子生命 + fireObj.particleLife = parseFloat(newValue); + } + if (name === 'speed') { + //速度 + fireObj.speed = parseFloat(newValue); + } + if (name === 'startScale') { + //起始规模 + fireObj.startScale = parseFloat(newValue); + } + if (name === 'endScale') { + //终止规模 + fireObj.endScale = parseFloat(newValue); + } + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【高级分析功能管理类】 `CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createFire(imageUrl, position, options) → {Object}` :创建火焰或烟雾粒子特效,返回火焰特效实例(Object) + +| 参数名 | 类型 | 说明 | +| -------- | -------------- | ---------------- | +| imageUrl | String | 粒子特效图片 url | +| position | Array. | 粒子特效位置点 | +| options | Object | 粒子特效参数 | + +- `options` 主要属性 + +| 参数名 | 类型 | 说明 | +| ---------------- | ---------- | ------------------------ | +| modelUrl | String | (可选)模型 url | +| minimumPixelSize | Number | (可选)模型最小像素尺寸 | +| startScale | Number | (可选)起始规模 | +| endScale | Number | (可选)终止规模 | +| particleLife | Number | (可选)粒子生命 | +| speed | Number | (可选)速度 | +| imageSize | Cartesian2 | (可选)图像尺寸 | +| emissionRate | Number | (可选)排放率 | +| lifetime | Number | (可选)持续时间 | diff --git a/website/public/static/demo/military/markdown/clientView/clientView-firework.md b/website/public/static/demo/military/markdown/clientView/clientView-firework.md new file mode 100644 index 000000000..f7a5314ef --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-firework.md @@ -0,0 +1,146 @@ +## 粒子特效-烟雾 + +### 示例功能 + +    此功能用于添加烟雾粒子特效,可以模拟火灾等各类火焰相关的场景。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.AdvancedAnalysisManager`类提供的`createStableParticle()`方法,实现添加火焰+烟雾粒子特效功能。 + +>开发库使用请参见首页-概述-原生JS调用内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,并调用`appendTDTuMap()` 方法加载天地图数据作为底图显示,然后再叠加显示M3D服务的建筑模型; + +**Step 3. 添加烟雾粒子特效**: +    构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createStableParticle()`方法分别添加火焰与烟雾粒子特效,通过可选参数实现火焰特效的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //粒子发射位置点 + let position = [114.40103, 30.4679, 12]; + //火焰与烟雾图片url + let imageUrl1 = './static/data/effect/fire1.png'; + let imageUrl2 = './static/data/effect/smoke1.png'; + //添加烟雾粒子特效 + fireObj = advancedAnalysisManager.createStableParticle(imageUrl1, position, { + emissionRate: 3, + startScale: 1, + endScale: 3 + }); + //添加烟雾粒子特效 + smokeObj = advancedAnalysisManager.createStableParticle(imageUrl2, position, { + emissionRate: 35, + startScale: 5, + endScale: 8 + }); + ``` + +* Example: + ``` Javascript + //火焰烟雾特效初始参数 + var viewModel = { + emissionRate: 35.0, //排放率 + particleLife: 1.2, //粒子生命 + speed: 2.0, //速度 + startScale: 5.0, //起始规模 + endScale: 8.0, //终止规模 + particleSize: 25.0 //图像尺寸 + }; + //火焰烟雾参数设置绑定UI + Cesium.knockout.track(viewModel); + var toolbar = document.getElementById('toolbar'); + Cesium.knockout.applyBindings(viewModel, toolbar); + function subscribeParameter(name) { + Cesium.knockout.getObservable(viewModel, name).subscribe( + function(newValue) { + if (name === 'emissionRate') { + //排放率 + smokeObj.emissionRate = parseFloat(newValue); + } + if (name === 'particleSize') { + var particleSize = parseFloat(newValue); + //图像尺寸 + smokeObj.imageSize = new Cesium.Cartesian2(particleSize, particleSize); + + } + if (name === 'particleLife') { + smokeObj.particleLife = parseFloat(newValue); + } + if (name === 'speed') { + smokeObj.speed = parseFloat(newValue); + } + + if (name === 'startScale') { + //起始规模 + smokeObj.startScale = parseFloat(newValue); + } + if (name === 'endScale') { + //终止规模 + smokeObj.endScale = parseFloat(newValue); + } + } + ); + scene.requestRender(); + } + //改变属性值时调用 + subscribeParameter('emissionRate'); + subscribeParameter('particleSize'); + subscribeParameter('particleLife'); + subscribeParameter('speed'); + subscribeParameter('startScale'); + subscribeParameter('endScale'); + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【高级分析功能管理类】 `CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createStableParticle(imageUrl, position, options) → {Object}` :固定位置粒子特效,可通过更改image与附加参数来实现火焰、喷泉、烟雾等粒子特效,返回粒子特效实例(Object) + +|参数名|类型|说明| +|-|-|-| +|imageUrl|String |粒子特效图片url| +|position|Cartesian3 |粒子特效位置点| +|options|Object|粒子特效参数| + +* `options` 主要属性 + +|参数名|类型|说明| +|-|-|-| +|modelUrl|String|模型url| +|minimumPixelSize|Number|(可选)模型最小像素尺寸| +|startColor|Color|(可选)开始的颜色| +|endColor|Color|(可选)结束的颜色| +|startScale|Number|(可选)起始尺寸| +|endScale|Number|(可选)结束尺寸| +|minimumParticleLife|Number|(可选)最小粒子周期| +|maximumParticleLife|Number|(可选)最大粒子周期| +|minimumSpeed|Number|(可选)最小速率| +|maximumSpeed|Number|(可选)最大速率| +|imageSize|Cartesian2|(可选)粒子图像大小| +|emissionRate|Number|(可选)排放率| +|minimumImageSize|Number|(可选)最小Image尺寸| +|maximumImageSize|Number|(可选)最大Image尺寸| +|lifetime|Number|(可选)单个粒子生命周期| +|emitter|Object|(可选)粒子发射器类型| +|gravity|Number|(可选)粒子重力| +|viewHeight|Number|(可选)用于控制粒子特效在0到该值范围内可见,范围外不可见,当值为-1时,默认全部可见| +|heading|Number|(可选)俯仰角| +|pitch|Number|(可选)偏航角| +|roll|Number|(可选)翻滚角| + + + diff --git a/website/public/static/demo/military/markdown/clientView/clientView-fog.md b/website/public/static/demo/military/markdown/clientView/clientView-fog.md new file mode 100644 index 000000000..a821bec25 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-fog.md @@ -0,0 +1,52 @@ +## 粒子特效-雾 + +### 示例功能 + +    此功能用于在场景中添加雾粒子特效功能,模拟雾天场景。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.AdvancedAnalysisManager`类提供的`createFog()`方法,实现添加雾粒子特效功能。 + +>开发库使用请参见首页-概述-原生JS调用内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,并调用`appendTDTuMap()` 方法加载天地图数据作为底图显示,然后再叠加显示M3D服务的大雁塔数据; + +**Step 3. 添加雾粒子特效**: +    首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createFog()`方法添加雾粒子特效,可通过可选参数实现雾效的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }); + //添加雾效 + advancedAnalysisManager.createFog({ + //雾特效透明度 + alpha:0.5 + }); + ``` + + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【高级分析功能管理类】 `CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createFog(optionsParam) → {Object}` :创建雾特效,返回雾特效实例(Object) + +|参数名|类型|说明| +|-|-|-| +|optionsParam|Object|雾特效参数| + +* `optionsParam` 主要属性 + +|参数名|类型|说明| +|-|-|-| +|alpha|Number|(可选)雾特效透明度| diff --git a/website/public/static/demo/military/markdown/clientView/clientView-heatmap.md b/website/public/static/demo/military/markdown/clientView/clientView-heatmap.md new file mode 100644 index 000000000..1b8532ede --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-heatmap.md @@ -0,0 +1,57 @@ +## 热力图 + +### 示例功能 + +    此功能用于在当前三维场景中添加热力图显示效果。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,先初始化Cesium三维球控件 `Cesium.WebSceneControl()` , 创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用关键接口 `createHeatMap()` 添加热力图。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +* Example: + ``` Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +* Example: + ``` html +
+ ``` + +**Step 3. 添加热力图**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createHeatMap()` 方法添加热力图。 + +* Example: + ``` Javascript + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }) + //创建热力图(范围、最大值、最小值) + var instance = analysisManager.createHeatMap(bounds, valueMin, valueMax, data, options); + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `createHeatMap(bounds, minValue, maxValue, data, options)` :创建热力图 + +|参数名|类型|说明| +|-|-|-| +|bounds|object|:WGS84 bounding box {north, east, south, west}| +|maxValue|Number|最大值| +|minValue|Number|最小值| +|data|Array.|Array<[{'x':, 'y':, 'value':}]>| diff --git a/website/public/static/demo/military/markdown/clientView/clientView-radarscanning.md b/website/public/static/demo/military/markdown/clientView/clientView-radarscanning.md new file mode 100644 index 000000000..b8bd3a8cc --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-radarscanning.md @@ -0,0 +1,106 @@ +## 雷达扫描圆 + +### 示例功能 + +    此功能用于在当前场景中添加雷达扫描圆显示效果,可应用于任意场景中。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化高级分析管理类 `CesiumZondy.Manager.AdvancedAnalysisManager` 的`createRadarScan()`方法创建雷达扫描圆对象,然后分别通过分析功能管理类`CesiumZondy.Manager.AnalysisManager` 的`addSceneEffect()`方法与`removeSceneEffect()`方法来添加与移除雷达扫描圆显示功能。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,并调用`appendGoogleMapExt()` 方法加载Google地图作为底图显示,同时叠加地形数据; + +**Step 3. 跳转定位**: +    调用Cesium三维球场景视图管理类 `CesiumZondy.Manager.SceneManager` 的 `flyToEx()` 方法定位到指定点; + +* Example: + ``` Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ viewer: webGlobe.viewer }); + //视点跳转 + sceneManager.flyToEx(120.8642, 23.3351, { + height: 10000,//视角高度 + heading: 35,//方位角 + pitch: -30,//俯仰角 + roll: 0 //翻滚角 + }); + ``` + + +**Step 4. 创建雷达扫描圆**: +    初始化高级分析功能管理类对象 `CesiumZondy.Manager.AdvancedAnalysisManager` ,调用`createRadarScan()`方法创建雷达扫描圆对象,注意`必须开启深度检测` ; + +* Example: + ``` Javascript + //开启深度检测(必须) + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }); + //创建一个雷达扫描圆对象 + var radarScanEffect = advancedAnalysisManager.createRadarScan( + //雷达中心点 + Cesium.Cartesian3.fromDegrees(120.9558, 23.4481, 3657), + //扫描半径 + 5000, + //扫描区域颜色 + new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), + //周期时间,单位毫秒 + 8000 + ); + + ``` + +**Step 5. 添加/移除雷达扫描圆显示**: +    调用分析功能管理类`CesiumZondy.Manager.AnalysisManager` 的`addSceneEffect()`方法添加雷达扫描圆显示,相应可调用`removeSceneEffect()`方法移除。 + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //添加场景特效-雷达扫描圆 + analysisManager.addSceneEffect(radarScanEffect); + //移除场景特效-雷达扫描圆 + //analysisManager.removeSceneEffect(radarScanEffect); + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【实体绘制控制器类】 `CesiumZondy.Layer.CesiumFuncManager` + +##### 【method】 `appendPoint()`:添加点 + +#### 3.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createRadarScan(center, radius, scanColor, duration) → {Object}` :创建雷达扫描圆,返回雷达扫描实例RadarScan(Object) + +| 参数名 | 类型 | 说明 | +| --------- | ---------- | ----------------- | +| center | Cartesian3 | 雷达中心点 | +| radius | Number | 扫描半径 | +| scanColor | Color | 扫描区域颜色 | +| duration | Number | 周期时间,单位毫秒 | + +#### 4.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `addSceneEffect(effect)` :添加场景特效 + +| 参数名 | 类型 | 说明 | +| ------ | ------ | --------------------------------------------------------- | +| effect | Object | 场景特效实例,如动态圆场景特效Cesium.CircleScanEffect对象 | + +##### 【method】 `removeSceneEffect(effect)` :移除场景特效 + +| 参数名 | 类型 | 说明 | +| ------ | ------ | --------------------------------------------------------- | +| effect | Object | 场景特效实例,如动态圆场景特效Cesium.CircleScanEffect对象 | + diff --git a/website/public/static/demo/military/markdown/clientView/clientView-rain.md b/website/public/static/demo/military/markdown/clientView/clientView-rain.md new file mode 100644 index 000000000..61efafbf0 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-rain.md @@ -0,0 +1,57 @@ +## 粒子特效-降雨 + +### 示例功能 + +    此功能用于在场景中添加降雨粒子特效功能,模拟降雨场景。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.AdvancedAnalysisManager`类提供的`createRain()`方法,实现添加降雨粒子特效功能。 + +>开发库使用请参见首页-概述-原生JS调用内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,并调用`appendTDTuMap()` 方法加载天地图数据作为底图显示; + +**Step 3. 添加降雨粒子特效**: +    首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createRain()`方法添加降雨粒子特效,可通过可选参数实现降雨效果的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }); + //添加下雨特效 + advancedAnalysisManager.createRain({ + //色调调整 + hueShift: 0.7 + }); + ``` + + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【高级分析功能管理类】 `CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createRain(options) → {Object}` :创建下雨特效,返回下雨特效实例(Object) + + +|参数名|类型|说明| +|-|-|-| +|options|Object|下雨特效参数| + +* `options` 主要属性 + +|参数名|类型|说明| +|-|-|-| +|hueShift|Number|(可选)色调| +|saturationShift|Number|(可选)饱和度| +|brightnessShift|Number|(可选)亮度| +|density|Number|(可选)密度| +|minimumBrightness|Number|(可选)最小亮度| diff --git a/website/public/static/demo/military/markdown/clientView/clientView-smoke.md b/website/public/static/demo/military/markdown/clientView/clientView-smoke.md new file mode 100644 index 000000000..d61bd8170 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-smoke.md @@ -0,0 +1,117 @@ +## 粒子特效-烟雾 + +### 示例功能 + +    此功能用于添加烟雾粒子特效,与火焰粒子特效相同,可以模拟火灾等各类火焰烟雾、水汽烟雾相关的场景。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.AdvancedAnalysisManager`类提供的`createStableParticle()`方法,实现添加烟雾粒子特效功能。 + + +>开发库使用请参见首页-概述-原生JS调用内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,并调用`appendTDTuMap()` 方法加载天地图数据作为底图显示,然后再叠加显示M3D服务的建筑模型; + +**Step 3. 添加火焰烟雾粒子特效**: +    首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createStableParticle()`方法分别添加火焰与烟雾粒子特效,可通过可选参数实现烟雾特效的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //粒子发射位置点 + let position = [114.40103, 30.4679, 12]; + //火焰与烟雾图片url + let imageUrl1 = './static/data/effect/fire1.png'; + let imageUrl2 = './static/data/effect/smoke1.png'; + //添加烟雾粒子特效 + fireObj = advancedAnalysisManager.createStableParticle(imageUrl1, position, { + emissionRate: 3, + startScale: 1, + endScale: 3 + }); + //添加烟雾粒子特效 + smokeObj = advancedAnalysisManager.createStableParticle(imageUrl2, position, { + emissionRate: 35, + startScale: 5, + endScale: 8 + }); + ``` + +* Example: + ``` Javascript + if (name === 'emissionRate') { + //排放率 + smokeObj.emissionRate = parseFloat(newValue); + } + if (name === 'particleSize') { + var particleSize = parseFloat(newValue); + //图像尺寸 + smokeObj.imageSize = new Cesium.Cartesian2(particleSize, particleSize); + + } + if (name === 'particleLife') { + smokeObj.particleLife = parseFloat(newValue); + } + if (name === 'speed') { + smokeObj.speed = parseFloat(newValue); + } + + if (name === 'startScale') { + //起始规模 + smokeObj.startScale = parseFloat(newValue); + } + if (name === 'endScale') { + //终止规模 + smokeObj.endScale = parseFloat(newValue); + } + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【高级分析功能管理类】 `CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createStableParticle(imageUrl, position, options) → {Object}` :固定位置粒子特效,可通过更改image与附加参数来实现火焰、喷泉、烟雾等粒子特效,返回粒子特效实例(Object) + +|参数名|类型|说明| +|-|-|-| +|imageUrl|String |粒子特效图片url| +|position|Cartesian3 |粒子特效位置点| +|options|Object|粒子特效参数| + +* `options` 主要属性 + +|参数名|类型|说明| +|-|-|-| +|modelUrl|String|模型url| +|minimumPixelSize|Number|(可选)模型最小像素尺寸| +|startColor|Color|(可选)开始的颜色| +|endColor|Color|(可选)结束的颜色| +|startScale|Number|(可选)起始尺寸| +|endScale|Number|(可选)结束尺寸| +|minimumParticleLife|Number|(可选)最小粒子周期| +|maximumParticleLife|Number|(可选)最大粒子周期| +|minimumSpeed|Number|(可选)最小速率| +|maximumSpeed|Number|(可选)最大速率| +|imageSize|Cartesian2|(可选)粒子图像大小| +|emissionRate|Number|(可选)排放率| +|minimumImageSize|Number|(可选)最小Image尺寸| +|maximumImageSize|Number|(可选)最大Image尺寸| +|lifetime|Number|(可选)单个粒子生命周期| +|emitter|Object|(可选)粒子发射器类型| +|gravity|Number|(可选)粒子重力| +|viewHeight|Number|(可选)用于控制粒子特效在0到该值范围内可见,范围外不可见,当值为-1时,默认全部可见| +|heading|Number|(可选)俯仰角| +|pitch|Number|(可选)偏航角| +|roll|Number|(可选)翻滚角| diff --git a/website/public/static/demo/military/markdown/clientView/clientView-snow.md b/website/public/static/demo/military/markdown/clientView/clientView-snow.md new file mode 100644 index 000000000..2909a17ba --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView/clientView-snow.md @@ -0,0 +1,56 @@ +## 粒子特效-降雪 + +### 示例功能 + +    此功能用于在场景中添加降雪粒子特效功能,模拟降雪场景。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.AdvancedAnalysisManager`类提供的`createSnow()`方法,实现添加降雪粒子特效功能。 + +>开发库使用请参见首页-概述-原生JS调用内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,并调用`appendTDTuMap()` 方法加载天地图数据作为底图显示; + +**Step 3. 添加降雪粒子特效**: +    首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createSnow()`方法添加降雪粒子特效,可通过可选参数实现降雪效果的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }); + //添加下雪特效 + advancedAnalysisManager.createSnow({ + //色调 + hueShift: 0.7 + }); + ``` + + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【高级分析功能管理类】 `CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createSnow(options) → {Object}` :创建下雪特效,返回下雪特效实例(Object) + +|参数名|类型|说明| +|-|-|-| +|options|Object|下雪特效参数| + +* `options` 主要属性 + +|参数名|类型|说明| +|-|-|-| +|hueShift|Number|(可选)色调| +|saturationShift|Number|(可选)饱和度| +|brightnessShift|Number|(可选)亮度| +|density|Number|(可选)密度| +|minimumBrightness|Number|(可选)最小亮度| \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-air.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-air.md new file mode 100644 index 000000000..b7f943150 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-air.md @@ -0,0 +1,191 @@ +## 散点图-空气质量 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts散点图,基于全国主要城市空气质量数据实现散点图的可视化。 + +> 百度 ECharts + +ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备**: +    准备全国主要城市的数据,包括名称、坐标点、空气质量,并按照格式要求进行处理; + +* Example: + ```javascript + function initData() { + data = [ + {name: '海门',value: 9}, + {name: '鄂尔多斯',value: 12}, + {name: '招远',value: 12}, + {name: '舟山',value: 12}, + ··· + ]; + geoCoordMap = { + '海门': [121.15, 31.89], + '鄂尔多斯': [109.781327, 39.608266], + '招远': [120.38, 37.35], + '舟山': [122.207216, 29.985295], + ··· + }; + } + + function convertData(data) { + var res = []; + for (var i = 0; i < data.length; i++) { + var geoCoord = geoCoordMap[data[i].name]; + if (geoCoord) { + res.push({ + name: data[i].name, + value: geoCoord.concat(data[i].value) + }); + } + } + return res; + }; + ``` + +**Step 4. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + function initEcharts() { + option = { + title: { + text: '全国主要城市空气质量 - 百度地图提供数据', + textStyle: { + color: '#eee' + }, + subtext: 'data from PM25.in', + sublink: 'http://www.pm25.in', + left: 'center' + }, + legend: { + orient: 'vertical', + y: 'top', + x: 'left', + data: ['pm2.5'], + textStyle: { + color: '#fff' + } + }, + tooltip: { + trigger: 'item' + }, + cesium: { + roam: true + }, + series: [{ + name: 'pm2.5', + type: 'scatter', + coordinateSystem: 'cesium', + data: convertData(data), + symbolSize: function (val) { + return val[2] / 10; + }, + showEffectOn: 'render', + rippleEffect: { + brushType: 'stroke' + }, + hoverAnimation: true, + label: { + normal: { + formatter: '{b}', + position: 'right', + show: false + }, + emphasis: { + show: true + } + }, + itemStyle: { + normal: { + color: '#ddb926' + } + }, + zlevel: 1 + }, + { + name: 'Top 5', + type: 'effectScatter', + coordinateSystem: 'cesium', + data: convertData(data.sort(function (a, b) { + return b.value - a.value; + }).slice(0, 6)), + symbolSize: function (val) { + return val[2] / 10; + }, + showEffectOn: 'render', + rippleEffect: { + brushType: 'stroke' + }, + hoverAnimation: true, + label: { + normal: { + formatter: '{b}', + position: 'right', + show: true + } + }, + itemStyle: { + normal: { + color: '#f4e925', + shadowBlur: 10, + shadowColor: '#333' + } + }, + zlevel: 1 + } + ] + } + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + } + ``` + + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-biggps.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-biggps.md new file mode 100644 index 000000000..65d1554dc --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-biggps.md @@ -0,0 +1,133 @@ +## 散点图-世界1000万GPS点 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts散点图,基于世界1000万GPS点数据实现散点图的可视化。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备**: +    本示例从离线数据文件中获取世界1000万GPS数据点,然后按照格式要求进行处理; + +* Example: + ```javascript + var dataCount = 0; + var CHUNK_COUNT = 230; + function fetchData(idx) { + if (idx >= CHUNK_COUNT) { + return; + } + var dataURL = `./static/data/echarts/gps/gps_${idx}.bin`; + var xhr = new XMLHttpRequest(); + xhr.open('GET', dataURL, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function (e) { + var rawData = new Int32Array(this.response); + var data = new Float32Array(rawData.length); + var addedDataCount = rawData.length / 2; + for (var i = 0; i < rawData.length; i += 2) { + data[i] = rawData[i + 1] / 1e7; + data[i + 1] = rawData[i] / 1e7; + } + layer.chart.appendData({ + seriesIndex: 0, + data: data + }); + fetchData(idx + 1); + } + xhr.send(); + } + ``` + +**Step 4. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + function initEcharts() { + var option = { + //backgroundColor: '#000', + title: { + text: 'OSM公开GPS轨迹(千万级)', + left: 'center', + textStyle: { + color: '#fff' + } + }, + cesium: { + roam: false + }, + series: [{ + name: '弱', + type: 'scatterGL', + progressive: 20000, + coordinateSystem: 'cesium', + symbolSize: 1, + zoomScale: 0.002, + blendMode: 'lighter', + largeThreshold: 50000, + large: true, + itemStyle: { + color: 'rgb(20, 15, 2)' + }, + postEffect: { + enable: true + }, + silent: true, + dimensions: ['lng', 'lat'], + data: new Float32Array() + }] + }; + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + fetchData(0); + } + ``` + + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigline.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigline.md new file mode 100644 index 000000000..26df4ccd4 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigline.md @@ -0,0 +1,130 @@ +## 路径图-纽约100万线 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts路径图,基于纽约100万线数据实现路径图的可视化。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备**: +    本示例从离线数据文件中获取纽约100万线数据,然后按照格式要求进行处理; + +* Example: + ```javascript + var CHUNK_COUNT = 32; + var dataCount = 0; + function fetchData(idx) { + if (idx >= CHUNK_COUNT) { + return; + } + var dataURL = `./static/data/echarts/line/links_ny_${idx}.bin`; + var xhr = new XMLHttpRequest(); + xhr.open('GET', dataURL, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function (e) { + var rawData = new Float32Array(this.response); + var data = new Float64Array(rawData.length - 2); + var offsetX = rawData[0]; + var offsetY = rawData[1]; + var off = 0; + var addedDataCount = 0; + for (var i = 2; i < rawData.length;) { + var count = rawData[i++]; + data[off++] = count; + for (var k = 0; k < count; k++) { + var x = rawData[i++] + offsetX; + var y = rawData[i++] + offsetY; + data[off++] = x; + data[off++] = y; + + addedDataCount++; + } + } + layer.chart.appendData({ + seriesIndex: 0, + data: data + }); + dataCount += addedDataCount; + fetchData(idx + 1); + } + xhr.send(); + } + ``` + +**Step 4. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + function initEcharts() { + var option = { + progressive: 2000, + cesium: { + roam: true + }, + series: [{ + type: 'lines', + coordinateSystem: 'cesium', + blendMode: 'lighter', + dimensions: ['value'], + data: new Float64Array(), + polyline: true, + large: true, + lineStyle: { + color: 'red', + width: 0.5, + opacity: 0.3 + } + }] + } + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + } + ``` + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigpoint.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigpoint.md new file mode 100644 index 000000000..d01ae8a65 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigpoint.md @@ -0,0 +1,126 @@ +## 散点图-140万纽约出租车 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts散点图,基于纽约140万出租车数据实现散点图的可视化。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备**: +    本示例从离线数据文件中获取纽约市140万出租车的数据点,然后按照格式要求进行处理; + +* Example: + ```javascript + var CHUNK_COUNT = 19; + function fetchData(idx) { + if (idx >= CHUNK_COUNT) { + return; + } + var dataURL = `./static/data/echarts/point/data_${idx}.bin`; + var xhr = new XMLHttpRequest(); + xhr.open('GET', dataURL, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function (e) { + var rawData = new Float32Array(this.response); + layer.chart + .appendData({ + seriesIndex: 0, + data: rawData + }); + fetchData(idx + 1); + }; + xhr.send(); + } + ``` + +**Step 4. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + function initEcharts() { + var option = { + title: { + top: '10px', + text: "140万纽约出租车", + subtext: "数据来自纽约出租车以及Uber", + left: 'center', + textStyle: { + color: '#fff' + }, + subtextStyle: { + color: '#fff' + } + }, + cesium: { + roam: true + }, + series: [{ + type: 'scatterGL', + progressive: 2000, + coordinateSystem: 'cesium', + symbolSize: 0.5, + blendMode: 'lighter', + large: true, + itemStyle: { + color: '#FF0000', + }, + postEffect: { + enable: true + }, + silent: true, + dimensions: ['lng', 'lat'], + data: new Float32Array() + }] + }; + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + } + ``` + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigroad.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigroad.md new file mode 100644 index 000000000..54e73824c --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-bigroad.md @@ -0,0 +1,121 @@ +## 路径图-中国100万线 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts路径图,基于中国100万线数据实现路径图的可视化。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备**: +    本示例从离线数据文件中获取中国100万线数据,然后按照格式要求进行处理; + +* Example: + ```javascript + var CHUNK_COUNT = 28; + var dataCount = 0; + function fetchData(idx) { + if (idx >= CHUNK_COUNT) { + return; + } + var dataURL = `./static/data/echarts/road/road_${idx}.bin`; + var xhr = new XMLHttpRequest(); + xhr.open('GET', dataURL, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function (e) { + var rawData = new Float32Array(this.response); + var addedDataCount = 0; + layer.chart.appendData({ + seriesIndex: 0, + data: rawData + }); + dataCount += addedDataCount; + fetchData(idx + 1); + } + xhr.send(); + } + ``` + +**Step 4. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + function initEcharts() { + var option = { + title: { + text: '全国道路(百万级)', + left: 'center', + textStyle: { + color: '#fff' + } + }, + progressive: 5000, + cesium: { + roam: true + }, + series: [{ + type: 'lines', + coordinateSystem: 'cesium', + blendMode: 'lighter', + dimensions: ['value'], + data: new Float64Array(), + polyline: true, + large: true, + lineStyle: { + color: 'blue', + width: 1.0, + opacity: 0.9 + } + }] + } + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + } + ``` + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-grid.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-grid.md new file mode 100644 index 000000000..2095f1eff --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-grid.md @@ -0,0 +1,158 @@ +## 自定义-网格专题图 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载自定义的网格专题图。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备**: +    准备网格数据,并按照格式要求进行处理; + +* Example: + ```javascript + function renderItemFunc(params, api) { + var context = params.context; + var lngIndex = api.value(0); + var latIndex = api.value(1); + var coordLeftTop = [+(latExtent[0] + lngIndex * cellSizeCoord[0]).toFixed(6), +(lngExtent[0] + latIndex * + cellSizeCoord[1]).toFixed(6)]; + var pointLeftTop = getCoord(params, api, lngIndex, latIndex); + var pointRightBottom = getCoord(params, api, lngIndex + 1, latIndex + 1); + return { + type: 'rect', + shape: { + x: pointLeftTop[0], + y: pointLeftTop[1], + width: pointRightBottom[0] - pointLeftTop[0], + height: pointRightBottom[1] - pointLeftTop[1] + }, + style: api.style({ + stroke: 'rgba(0,0,0,0.1)' + }), + styleEmphasis: api.styleEmphasis() + }; + } + function getCoord(params, api, lngIndex, latIndex) { + var coords = params.context.coords || (params.context.coords = []); + var key = lngIndex + '-' + latIndex; + return coords[key] || (coords[key] = api.coord([+(latExtent[0] + lngIndex * cellSizeCoord[0]).toFixed(6), + + (lngExtent[0] + latIndex * cellSizeCoord[1]).toFixed(6) + ])); + } + ``` + +**Step 4. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + function initEcharts() { + var option = { + tooltip: {}, + visualMap: { + type: 'piecewise', + inverse: true, + top: 10, + left: 10, + pieces: [{ + value: 0, + color: COLORS[0] + }, { + value: 1, + color: COLORS[1] + }, { + value: 2, + color: COLORS[2] + }, { + value: 3, + color: COLORS[3] + }, { + value: 4, + color: COLORS[4] + }, { + value: 5, + color: COLORS[5] + }], + borderColor: '#ccc', + borderWidth: 1, + backgroundColor: '#eee', + dimension: 2, + inRange: { + color: COLORS, + opacity: 0.8 + } + }, + cesium: { + roam: true + }, + geo: { + geoIndex: 0 + }, + series: [{ + type: 'custom', + coordinateSystem: 'cesium', + data: griddata, + renderItem: renderItemFunc, + animation: false, + itemStyle: { + emphasis: { + color: 'yellow' + } + }, + encode: { + tooltip: 2 + } + }] + }; + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + } + ``` + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-heater.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-heater.md new file mode 100644 index 000000000..8990c6cbf --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-heater.md @@ -0,0 +1,132 @@ +## 热力图-主要城市PM 2.5 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts热力图,基于全国主要城市PM 2.5数据实现热力图的可视化。热力图采用特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加第三方互联网地图作为底图; + +**Step 3. 数据准备**: +    准备全国主要城市的数据,包括名称、坐标点、PM 2.5值,并按照格式要求进行处理; + +* Example: + ```javascript + function initData() { + data = [ + {name: "海门",value: 9,}, + {name: "鄂尔多斯",value: 12,}, + {name: "招远",value: 12,}, + ··· + ]; + geoCoordMap = { + 海门: [121.15, 31.89], + 鄂尔多斯: [109.781327, 39.608266], + 招远: [120.38, 37.35], + ··· + }; + } + function convertData(data) { + var res = []; + for (var i = 0; i < data.length; i++) { + var geoCoord = geoCoordMap[data[i].name]; + if (geoCoord) { + res.push({ + name: data[i].name, + value: geoCoord.concat(data[i].value), + }); + } + } + return res; + } + ``` + +**Step 4. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + option = { + title: { + text: "全国主要城市PM 2.5热力图", + textStyle: { + color: "#eee", + }, + subtext: "data from PM25.in", + sublink: "http://www.pm25.in", + left: "center", + }, + cesium: { + roam: false, + }, + visualMap: { + show: false, + top: "top", + min: 0, + max: 5, + seriesIndex: 0, + calculable: true, + inRange: { + color: ["blue", "blue", "green", "yellow", "red"], + }, + }, + series: [ + { + name: "热力图", + type: "heatmap", + coordinateSystem: "cesium", + data: convertData(data), + pointSize: 5, + blurSize: 6, + }, + ], + }; + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + ``` + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-line.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-line.md new file mode 100644 index 000000000..0372345f2 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-line.md @@ -0,0 +1,106 @@ +## 路径图-渐进绘制 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts路径图,基于北京市公交路线数据实现路径图的渐进绘制。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备、配置参数项**: +    本示例从json文件中读取北京市公交路线数据,并按照格式要求进行处理;然后构建配置项,并创建各种需要的组件,其中最关键的是“series-系列”组件;构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + $.get('./static/data/echarts/line-bus.json', function (data) { + busLines = [].concat.apply([], data.map(function (busLine, idx) { + var prevPt; + var points = []; + for (var i = 0; i < busLine.length; i += 2) { + var pt = [busLine[i], busLine[i + 1]]; + if (i > 0) { + pt = [ + prevPt[0] + pt[0], + prevPt[1] + pt[1] + ]; + } + prevPt = pt; + points.push([pt[0] / 1e4, pt[1] / 1e4]); + } + return { + coords: points + }; + })); + var option = { + cesium: { + roam: true + }, + series: [{ + type: 'lines', + coordinateSystem: 'cesium', + polyline: true, + data: busLines, + silent: true, + lineStyle: { + normal: { + color: '#c23531', + color: 'rgb(200, 35, 45)', + opacity: 0.2, + width: 1 + } + }, + progressiveThreshold: 500, + progressive: 200 + }] + } + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + }); + ``` + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | + diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-lineanimate.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-lineanimate.md new file mode 100644 index 000000000..2c541ae90 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-lineanimate.md @@ -0,0 +1,129 @@ +## 路径图-公交路线 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts路径图,基于北京市公交路线数据实现路径图的绘制。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备、配置参数项**: +    本示例从json文件中读取北京市公交路线数据,并按照格式要求进行处理;然后构建配置项,并创建各种需要的组件,其中最关键的是“series-系列”组件;构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + $.get('./static/data/echarts/line-bus.json', function (data) { + var hStep = 300 / (data.length - 1); + busLines = [].concat.apply([], data.map(function (busLine, idx) { + var prevPt; + var points = []; + for (var i = 0; i < busLine.length; i += 2) { + var pt = [busLine[i], busLine[i + 1]]; + if (i > 0) { + pt = [ + prevPt[0] + pt[0], + prevPt[1] + pt[1] + ]; + } + prevPt = pt; + + points.push([pt[0] / 1e4, pt[1] / 1e4]); + } + return { + coords: points, + lineStyle: { + normal: { + color: echarts.color.modifyHSL('#5A94DF', Math.round(hStep * idx)) + } + } + }; + })); + var option = { + cesium: { + roam: true + }, + series: [{ + type: 'lines', + coordinateSystem: 'cesium', + polyline: true, + data: busLines, + silent: true, + lineStyle: { + normal: { + // color: '#c23531', + // color: 'rgb(200, 35, 45)', + opacity: 0.2, + width: 1 + } + }, + progressiveThreshold: 500, + progressive: 200 + }, { + type: 'lines', + coordinateSystem: 'cesium', + polyline: true, + data: busLines, + lineStyle: { + normal: { + width: 0 + } + }, + effect: { + constantSpeed: 20, + show: true, + trailLength: 0.1, + symbolSize: 1.5 + }, + zlevel: 1 + }] + } + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + }); + ``` + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-migarate.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-migarate.md new file mode 100644 index 000000000..2247c9a41 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-migarate.md @@ -0,0 +1,211 @@ +## 路径图-模拟迁徙 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts路径图,根据虚拟数据实现“模拟迁徙”地图可视化。路径图用于带有起点和终点信息的线数据的绘制,主要用于地图上的航线,路线的可视化。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备**: +    准备全国主要城市的坐标数据,以及迁徙的数据,并按照格式要求进行处理; + +* Example: + ``` javascript + var geoCoordMap = { + '上海': [121.4648, 31.2891], + '东莞': [113.8953, 22.901], + '东营': [118.7073, 37.5513], + '中山': [113.4229, 22.478], + ··· + }; + var BJData = [ + [{name: '北京'}, {name: '上海',value: 95}], + [{name: '北京'}, {name: '广州',value: 90}], + [{name: '北京'}, {name: '大连',value: 80}], + ··· + ]; + + var convertData = function (data) { + var res = []; + for (var i = 0; i < data.length; i++) { + var dataItem = data[i]; + var fromCoord = geoCoordMap[dataItem[0].name]; + var toCoord = geoCoordMap[dataItem[1].name]; + if (fromCoord && toCoord) { + res.push({ + fromName: dataItem[0].name, + toName: dataItem[1].name, + coords: [fromCoord, toCoord] + }); + } + } + return res; + }; + ``` + +**Step 4. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ``` javascript + var planePath ='path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z'; + var color = ['#a6c84c', '#ffa022', '#46bee9']; + var series = []; + [ + ['北京', BJData], + ['上海', SHData], + ['广州', GZData] + ].forEach(function (item, i) { + series.push({ + name: item[0] + ' Top10', + coordinateSystem: 'cesium', + type: 'lines', + zlevel: 1, + effect: { + show: true, + period: 6, + trailLength: 0.7, + color: '#fff', + symbolSize: 3 + }, + lineStyle: { + normal: { + color: color[i], + width: 0, + curveness: 0.2 + } + }, + data: convertData(item[1]) + }, { + name: item[0] + ' Top10', + coordinateSystem: 'cesium', + type: 'lines', + zlevel: 2, + effect: { + show: true, + period: 6, + trailLength: 0, + symbol: planePath, + symbolSize: 15 + }, + lineStyle: { + normal: { + color: color[i], + width: 1, + opacity: 0.4, + curveness: 0.2 + } + }, + data: convertData(item[1]) + }, { + name: item[0] + ' Top10', + type: 'effectScatter', + coordinateSystem: 'cesium', + zlevel: 2, + rippleEffect: { + brushType: 'stroke' + }, + label: { + normal: { + show: true, + position: 'right', + formatter: '{b}' + } + }, + symbolSize: function (val) { + return val[2] / 8; + }, + itemStyle: { + normal: { + color: color[i] + } + }, + data: item[1].map(function (dataItem) { + return { + name: dataItem[1].name, + value: geoCoordMap[dataItem[1].name].concat([ + dataItem[1].value + ]) + }; + }) + }); + }); + option = { + cesium: { + roam: true + }, + coordinateSystem: 'cesium', + title: { + text: '模拟迁徙', + subtext: '数据纯属虚构', + left: 'center', + textStyle: { + color: '#fff' + } + }, + tooltip: { + trigger: 'item' + }, + legend: { + orient: 'vertical', + top: 'top', + left: 'left', + data: ['北京 Top10', '上海 Top10', '广州 Top10'], + textStyle: { + color: '#fff' + }, + selectedMode: 'single' + }, + series: series + }; + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + ``` + + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | diff --git a/website/public/static/demo/military/markdown/clientView_Echarts/echarts-weibo.md b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-weibo.md new file mode 100644 index 000000000..6a055654f --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_Echarts/echarts-weibo.md @@ -0,0 +1,157 @@ +## 散点图-微博签到图 + +### 示例功能 + +    本示例对接百度ECharts,实现在三维场景中加载ECharts散点图,基于微博官方的签到数据实现“微博签到点亮中国”地图可视化。 + +> 百度 ECharts + +    ECharts完整、详细使用方法可参考:官方教程API,开发库下载可参考:官方下载 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置`include`属性为`echarts`; + +* Example: + ```javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 数据准备、配置参数项**: +    本示例从json文件中读取数据,并按照格式要求进行处理;然后构建配置项,并创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件;构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ``` javascript + var grade = [ + "强", + "中", + "弱" + ] + var layer; + $.get('./static/data/echarts/weibo.json', function (weiboData) { + weiboData = weiboData.map(function (serieData, idx) { + var px = serieData[0] / 1000; + var py = serieData[1] / 1000; + var res = [ + [px, py] + ]; + for (var i = 2; i < serieData.length; i += 2) { + var dx = serieData[i] / 1000; + var dy = serieData[i + 1] / 1000; + var x = px + dx; + var y = py + dy; + res.push([x.toFixed(2), y.toFixed(2), 1]); + px = x; + py = y; + } + return res; + }); + option = { + cesium: { + roam: true + }, + coordinateSystem: 'cesium', + title: { + text: "中国微博签到图", + subtext: 'From MapGIS', + sublink: 'http://www.smaryun.com', + left: 'center', + top: 'top', + textStyle: { + color: '#fff' + } + }, + tooltip: {}, + legend: { + left: 'right', + top: 'top', + data: [grade[0], grade[1], grade[2]], + textStyle: { + color: '#ccc' + } + }, + series: [{ + name: grade[2], + type: 'scatter', + coordinateSystem: 'cesium', + symbolSize: 1, + large: true, + itemStyle: { + normal: { + shadowBlur: 2, + shadowColor: 'rgba(37, 140, 249, 0.8)', + color: 'rgba(37, 140, 249, 0.8)' + } + }, + data: weiboData[0] + }, { + name: grade[1], + type: 'scatter', + coordinateSystem: 'cesium', + symbolSize: 1, + large: true, + itemStyle: { + normal: { + shadowBlur: 2, + shadowColor: 'rgba(14, 241, 242, 0.8)', + color: 'rgba(14, 241, 242, 0.8)' + } + }, + data: weiboData[1] + }, { + name: grade[0], + type: 'scatter', + coordinateSystem: 'cesium', + symbolSize: 1, + large: true, + itemStyle: { + normal: { + shadowBlur: 2, + shadowColor: 'rgba(255, 255, 255, 0.8)', + color: 'rgba(255, 255, 255, 0.8)' + } + }, + data: weiboData[2] + }] + }; + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + }); + ``` + +### 关键接口 + +#### 1.【ECharts图层类】`CesiumZondy.Overlayer.EchartsLayer(map, option)` + +    基于mapboxgl的Layer对象进行的拓展,通过该拓展可以提供echarts的可视化功能。 + +| 参数名 | 类型 | 描述 | +| ------- | ------ | ------------------------------------------------------------ | +| map | Object | 传入的Cesium的地图对象 | +| option | Object | echarts.options 使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。 | + +##### 【method】`hide()`:隐藏图层 + +##### 【method】`remove()`:删除图层 + +##### 【method】`show()`:显示图层 + +##### 【method】`update(option)`:更新图层 + +    ECharts 由数据驱动,数据的改变驱动图表展现的改变,因此动态数据的实现也变得异常简单。所有数据的更新都通过 setOption实现,你只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。 + +| 参数 | 类型 | 描述 | +| ------ | ---- | -------------- | +| option | * | echarts.option | + diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-heater.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-heater.md new file mode 100644 index 000000000..0abbaf0a9 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-heater.md @@ -0,0 +1,392 @@ +## 热力图 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV热力图。热力图采用特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include ="mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +    首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var randomCount = 1000; + var data = []; + var citys = ["北京", "天津", "上海", "重庆", "石家庄", "太原", "呼和浩特", "哈尔滨", "长春", "沈阳", "济南", "南京", "合肥", "杭州", "南昌", "福州", + "郑州", "武汉", "长沙", "广州", "南宁", "西安", "银川", "兰州", "西宁", "乌鲁木齐", "成都", "贵阳", "昆明", "拉萨", "海口" + ]; + // 构造数据 + while (randomCount--) { + var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]); + data.push({ + geometry: { + type: 'Point', + coordinates: [cityCenter.lng - 2 + Math.random() * 4, cityCenter.lat - 2 + Math.random() * 4] + }, + count: 30 * Math.random(), + time: 100 * Math.random() + }); + } + var dataSet = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + size: 13, + gradient: { + 0.25: "rgb(0,0,255)", + 0.55: "rgb(0,255,0)", + 0.85: "yellow", + 1.0: "rgb(255,0,0)" + }, + max: 60, + animation: { + type: 'time', + stepsRange: { + start: 0, + end: 100 + }, + trails: 10, + duration: 4, + }, + draw: 'heatmap' + } + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + }$ + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-migrate.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-migrate.md new file mode 100644 index 000000000..250111dbe --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-migrate.md @@ -0,0 +1,400 @@ +## 迁移图 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV迁移图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +     首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var items = rs.split('|'); + for (var i = 0; i < items.length; i++) { + var itemArr = items[i].split(/\n/); + for (var k = 0; k < itemArr.length; k++) { + if (!!itemArr[k]) { + var item = itemArr[k].split(/\t/); + if (item[0] === '起点城市' || item[0] === '迁出城市') { + var cityBegin = item[1]; + } + if (item[0] !== '起点城市' || item[0] !== '迁出城市' && item.length > 1) { + var cityCenter1 = mapv.utilCityCenter.getCenterByCityName(item[0].replace(/市|省/, "")); + var cityCenter2 = mapv.utilCityCenter.getCenterByCityName(cityBegin.replace(/市|省/, "").trim()); + if (cityCenter1) { + if (Math.random() > 0.7) { + curive(cityCenter2, cityCenter1, 50); + } + data.push({ + geometry: { + type: 'LineString', + coordinates: [ + [cityCenter1.lng, cityCenter1.lat], + [cityCenter2.lng, cityCenter2.lat] + ] + }, + count: 100 * Math.random() + }); + } + } + } + } + } + var dataSet = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + strokeStyle: 'rgba(55, 50, 250, 0.3)', + globalCompositeOperation: 'lighter', + shadowColor: 'rgba(55, 50, 250, 0.5)', + methods: { + click: function(item) {} + }, + gradient: { + 0: 'rgba(55, 50, 250, 0)', + 1: 'rgba(55, 50, 250, 1)' + }, + lineWidth: .2, + draw: 'intensity' + }; + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + }$ + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-path_converge.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-path_converge.md new file mode 100644 index 000000000..5ddea510b --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-path_converge.md @@ -0,0 +1,449 @@ +## 轨迹汇聚 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV轨迹汇聚图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" + src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +     首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var randomCount = 500; + var node_data = { + "0": { + "x": 108.154518, + "y": 36.643346 + }, + "1": { + "x": 121.485124, + "y": 31.235317 + }, + }; + var edge_data = [{ + "source": "1", + "target": "0" + }]; + var citys = ["北京", "天津", "上海", "重庆", "石家庄", "太原", "呼和浩特", "哈尔滨", "长春", "沈阳", "济南", "南京", "合肥", "杭州", "南昌", "福州", + "郑州", "武汉", "长沙", "广州", "南宁", "西安", "银川", "兰州", "西宁", "乌鲁木齐", "成都", "贵阳", "昆明", "拉萨", "海口" + ]; + // 构造数据 + for (var i = 1; i < randomCount; i++) { + var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]); + node_data[i] = { + x: cityCenter.lng - 5 + Math.random() * 10, + y: cityCenter.lat - 5 + Math.random() * 10, + }; + edge_data.push({ + "source": ~~(i * Math.random()), + "target": '0' + }); + } + var fbundling = mapv.utilForceEdgeBundling() + .nodes(node_data) + .edges(edge_data); + var results = fbundling(); + var data = []; + var timeData = []; + for (var i = 0; i < results.length; i++) { + var line = results[i]; + var coordinates = []; + for (var j = 0; j < line.length; j++) { + coordinates.push([line[j].x, line[j].y]); + timeData.push({ + geometry: { + type: 'Point', + coordinates: [line[j].x, line[j].y] + }, + count: 1, + time: j + }); + } + + data.push({ + geometry: { + type: 'LineString', + coordinates: transformCoords(coordinates) + } + }); + + function transformCoords(coordinates) { + var coords = []; + coordinates.map(function(coordinate) { + coords.push(coordinate); + }); + return coords; + } + } + var dataSet = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + strokeStyle: 'rgba(55, 50, 250, 0.3)', + globalCompositeOperation: 'lighter', + shadowColor: 'rgba(55, 50, 250, 0.5)', + shadowBlur: 10, + lineWidth: 1.0, + draw: 'simple' + }; + new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + var dataSet = new mapv.DataSet(timeData); + var options = { + context: '2d', + fillStyle: 'rgba(255, 250, 250, 0.9)', + globalCompositeOperation: 'lighter', + size: 1.5, + animation: { + type: 'time', + stepsRange: { + start: 0, + end: 100 + }, + trails: 1, + duration: 5 + }, + draw: 'simple' + }; + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + } + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_animate.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_animate.md new file mode 100644 index 000000000..7ad1292e1 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_animate.md @@ -0,0 +1,383 @@ +## 点数据播放 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV点数据播放图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +    首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + for (var i = 0; i < rs[0].length; i++) { + var geoCoord = rs[0][i].geoCoord; + data.push({ + geometry: { + type: 'Point', + coordinates: geoCoord + }, + time: Math.random() * 10 + }); + } + var dataSet = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + fillStyle: 'rgba(255, 250, 50, 0.6)', + updateCallback: function(time) { + time = time.toFixed(2); + $('#time').html('时间' + time); + }, + size: 3, + draw: 'simple', + animation: { + type: 'time', + stepsRange: { + start: 0, + end: 10 + }, + trails: 1, + duration: 6, + } + } + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + }$ + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_grid.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_grid.md new file mode 100644 index 000000000..673340946 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_grid.md @@ -0,0 +1,394 @@ +## 方形网格密度 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV方形网格密度图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +    首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var randomCount = 500; + var data = []; + while (randomCount--) { + data.push({ + geometry: { + type: 'Point', + coordinates: [75 + Math.random() * 50, 20.3 + Math.random() * 20] + }, + count: 30 * Math.random() + }); + } + var dataSet = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + fillStyle: 'rgba(55, 50, 250, 0.8)', + size: 40, + globalAlpha: 0.5, + label: { + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '15px Arial', + shadowBlur: 10 + }, + gradient: { + 0: "rgba(49, 54, 149, 0)", + 0.2: "rgba(69,117,180, 0.7)", + 0.3: "rgba(116,173,209, 0.7)", + 0.4: "rgba(171,217,233, 0.7)", + 0.5: "rgba(224,243,248, 0.7)", + 0.6: "rgba(254,224,144,0.7)", + 0.7: "rgba(253,174,97,0.7)", + 0.8: "rgba(244,109,67,0.8)", + 0.9: "rgba(215,48,39,0.8)", + 0.95: "rgba(165, 0, 38,0.8)" + }, + shadowColor: 'rgba(255, 255, 50, 1)', + shadowBlur: 10, + max: 100, + draw: 'grid' + } + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + }$ + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_honeycomb.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_honeycomb.md new file mode 100644 index 000000000..edffacace --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_honeycomb.md @@ -0,0 +1,393 @@ +## 蜂窝形密度 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV蜂窝形密度图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +    创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +     首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var randomCount = 500; + var data = []; + while (randomCount--) { + data.push({ + geometry: { + type: 'Point', + coordinates: [75 + Math.random() * 50, 20.3 + Math.random() * 20] + }, + count: 30 * Math.random() + }); + } + var dataSet = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + //fillStyle: 'rgba(255, 250, 50, 0.7)', + label: { + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '15px Arial', + shadowBlur: 10 + }, + size: 30, + gradient: { + 0: "rgba(49, 54, 149, 0)", + 0.2: "rgba(69,117,180, 0.7)", + 0.3: "rgba(116,173,209, 0.7)", + 0.4: "rgba(171,217,233, 0.7)", + 0.5: "rgba(224,243,248, 0.7)", + 0.6: "rgba(254,224,144,0.7)", + 0.7: "rgba(253,174,97,0.7)", + 0.8: "rgba(244,109,67,0.8)", + 0.9: "rgba(215,48,39,0.8)", + 0.95: "rgba(165, 0, 38,0.8)" + }, + max: 100, + draw: 'honeycomb' + } + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + } + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` + diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_mutilanimate.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_mutilanimate.md new file mode 100644 index 000000000..76354b46e --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_mutilanimate.md @@ -0,0 +1,390 @@ +## 点重叠播放 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV点重叠播放图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +     首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var randomCount = 1000; + var data = []; + var citys = ["北京", "天津", "上海", "重庆", "石家庄", "太原", "呼和浩特", "哈尔滨", "长春", "沈阳", "济南", "南京", "合肥", "杭州", "南昌", "福州", + "郑州", "武汉", "长沙", "广州", "南宁", "西安", "银川", "兰州", "西宁", "乌鲁木齐", "成都", "贵阳", "昆明", "拉萨", "海口" + ]; + // 构造数据 + while (randomCount--) { + var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]); + data.push({ + geometry: { + type: 'Point', + coordinates: [cityCenter.lng - 2 + Math.random() * 4, cityCenter.lat - 2 + Math.random() * 4] + }, + count: 30 * Math.random(), + time: 100 * Math.random() + }); + } + var dataSet = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + fillStyle: 'rgba(55, 50, 250, 0.2)', + globalCompositeOperation: "lighter", + size: 10, + animation: { + type: 'time', + stepsRange: { + start: 0, + end: 100 + }, + trails: 10, + duration: 5, + }, + draw: 'simple' + }; + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + } + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` + + + diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_weibo.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_weibo.md new file mode 100644 index 000000000..5031f9283 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-point_weibo.md @@ -0,0 +1,403 @@ +## 点微博数据 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV点微博数据图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +     首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var data1 = []; + var data2 = []; + var data3 = []; + var data4 = []; + for (var i = 0; i < rs[0].length; i++) { + var geoCoord = rs[0][i].geoCoord; + data1.push({ + geometry: { + type: 'Point', + coordinates: geoCoord + } + }); + } + for (var i = 0; i < rs[1].length; i++) { + var geoCoord = rs[1][i].geoCoord; + data2.push({ + geometry: { + type: 'Point', + coordinates: geoCoord + }, + time: Math.random() * 10 + }); + } + for (var i = 0; i < rs[2].length; i++) { + var geoCoord = rs[2][i].geoCoord; + data3.push({ + geometry: { + type: 'Point', + coordinates: geoCoord + }, + }); + } + var dataSet = new mapv.DataSet(data1); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + fillStyle: 'rgba(200, 200, 0, 0.8)', + bigData: 'Point', + size: 0.7, + draw: 'simple', + } + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + + var dataSet = new mapv.DataSet(data2); + var options = { + context: '2d', + fillStyle: 'rgba(255, 250, 0, 0.8)', + size: 0.7, + bigData: 'Point', + draw: 'simple', + } + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + } + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-render_polygon.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-render_polygon.md new file mode 100644 index 000000000..9f67f5e97 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-render_polygon.md @@ -0,0 +1,363 @@ +## 区数据渲染 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV区数据渲染图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +     首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var dataSet = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + fillStyle: 'rgba(255, 80, 53, 0.8)', + strokeStyle: 'rgba(250, 255, 53, 0.8)', + size: 3, + lineWidth: 1, + draw: 'simple' + }; + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + } + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` + diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-simplemigrate.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-simplemigrate.md new file mode 100644 index 000000000..b588e4045 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-simplemigrate.md @@ -0,0 +1,372 @@ +## 单一迁移轨迹 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV单一迁移轨迹图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +    首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var timeDataSet = new mapv.DataSet(timeData); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var timeOptions = { + context: '2d', + fillStyle: 'rgba(255, 250, 250, 0.5)', + zIndex: 200, + size: 2.5, + animation: { + type: 'time', + stepsRange: { + start: 0, + end: 50 + }, + trails: 10, + duration: 2, + }, + draw: 'simple' + } + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + } + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` + diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-tracker.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-tracker.md new file mode 100644 index 000000000..d09467db8 --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-tracker.md @@ -0,0 +1,397 @@ +## 动态轨迹 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV动态轨迹图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" + src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +    首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var data = []; + var timeData = []; + rs = rs.split("\n"); + var maxLength = 0; + for (var i = 0; i < rs.length; i++) { + var item = rs[i].split(','); + var coordinates = []; + if (item.length > maxLength) { + maxLength = item.length; + } + for (j = 0; j < item.length; j += 2) { + if (item.length === 1) { + continue; + } + coordinates.push(proj4('EPSG:3857', 'EPSG:4326', [item[j], item[j + 1]])); + timeData.push({ + geometry: { + type: 'Point', + coordinates: proj4('EPSG:3857', 'EPSG:4326', [item[j], item[j + 1]]) + }, + count: 1, + time: j + }); + } + data.push({ + geometry: { + type: 'LineString', + coordinates: coordinates + } + }); + } + var dataSet1 = new mapv.DataSet(data); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + strokeStyle: 'rgba(53,57,255,0.5)', + coordType: 'bd09mc', + shadowColor: 'rgba(53,57,255,0.2)', + shadowBlur: 3, + lineWidth: 3.0, + draw: 'simple' + }; + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + } + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` + diff --git a/website/public/static/demo/military/markdown/clientView_MapV/mapv-trackerline.md b/website/public/static/demo/military/markdown/clientView_MapV/mapv-trackerline.md new file mode 100644 index 000000000..69a8eefed --- /dev/null +++ b/website/public/static/demo/military/markdown/clientView_MapV/mapv-trackerline.md @@ -0,0 +1,363 @@ +## 交通轨迹 + +### 示例功能 + +    本示例对接MapV,实现在三维场景中加载MapV交通轨迹图。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后构造热力图数据,通过mapv图层对象类 `CesiumZondy.Overlayer.MapvLayer` 来实现MapV图层的加载。 + +> 开发库使用请参见**首页**-**概述**-**原生JS调用**内容 + +#### Mapv + +> 特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,需要设置 `include` 属性为 `mapv` ; + +* Example: + ``` javascript + < script include = "mapv" src = "./static/libs/include-cesium-local.js" > < /script> + ``` + +**Step 2. 创建三维地图容器加载三维球控件,并加载底图**: +     创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载第三方互联网地图作为底图; + +**Step 3. 创建 `DataSet` 对象**: +    首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var dataSet = mapv.csv.getDataSet(csvstr); + ``` + +**Step 4. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + strokeStyle: 'rgba(50, 50, 255, 0.8)', + lineWidth: 0.05, + globalCompositeOperation: 'lighter', + draw: 'simple' + }; + ``` + +**Step 5. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + +### 关键接口 + +#### 1.【百度地图mapv图层】`mapv.baiduMapLayer` + +    mapv原生的创建地图方式为:`new mapv.baiduMapLayer(map, dataSet, options)`,示例中使用`CesiumZondy.Overlayer.MapvLayer(map, dataSet, options)`作为原生方式的替换,替换后的参数个数、参数类型、返回值等等都不会改变,具体的参数设置参考Mapv官网。 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | --------------------------------------------------------- | +| map | Object | 地图对象 | +| dataSet | Object | DasetSet是mapv中统一规范的数据对象,用来保存javascript数据对象,可以增删改查数据,并且可以订阅数据修改事件 | +| options | Object | 其他参数 | + + +* `options`通用属性 + +* Example: + ``` json + { + zIndex: 1, // 层级 + size: 5, // 大小值 + unit: 'px', // 'px': 以像素为单位绘制,默认值。'm': 以米制为单位绘制,会跟随地图比例放大缩小 + mixBlendMode: 'normal', // 不同图层之间的叠加模式,参考[https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) + fillStyle: 'rgba(200, 200, 50, 1)', // 填充颜色 + strokeStyle: 'rgba(0, 0, 255, 1)', // 描边颜色 + lineWidth: 4, // 描边宽度 + globalAlpha: 1, // 透明度 + globalCompositeOperation: 'lighter', // 颜色叠加方式 + coordType: 'bd09ll', // 可选百度墨卡托坐标类型bd09mc和百度经纬度坐标类型bd09ll(默认) + shadowColor: 'rgba(255, 255, 255, 1)', // 投影颜色 + shadowBlur: 35, // 投影模糊级数 + updateCallback: function (time) { // 重绘回调函数,如果是时间动画、返回当前帧的时间 + }, + shadowOffsetX: 0, + shadowOffsetY: 0, + context: '2d', // 可选2d和webgl,webgl目前只支持画simple模式的点和线 + lineCap: 'butt', + lineJoin: 'miter', + miterLimit: 10, + methods: { // 一些事件回调函数 + click: function (item) { // 点击事件,返回对应点击元素的对象值 + console.log(item); + }, + mousemove: function(item) { // 鼠标移动事件,对应鼠标经过的元素对象值 + console.log(item); + }, + tap: function(item) { + console.log(item) // 只针对移动端,点击事件 + } + }, + animation: { + type: 'time', // 按时间展示动画 + stepsRange: { // 动画时间范围,time字段中值 + start: 0, + end: 100 + }, + trails: 10, // 时间动画的拖尾大小 + duration: 5, // 单个动画的时间,单位秒 + } + } + ``` + + +* `options.draw ` + + * simple 最直接的方式绘制点线面 + * time 按时间字段来动画展示数据 + * heatmap 热力图展示 + * grid 网格状展示 + * honeycomb 蜂窝状展示 + * bubble 用不同大小的圆来展示 + * intensity 根据不同的值对应按渐变色中颜色进行展示 + * category 按不同的值进行分类,并使用对应的颜色展示 + * choropleth 按不同的值区间进行分类,并使用对应的颜色展示 + * text 展示文本 + * icon 展示icon + + +* `simple-最直接的方式绘制点线面`:示例地址 + +    dataSet中也可直接配置每个数据项的样式 + +* Example: + ``` javascript + { + draw: 'simple', + geometry: { + type: 'Point', + coordinates: [123, 23] + }, + size: 10, // 点数据时候使用 + fillStyle: 'red', // 点数据时候使用 + strokeStyle: 'red' // 线数据时候使用 + } + ``` + +* `heatmap-热力图展示`:示例地址 + +* Example: + ``` javascript + var options = { + draw: 'heatmap', + size: 13, // 每个热力点半径大小 + gradient: { + // 热力图渐变色 + 0.25: 'rgb(0,0,255)', + 0.55: 'rgb(0,255,0)', + 0.85: 'yellow', + 1.0: 'rgb(255,0,0)', + }, + max: 100, // 最大权重值 + } + //dataSet中加count字段,代表权重,根据上面配置用以计算它的热度 + ``` + +* `grid-网格状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'grid', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + +* `honeycomb-蜂窝状展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'honeycomb', + size: 40, + label: { // 网格中显示累加的值总和 + show: true, + fillStyle: 'white', + shadowColor: 'yellow', + font: '20px Arial', + shadowBlur: 10, + }, + gradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"}, + } + ``` + + +* `bubble-用不同大小的圆来展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'bubble', + max: 100, // 数值最大值范围 + maxSize: 10, // 显示的圆最大半径大小 + } + ``` +    dataSet中加count字段,代表权重,根据上面配置用以计算它实际展示的大小 + +`intensity-根据不同的值对应按渐变色中颜色进行展示`:示例地址 + +* Example: + ``` javascript + { + draw: 'intensity', + max: 100, // 最大阈值 + min: 0, // 最小阈值 + gradient: { // 显示的颜色渐变范围$ + '0': 'blue', + '0.6': 'cyan', + '0.7': 'lime', + '0.8': 'yellow', + '1.0': 'red' + } + } + ``` + +`category-按不同的值进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'category', + splitList: { // 按对应的值按相应颜色展示 + other: 'rgba(255, 255, 0, 0.8)', + 1: 'rgba(253, 98, 104, 0.8)', + 2: 'rgba(255, 146, 149, 0.8)', + 3: 'rgba(255, 241, 193, 0.8)', + 4: 'rgba(110, 176, 253, 0.8)', + 5: 'rgba(52, 139, 251, 0.8)', + 6: 'rgba(17, 102, 252)' + } + } + ``` + +`choropleth-按不同的值区间进行分类并使用对应的颜色展示`:示例地址 + +* Example: + ```javascript + { + draw: 'choropleth', + // 按数值区间来展示不同颜色的点 + splitList: [ + { + start: 0, + end: 2, + color: randomColor() + },{ + start: 2, + end: 4, + color: randomColor() + },{ + start: 4, + end: 6, + color: randomColor() + },{ + start: 6, + end: 8, + color: randomColor() + },{ + start: 8, + color: randomColor() + } + ] + } + ``` + +`icon-展示icon`:示例地址 + +* Example: + ```javascript + { + draw: 'icon', + rotate: '90', // 图片旋转角度 + width: 10, // 规定图像的宽度 + height: 10, // 规定图像的高度 + size: 10, // 添加点击事件时候可以用来设置点击范围 + sx: 10, // 开始剪切的 x 坐标位置 + sy: 10, // 开始剪切的 y 坐标位置 + swidth: 10, // 被剪切图像的宽度 + sheight: 10, // 被剪切图像的高度 + } + ``` + +    dataSet中添加字段: + +* Example: + ```javascript + { + icon: Image, // 加载好的Image对象 + rotate: '90', // 图片旋转角度 + } + ``` + +`text-展示文本`:示例地址 + +* Example: + ```javascript + { + draw: 'text', + fillStyle: 'white', + textAlign: 'center', + avoid: true, // 开启文本标注避让 + textBaseline: 'middle', + offset: { // 文本便宜值 + x: 0, + y: 0 + } + } + ``` + +    dataSet中添加字段: + +* Example: + ``` javascript + { + text: '文本内容' + } + ``` + + +`animation-展示动画`:点动画1  点动画2  线动画 + +* Example: + ```json + { + "draw": "simple", + "animation": { + "type": "time", // 按时间展示动画 + "stepsRange": { + // 动画时间范围,time字段中值 + "start": 0, + "end": 100 + }, + "trails": 10, // 时间动画的拖尾大小 + "duration": 5 // 单个动画的时间,单位秒 + } + } + ``` + diff --git a/website/public/static/demo/military/markdown/data/data-3Dtiles.md b/website/public/static/demo/military/markdown/data/data-3Dtiles.md new file mode 100644 index 000000000..acc243d4d --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-3Dtiles.md @@ -0,0 +1,68 @@ +## 3DTiles 数据加载 + +### 示例功能 + +    此功能用于在当前场景中加载 3DTiles 数据,支持本地数据和网络数据加载。 + +### 3DTiles + +    3D Tiles 是用于流式传输大规模异构 3D 地理空间数据集的开放规范。为了扩展 Cesium 的地形和图像流,3D Tiles 将用于流式传输 3D 内容,包括建筑物,树木,点云和矢量数据。关于 3D Tiles 可自行了解其更多内容。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`append3DTile()`方法与`remove3DTile()`方法,实现 3D Tiles 数据的加载与移除功能。 + +> 开发库使用请参见*首页-概述-调用方式*。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 加载 3DTiles 数据**: +    首先构造`CesiumZondy.Manager.CommonDataManager`通用数据管理对象,然后调用`append3DTile()`方法加载,须设置 3DTiles 数据的 URL 参数,通过加载成功回调函数定位跳转到所加载的 3DTiles 数据范围。相对加载功能,移除则调用`remove3DTile()`方法实现。 + +- Example: + ```Javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer + }); + //加载3DTile数据 + var tiles = commonDataManager.append3DTile( + //3DTile数据路径,支持本地与网络数据 + './static/data/3DTile/BatchedTilesets/tileset.json', + //成功回调函数 + load + ); + function load(layer) { + //加载成功后定位跳转 + webGlobe.viewer.flyTo(layer); + console.log("这是一个加载成功回调"); + } + //通过remove3DTile方法移除 + //commonDataManager.remove3DTile(tiles); + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【通用数据管理类】 CesiumZondy.Manager.CommonDataManager + +##### 【method】 `append3DTile(url, onsuccess, options) → {Object}` 通过路径添加 3DTile 数据,返回 kml 数据对象(Object) + +| 参数名 | 类型 | 说明 | +| --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| url | String | 3DTile 数据路径,本地数据路径设置如“./static/data/3DTile/BatchedTilesets/tileset.json”,网络数据路径设置如“http://{域名或IP}/xxx.json” | +| onsuccess | function | 加载成功回调函数 | +| options | Object | 扩展参数 | + +##### 【method】 `remove3DTile(tileset)` 移除 3DTiles 数据对象 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ---------------------------------------------------- | +| tileset | Object | 3DTiles 数据对象,即 append3DTile 方法返回的数据对象 | diff --git a/website/public/static/demo/military/markdown/data/data-addgltf.md b/website/public/static/demo/military/markdown/data/data-addgltf.md new file mode 100644 index 000000000..6f8bdc693 --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-addgltf.md @@ -0,0 +1,76 @@ +## GLTF 数据加载 + +### 示例功能 + +    本示例实现在三维场景中添加 GLTF 模型。 + +> 什么是 GLTF? + +    GLTF(GL Transmission Format),即图形语言交换格式,是一种三维数据的格式标准,由 Khronos Group 推出。由于三维数据格式众多,所以其致力于成为像音频界的 MP3、图像界的 JPEG 那样的 3D 领域通用的数据格式。目前多款三维软件支持了 GLTF 格式数据的读写,如 Maya、3dmax、unity 等等。采用 GLTF 可避免不同软件中数据转换操作造成的各方面问题。 +GLTF 官方介绍 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendModel()`方法,实现 GLTF 模型数据的加载。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 添加模型**: +    首先构造`CesiumZondy.Manager.CommonDataManager`通用数据管理对象,然后调用`appendModel()`方法,并设置模型 id、模型文件 URL 路径、模型所在经纬度、高度、缩放比参数信息,即可实现 GLTF 模型的加载。如果模型自带动画,需要设置`webGlobe.viewer.clock.shouldAnimate`参数为 true 来开启动画。 + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //开启动画:如果模型自带动画,需开启此参数 + webGlobe.viewer.clock.shouldAnimate = true + //添加模型(gltf文件) + var model = commonDataManager.appendModel( + //模型id + 'model', + //模型文件URL路径 + './static/data/model/WuRenJi/WuRenJi.gltf', + //模型经度、纬度、高度 + 114.3938, + 30.5045, + 200, + //缩放比 + 200 + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +#### 2.【通用数据管理类】CesiumZondy.Manager.CommonDataManager + +##### 【method】`appendModel(id, url, lon, lat, height, scale) → {Object}`:添加模型(gltf 文件) + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------- | +| id | Number | 模型 id | +| url | String | 模型 url 路径 | +| lon | Number | 模型所在经度 | +| lat | Number | 模型坐在纬度 | +| height | Number | 高度 | +| scale | Number | 缩放比 | +| options | Object | 附加参数 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 说 明 | +| ---------------- | -------------- | -------------------------------------- | +| color | Color | 颜色 | +| colorBlendMode | ColorBlendMode | 颜色混合模式 Cesium.ColorBlendMode.MIX | +| colorBlendAmount | Number | 颜色混合程度 | diff --git a/website/public/static/demo/military/markdown/data/data-addgltfs.md b/website/public/static/demo/military/markdown/data/data-addgltfs.md new file mode 100644 index 000000000..d80872ddf --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-addgltfs.md @@ -0,0 +1,111 @@ +## 批量添加 GLTF 模型 + +### 示例功能 + +    本示例实现在三维场景中批量添加多个 GLTF 模型数据。常用于需要一次性添加多个模型的应用场景,多个模型可为相同数据,也可以是不同数据,参数单独设置,简化代码操作步骤。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendModels()`方法,实现多个模型数据的批量加载。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 添加模型**: +    首先构造`CesiumZondy.Manager.CommonDataManager`通用数据管理对象,构造多模型对象 models,构造时需传递模型 ID、模型名称、描述、添加的位置、模型文件路径、模型缩放比例等信息,然后调用`appendModels()`方法即可实现多模型的批量加载; + +- Example: + ```javascript + //多个模型 + var models = [ + { + id: 'document', + name: 'Models', + version: '1.0', + }, + { + //模型的ID + id: 'aerogenerator1', + //模型的名字 + name: '风机1', + //模型要添加的坐标位置 + position: { + cartographicDegrees: [118.0385, 42.6374, -5], + }, + //模型文件参数 + model: { + //模型文件的路径 + gltf: './static/data/model/donghua.gltf', + //模型的比例 + scale: 50, + //模型最小显示的像素 + minimumPixelSize: 16, + }, + //描述 + description: '这是1号风机', + }, + { + //模型的ID + id: 'aerogenerator2', + //模型的名字 + name: '风机2', + //模型要添加的坐标位置 + position: { + cartographicDegrees: [118.0356, 42.6354, -5], + }, + //模型文件参数 + model: { + //模型文件的路径 + gltf: './static/data/model/donghua.gltf', + //模型的比例 + scale: 50, + //模型最小显示的像素 + minimumPixelSize: 16, + }, + //描述 + description: '这是2号风机', + }, + ] + //开启动画:如果模型自带动画,需开启此参数 + webGlobe.viewer.clock.shouldAnimate = true + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加多个模型 + modelSource = commonDataManager.appendModels(models) + ``` + +添加完模型后,可利用以下方法跳转到模型所在处; + +- Example: + ```javascript + //跳转到模型处 + webGlobe.viewer.zoomTo(modelSource) + ``` + +### 关键接口 + +#### 1.【三维场景控件】`WebSceneControl` + +#### 2.【通用数据管理类】`CesiumZondy.Manager.CommonDataManager` + +##### 【method】`appendModels(modelsString, successCall)`:批量添加模型 + +| 参数名 | 类 型 | 说 明 | +| ------------ | -------- | ------------ | +| modelsString | String | 模型组织 | +| successCall | function | 成功后的回调 | + +##### 【method】`removeModels(models)`:移除通过 appendModelsByFile()和 appendModels()添加的模型 + +| 参数名 | 类 型 | 说 明 | +| ------ | ---------- | -------- | +| models | DataSource | 模型组织 | diff --git a/website/public/static/demo/military/markdown/data/data-czml.md b/website/public/static/demo/military/markdown/data/data-czml.md new file mode 100644 index 000000000..66c8d8517 --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-czml.md @@ -0,0 +1,74 @@ +## CZML 数据加载 + +### 示例功能 + +    本示例实现在三维场景中添加 CZML 数据。 + +> 什么是 CZML? + +    CZML,是一种用来描述动态场景的 JSON 架构的地理数据可视化语言,可以用来描述点、线、布告板、模型以及其他的图元,不仅提供了丰富的图形及其外观选择,还专注于表现动态地理数据的变化特征,主要用于 Cesium 在浏览器中的展示。 +CZML 介绍参考 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendCZML()`方法,实现 CZML 数据的加载;对应可通过`removeDataSource()`方法移除。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库; + +**Step 2. 创建布局**: +    创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载 Google 地图作为底图; + +**Step 3. 添加 CZML 数据**: +    调用`appendCZML()`方法,传入 CZML 文件的地址即可实现数据的加载,并可添加回调函数,根据 CZML 文件中某一模型 ID 判断是否添加成功; + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加CZML数据 + var datasource = commonDataManager.appendCZML( + //CZML文件地址 + './static/data/czml/fengji.czml', + //成功回调 + function(entities) { + //判断是否添加成功 + var enti = entities.getById('aerogenerator10') + if (enti == undefined) { + alert('失败') + } + } + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +#### 2.【通用数据管理类】CesiumZondy.Manager.CommonDataManager + +##### 【method】`appendCZML(url, successCall) → {CzmlDataSource}`:添加 czml 文件数据,返回数据对象(CzmlDataSource) + +| 参数名 | 类 型 | 说 明 | +| ----------- | -------- | ---------------------------------------------------------------------------------------------------------------- | +| url | String | 数据文件地址,本地数据路径设置如“./static/data/czml/fengji.czml”,网络数据路径设置如“http://{域名或IP}/xxx.czml” | +| successCall | function | 成功后的回调 | + +##### 【method】 `removeDataSource(datasource, isDestroy)` 移除数据对象 + +| 参数名 | 类型 | 说明 | +| ---------- | ---------- | -------- | +| datasource | DataSource | 数据对象 | +| isDestroy | Boolean | 是否销毁 | + +##### 【method】 `removeAllDataSource(isDestroy)` 移除所有数据对象 + +| 参数名 | 类型 | 说明 | +| --------- | ------- | -------- | +| isDestroy | Boolean | 是否销毁 | diff --git a/website/public/static/demo/military/markdown/data/data-geojson.md b/website/public/static/demo/military/markdown/data/data-geojson.md new file mode 100644 index 000000000..97dfce212 --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-geojson.md @@ -0,0 +1,62 @@ +## GeoJSON 数据加载 + +### 示例功能 + +    本示例实现在三维场景中添加 GeoJSON 数据。 + +> 什么是 GeoJSON? + +    GeoJSON,是一种对各种地理数据结构进行编码的格式,基于 Javascript 对象表示法的地理空间信息数据交换格式。通过键值对的方式表达几何、特征或者特征集合,能够支持点、线、面、多点、多线、多面和几何集合的数据类型。 +GeoJSON 官方介绍 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendGeoJson()`方法,实现 GeoJSON 数据的加载;对应可通过`removeDataSource()`方法移除。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库; + +**Step 2. 创建布局**: +    创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载 Google 地图作为底图; + +**Step 3. 添加 GeoJSON**: +    调用`appendGeoJson()`方法,传入 GeoJSON 文件地址,即可实现数据的加载,在此以本地文件为例; + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加GeoJson数据(GeoJson文件地址) + var datasource = commonDataManager.appendGeoJson('./static/data/geojson/wuhan_bounds.geojson') + ``` + +### 关键接口 + +#### 1.【三维场景控件】`WebSceneControl` + +#### 2.【通用数据管理类】`CesiumZondy.Manager.CommonDataManager` + +##### 【method】`appendGeoJson(url) → {GeoJsonDataSource}`:添加 GeoJson 文件,返回数据对象(GeoJsonDataSource) + +| 参数名 | 类 型 | 说 明 | +| ------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------- | +| url | String | GeoJSON 数据文件地址,本地数据路径设置如“./static/data/geojson/wuhan_bounds.geojson”,网络数据路径设置如“http://{域名或IP}/xxx.geojson” | + +##### 【method】 `removeDataSource(datasource, isDestroy)` 移除数据对象 + +| 参数名 | 类型 | 说明 | +| ---------- | ---------- | -------- | +| datasource | DataSource | 数据对象 | +| isDestroy | Boolean | 是否销毁 | + +##### 【method】 `removeAllDataSource(isDestroy)` 移除所有数据对象 + +| 参数名 | 类型 | 说明 | +| --------- | ------- | -------- | +| isDestroy | Boolean | 是否销毁 | diff --git a/website/public/static/demo/military/markdown/data/data-kml.md b/website/public/static/demo/military/markdown/data/data-kml.md new file mode 100644 index 000000000..115e83de5 --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-kml.md @@ -0,0 +1,63 @@ +## KML 数据加载 + +### 示例功能 + +    本示例实现在三维场景中添加 KML 数据。 + +> 什么是 KML? + +    KML(Keyhole Markup Language,Keyhole 标记语言)是由 Google 旗下的 Keyhole 公司开发和维护的一种基于 XML 的标记语言,可用于描述和保存地理空间信息(如点、线、面、图像、模型等),适合网络环境下的地理信息协作与共享。KML 在 2008 年 4 月被 OGC(开放地理信息系统协会)宣布成为开放地理信息编码标准。KML 是纯粹的 xml 文本格式,两者之间最大的区别就在于 KML 描述的是地理信息数据。 +KML 百科介绍 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendKml()`方法,实现 KML 数据的加载;对应可通过`removeDataSource()`方法移除。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 添加 KML 数据**: +    首先构造`CesiumZondy.Manager.CommonDataManager`通用数据管理对象,然后调用`appendKml()`方法,传入 KML 文件地址,即可实现 KML 数据的加载,在此以本地文件为例; + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加KML数据 + datasource = commonDataManager.appendKml('./static/data/kml/bikeRide_wuhan.kml') + ``` + +### 关键接口 + +#### 1.【三维场景控件】`WebSceneControl` + +#### 2.【通用数据管理类】`CesiumZondy.Manager.CommonDataManager` + +##### 【method】`appendKml(url, options) → {KmlDataSource}`:加载 KML、KMZ 数据,返回 KML 数据对象(KmlDataSource) + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | --------------------------------------------------------------------------------------------------------------------- | +| url | String | 数据文件地址,本地数据路径设置如“./static/data/kml/bikeRide_wuhan.kml”,网络数据路径设置如“http://{域名或IP}/xxx.kml” | +| options | Object | 可选扩展参数 | + +##### 【method】 `removeDataSource(datasource, isDestroy)` 移除数据对象 + +| 参数名 | 类型 | 说明 | +| ---------- | ---------- | -------- | +| datasource | DataSource | 数据对象 | +| isDestroy | Boolean | 是否销毁 | + +##### 【method】 `removeAllDataSource(isDestroy)` 移除所有数据对象 + +| 参数名 | 类型 | 说明 | +| --------- | ------- | -------- | +| isDestroy | Boolean | 是否销毁 | diff --git a/website/public/static/demo/military/markdown/data/data-kmz.md b/website/public/static/demo/military/markdown/data/data-kmz.md new file mode 100644 index 000000000..832c47d14 --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-kmz.md @@ -0,0 +1,62 @@ +## KMZ 数据加载 + +### 示例功能 + +    本示例实现在三维场景中添加 KMZ 数据。 + +> 什么是 KMZ? + +    KMZ 文件是经过压缩的 KML 文件,将其解压后即可获得最原始的 KML 文件。与 KML 不同的是,由于 KMZ 是压缩包文件,所以其中不仅可以包括 KML 文本文件,还可以包括其他类型的文件,如图片等,所以 KMZ 能够表达的信息可以更加丰富多样。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,实现 KMZ 数据的加载与 KML 数据的方法一样,都采用`CesiumZondy.Manager.CommonDataManager`类提供的`appendKml()`方法;对应可通过`removeDataSource()`方法移除。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库; + +**Step 2. 创建布局**: +    创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,并加载 Google 地图作为底图; + +**Step 3. 添加 KMZ 数据**: +    调用`appendKml()`方法,传入 KMZ 文件地址,即可实现数据的加载,在此以本地文件为例; + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加KMZ数据 + var datasource = commonDataManager.appendKml('./static/data/kmz/sample.kmz') + ``` + +### 关键接口 + +#### 1.【三维场景控件】`WebSceneControl` + +#### 2.【通用数据管理类】`CesiumZondy.Manager.CommonDataManager` + +##### 【method】`appendKml(url, options) → {KmlDataSource}`:加载 KML、KMZ 数据,返回 KML 数据对象(KmlDataSource) + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------------------------------------------------------------------------------------------------------- | +| url | String | 数据文件地址,本地数据路径设置如“./static/data/kmz/sample.kmz”,网络数据路径设置如“http://{域名或IP}/xxx.kmz” | +| options | Object | 可选扩展参数 | + +##### 【method】 `removeDataSource(datasource, isDestroy)` 移除数据对象 + +| 参数名 | 类型 | 说明 | +| ---------- | ---------- | -------- | +| datasource | DataSource | 数据对象 | +| isDestroy | Boolean | 是否销毁 | + +##### 【method】 `removeAllDataSource(isDestroy)` 移除所有数据对象 + +| 参数名 | 类型 | 说明 | +| --------- | ------- | -------- | +| isDestroy | Boolean | 是否销毁 | diff --git a/website/public/static/demo/military/markdown/data/data-movegltf.md b/website/public/static/demo/military/markdown/data/data-movegltf.md new file mode 100644 index 000000000..2b519cd55 --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-movegltf.md @@ -0,0 +1,101 @@ +## 交互式移动模型数据 + +### 示例功能 + +    此功能用于移动在三维场景中加载的模型数据,模型数据是临时移动,不会修改数据本身。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,通过 Cesium 三维球控件 `Cesium.WebSceneControl()`的`appendModel()`加载模型数据后,通过创建 `Cesium.TransformEditor()` 平移编辑器对象,获取 `Cesium.TransformEditor` 平移编辑器对象的 `viewModel` 模型视图成员,调用模型视图的 `setModeTranslation()` 设置模型视图平移方法,调用模型视图的 `activate()` 激活平移工具,完成此功能。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +**Step 3. 加载数据**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `appendModel()` 方法传入模型数据地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer + }); + //添加模型(gltf文件) + var model = commonDataManager.appendModel( + //模型id + 'model', + //模型url路径 + './static/data/model/donghua.gltf', + //模型经度、纬度、高度 + 118.0385, 42.6374, -5, + //缩放比 + 50 + ); + ``` + +**Step 4. 创建平移编辑器**: +    初始化 `Cesium.TransformEditor()`平移编辑器对象; + +- Example: + ```Javascript + //创建平移编辑器 + var transformEditor = new Cesium.TransformEditor({ + container: webGlobe.viewer.container, + scene: webGlobe.viewer.scene, + transform: model.modelMatrix, + boundingSphere: model.boundingSphere + }); + ``` + +**Step 5. 设置模型视图平移**: +    调用模型视图的 `setModeTranslation()` 设置模型视图平移; + +- Example: + ```Javascript + //获取模型视图对象 + var viewModel = transformEditor.viewModel; + //设置模型视图平移 + viewModel.setModeTranslation(); + ``` + +**Step 6. 激活平移工具**: +    调用模型视图的 `activate()` 激活平移工具; + +- Example: + ```Javascript + //激活平移工具 + viewModel.activate(); + ``` + +### 关键接口 + +#### 1. `Cesium.WebSceneControl(elementId, options)` : 三维视图的主要类 + +##### 【method】`appendModel(id, url, lon, lat, height, scale) → {Object}`:添加模型(gltf 文件) + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------- | +| id | Number | 模型 id | +| url | String | 模型 url 路径 | +| lon | Number | 模型所在经度 | +| lat | Number | 模型坐在纬度 | +| height | Number | 高度 | +| scale | Number | 缩放比 | +| options | Object | 附加参数 | + +> `options`属性主要参数 + +| 参数名 | 类 型 | 说 明 | +| ---------------- | -------------- | -------------------------------------- | +| color | Color | 颜色 | +| colorBlendMode | ColorBlendMode | 颜色混合模式 Cesium.ColorBlendMode.MIX | +| colorBlendAmount | Number | 颜色混合程度 | + +#### 2. `Cesium.TransformEditor(options)` : 平移编辑器类(API 暂无) diff --git a/website/public/static/demo/military/markdown/data/data-onlineImage.md b/website/public/static/demo/military/markdown/data/data-onlineImage.md new file mode 100644 index 000000000..96585b30b --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-onlineImage.md @@ -0,0 +1,74 @@ +## 添加在线图片数据 + +### 示例功能 + +    此功能用于在当前场景中叠加显示图片文件数据,支持本地数据和网络数据加载。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendImageByUrl()`方法与`removeImage()`方法,实现图片叠加显示与移除功能。 + +> 开发库使用请参见*首页-概述-调用方式*。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维地图容器加载三维球控件,并加载底图;:创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,并调用`appendTDTuMap()` 方法加载天地图数据作为底图显示; + +**Step 3. 叠加显示图片文件数据**: +    首先构造`CesiumZondy.Manager.CommonDataManager`实体绘制控制器类对象,然后调用`appendImageByUrl()`方法加载,须设置图片的 URL 与经纬度参数。相对加载功能,移除则调用`removeImage()`方法实现。 + +- Example: + + ```Javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer + }); + + //通过地址添加图片,支持本地图片和网络图片 + var imgObj = commonDataManager.appendImageByUrl( + //图片URL + 'http://5b0988e595225.cdn.sohucs.com/images/20180917/455c51316ec24a97958a254dc66c18f6.jpeg', + //东经 + 114.3473, + //北纬 + 30.5479, + //西经 + 114.4637, + //南纬 + 30.6120 + ); + //定位跳转 + sceneManager.flyToComm(114.4, 30.55, 30000); + + //通过removeImage()删除 + //commonDataManager.removeImage(imgObj,false); + ``` + +### 关键接口 + +#### 1.【三维场景控件】 `CesiumZondy.WebSceneControl` + +#### 2.【实体绘制控制器类】 `CesiumZondy.Manager.CommonDataManager` + +##### 【method】 `appendImageByUrl(url, west, south, east, north, options) → {Object}` 通过路径添加图片数据,返回图片数据对象(Object) + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ------------------------------------------------------------------------------------------------------- | +| url | String | 图片地址,本地数据路径设置如“./static/data/imge/xxx.png”,网络数据路径设置如“http://{域名或IP}/xxx.jpg” | +| west | Number | 西经 | +| south | Number | 南纬 | +| east | Number | 东经 | +| north | Number | 北纬 | +| options | Object | 扩展参数 | + +##### 【method】 `removeImage(imageryLayer, isDestroy)` 移除添加的图片 + +| 参数名 | 类型 | 说明 | +| ------------ | ------- | ------------------------------------------------------ | +| imageryLayer | Object | 添加的图片对象,即 appendImageByUrl 方法返回的数据对象 | +| isDestroy | Boolean | 是否销毁图片对象 | diff --git a/website/public/static/demo/military/markdown/data/data-outlineImage.md b/website/public/static/demo/military/markdown/data/data-outlineImage.md new file mode 100644 index 000000000..a478fbdfa --- /dev/null +++ b/website/public/static/demo/military/markdown/data/data-outlineImage.md @@ -0,0 +1,57 @@ +## 添加本地图片数据 + +### 示例功能 + +    本示例实现在三维场景中添加图片。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendImageByUrl()`方法,实现图片的添加。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件; + +**Step 3. 添加图片**: +    添加图片:首先构造`CesiumZondy.Manager.CommonDataManager`通用数据管理对象,然后调用`appendImageByUrl()`方法,需要传入图片的地址(可为本地图片地址,也可以为网络图片的 URL),以及图片显示的坐标范围; + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加图片 + var image = commonDataManager.appendImageByUrl( + //本地图片地址 + './static/data/picture/world.jpg', + //图片显示范围(西经、南纬、东经、北纬) + -180.0, + -90, + 180.0, + 90 + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件】`WebSceneControl` + +#### 2.【通用数据管理类】`CesiumZondy.Manager.CommonDataManager` + +##### 【method】`appendImageByUrl(url, west, south, east, north, options)`:通过地址添加图片,包括本地图片和网络图片 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | -------- | +| url | String | 图片地址 | +| west | Number | 西经 | +| south | Number | 南纬 | +| east | Number | 东经 | +| north | Number | 北纬 | +| options | Object | 扩展参数 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-groundhole.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-groundhole.md new file mode 100644 index 000000000..e69de29bb diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-groundline.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-groundline.md new file mode 100644 index 000000000..d85f395aa --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-groundline.md @@ -0,0 +1,67 @@ +## 绘制贴地球线 + +### 示例功能 + +    本示例实现在三维场景中绘制贴地球模式的线实体。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendGroundLine()`方法,实现贴地球线的添加绘制。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 绘制贴地球线**: +    绘制贴地球线:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,然后调用`appendGroundLine()`方法,传入定义的坐标数组、颜色、线宽,即可实现贴地线的添加绘制。 + +- Example: + + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //定义一组坐标位置 + var pointArr = [114.29326686402278, 30.54691048615991, 114.28238521698825, 30.552850641911828, 114.27353580837766, 30.536521489533488, 114.29257062566866, 30.525800315003725] + //颜色 + var color = new Cesium.ColorGeometryInstanceAttribute(1, 0, 0, 0.5) + //绘制贴地线(坐标点数组,线颜色,线宽) + var groundLine = entityController.appendGroundLine(pointArr, color, 40) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### 【method】`appendGroundLine(pnts, color, width) → {Object}`:绘制贴地球线 + +| 参数名 | 类 型 | 说 明 | +| ------ | ------ | ---------------------------------- | +| pnts | Array | X、Y 坐标数组:[x1,y1,x2,y2,x3,y3] | +| color | Color | 颜色 | +| width | Number | 宽度参数 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-groundpolygon.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-groundpolygon.md new file mode 100644 index 000000000..221c55636 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-groundpolygon.md @@ -0,0 +1,74 @@ +## 绘制贴地球区 + +### 示例功能 + +    本示例实现在三维场景中绘制贴地球区。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendGroundPolygon()`方法,实现贴地球区的添加绘制。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 创建贴地区**: +    绘制贴地区:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象、构造外圈坐标数组、内圈坐标数组、填充颜色对象等信息,然后调用`appendGroundPolygon()`方法,即可实现贴地区的添加绘制。如果要绘制单圈的不带洞区,内圈坐标数组传空即可。 + +- Example: + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //坐标点数组(经纬度) + var point_out = [70, 0, 150, 0, 150, 60, 70, 60, 70, 0] + //根据给定点画贴地多边形 + var groundPolygon = webGlobe.appendGroundPolygon( + //外圈坐标数组(经纬度) + point_out, + //内圈坐标数组(经纬度) + null, + //填充颜色 + new Cesium.ColorGeometryInstanceAttribute(255 / 255, 255 / 255, 0 / 255, 0.5), + //附加属性 + {} + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### 【method】`appendGroundPolygon(outPnts, innerPnts, color, options) → {Object}`:根据给定点画贴地区 + +| 参数名 | 类 型 | 说 明 | +| --------- | ------- | -------------------------------------------------- | +| outPnts | Array | 外圈坐标数组(经纬度):[x1,y1,x2,y2,x3,y3] | +| innerPnts | Array | 内圈坐标数组(经纬度):Array<[x1,y1,x2,y2,x3,y3]> | +| color | Color | 填充颜色(默认不指定时为蓝色) | +| options | Options | 可选扩展参数 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-hole.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-hole.md new file mode 100644 index 000000000..cc62f40e7 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-hole.md @@ -0,0 +1,89 @@ +## 绘制带洞区 + +### 示例功能 + +    本示例实现在三维场景中绘制带洞区。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendHolePolygon()`方法,实现带洞区的添加绘制。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 绘制带洞区**; +    绘制带洞区:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,构造外圈、内圈坐标点数组,然后调用`appendHolePolygon()`方法,设置信息:区名称、内圈与外圈坐标点数组、区填充色,即可实现带洞区的添加绘制。每一圈坐标点序列,都必须首尾点一致形成闭合区,并且可以添加多圈内圈坐标。 + +- Example: + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //外圈坐标点 + var point_out = [114.40328987990017, 30.479789358042233, 114.40255973680176, 30.473707285934392, 114.40905754990294, 30.473938016458956, 114.40971219770601, 30.479196348500707, 114.40328987990017, 30.479789358042233] + //内圈坐标点(可添加多圈内圈坐标点) + var point_in = [ + [114.40788399535329, 30.47712432587247, 114.4077781482791, 30.47586494219165, 114.40919532034856, 30.47700722872353, 114.40788399535329, 30.47712432587247], + [114.40582893901652, 30.478599513299535, 114.40570115301699, 30.47795978731544, 114.40655655628692, 30.478318639933967, 114.40582893901652, 30.478599513299535], + ] + //添加带洞多边形 + var holePolygon = entityController.appendHolePolygon( + //名称 + '带洞区', + //外圈坐标 + point_out, + //内圈坐标 + point_in, + { + //颜色 + material: new Cesium.Color(0 / 255, 0 / 255, 255 / 255, 0.5), + //多边形相对于地球表面的高度 + extrudedHeight: 100, + } + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### 【method】`appendHolePolygon(name, latLonsOut, latLonsIn, options) → {Entity}`:添加带洞区(二维) + +| 参数名 | 类 型 | 说 明 | +| ---------- | ------ | ------------------------------------ | +| name | String | 名称 | +| latLonsOut | Array | 外圈坐标:[x1,y1,x2,y2,x3,y3] | +| latLonsIn | Array | 内圈坐标:Array<[x1,y1,x2,y2,x3,y3]> | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 说 明 | +| -------- | ----- | --------------------------------------------- | +| material | Color | (可选)填充颜色 new Cesium.Color(0, 0, 1, 1) | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-icon.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-icon.md new file mode 100644 index 000000000..2735333cc --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-icon.md @@ -0,0 +1,74 @@ +## 添加图标 + +### 示例功能 + +    本示例实现在三维场景中添加图片标注。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.LabelLayer`类提供的`appendBillboard()`方法,实现图片标注的添加。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 添加文本标注**: +    添加文本标注:首先构造`CesiumZondy.Manager.LabelLayer`注记图层管理对象,调用`appendBillboard()`方法可实现图片标注的添加,需要设置基本必要信息,如:图片标注的经纬度、高程、名称、图标文件路径、图片宽度、高度等信息。 + +- Example: + + ```javascript + //构造注记图层管理对象 + var labelLayer = new CesiumZondy.Manager.LabelLayer({ + viewer: webGlobe.viewer, + }) + //添加图片标注(经度、纬度、高程、名称、图片地址、图标宽度、图标高度) + var icon = labelLayer.appendBillboard(114.3992, 30.5062, 0, '图标', './static/data/picture/icon.png', 50, 50) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【注记图层管理类】`CesiumZondy.Manager.LabelLayer` + +##### 【method】`appendBillboard(lat, lon, height, name, bImageUrl, bWidth, bHeight, optionsParam) → {Entity}`:添加图片标签,返回添加的公告板对象(Entity) + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| lat | Number | 经度 | +| lon | Number | 纬度 | +| height | Number | 高度 | +| name | String | 名称 | +| bImageUrl | String | 图片地址 | +| bWidth | Number | 图片宽度 | +| bHeight | Number | 图片高度 | +| optionsParam | Object | 扩展参数 | + +- `optionsParam`属性主要参数 + +| 参数名 | 类 型 | 说 明 | +| ----------- | ------ | ---------------- | +| description | String | (可选)描述信息 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-interaction.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-interaction.md new file mode 100644 index 000000000..b68815e23 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-interaction.md @@ -0,0 +1,145 @@ +## 交互式绘制 + +### 示例功能 + +    此功能用于在三维球上使用鼠标完成点、线、区等图形的绘制,绘制的图形在临时图层上,绘制结果不会被保存,可应用于各个场景,满足用户在三维球上使用鼠标交互式绘制显示区域,或将此功能和其他功能混合使用,将其他功能变成交互式的功能。 + +### 示例实现 + +    本示例需要使用 include-cesium-local.js 开发库实现。通过几何绘制控制`CesiumZondy.Manager.EntityController`的方法实现点、线、区的添加绘制,结合三维场景鼠标事件即 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法实现鼠标交互绘制图形功能。其中,可通过 `Cesium.DrawPolygonTool()` 在三维场景中添加交互式绘制区控件,实现交互式绘制区功能。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示,并加载一个三维模型数据; + +以下分别对绘制点绘制线绘制区的实现步骤进行介绍: + +#### 绘制点、绘制线 + +**Step 3. 注册鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下示例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +- Example: + ```Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}) + ``` + +**Step 4. 坐标转换**: +    鼠标事件执行方法中的形参包含当前鼠标点击的一些信息,可以获取其中的 position 位置信息用于图形绘制,其中鼠标点击获取到的 position 位置坐标为屏幕坐标,需要将屏幕坐标转换为经纬度坐标进行图形绘制; + +- Example: + ```Javascript + //屏幕坐标转世界坐标 + var cartesian = webGlobe.viewer.getCartesian3Position(movement.position, cartesian); + //世界坐标转地理坐标(弧度) + var cartographic = Cesium.Cartographic.fromCartesian(cartesian); + //地理坐标(弧度)转经纬度坐标:纬度、经度、高程 + var lng = Cesium.Math.toDegrees(cartographic.longitude); + var lat = Cesium.Math.toDegrees(cartographic.latitude); + var height = cartographic.height; + ``` + +**Step 5. 添加点、线实体**: +    调用几何绘制控制 `CesiumZondy.Manager.EntityController` 的 `appendPoint()` 方法/ `appendLine()` 方法传入相关经纬度坐标信息以及其他的信息添加图形,完成此步后可在三维场景中看到添加的点/线等图形; + +- Example: + + ```Javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer + }); + //添加点:经度、纬度、高程、名称、像素大小、颜色、外边线颜色、边线宽度 + entityController.appendPoint(lng, lat, height, '点', 10, new Cesium.Color(1, 0, 0, 1), new Cesium.Color(1, 1, 0, 1), 2); + ``` + + ```Javascript + //添加线:名称、点数组、线宽、线颜色、是否贴地形 + entityController.appendLine('不贴地线', allPoint, 2, new Cesium.Color(1, 0, 0, 0.8), true, {}); + ``` + +**Step 6. 注销鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `unRegisterMouseEvent()` 方法注销已添加的鼠标事件,完成此步后,点击鼠标不再触发鼠标事件。 + +- Example: + ```Javascript + //注销鼠标事件 + webGlobe.unRegisterMouseEvent('LEFT_CLICK'); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +##### 【method】 `registerMouseEvent(eventType, callbackFun, handler)` 注册鼠标事件方法 + +- `registerMouseEvent` 方法主要参数 + +| 参数名 | 类型 | 说明 | +| ----------- | -------- | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | +| callbackFun | function | 回调函数 | +| handler | Object | 回调函数 | + +##### 【method】 `unRegisterMouseEvent(eventType)` 注销鼠标事件方法 + +| 参数名 | 类型 | 说明 | +| --------- | ------ | ----------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型 LEFT_CLICK RIGHT_CLICK MOUSE_MOVE LEFT_DOUBLE_CLICK RIGHT_DOUBLE_CLICK WHEEL(鼠标滚轮) | + +##### 【method】 `appendPoint(lat, lon, height, pName, pPixelSize, pColor, pOutlineColor, pOutlineWidth, description)` 添加点方法 + +| 参数名 | 类型 | 说明 | +| ------------- | ------ | ---------------------------------- | +| lat | Number | 经度 | +| lon | Number | 纬度 | +| height | Number | 高程 | +| pName | String | 名称 | +| pPixelSize | Number | 像素大小 | +| pColor | Color | (new Cesium.Color(1, 0, 0, 1))颜色 | +| pOutlineColor | Color | 外边线颜色 | +| pOutlineWidth | Number | 边线宽度 | +| description | String | 属性描述信息 | + +##### 【method】`appendLine(name, pointsArray, width, color, isGround, options)`:根据给定点画线 + +| 参数名 | 类 型 | 说 明 | +| ----------- | ------- | ---------------------------------- | +| name | String | 名称 | +| pointsArray | Array | 点数组 | +| width | Number | 线的宽度 | +| color | Color | 线颜色(默认不指定时为蓝色) | +| isGround | Boolean | 设置为是否贴地(可识别带高度的坐标) | +| options | Object | 包含的附加属性 | + +#### 2. `Cesium.DrawPolygonTool(webGlobe.viewer, getDrawResult)` : 交互式绘制区工具 + +| 参数名 | 类型 | 说 明 | +| ------------- | -------- | -------- | +| viewer | View | 视图 | +| getDrawResult | function | 回调函数 | + +##### 【method】 `activeTool()` 激活交互式绘制区工具方法 diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-label.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-label.md new file mode 100644 index 000000000..ce4600626 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-label.md @@ -0,0 +1,102 @@ +## 添加文本 + +### 示例功能 + +    本示例实现在三维场景中添加文本标注。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.LabelLayer`类提供的`appendLabel()`方法,实现文本标注的添加。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 添加文本标注**: +    添加文本标注:首先构造`CesiumZondy.Manager.LabelLayer`注记图层管理对象,调用`appendLabel()`方法可实现文本标注的添加,需要设置基本必要信息,如:文本标注的经纬度、高程、文本内容;还可设置各项样式信息:字体、颜色、样式、标签位置等。 + +- Example: + + ```javascript + //构造注记图层管理对象 + var labelLayer = new CesiumZondy.Manager.LabelLayer({ + viewer: webGlobe.viewer, + }) + //添加文字标注 + label = labelLayer.appendLabel( + //经度、纬度、高程 + 114.3992, + 30.5062, + 0, + //文本内容 + '光谷广场', + { + //文字大小、字体样式 + font: '20pt 楷体', + //文本颜色 + fillColor: Cesium.Color.YELLOW, + //文本样式,FILL:只填充;OUTLINE:只显示轮廓;FILL_AND_OUTLINE:填充颜色并显示轮廓 + style: Cesium.LabelStyle.FILL_AND_OUTLINE, + //边线颜色 + outlineColor: Cesium.Color.RED, + //边线宽度 + outlineWidth: 2, + //文本垂直方向与坐标点的相对位置:LEFT、CENTER、RIGHT + verticalOrigin: Cesium.VerticalOrigin.CENTER, + //文本水平方向与坐标点的相对位置:LEFT、CENTER、RIGHT + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + } + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【注记图层管理类】`CesiumZondy.Manager.LabelLayer` + +##### 【method】`appendLabel(lat, lon, height, lText, optionsParam) → {Entity}`:添加文字标签,返回标签对象(Entity) + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| lat | Number | 经度 | +| lon | Number | 纬度 | +| height | Number | 高程 | +| lText | String | 标签内容 | +| optionsParam | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ---------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------- | +| font | String | '14pt monospace' | (可选)字体 | +| fillColor | Color | Cesium.Color.WHITE | (可选)字体的填充色 | +| outlineColor | Color | Cesium.Color.WHITE | (可选)字体的填充色 | +| style | LabelStyle | Cesium.LabelStyle.FILL_AND_OUTLINE | (可选)样式 | +| outlineWidth | Number | 1 | (可选)外边线宽度 | +| heightReference | Number | Cesium.HeightReference.NONE | (可选)外边线宽度 | +| verticalOrigin | VerticalOrigin | Cesium.VerticalOrigin.CENTER | (可选)标签位置 Cesium.VerticalOrigin.Cesium.VerticalOrigin.LEFT Cesium.VerticalOrigin.RIGHT | +| horizontalOrigin | HorizontalOrigin | Cesium.HorizontalOrigin.CENTER | (可选)标签位置 Cesium.HorizontalOrigin.Cesium.HorizontalOrigin.LEFT Cesium.HorizontalOrigin.RIGHT | +| description | String | | (可选)属性描述 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-labelicon.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-labelicon.md new file mode 100644 index 000000000..989f29008 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-labelicon.md @@ -0,0 +1,162 @@ +## 添加图文标注 + +### 示例功能 + +    本示例实现在三维场景中添加图文标注,与单纯的文本、图片标注不同的是,图文标注可同时包括图片和文字信息。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.LabelLayer`类提供的`appendLabelIconComm()`方法、`appendLabelIcon()`方法,实现图文标注的添加。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 添加图文标注**: +    添加图文标注:构造`CesiumZondy.Manager.LabelLayer`注记图层管理对象,构造必要的位置、图片、文本对象等参数信息,可调用以下两种方法实现图文标注的添加,在实际应用场景中可根据具体应用需求选择调用不同的方法。 + +(1)调用`appendLabelIconComm()`方法,设置各项基本信息,可实现图文标注的添加; + +- Example: + ```javascript + //构造注记图层管理对象 + var labelLayer = new CesiumZondy.Manager.LabelLayer({ + viewer: webGlobe.viewer, + }) + //方法一 + var labelIcon = labelLayer.appendLabelIcon( + //文本内容 + '湖北省老年大学', + //经度、纬度、高度 + 114.3639, + 30.5603, + 0, + //文字大小、字体 + '16pt 宋体', + //文字颜色 + new Cesium.Color(0 / 255, 0 / 255, 0 / 255, 0.8), + //图片地址 + './static/data/picture/icon.png', + //图片宽度、高度 + 50, + 50, + //最远显示距离:相机到注记的距离大于该值 注记不显示 + 10000000, + //最近显示距离:相机到注记的距离小于该值 注记不显示 + 1, + //图片位置:'center','top','bottom' + 'center' + ) + ``` + +(2)调用`appendLabelIcon()`方法,传入构造的位置、图片、文本对象等参数信息,同样也可实现图文标注的添加,此方法对接 Cesium 原生属性,可实现更加丰富的效果; + +- Example: + ```javascript + //位置(x、y、z) + var position = Cesium.Cartesian3.fromDegrees(114.36517991431259, 30.56206615740468, 10) + //图片对象 + var billboardGraphics = new Cesium.BillboardGraphics({ + //图片地址 + image: './static/data/picture/icon.png', + //图片宽度 + width: 64, + //图片高度 + height: 64, + //随远近缩放 + pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1.5e5, 3.0, 1.5e7, 0.5), + //随远近隐藏 + translucencyByDistance: new Cesium.NearFarScalar(1.5e5, 1.0, 1.5e7, 0.0), + }) + //文本对象 + var labelGraphics = new Cesium.LabelGraphics({ + //文本 + text: '湖北省博物馆', + //文字大小、字体 + font: '20pt 宋体', + //文字颜色 + fillColor: Cesium.Color.BLACK, + //文本垂直位置 + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + //文本水平位置 + horizontalOrigin: Cesium.HorizontalOrigin.BOTTOM, + //偏移量 + pixelOffset: new Cesium.Cartesian2(0.0, -64 / 4), //x,y方向偏移 相对于屏幕 + //随远近缩放 + pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1.5e2, 3.0, 1.5e7, 0.5), + //随远近隐藏 + translucencyByDistance: new Cesium.NearFarScalar(1.5e5, 1.0, 1.5e7, 0.0), + }) + //添加图标注记(文字内容、描述、位置、图片对象、文本对象) + labelIcon1 = labelLayer.appendLabelIconComm('湖北省博物馆', '坐落于湖北省武汉市武昌区东湖风景区', position, billboardGraphics, labelGraphics) + ``` + +    其中,位置对象需使用 Cesium.Cartesian3 类来构造,图片对象需由 Cesium.BillboardGraphics 构造,文本对象需由 Cesium.LabelGraphics 构造,这三个类都属于 Cesium 原生提供的类,具体用法可参考其 API 文档。 + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ----------------- | +| elementId | Element \| String | 放置视图的div的id | +| options | Object | (可选)附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | -------- | ------------------------------------------------------------ | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建VR按钮 | + +#### 2.【注记图层管理类】`CesiumZondy.Manager.LabelLayer` + +##### 【method】`appendLabelIcon(text, lon, lat, height, font, fillColor, iconUrl, iconWidth, iconHeight, farDist, nearDist, txtPos, attribute) → {Entity}`:添加图标注记 + +| 参数名 | 类 型 | 说 明 | +| ----------- | ------ | ------------------------------------------------ | +| text | String | 注记文字内容 | +| lon | Number | 经度 | +| lat | Number | 纬度 | +| height | Number | 高程 | +| font | String | 字体,这里将字体和大小放在一起 eg:'14pt 楷体' | +| fillColor | Color | 字体的填充色 | +| iconUrl | String | 图标路径 | +| iconWidth | Number | 图标宽度 | +| iconHeight | Number | 图标高度 | +| farDist | Number | 最远显示距离,相机到注记的距离大于该值 注记不显示 | +| nearDist | Number | 最近显示距离,相机到注记的距离小于该值 注记不显示 | +| txtPosParam | String | 图片位置 'center','top','bottom' | +| attribute | String | 其他属性信息 | + +##### 【method】`appendLabelIconComm(name, description, position, billboardGraphics, labelGraphics)`:添加图标注记,通用接口 + +- `appendLabelIconComm`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ----------------- | ----------------- | ------------ | +| name | String | 注记文字内容 | +| description | String | 描述 | +| position | Cartesian3 | 位置 | +| billboardGraphics | BillboardGraphics | 图片对象 | +| labelGraphics | LabelGraphics | 文本对象 | + +#### 2.【三维笛卡尔点】`Cartesian3` + +##### 【method】`new Cartesian3(x, y, z)`:构造函数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------ | ------ | ------ | -------------- | +| x | Number | 0.0 | (可选)X 坐标 | +| y | Number | 0.0 | (可选)Y 坐标 | +| z | Number | 0.0 | (可选)Z 坐标 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-line.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-line.md new file mode 100644 index 000000000..3e979b9a2 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-line.md @@ -0,0 +1,83 @@ +## 绘制立体线 + +### 示例功能 + +    本示例实现在三维场景中绘制立体线实体。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendLine()`方法,实现立体线的添加绘制。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 绘制立体实线**: +    绘制立体线实体:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,调用`appendLine()`方法,设置:线名称、线坐标点数组、线宽、线颜色、是否识别带高度的坐标(如果为 true 即代表立体线)、是否贴地形等信息,即可实现立体线实体的添加绘制。 + +- Example: + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //点数组 + var pointArr = [114.3984603010489, 30.506836857208143, 90, 114.39820581466965, 30.50638419163618, 0, 114.39817448017338, 30.505889144282214, 50] + //绘制立体线实体 + var line = entityController.appendLine( + //名称 + '立体线', + //点数组 + pointArr, + //线宽 + 2, + //线颜色 + new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), + //是否识别带高度的坐标(如果为true即代表立体线) + true, + //是否贴地形 + false, + //附加属性 + {} + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### 【method】`appendLine(name, pointsArray, width, color, isHeight, clampToGround, options) → {Entity}`:绘制线,可绘制贴地形线 + +| 参数名 | 类 型 | 说 明 | +| ------------- | ------- | ------------------------ | +| name | String | 名称 | +| pointsArray | Array | 点数组 | +| width | Number | 线的宽度 | +| color | Color | 线颜色(默认为蓝色) | +| isHeight | Boolean | 设置是否识别带高度的坐标 | +| clampToGround | Boolean | 设置是否贴地形 | +| options | Object | 包含的附加属性 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-militarysymbol.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-militarysymbol.md new file mode 100644 index 000000000..aef1429cc --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-militarysymbol.md @@ -0,0 +1,47 @@ +## 军标 + +### 示例功能 + +    此功能用于计算绘制线的长度,可以应用于各个场景,满足用户在使用时进行两点之间距离测量,多点之间距离测量等业务需求。 + +### 示例实现: + +    本示例需要使用 【include-cesium-local.js】 开发库实现。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 加载数据**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据。 + +- Example: + ```Javascript + //加载数据 + var tileset = webGlobe.append('http://develop.smaryun.com:6163/igs/rest/g3d/M3D', {}); + ``` + +### 关键接口 + +### 【method】 `showPosition(elementId, options)` : 显示经纬度 高程 视角高度 + +- `append` 方法主要参数 + +- `options` 属性说明 diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-picsymbol.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-picsymbol.md new file mode 100644 index 000000000..1d2ce9e9f --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-picsymbol.md @@ -0,0 +1,97 @@ +## 添加图文标注 + +### 示例功能 + +本示例实现在三维场景中添加图文标注。 + +### 示例实现 + +本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.LabelLayer`类提供的`appendLabelIconComm()`方法,实现图文标注的添加。 + +> 开发库使用请参见*首页-概述-原生JS调用*内容。 + +### 实现步骤 + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维WebGL的功能; + +2. 创建三维视图Div容器,构造三维场景控件WebSceneControl,构造并设置鼠标位置信息显示控件,加载Google地图作为底图显示; + +3. 添加图文标注:首先构造`CesiumZondy.Manager.LabelLayer`注记图层管理对象,构造位置、图片、文本对象,这三部分内容是图文标注必备的三种信息,构造后作为参数调用`appendLabelIconComm()`方法,即可实现图文标注的添加; + + ``` javascript + //位置(x、y、z) + var position = Cesium.Cartesian3.fromDegrees(114.36517991431259, 30.56206615740468, 10); + //图片对象 + var billboardGraphics = new Cesium.BillboardGraphics({ + image: "./static/data/picture/icon.png", + width: 64, + height: 64, + //随远近缩放 + pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1.5e5, 3.0, 1.5e7, 0.5), + //随远近隐藏 + translucencyByDistance: new Cesium.NearFarScalar(1.5e5, 1.0, 1.5e7, 0.0), + }); + //文本对象 + var labelGraphics = new Cesium.LabelGraphics({ + //文本 + text: "湖北省博物馆", + //文字大小、字体 + font: "20pt 宋体", + //文字颜色 + fillColor: Cesium.Color.BLACK, + //文本垂直位置 + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + //文本水平位置 + horizontalOrigin: Cesium.HorizontalOrigin.BOTTOM, + //随远近缩放 + pixelOffset: new Cesium.Cartesian2(0.0, -64 / 4), //x,y方向偏移 相对于屏幕 + pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1.5e2, 3.0, 1.5e7, 0.5), + //随远近隐藏 + translucencyByDistance: new Cesium.NearFarScalar(1.5e5, 1.0, 1.5e7, 0.0) + }); + + //构造注记图层管理对象 + var labelLayer = new CesiumZondy.Manager.LabelLayer({ + viewer: webGlobe.viewer + }); + //添加图标注记(文字内容、描述、位置、图片对象、文本对象) + var labelIcon = labelLayer.appendLabelIconComm( + "湖北省博物馆", + "坐落于湖北省武汉市武昌区东湖风景区", + position, + billboardGraphics, + labelGraphics + ); + ``` + + 其中,位置对象需使用Cesium.Cartesian3类来构造,图片对象需由Cesium.BillboardGraphics构造,文本对象需由Cesium.LabelGraphics构造,这三个类都属于Cesium原生提供的类,具体用法可参考API文档。 + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +#### 2.【注记图层管理类】CesiumZondy.Manager.LabelLayer + +##### (1)`appendLabelIconComm(name, description, position, billboardGraphics, labelGraphics)`:添加图标注记 + +> `appendLabelIconComm`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|name|String|注记文字内容| +|description|String|描述| +|position|Cartesian3|位置| +|billboardGraphics|BillboardGraphics|图片对象| +|labelGraphics|LabelGraphics|文本对象| + +#### 2.【三维笛卡尔点】Cartesian3 + +##### (1)`new Cartesian3(x, y, z)`:构造函数 + +> `Cartesian3`构造函数主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|x|Number|0.0|(可选)X 坐标| +|y|Number|0.0|(可选)Y 坐标| +|z|Number|0.0|(可选)Z 坐标| diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-picture.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-picture.md new file mode 100644 index 000000000..62bd67532 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-picture.md @@ -0,0 +1,53 @@ +## 添加图片 + +### 示例功能 + +本示例实现在三维场景中添加图片。 + +### 示例实现 + +本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.LayerManager`类提供的`appendImageByUrl()`方法,实现图片的添加。 + +> 开发库使用请参见*首页-概述-原生JS调用*内容。 + +### 实现步骤 + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维WebGL的功能; + +2. 创建三维视图Div容器,构造三维场景控件WebSceneControl,构造并设置鼠标位置信息显示控件,加载Google地图作为底图显示; + +3. 添加图片:首先构造`CesiumZondy.Manager.LayerManager`图层管理对象,然后调用`appendImageByUrl()`方法,需要传入图片的地址(可为本地图片地址,也可以为网络图片的URL),以及图片显示的坐标范围; + + ``` javascript + //构造注记图层管理对象 + var layerManager = new CesiumZondy.Manager.LayerManager({ + viewer: webGlobe.viewer + }); + + //添加图片 + var image = layerManager.appendImageByUrl( + //本地图片地址 + './static/data/picture/world.jpg', + //图片显示范围(西经、南纬、东经、北纬) + -180.0, -90, 180.0, 90 + ); + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +#### 2.【图层管理类】CesiumZondy.Manager.LayerManager + +##### (1)`appendImageByUrl(url, west, south, east, north)`:通过地址添加图片,包括本地图片和网络图片 + +> `appendImageByUrl`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|url|String|图片地址| +|west|float|西经| +|south|float|南纬| +|east|float|东经| +|north|float|北纬| +|options|Object|扩展参数| diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-point.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-point.md new file mode 100644 index 000000000..180e7c7d2 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-point.md @@ -0,0 +1,98 @@ +## 绘制点 + +### 示例功能 + +    本示例实现在三维场景中绘制点实体。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendPoint()`或`appendPointComm()`方法,实现点实体的添加绘制。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 绘制点实体**: +    绘制点实体:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,然后调用`appendPoint()`方法,设置点实体所在经纬度、高程,以及名称、像素大小、颜色、边线颜色、边线宽度信息,即可添加绘制点实体。 + +- Example: + + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //添加点实体:经度、纬度、高程、名称、大小(像素单位)、颜色、外边线颜色、边线宽度 + var point = entityController.appendPoint(114.30252625376454, 30.544631482624357, 20, '黄鹤楼', 12, new Cesium.Color(255 / 255, 255 / 255, 0 / 255, 1), new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), 2) + + //方法二:添加点通用方法,对接Cesium原生,可设置更多属性 + point4 = entityController.appendPointComm( + //经度、纬度、高程 + 114.28478689925817, + 30.555691346035022, + 0, + //名称、描述 + '晴川阁', + '晴川阁景点', + //附加属性:像素大小、颜色、外边线颜色、边线宽度 + { + pixelSize: 12, + color: new Cesium.Color(255 / 255, 255 / 255, 0 / 255, 1), + outlineColor: new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), + outlineWidth: 2, + } + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### 【method】`appendPoint(lat, lon, height, name, pixelSize, color, outlineColor, outlineWidth, description) → {Entity}`:添加点 + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | ------------------------------- | +| lat | Number | 经度 | +| lon | Number | 纬度 | +| height | Number | 高程 | +| name | String | 名称 | +| pixelSize | Number | 像素大小 | +| color | Color | 颜色(new Cesium.Color(1,0,0,1)) | +| outlineColor | Color | 外边线颜色 | +| outlineWidth | Number | 边线宽度 | +| description | String | 属性描述信息 | + +##### 【method】`appendPointComm(lat, lon, height, name, description, options) → {Entity}`:添加点通用方法 + +| 参数名 | 类 型 | 说 明 | +| ----------- | ------ | ------------------- | +| lat | Number | 经度 | +| lon | Number | 纬度 | +| height | Number | 高程 | +| name | String | 名称 | +| description | String | 属性描述信息 | +| options | Object | entity 参数信息对象 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-polygon.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-polygon.md new file mode 100644 index 000000000..715aa9714 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-polygon.md @@ -0,0 +1,80 @@ +## 绘制立体区 + +### 示例功能 + +    本示例实现在三维场景中绘制立体区。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendGraphics()`方法,实现立体区的添加绘制;可通过`removeEntity(entity)`移除。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 绘制立体区**: +    绘制立体区:构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,根据坐标点、是否指定各点高度、颜色等信息构造区对象,然后调用`appendGraphics()`方法即可实现立体区的绘制。 + +- Example: + + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + + //构造区对象 + var polygon = { + name: '立体区', + polygon: { + //坐标点 + hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights([114.3992, 30.5062, 100, 114.39921899282697, 30.507118866456594, 0, 114.39817867190918, 30.505787946817524, 0, 114.40013927896888, 30.505694066567706, 0]), + //是否指定各点高度 + perPositionHeight: true, + //颜色 + material: new Cesium.Color(33 / 255, 150 / 255, 243 / 255, 0.5), + //轮廓线是否显示 + outline: true, + //轮廓线颜色 + outlineColor: Cesium.Color.BLACK, + }, + } + //绘制图形通用方法:对接Cesium原生特性 + var stericPolygon = entityController.appendGraphics(polygon) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### (1)`appendGraphics(options) → {Entity}`:添加图形 + +- `appendGraphics`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | -------------------------- | +| options | Object | 包含 entity 中相关选项设置 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-popup.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-popup.md new file mode 100644 index 000000000..4ee846c5f --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-popup.md @@ -0,0 +1,112 @@ +## 添加气泡弹窗 + +### 示例功能 + +    本示例实现在三维场景中添加 Popup 气泡弹窗。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.PopupController`类提供的`appendPopup()`方法,实现气泡弹窗的添加;可分别通过`removePopup()、clearPopups()、refreshPopups()`方法移除、更新 Popup 标注。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 添加气泡弹窗**: +    添加气泡弹窗:首先构造`CesiumZondy.Manager.PopupController`气泡弹窗控制对象,调用`appendPopup()`方法,设置气泡容器的 id、显示的文字内容、气泡位置、像素位置偏移、以及 close 按钮点击的回调函数,在此设置点击 close 按钮时移除气泡,添加完气泡之后,调用`refreshPopups()`方法刷新使气泡能够随地图操作不断更新位置。 + +- Example: + + ```javascript + //构造气泡弹窗控制对象 + var popupController = new CesiumZondy.Manager.PopupController({ + viewer: webGlobe.viewer, + }) + + //添加PopUP + var popup = popupController.appendPopup( + //容器div的id + 'popup', + //文本 + '
黄鹤楼
位于湖北省武汉市长江南岸的武昌蛇山之巅', + //坐标位置 + Cesium.Cartesian3.fromDegrees(114.30252372618706, 30.544641875459394), + //偏移量 + [0, 0], + //弹窗的关闭按钮点击回调函数 + function() { + popupController.removePopup(popup, 'popup', {}) + } + ) + //刷新 + popupController.refreshPopups() + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ----------------- | +| elementId | Element \| String | 放置视图的div的id | +| options | Object | (可选)附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | -------- | ------------------------------------------------------------ | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建VR按钮 | + +#### 2.【气泡弹窗控制类】`CesiumZondy.Manager.PopupController` + +##### 【method】`appendPopup(containID, content, position, offset, closeCallback, options)`:添加 PopUP,需考虑相机的高度对 PopUp 大小、透明度、偏移值的影响 + +- `appendPopUp`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------------- | ---------- | ------------------------------------------- | +| containID | String | 容器的 div id(注意该容器不能放在球容器中) | +| content | String | popup 的内容,可以为带 html 标签的字符串 | +| posion | Cartesian3 | popup 的位置(地图单位) | +| offset | Array | [x,y]偏移值,像素单位 | +| closeCallback | function | popup 的 close 按钮点击回调函数 | +| options | Object | 附加属性 | + +- `options`参数主要属性 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| -------------------------- | ------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------- | +| scaleByDistance | Number | cameraHeight | (可选)options.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0) 基于距摄像机距离指定广告牌比例 | +| translucencyByDistance | Number | cameraHeight | (可选)options.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0) 基于距摄像机的距离来指定广告牌的透明度 | +| pixelOffsetScaleByDistance | Number | cameraHeight | (可选)options.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1.5e2, 0.0, 8.0e6, 10.0) 基于距摄像机的距离指定广告牌像素偏移 | + +##### 【method】`removePopup(popID, popupOwner, options)`:移除某个 PopUP + +- `removePopup`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ---------- | ------ | --------------------------------- | +| popID | String | popup 的 div id 添加 popup 返回值 | +| popupOwner | Object | popup 所有者 | +| options | Object | 扩展参数 | + +- `options`参数主要属性 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| --------- | ------- | ------ | ------------ | +| removeDiv | Boolean | false | 是否移除 div | + +##### 【method】`refreshPopups()`:刷新,Popup 更新事件 + +##### 【method】`clearPopups()`:移除所有的 PopUP diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-stretchpolygon.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-stretchpolygon.md new file mode 100644 index 000000000..7b46a0e7c --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-stretchpolygon.md @@ -0,0 +1,85 @@ +## 绘制拉伸区 + +### 示例功能 + +    本示例实现在三维场景中绘制拉伸区。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendPolygon()`方法,实现拉伸区的添加绘制;可通过`removeEntity(entity)`移除。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 绘制拉伸区**: +    绘制拉伸区:构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,调用`appendPolygon()`方法,设置不同信息可绘制不同类型的区: + +(1)构造二维坐标点数组,设置信息:区名称、坐标点数组、区填充颜色、外框线颜色,并设置“是否指定各点高度”参数为 false,即可实现平面区的添加绘制。 + +- Example: + + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //点数组(二维点) + var pointArr = [114.40993798035257, 30.47917084653805, 114.4093239347542, 30.473893768825484, 114.41091821047152, 30.473773818562865, 114.41146570646127, 30.479026171029727, 114.40993798035257, 30.47917084653805] + //绘制平面区(名称、点数组、区填充色、外框线颜色、是否指定各点高度) + var polygon = entityController.appendPolygon('三维区', pointArr, new Cesium.Color(255 / 255, 255 / 255, 0 / 255, 0.5), new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), false) + ``` + +(2)构造三维坐标点数组,设置信息:区名称、坐标点数组、区填充颜色、外框线颜色,并设置“是否指定各点高度”参数为 true,即可实现拉伸区的添加绘制。 + +- Example: + ```javascript + //点数组(三维点) + var pointArr = [114.40328987990017, 30.479789358042233, 100, 114.40255973680176, 30.473707285934392, 100, 114.40905754990294, 30.473938016458956, 100, 114.40971219770601, 30.479196348500707, 100, 114.40328987990017, 30.479789358042233, 100] + //绘制立体拉伸区(名称、点数组、区填充色、外框线颜色、是否传入三维点、附加属性) + var polygon = entityController.appendPolygon('三维区', pointArr, fillColor, outLineColor, true, { + //多边形相对于地球表面的高度 + extrudedHeight: 50, + //是否指定各点高度 + perPositionHeight: true, + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### (1)`appendPolygon(name, points, fillColorParam, outlineColorParam, options) → {Entity}`:画多边形区,返回绘制的多边形区对象 Entity + +| 参数名 | 类 型 | 说 明 | +| ----------------- | ------- | ----------------------------------------- | +| name | String | 名称 | +| points | Array | 点数组(顺序是逆时针) | +| fillColorParam | Color | 区填充色 默认白色半透明 | +| outlineColorParam | Color | 外框线颜色 默认红色半透明 | +| threeDimension | Boolean | 是否传入三维点 传入三维点则按照三维点解析 | +| options | Object | 可选扩展参数 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-symbol.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-symbol.md new file mode 100644 index 000000000..42cd78c28 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-symbol.md @@ -0,0 +1,65 @@ +## 添加标注 + +### 示例功能 + +本示例实现在三维场景中添加文本标注。 + +### 示例实现 + +本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`appendLabel()`方法,实现文本标注的添加。 + +> 开发库使用请参见*首页-概述-原生JS调用*内容。 + +### 实现步骤 + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库; + +2. 创建三维视图容器,构造三维场景控件,构造并设置鼠标位置显示控件,加载Google地图作为底图显示; + +3. 添加文本标注:调用`appendLabel()`方法可实现文本标注的添加,需要设置基本必要信息,如:文本标注的经纬度、高程、文本内容;还可设置样式信息,如:字体、颜色、样式、标签位置等信息。移除时可调用`removeEntity()`方法实现。 + + ``` javascript + //添加文字标注 + webGlobe.appendLabel(114.2, 31, 0, '这是一个标注', { + //字体 + font: '14pt 楷体', + //文本填充颜色 + fillColor: Cesium.Color.RED, + //样式 + style: Cesium.LabelStyle.FILL_AND_OUTLINE, + //标签位置 + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + //像素位移 + pixelOffset: new Cesium.Cartesian2(0, -9) + }); + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +##### (1)`appendLabel(lat, lon, height, lText, options)`:添加文字标签 + +> `appendLabel`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|lat|Number|经度| +|lon|Number|纬度| +|height|Number|高程| +|lText|String|标签内容| +|options|Object|附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|font|String|'14pt monospace'|(可选)字体| +|fillColor|Color|Cesium.Color.WHITE|(可选)字体的填充色| +|outlineColor|Color|Cesium.Color.WHITE|(可选)字体的填充色| +|style|LabelStyle|Cesium.LabelStyle.FILL_AND_OUTLINE|(可选)样式| +|outlineWidth|Number|1|(可选)外边线宽度| +|heightReference|Number|Cesium.HeightReference.NONE|(可选)外边线宽度| +|verticalOrigin|VerticalOrigin|Cesium.VerticalOrigin.CENTER|(可选)标签位置 Cesium.VerticalOrigin.Cesium.VerticalOrigin.LEFT Cesium.VerticalOrigin.RIGHT| +|horizontalOrigin|HorizontalOrigin|Cesium.HorizontalOrigin.CENTER|(可选)标签位置 Cesium.HorizontalOrigin.Cesium.HorizontalOrigin.LEFT Cesium.HorizontalOrigin.RIGHT| +|description|String||(可选)属性描述| \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-terrainline.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-terrainline.md new file mode 100644 index 000000000..a7d868848 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-terrainline.md @@ -0,0 +1,97 @@ +## 绘制贴地形线 + +### 示例功能 + +    本示例实现在三维场景中绘制贴地形模式的线实体。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendLine()`方法,实现贴地形线的添加绘制;可通过`removeEntity(entity)`移除。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 加载地形数据**: +    加载地形数据:通过`TerrainLayer`类加载地形数据; + +- Example: + ```javascript + //构造地形层管理对象(视图) + var terrainLayer = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer, + }) + //添加三维地图文档:地形数据 + terrainLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/terrain', {}) + ``` + +**Step 4. 绘制贴地形线**: +    绘制贴地形线:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,然后调用`appendLine()`方法,设置信息:线名称、坐标点数组、线宽、线颜色、是否识别带高度的坐标、是否贴地形等信息,注意绘制贴地形线需设置贴地形参数为 true,并只需传入二维坐标点,即可实现贴地形线的添加绘制。 + +- Example: + + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //坐标位置 + var pointArr = [120.7642, 23.1537, 120.7688, 23.144, 120.7729, 23.1356, 120.7776, 23.1259] + //绘制贴地形线 + terrainLine = entityController.appendLine( + //名称 + '贴地形线', + //点数组 + pointArr, + //线宽 + 3, + //线颜色 + new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), + //是否识别带高度的坐标 + false, + //是否贴地形 + true, + //附加属性 + {} + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ----------------- | +| elementId | Element \| String | 放置视图的div的id | +| options | Object | (可选)附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | -------- | ------------------------------------------------------------ | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建VR按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### 【method】`appendLine(name, pointsArray, width, color, isHeight, clampToGround, options) → {Entity}`:绘制线,可绘制贴地形线 + +| 参数名 | 类 型 | 说 明 | +| ------------- | ------- | ------------------------ | +| name | String | 名称 | +| pointsArray | Array | 点数组 | +| width | Number | 线的宽度 | +| color | Color | 线颜色(默认为蓝色) | +| isHeight | Boolean | 设置是否识别带高度的坐标 | +| clampToGround | Boolean | 设置是否贴地形 | +| options | Object | 包含的附加属性 | diff --git a/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-terrainpolygon.md b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-terrainpolygon.md new file mode 100644 index 000000000..0ec550327 --- /dev/null +++ b/website/public/static/demo/military/markdown/drawGraphic/drawGraphic-terrainpolygon.md @@ -0,0 +1,87 @@ +## 绘制贴地形区 + +### 示例功能 + +    本示例实现在三维场景中绘制贴地形模式的区实体。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Manager.EntityController`类提供的`appendGraphics()`方法,实现贴地形区的添加绘制;可通过`removePrimitive(entity)`移除。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 加载地形数据**: +    加载地形数据:通过`TerrainLayer`类加载地形数据; + +- Example: + ```javascript + //构造地形层管理对象(视图) + var terrainLayer = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer, + }) + //添加三维地图文档:地形数据 + terrainLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/terrain', {}) + ``` + +**Step 4. 绘制贴地形线**: +    绘制贴地形线:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,然后根据坐标点、颜色、分类类型等信息构造区图形对象,然后调用`appendGraphics()`方法,传入构造的区图形对象即可实现贴地形区的添加绘制。注意分类类型需设置为`Cesium.ClassificationType.TERRAIN`。 + +- Example: + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //三维坐标点数组 + let points = [121.12838249665901, 23.828496638766055, 2816.2788, 121.150053294749, 23.82435802607214, 2584.9714, 121.14258923767652, 23.8125039217518, 2197.3468, 121.11461042047392, 23.809568499354498, 2405.1721] + //构造区对象 + let polygon = { + //区 + polygon: { + //坐标 + hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(points), + //颜色 + material: Cesium.Color.BLUE.withAlpha(0.5), + //分类类型:地形类型 + classificationType: Cesium.ClassificationType.TERRAIN, + }, + } + //绘制图形通用方法:对接Cesium原生特性 + terrainPolygon = entityController.appendGraphics(polygon) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【几何绘制控制类】`CesiumZondy.Manager.EntityController` + +##### 【method】`appendGraphics(options) → {Entity}`:添加图形 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | -------------------------- | +| options | Object | 包含 entity 中相关选项设置 | diff --git a/website/public/static/demo/military/markdown/m3d/m3d-analysis.md b/website/public/static/demo/military/markdown/m3d/m3d-analysis.md new file mode 100644 index 000000000..283d0e5fe --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-analysis.md @@ -0,0 +1,271 @@ +## 加载 M3D 地质体模型 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 地质体模型,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为地质体模型数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库; + +**Step 2. 创建布局**: +    创建布局:创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    构造三维场景控件:实例化 WebSceneControl 对象; + +- Example: + ```javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }) + ``` + +**Step 4. 加载数据**: +    加载数据:调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,可传入相关配置参数; + +- Example: + ```javascript + //添加地图文档 + webGlobe.append('http://192.168.10.186:6163/igs/rest/g3d/福田地质体', {}) + ``` + +**Step 5. 鼠标位置显示控件**: +    鼠标位置显示控件:创建`id="coordinate_location"`的 div 作为容器,用于显示鼠标当前位置的经纬度、高程、视角高度信息;然后调用`showPosition()`方法为三维场景控件设置鼠标位置显示控件。 + +- Example: + ```javascript + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location') + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +##### 【method】`append(url, options, 代理)`:添加地图文档 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------------ | -------- | +| url | String | 文档地址 | +| options | Object | 附加属性 | +| 代理 | DefaultProxy | 代理 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------- | ------- | -------- | --------------------- | +| autoReset | Boolean | true | optional 是否自动定位 | +| synchronous | Boolean | true | optional 是否异步请求 | +| loaded | Boolean | function | optional 回调函数 | + +##### 【method】`showPosition(elementId, options)`:显示经纬度 高程 视角高度 + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ------------------ | +| elementId | Element \| String | 要显示的 div 的 id | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------------ | ------- | ------ | ---------------------------------------- | +| showHpr | Boolean | false | (可选) | +| showSelectTileInfo | Boolean | false | (可选)显示当前鼠标所在位置拾取到的级别 | +| showViewLevelInfo | Boolean | false | (可选)显示视图级别 | + +## M3D 模型示例 + +- M3D 的加载代码相对比较简单,如下所示 + +- Example: + ```javascript + m3dlayer = webGlobe.append('http://192.168.10.186:6163/igs/rest/g3d/福田钻孔', {}) + ``` + +## 地下模式 + +    地下模式的核心是`关闭天空盒`以及改变透明度以及调整光线角度,同时针对特定模型进行`沉降操作`已达到对应的地下效果。 + +- Example: + + ```javascript + webGlobe.viewer.imageryLayers.removeAll() + webGlobe.viewer.scene.skyAtmosphere.show = false + webGlobe.viewer.scene.globe.enableTransparent = true + webGlobe.viewer.scene.globe.baseColor = new Cesium.Color(1, 1, 1, 0.001) + ``` + +## 加载完毕后的回调 + +- Examle: + ```javascript + m3dlayer = webGlobe.append('http://192.168.10.186:6163/igs/rest/g3d/福田钻孔', { + loaded: function(layer) { + // 加载完毕后执行业务逻辑 + }, + }) + ``` + +## 图层的属性 + +M3D 的图层属性保持 Cesium 的 3DTIle 一致 +[Cesium3DTileset](https://cesium.com/docs/cesiumjs-ref-doc/Cesium3DTileset.html?classFilter=3Dtile) + +- Example: + + ```javascript + { + url: { type: String, required: true }, + show: { typs: Boolean, default: true }, + + /** + * @type Cesium.Matrix4 + * @default Matrix4.IDENTITY + */ + /* modelMatrix: { typs: Object, default: undefined }, */ + /** + * @type Cesium.ShadowMode + * @default ShadowMode.ENABLED + */ + /* shadows: { type: Object, default: undefined }, */ + + maximumScreenSpaceError: { type: Number, default: 16 }, + maximumMemoryUsage: { type: Number, default: 512 }, + + cullWithChildrenBounds: { typs: Boolean, default: true }, + cullRequestsWhileMoving: { typs: Boolean, default: true }, + cullRequestsWhileMovingMultiplier: { type: Number, default: 60.0 }, + + preloadWhenHidden: { typs: Boolean, default: false }, + preloadFlightDestinations: { typs: Boolean, default: true }, + preferLeaves: { typs: Boolean, default: false }, + + dynamicScreenSpaceError: { typs: Boolean, default: false }, + dynamicScreenSpaceErrorDensity: { type: Number, default: 0.00278 }, + dynamicScreenSpaceErrorFactor: { type: Number, default: 4.0 }, + dynamicScreenSpaceErrorHeightFalloff: { type: Number, default: 0.25 }, + + progressiveResolutionHeightFraction: { type: Number, default: 0.3 }, + + foveatedScreenSpaceError: { typs: Boolean, default: true }, + foveatedConeSize: { type: Number, default: 0.1 }, + foveatedMinimumScreenSpaceErrorRelaxation: { type: Number, default: 0.0 }, + /** + * @type Cesium3DTileset~foveatedInterpolationCallback + * @default Cesium.Math.lerp + */ + /* foveatedInterpolationCallback: { type: Function, default: undefined }, */ + foveatedTimeDelay: { type: Number, default: 0.2 }, + + skipLevelOfDetail: { typs: Boolean, default: false }, + baseScreenSpaceError: { type: Number, default: 1024 }, + skipScreenSpaceErrorFactor: { type: Number, default: 16 }, + skipLevels: { type: Number, default: 1 }, + + immediatelyLoadDesiredLevelOfDetail: { typs: Boolean, default: false }, + loadSiblings: { typs: Boolean, default: false }, + + /** + * @type Cesium.ClippingPlaneCollection + */ + /* clippingPlanes: { typs: Object, default: undefined }, */ + /** + * @type Cesium.ClassificationType + */ + /* classificationType: { typs: Object, default: undefined }, */ + /** + * @type Cesium.Ellipsoid + * @default Ellipsoid.WGS84 + */ + /* ellipsoid: { typs: Object, default: undefined }, */ + + /* pointCloudShading: { typs: Object, default: undefined }, */ + /** + * @type Cartesian2 + * @default new Cartesian2(1.0, 1.0) + */ + /* imageBasedLightingFactor: { typs: Object, default: undefined }, */ + /** + * @type Cartesian3 + */ + /* lightColor: { typs: Object, default: undefined }, */ + luminanceAtZenith: { type: Number, default: 0.2 }, + /** + * @type Array. + */ + /* sphericalHarmonicCoefficients: { type: Array, default: undefined }, */ + specularEnvironmentMaps: { type: String, default: "" }, + + debugHeatmapTilePropertyName: { type: String, default: "" }, + debugFreezeFrame: { typs: Boolean, default: false }, + debugColorizeTiles: { typs: Boolean, default: false }, + debugWireframe: { typs: Boolean, default: false }, + debugShowBoundingVolume: { typs: Boolean, default: false }, + debugShowContentBoundingVolume: { typs: Boolean, default: false }, + debugShowViewerRequestVolume: { typs: Boolean, default: false }, + debugShowGeometricError: { typs: Boolean, default: false }, + debugShowRenderingStatistics: { typs: Boolean, default: false }, + debugShowMemoryUsage: { typs: Boolean, default: false }, + debugShowUrl: { typs: Boolean, default: false } + } + ``` + +## 分层预览原理 + +1. 通过平台选取对应的某一层的地物的 id,并将其记录进一个数组中: + +- Example: + ```javascript + var layer1Ids = [1, 13, 23, 35, 46, 68] + var layer2Ids = [2, 14, 24, 27, 41, 57, 65, 70, 78] + var layer3Ids = [11, 15, 21, 33, 44, 66, 79] + var layer4Ids = [12, 22, 34, 45, 67, 80] + var layerIdList = [layer1Ids, layer2Ids, layer3Ids, layer4Ids] + ``` + +2. 当需要显示某一层的时候,通过自定义显示的方式来控制对应的图层开关 + +- Example: + ```javascript + var layerIds = layerIdList[index] + webGlobe.stopCustomDisplay(m3dlayer) + webGlobe.startCustomDisplay(m3dlayer, layerIds, { + colorBlendMode: Cesium.Cesium3DTileColorBlendMode.MIX, + color: new Cesium.Color(1, 1, 1, 0.0), + //applyForLayer: true, + negate: true, + }) + ``` + +> 本例的注记是通过一个高度注记 + 高度虚线共同组成实现的 diff --git a/website/public/static/demo/military/markdown/m3d/m3d-assise.md b/website/public/static/demo/military/markdown/m3d/m3d-assise.md new file mode 100644 index 000000000..cd9ec071a --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-assise.md @@ -0,0 +1,241 @@ +## 加载 M3D 地质体模型 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 地质体模型,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为地质体模型数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式;; + +**Step 3. 构造三维场景控件**: +    构造三维场景控件:实例化 WebSceneControl 对象; + +- Example: + ```javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }) + ``` + +**Step 4. 加载数据**: +    加载数据:调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,可传入相关配置参数; + +- Example: + ```javascript + //添加地图文档 + webGlobe.append('http://192.168.10.186:6163/igs/rest/g3d/福田地质体', {}) + ``` + +**Step 5. 鼠标位置显示控件**: +    鼠标位置显示控件:创建`id="coordinate_location"`的 div 作为容器,用于显示鼠标当前位置的经纬度、高程、视角高度信息;然后调用`showPosition()`方法为三维场景控件设置鼠标位置显示控件。 + +- Example: + ```javascript + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location') + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +##### 【method】`append(url, options, 代理)`:添加地图文档 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------------ | -------- | +| url | String | 文档地址 | +| options | Object | 附加属性 | +| 代理 | DefaultProxy | 代理 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------- | ------- | -------- | --------------------- | +| autoReset | Boolean | true | optional 是否自动定位 | +| synchronous | Boolean | true | optional 是否异步请求 | +| loaded | Boolean | function | optional 回调函数 | + +##### 【method】`showPosition(elementId, options)`:显示经纬度 高程 视角高度 + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ------------------ | +| elementId | Element \| String | 要显示的 div 的 id | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------------ | ------- | ------ | ---------------------------------------- | +| showHpr | Boolean | false | (可选) | +| showSelectTileInfo | Boolean | false | (可选)显示当前鼠标所在位置拾取到的级别 | +| showViewLevelInfo | Boolean | false | (可选)显示视图级别 | + +## M3D 模型示例 + +- M3D 的加载代码相对比较简单,如下所示 + +- Example: + ```javascript + m3dlayer = webGlobe.append('http://192.168.10.186:6163/igs/rest/g3d/福田钻孔', {}) + ``` + +## 地下模式 + +地下模式的核心是`关闭天空盒`以及改变透明度以及调整光线角度,同时针对特定模型进行`沉降操作`已达到对应的地下效果。 + +- Example: + ```javascript + webGlobe.viewer.imageryLayers.removeAll() + webGlobe.viewer.scene.skyAtmosphere.show = false + webGlobe.viewer.scene.globe.enableTransparent = true + webGlobe.viewer.scene.globe.baseColor = new Cesium.Color(1, 1, 1, 0.001) + ``` + +## 加载完毕后的回调 + +- Example: + ```javascript + m3dlayer = webGlobe.append('http://192.168.10.186:6163/igs/rest/g3d/福田钻孔', { + loaded: function(layer) { + // 加载完毕后执行业务逻辑 + }, + }) + ``` + +## 图层的属性 + +M3D 的图层属性保持 Cesium 的 3DTIle 一致 +[Cesium3DTileset](https://cesium.com/docs/cesiumjs-ref-doc/Cesium3DTileset.html?classFilter=3Dtile) + +- Example: + + ```javascript + { + url: { type: String, required: true }, + show: { typs: Boolean, default: true }, + + /** + * @type Cesium.Matrix4 + * @default Matrix4.IDENTITY + */ + /* modelMatrix: { typs: Object, default: undefined }, */ + /** + * @type Cesium.ShadowMode + * @default ShadowMode.ENABLED + */ + /* shadows: { type: Object, default: undefined }, */ + + maximumScreenSpaceError: { type: Number, default: 16 }, + maximumMemoryUsage: { type: Number, default: 512 }, + + cullWithChildrenBounds: { typs: Boolean, default: true }, + cullRequestsWhileMoving: { typs: Boolean, default: true }, + cullRequestsWhileMovingMultiplier: { type: Number, default: 60.0 }, + + preloadWhenHidden: { typs: Boolean, default: false }, + preloadFlightDestinations: { typs: Boolean, default: true }, + preferLeaves: { typs: Boolean, default: false }, + + dynamicScreenSpaceError: { typs: Boolean, default: false }, + dynamicScreenSpaceErrorDensity: { type: Number, default: 0.00278 }, + dynamicScreenSpaceErrorFactor: { type: Number, default: 4.0 }, + dynamicScreenSpaceErrorHeightFalloff: { type: Number, default: 0.25 }, + + progressiveResolutionHeightFraction: { type: Number, default: 0.3 }, + + foveatedScreenSpaceError: { typs: Boolean, default: true }, + foveatedConeSize: { type: Number, default: 0.1 }, + foveatedMinimumScreenSpaceErrorRelaxation: { type: Number, default: 0.0 }, + /** + * @type Cesium3DTileset~foveatedInterpolationCallback + * @default Cesium.Math.lerp + */ + /* foveatedInterpolationCallback: { type: Function, default: undefined }, */ + foveatedTimeDelay: { type: Number, default: 0.2 }, + + skipLevelOfDetail: { typs: Boolean, default: false }, + baseScreenSpaceError: { type: Number, default: 1024 }, + skipScreenSpaceErrorFactor: { type: Number, default: 16 }, + skipLevels: { type: Number, default: 1 }, + + immediatelyLoadDesiredLevelOfDetail: { typs: Boolean, default: false }, + loadSiblings: { typs: Boolean, default: false }, + + /** + * @type Cesium.ClippingPlaneCollection + */ + /* clippingPlanes: { typs: Object, default: undefined }, */ + /** + * @type Cesium.ClassificationType + */ + /* classificationType: { typs: Object, default: undefined }, */ + /** + * @type Cesium.Ellipsoid + * @default Ellipsoid.WGS84 + */ + /* ellipsoid: { typs: Object, default: undefined }, */ + + /* pointCloudShading: { typs: Object, default: undefined }, */ + /** + * @type Cartesian2 + * @default new Cartesian2(1.0, 1.0) + */ + /* imageBasedLightingFactor: { typs: Object, default: undefined }, */ + /** + * @type Cartesian3 + */ + /* lightColor: { typs: Object, default: undefined }, */ + luminanceAtZenith: { type: Number, default: 0.2 }, + /** + * @type Array. + */ + /* sphericalHarmonicCoefficients: { type: Array, default: undefined }, */ + specularEnvironmentMaps: { type: String, default: "" }, + + debugHeatmapTilePropertyName: { type: String, default: "" }, + debugFreezeFrame: { typs: Boolean, default: false }, + debugColorizeTiles: { typs: Boolean, default: false }, + debugWireframe: { typs: Boolean, default: false }, + debugShowBoundingVolume: { typs: Boolean, default: false }, + debugShowContentBoundingVolume: { typs: Boolean, default: false }, + debugShowViewerRequestVolume: { typs: Boolean, default: false }, + debugShowGeometricError: { typs: Boolean, default: false }, + debugShowRenderingStatistics: { typs: Boolean, default: false }, + debugShowMemoryUsage: { typs: Boolean, default: false }, + debugShowUrl: { typs: Boolean, default: false } + } + ``` diff --git a/website/public/static/demo/military/markdown/m3d/m3d-bim.md b/website/public/static/demo/military/markdown/m3d/m3d-bim.md new file mode 100644 index 000000000..898fd4717 --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-bim.md @@ -0,0 +1,90 @@ +## 加载 M3D BIM 模型 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 的 BIM 模型数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为 BIM 模型数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式;; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。 + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var bimLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/school', { + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 8, + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【M3D 模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加 M3D 地图文档服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | +| showBoundingVolume | Boolean | false | (可选)是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量 | diff --git a/website/public/static/demo/military/markdown/m3d/m3d-drill.md b/website/public/static/demo/military/markdown/m3d/m3d-drill.md new file mode 100644 index 000000000..74ffc6961 --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-drill.md @@ -0,0 +1,270 @@ +## 加载 M3D 地质钻孔 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 地质钻孔数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为地质钻孔模型数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。 + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var obliqueLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/DaYanTa', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【M3D 模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加 M3D 地图文档服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | +| showBoundingVolume | Boolean | false | (可选)是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量 | + +## M3D 模型示例 + +> M3D 的加载代码相对比较简单,如下所示 + +- Example: + ```javascript + m3dlayer = webGlobe.append('http://192.168.10.186:6163/igs/rest/g3d/福田钻孔', {}) + ``` + +## 地下模式 + +地下模式的核心是`关闭天空盒`以及改变透明度以及调整光线角度,同时针对特定模型进行`沉降操作`已达到对应的地下效果。 + +- Example: + ```javascript + webGlobe.viewer.imageryLayers.removeAll() + webGlobe.viewer.scene.skyAtmosphere.show = false + webGlobe.viewer.scene.globe.enableTransparent = true + webGlobe.viewer.scene.globe.baseColor = new Cesium.Color(1, 1, 1, 0.001) + ``` + +## 加载完毕后的回调 + +- Example: + ```javascript + m3dlayer = webGlobe.append('http://192.168.10.186:6163/igs/rest/g3d/福田钻孔', { + loaded: function(layer) { + // 加载完毕后执行业务逻辑 + }, + }) + ``` + +## 图层的属性 + +M3D 的图层属性保持 Cesium 的 3DTIle 一致 +[Cesium3DTileset](https://cesium.com/docs/cesiumjs-ref-doc/Cesium3DTileset.html?classFilter=3Dtile) + +- Example: + + ```javascript + { + url: { type: String, required: true }, + show: { typs: Boolean, default: true }, + + /** + * @type Cesium.Matrix4 + * @default Matrix4.IDENTITY + */ + /* modelMatrix: { typs: Object, default: undefined }, */ + /** + * @type Cesium.ShadowMode + * @default ShadowMode.ENABLED + */ + /* shadows: { type: Object, default: undefined }, */ + + maximumScreenSpaceError: { type: Number, default: 16 }, + maximumMemoryUsage: { type: Number, default: 512 }, + + cullWithChildrenBounds: { typs: Boolean, default: true }, + cullRequestsWhileMoving: { typs: Boolean, default: true }, + cullRequestsWhileMovingMultiplier: { type: Number, default: 60.0 }, + + preloadWhenHidden: { typs: Boolean, default: false }, + preloadFlightDestinations: { typs: Boolean, default: true }, + preferLeaves: { typs: Boolean, default: false }, + + dynamicScreenSpaceError: { typs: Boolean, default: false }, + dynamicScreenSpaceErrorDensity: { type: Number, default: 0.00278 }, + dynamicScreenSpaceErrorFactor: { type: Number, default: 4.0 }, + dynamicScreenSpaceErrorHeightFalloff: { type: Number, default: 0.25 }, + + progressiveResolutionHeightFraction: { type: Number, default: 0.3 }, + + foveatedScreenSpaceError: { typs: Boolean, default: true }, + foveatedConeSize: { type: Number, default: 0.1 }, + foveatedMinimumScreenSpaceErrorRelaxation: { type: Number, default: 0.0 }, + /** + * @type Cesium3DTileset~foveatedInterpolationCallback + * @default Cesium.Math.lerp + */ + /* foveatedInterpolationCallback: { type: Function, default: undefined }, */ + foveatedTimeDelay: { type: Number, default: 0.2 }, + + skipLevelOfDetail: { typs: Boolean, default: false }, + baseScreenSpaceError: { type: Number, default: 1024 }, + skipScreenSpaceErrorFactor: { type: Number, default: 16 }, + skipLevels: { type: Number, default: 1 }, + + immediatelyLoadDesiredLevelOfDetail: { typs: Boolean, default: false }, + loadSiblings: { typs: Boolean, default: false }, + + /** + * @type Cesium.ClippingPlaneCollection + */ + /* clippingPlanes: { typs: Object, default: undefined }, */ + /** + * @type Cesium.ClassificationType + */ + /* classificationType: { typs: Object, default: undefined }, */ + /** + * @type Cesium.Ellipsoid + * @default Ellipsoid.WGS84 + */ + /* ellipsoid: { typs: Object, default: undefined }, */ + + /* pointCloudShading: { typs: Object, default: undefined }, */ + /** + * @type Cartesian2 + * @default new Cartesian2(1.0, 1.0) + */ + /* imageBasedLightingFactor: { typs: Object, default: undefined }, */ + /** + * @type Cartesian3 + */ + /* lightColor: { typs: Object, default: undefined }, */ + luminanceAtZenith: { type: Number, default: 0.2 }, + /** + * @type Array. + */ + /* sphericalHarmonicCoefficients: { type: Array, default: undefined }, */ + specularEnvironmentMaps: { type: String, default: "" }, + + debugHeatmapTilePropertyName: { type: String, default: "" }, + debugFreezeFrame: { typs: Boolean, default: false }, + debugColorizeTiles: { typs: Boolean, default: false }, + debugWireframe: { typs: Boolean, default: false }, + debugShowBoundingVolume: { typs: Boolean, default: false }, + debugShowContentBoundingVolume: { typs: Boolean, default: false }, + debugShowViewerRequestVolume: { typs: Boolean, default: false }, + debugShowGeometricError: { typs: Boolean, default: false }, + debugShowRenderingStatistics: { typs: Boolean, default: false }, + debugShowMemoryUsage: { typs: Boolean, default: false }, + debugShowUrl: { typs: Boolean, default: false } + } + ``` + +## 动态剖切原理 + +    将要切割的图层按照某一个切割面,进行切割,设置一个定时器不同的收缩切割面的距离,已达到动态切割的效果! + +1. 创建某个轴的切割面,本例是 Y 轴: + +- Example: + ```javascript + var g_planeDiziti = new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), -200.0) + ``` + +2. 获取地质体的图层并绑定切割面 + +- Example: + ```javascript + assiselayer[0].clippingPlanes = new Cesium.ClippingPlaneCollection({ + modelMatrix: assiselayer[0].modelMatrix, + planes: [g_planeDiziti], + enabled: true, + }) + ``` + +3. 如果存在地形图层,则针对相机进行全局的地形图层的切割处理 + +- Example: + ```javascript + var g_planeTerTile = new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), -200.0) + webGlobe.scene.globe.clippingPlanes = new Cesium.ClippingPlaneCollection({ + modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(transformCenter), + planes: [g_planeTerTile], + enabled: true, + }) + ``` + +4. 设置起始的切面距离,这里的距离根据业务,采取三角测量可以测出对应的距离 + +- Example: + ```javascript + var curDis = 10 + // 定时器回调函数 --- 动态的改变切割面的距离 + function cutLayer(index) { + let distance = -1 * index * 20 + g_planeTerTile.distance = distance + g_planeDiziti.distance = distance + } + ``` diff --git a/website/public/static/demo/military/markdown/m3d/m3d-geobody.md b/website/public/static/demo/military/markdown/m3d/m3d-geobody.md new file mode 100644 index 000000000..a327859de --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-geobody.md @@ -0,0 +1,87 @@ +## 加载 M3D 地质体模型 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 地质体模型,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为地质体模型数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。 + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var obliqueLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ----------------- | +| elementId | Element \| String | 放置视图的div的id | +| options | Object | (可选)附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | -------- | ------------------------------------------------------------ | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建VR按钮 | + +#### 2.【M3D 模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加 M3D 地图文档服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | +| showBoundingVolume | Boolean | false | (可选)是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量 | diff --git a/website/public/static/demo/military/markdown/m3d/m3d-geobodygrid.md b/website/public/static/demo/military/markdown/m3d/m3d-geobodygrid.md new file mode 100644 index 000000000..45f1e18f6 --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-geobodygrid.md @@ -0,0 +1,89 @@ +## 加载 M3D 地质体网格 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 地质体网格数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为地质体网格数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。 + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var obliqueLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/地质体网格2', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【M3D 模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加 M3D 地图文档服务 + +- `append`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | +| showBoundingVolume | Boolean | false | (可选)是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量 | diff --git a/website/public/static/demo/military/markdown/m3d/m3d-landscape.md b/website/public/static/demo/military/markdown/m3d/m3d-landscape.md new file mode 100644 index 000000000..c153b2e15 --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-landscape.md @@ -0,0 +1,153 @@ +## 加载M3D景观模型 + +### 示例功能 + +    本示例实现在三维场景中加载M3D景观模型,对接MapGIS IGServer发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是MapGIS定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级LOD模型支持、WebGL无缝融合等优点。可以将多样类型、多种格式的三维数据通过M3D数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云las等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在MapGIS Desktop桌面平台软件中为景观模型数据生成M3D缓存,并组织为地图文档;然后在MapGIS Server Manager服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载M3D缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-调用方式*。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用local本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维WebGL的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的div作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +* Example: + ``` javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}); + ``` + +**Step 4. 创建并设置鼠标位置显示控件**: +    要展示鼠标当前位置的经纬度、高程、视角高度信息,首先需要创建`id="coordinate_location"`的label标签作为容器;然后构造`CesiumZondy.Manager.SceneManager`视图功能管理对象,并调用`showPosition()`方法为三维场景控件设置鼠标位置信息显示控件; + +* Example: + ``` javascript + //构造视图功能管理对象(视图) + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //设置鼠标位置信息展示控件:经纬度、高程、视角高度(容器id) + sceneManager.showPosition('coordinate_location'); + ``` + +**Step 5. 加载数据**: +    构造`CesiumZondy.Layer.M3DLayer`M3D图层管理对象,调用`append()`方法,传入M3D缓存三维地图服务的URL地址即可加载浏览数据,同时可传入相关配置参数; + +* Example: + ``` javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + var landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', { + //是否自动定位到数据位置 + autoReset: false, + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 8 + }); + ``` + +    加载数据默认会自动跳转定位到数据所在位置,如果需要自定义设置跳转的位置,可在`append()`方法中设置`autoReset: false`参数,取消自动定位,然后调用`SceneManager`视图功能管理对象的`flyToEx()`方法跳转视角。 + +* Example: + ``` javascript + //视点跳转(经度,纬度,视角高度,方位角,俯仰角,翻滚角) + sceneManager.flyToEx(114.40298522106733, 30.465568703723072, { + height: 100.85856618500283, + heading: -45.4940479913348135, + pitch: -15, + roll: 0 + }); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ----------------- | +| elementId | Element \| String | 放置视图的div的id | +| options | Object | (可选)附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | -------- | ------------------------------------------------------------ | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建VR按钮 | + +#### 2.【M3D模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加M3D地图文档服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------------ | -------- | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------- | ------- | -------- | --------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +|proxy| DefaultProxy |defaultProxy |(可选)代理| +|showBoundingVolume| Boolean |false |(可选)是否显示包围盒| +|maximumScreenSpaceError |Number |16|(可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量| + +#### 3.【视图功能管理类】`CesiumZondy.Manager.SceneManager` + +##### 【method】`showPosition(elementId, options)`:显示经纬度 高程 视角高度 + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | --------------- | +| elementId | Element \| String | 要显示的div的id | +| options | Object | 附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------------ | ------- | ------ | ---------------------------------------- | +| showHpr | Boolean | false | (可选) | +| showSelectTileInfo | Boolean | false | (可选)显示当前鼠标所在位置拾取到的级别 | +| showViewLevelInfo | Boolean | false | (可选)显示视图级别 | + +##### 【method】`flyToEx(lon, lon, options)`:跳转到 + +|参数名 |类型 |说明 | +|--|--|--| +|lon| Number |经度| +|lon| Number |纬度| +|options| Object |(可选)附加属性| + +* `options`属性主要参数 + +|参数名 |类型 | 说明 | +|--|--|--| +|height| Number|(可选)视角高度| +|duration |Number|(可选)持续时间| +|heading |Number |(可选)方位角| +|pitch| Number |(可选)俯仰角| +|roll| Number |(可选)翻滚角| diff --git a/website/public/static/demo/military/markdown/m3d/m3d-oblique.md b/website/public/static/demo/military/markdown/m3d/m3d-oblique.md new file mode 100644 index 000000000..9f82e5518 --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-oblique.md @@ -0,0 +1,87 @@ +## 加载 M3D 倾斜摄影 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 倾斜摄影数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为倾斜摄影数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。 + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + obliqueLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/DaYanTa', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【M3D 模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加 M3D 地图文档服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | +| showBoundingVolume | Boolean | false | (可选)是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量 | diff --git a/website/public/static/demo/military/markdown/m3d/m3d-pointcloud.md b/website/public/static/demo/military/markdown/m3d/m3d-pointcloud.md new file mode 100644 index 000000000..d513780e7 --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-pointcloud.md @@ -0,0 +1,87 @@ +## 加载 M3D 点云数据 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 点云数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为点云数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。 + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var pointcloudLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/PointCloud', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【M3D 模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加 M3D 地图文档服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | +| showBoundingVolume | Boolean | false | (可选)是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量 | diff --git a/website/public/static/demo/military/markdown/m3d/m3d-roughmodel.md b/website/public/static/demo/military/markdown/m3d/m3d-roughmodel.md new file mode 100644 index 000000000..fddbadfcb --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-roughmodel.md @@ -0,0 +1,90 @@ +## 加载 M3D 建筑粗模 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 的建筑粗略模型数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为建筑粗模数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。 + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var bimLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/buildings1', { + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 0, + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【M3D 模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加 M3D 地图文档服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | +| showBoundingVolume | Boolean | false | (可选)是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量 | diff --git a/website/public/static/demo/military/markdown/m3d/m3d-terrain.md b/website/public/static/demo/military/markdown/m3d/m3d-terrain.md new file mode 100644 index 000000000..d5d453892 --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-terrain.md @@ -0,0 +1,105 @@ +## 加载M3D地形数据 + +### 示例功能 + +本示例实现在三维场景中加载M3D地形数据,对接MapGIS IGServer发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +M3D,是MapGIS定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级LOD模型支持、WebGL无缝融合等优点。可以将多样类型、多种格式的三维数据通过M3D数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云las等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +数据准备:本示例采用的数据经过两个步骤生成,首先需在MapGIS Desktop桌面平台软件中为地形数据生成M3D缓存,并组织为地图文档;然后在MapGIS Server Manager服务管理器中根据地图文档发布为三维地图服务。 + +本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`append()`方法,以此来加载M3D缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生JS调用*内容。 + +### 实现步骤 + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库; + +2. 创建布局:创建`id='GlobeView'`的div作为三维视图的容器,并设置其样式; + +3. 构造三维场景控件:实例化WebSceneControl对象; + + ``` javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +4. 加载数据:调用`append()`方法,传入M3D缓存三维地图服务的URL地址即可加载浏览数据,可传入相关配置参数; + + ``` javascript + //添加地图文档 + webGlobe.append('http://develop.smaryun.com:6163/igs/rest/g3d/terrain', {}); + ``` + +5. 鼠标位置显示控件:创建`id="coordinate_location"`的div作为容器,用于显示鼠标当前位置的经纬度、高程、视角高度信息;然后调用`showPosition()`方法为三维场景控件设置鼠标位置显示控件。 + + ``` javascript + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location'); + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +##### (1)`new WebSceneControl(elementId, options)`:三维场景控件构造函数 + +> `WebSceneControl`构造函数主要参数 + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ----------------- | +| elementId | Element \| String | 放置视图的div的id | +| options | Object | (可选)附加属性 | + +> `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | ------------------------------------------------------------ | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建VR按钮 | + +##### (2)`append(url, options, 代理)`:添加地图文档 + +> `append`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------------ | -------- | +| url | String | 文档地址 | +| options | Object | 附加属性 | +| 代理 | DefaultProxy | 代理 | + +> `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------- | ------- | -------- | --------------------- | +| autoReset | Boolean | true | optional 是否自动定位 | +| synchronous | Boolean | true | optional 是否异步请求 | +| loaded | Boolean | function | optional 回调函数 | + +##### (3)`showPosition(elementId, options)`:显示经纬度 高程 视角高度 + +> `showPosition`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | --------------- | +| elementId | Element \| String | 要显示的div的id | +| options | Object | 附加属性 | + +> `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------------ | ------- | ------ | ---------------------------------------- | +| showHpr | Boolean | false | (可选) | +| showSelectTileInfo | Boolean | false | (可选)显示当前鼠标所在位置拾取到的级别 | +| showViewLevelInfo | Boolean | false | (可选)显示视图级别 | diff --git a/website/public/static/demo/military/markdown/m3d/m3d-underpipe.md b/website/public/static/demo/military/markdown/m3d/m3d-underpipe.md new file mode 100644 index 000000000..2bcc45cf9 --- /dev/null +++ b/website/public/static/demo/military/markdown/m3d/m3d-underpipe.md @@ -0,0 +1,89 @@ +## 加载 M3D 地下管线数据 + +### 示例功能 + +    本示例实现在三维场景中加载 M3D 地下管线数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### M3D——全新的轻量级三维数据交换格式 + +    M3D,是 MapGIS 定义的针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级 LOD 模型支持、WebGL 无缝融合等优点。可以将多样类型、多种格式的三维数据通过 M3D 数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM 模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云 las 等)、其他(栅格、地形、矢量、瓦片)等。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为地下管线数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.M3DLayer`类提供的`append()`方法,以此来加载 M3D 缓存的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。 + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var obliqueLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/UnderPipe', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【M3D 模型层管理类】`CesiumZondy.Layer.M3DLayer` + +##### 【method】`append(url, options)`:添加 M3D 地图文档服务 + +- `append`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------- | +| autoReset | Boolean | true | (可选)是否自动定位 | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | Boolean | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | +| showBoundingVolume | Boolean | false | (可选)是否显示包围盒 | +| maximumScreenSpaceError | Number | 16 | (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量 | diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-2d-doc.md b/website/public/static/demo/military/markdown/mapgis/mapgis-2d-doc.md new file mode 100644 index 000000000..8ca9408cc --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-2d-doc.md @@ -0,0 +1,82 @@ +## 添加二维地图文档服务 + +### 示例功能 + +    本示例实现在三维场景中加载在线二维地图数据,对接 MapGIS IGServer 发布的二维地图文档服务。 + +### 示例实现 + +    数据准备:需提前在 MapGIS Server Manager 服务管理器中发布二维地图文档服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.TilesLayer`类提供的`append2DDocTile()`方法,以此来加载 IGServer 二维地图文档服务数据。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:首先构造`CesiumZondy.Layer.TilesLayer`瓦片图层管理对象,然后调用`append2DDocTile()`方法,传入地图服务的 URL 地址及相关参数,即可加载 IGServer 二维地图文档数据。 + +- Example: + ```javascript + //构造瓦片图层管理对象(视图) + var layer = new CesiumZondy.Layer.TilesLayer({ + viewer: webGlobe.viewer, + }) + //添加MapGIS IGServer发布的二维地图文档服务 + vecDoc = layer.append2DDocTile('http://develop.smaryun.com:6163/igs/rest/mrms/docs/北京市', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【瓦片图层管理类】`CesiumZondy.Layer.TilesLayer` + +##### 【method】`append2DDocTile(url, options)`:加载二维地图文档瓦片 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | -------------- | +| url | String | 发布的文档地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------------ | --------- | ------ | --------------------------------------------------------- | +| options.tileRange= | Rectangle | 无 | Rectangle.fromDegrees(-180,-90,180,90) 默认范围为全球范围 | +| colNum | Number | 2 | 瓦片初始级的列数 | +| rowNum | Number | 1 | 瓦片初始级的行数 | +| maxLevel | Number | 19 | 瓦片最大显示级数 | +| proxy | String | 无 | 转发代理,不存在跨域可不设置 | diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-2d-layer.md b/website/public/static/demo/military/markdown/mapgis/mapgis-2d-layer.md new file mode 100644 index 000000000..4e39b2696 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-2d-layer.md @@ -0,0 +1,89 @@ +## 添加二维矢量图层服务 + +### 示例功能 + +        本示例实现在三维场景中加载在线二维地图数据,对接 MapGIS 中的矢量图层。 + +### 示例实现 + +        数据准备:需在 MapGIS 桌面端中获取矢量图层 的 url 。 + +        本示例需要使用【include-cesium-local.js】开发库实现,关键接口为 `CesiumZondy. Layer. TilesLayer` 类提供的 `append2DDocTile()` 方法,以此来加载 IGServer 矢量图层服务数据。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: + +        本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: + +        创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: + +        实例化 `Cesium. WebSceneControl` 对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```JavaScript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}); + ``` + +**Step 4. 加载数据**: + +        加载数据:首先构造 `CesiumZondy. Layer. TilesLayer` 瓦片图层管理对象,然后调用 `append2DDocTile()` 方法,传入地图服务的 URL 地址及相关参数,即可加载 IGServer 二维矢量地图数据。 + +* Example: + + ```javascript + //构造瓦片图层管理对象(视图) + var layer = new CesiumZondy.Layer.TilesLayer({ + viewer: webGlobe.viewer + }); + //添加MapGIS IGServer发布的二维地图文档服务 + vecDoc = layer.append2DDocTile(`${protocol}://${ip}:${port}/igs/rest/mrms/layers`, { + gdbps: ['GDBP://MapGISLocalPlus/北京市/ds/行政区/sfcls/北京市'] + }); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】 `Cesium. WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【瓦片图层管理类】 `CesiumZondy. Layer. TilesLayer` + +##### 【method】 `append2DDocTile(url, options)` :加载二维地图文档瓦片 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | -------------- | +| url | String | 矢量地图url地址 | +| options | Object | 附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------------ | --------- | ------ | ------------------------------------------------------------ | +| options.tileRange= | Rectangle | 无 | Rectangle.fromDegrees(-180, -90, 180, 90) 默认范围为全球范围 | +| colNum | Number | 2 | 瓦片初始级的列数 | +| rowNum | Number | 1 | 瓦片初始级的行数 | +| maxLevel | Number | 19 | 瓦片最大显示级数 | +| proxy | String | 无 | 转发代理,不存在跨域可不设置 | diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-2d-tile.md b/website/public/static/demo/military/markdown/mapgis/mapgis-2d-tile.md new file mode 100644 index 000000000..8550053f0 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-2d-tile.md @@ -0,0 +1,99 @@ +## 加载二维瓦片地图 + +### 示例功能 + +    本示例实现在三维场景中加载在线二维瓦片地图,对接 MapGIS IGServer 发布的二维瓦片地图服务。 + +### 示例实现 + +    数据准备:需提前在 MapGIS Server Manager 服务管理器中发布二维瓦片地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.TilesLayer`类提供的`appendMapGISTile()`方法,以此来加载 IGServer 二维瓦片地图服务数据。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:首先构造`CesiumZondy.Layer.TilesLayer`瓦片图层管理对象,然后构造图层加载的参数,如范围、瓦片初始级行列数、最大显示级别等信息,可用来指定瓦片显示的范围、最大级别等;然后调用`appendMapGISTile()`方法传入二维瓦片服务地址及参数,即可加载浏览数据。 + +- Example: + ```javascript + //构造瓦片图层管理对象(视图) + var tilelayer = new CesiumZondy.Layer.TilesLayer({ + viewer: webGlobe.viewer, + }) + //参数 + var options = { + tileRang: Cesium.Rectangle.fromDegrees(-180, -90, 180, 90), + //瓦片初始级的列数 默认为2 + colNum: 2, + //瓦片初始级的行数 默认为1 + rowNum: 1, + //瓦片最大显示级数 默认为19 + maxLevel: 19, + //如瓦片裁的不是256,则需设置下面两个参数 + //瓦片宽度 + tileWidth: 256, + //瓦片高度 + tileHeight: 256, + } + //添加MapGIS IGServer发布的二维瓦片服务 + var layer = tilelayer.appendMapGISTile('http://develop.smaryun.com:6163/igs/rest/mrms/tile/北京市', options) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ----------------- | +| elementId | Element \| String | 放置视图的div的id | +| options | Object | (可选)附加属性 | + +* `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | -------- | ------------------------------------------------------------ | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建VR按钮 | + +#### 2.【瓦片图层管理类】`CesiumZondy.Layer.TilesLayer` + +##### 【method】`appendMapGISTile(url, options)`:添加 MapGIS IGSserver 发布的瓦片服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 瓦片服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| --------- | --------- | ------ | --------------------------------------------------------- | +| tileRange | Rectangle | 无 | Rectangle.fromDegrees(-180,-90,180,90) 默认范围为全球范围 | +| colNum | Number | 2 | 瓦片初始级的列数 | +| rowNum | Number | 1 | 瓦片初始级的行数 | +| tileWidth | Number | 256 | 瓦片宽度 | +| tileHeigh | Number | 256 | 瓦片高度 | +| maxLevel | Number | 19 | 瓦片最大显示级数 默认为 19 | +| proxy | String | 无 | 转发代理,不存在跨域可不设置 | diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-2dtile.md b/website/public/static/demo/military/markdown/mapgis/mapgis-2dtile.md new file mode 100644 index 000000000..a2a3cb5e5 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-2dtile.md @@ -0,0 +1,133 @@ +## 加载二维瓦片地图 + +### 示例功能 + +本示例实现在三维场景中加载在线二维瓦片地图,对接MapGIS IGServer发布的二维瓦片地图服务。 + +### 示例实现 + +数据准备:需提前在MapGIS Server Manager服务管理器中发布二维瓦片地图服务。 + +本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`appendMapGISTile()`方法,以此来加载IGServer二维瓦片地图服务数据。 + +> 开发库使用请参见*首页-概述-原生JS调用*内容。 + +### 实现步骤 + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库; + +2. 创建布局:创建`id='GlobeView'`的div作为三维视图的容器,并设置其样式; + +3. 构造三维场景控件:实例化WebSceneControl对象; + + ``` javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +4. 加载数据:首先需构造图层加载的参数,如范围、瓦片初始级行列数、最大显示级别等信息,可用来指定瓦片显示的范围、最大级别等;然后调用`appendMapGISTile()`方法传入二维瓦片服务地址及参数,即可加载浏览数据; + + ``` javascript + //定义图层类 + var tilelayer = undefined; + //添加二维瓦片附加属性 + var options = { + tileRang: Cesium.Rectangle.fromDegrees(-180, -90, 180, 90), + //瓦片初始级的列数 默认为2 + colNum: 2, + //瓦片初始级的行数 默认为1 + rowNum: 1, + //瓦片最大显示级数 默认为19 + maxLevel: 5, + // proxy: '/ZDproxy.ashx',//如不存在跨域可不设置 + //如瓦片裁的不是256,则需设置下面两个参数 + tileWidth: 256, + tileHeight: 256 + }; + //添加MapGIS IGServer发布的瓦片 + tilelayer = webGlobe.appendMapGISTile('http://develop.smaryun.com:6163/igs/rest/mrms/tile/WORLDTILE',options); + ``` + + 叠加后,可以通过`removeImageryLayer`方法移除瓦片图层;此方法也可用于避免重复叠加,将此前叠加的瓦片图层进行移除; + + ``` javascript + //移除瓦片图层 + webGlobe.removeImageryLayer(tilelayer); + ``` + +5. 鼠标位置显示控件:创建`id="coordinate_location"`的div作为容器,用于显示鼠标当前位置的经纬度、高程、视角高度信息;然后调用`showPosition()`方法为三维场景控件设置鼠标位置显示控件。 + + ``` javascript + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location'); + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +##### (1)`new WebSceneControl(elementId, options)`:三维场景控件构造函数 + +> `WebSceneControl`构造函数主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|elementId|Element \| String|放置视图的div的id| +|options|Object|(可选)附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|viewerMode|String|‘3D’|(可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图| +|showInfo|Boolean|false|(可选)是否显示默认的属性信息框| +|animation|Boolean|true|(可选)默认动画控制不显示| +|baseLayerPicker|Boolean|true|(可选)是否创建图层控制显示小组件| +|fullscreenButton|Boolean|true|(可选)是否创建全屏控制按钮| +|vrButton|Boolean|false|(可选)是否创建VR按钮| + +##### (2)`appendMapGISTile(url, options)`:添加MapGIS发布的瓦片服务 + +> `appendMapGISTile`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|url|String|瓦片服务地址| +|options|Object|附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|options.tileRange=|Rectangle|无|Rectangle.fromDegrees(-180,-90,180,90) 默认范围为全球范围| +|colNum|Number|2|瓦片初始级的列数 默认为2| +|rowNum|Number|1|瓦片初始级的列数 默认为1| +|maxLevel|Number|19|瓦片最大显示级数 默认为19| +|proxy|String|无|转发代理,不存在跨域可不设置| + +##### (3)`removeImageryLayer(imageryLayer)`:移除瓦片图层 + +> `removeImageryLayer`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|imageryLayer|imageryLayer|图层对象| + +##### (4)`showPosition(elementId, options)`:显示经纬度 高程 视角高度 + +> `showPosition`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|elementId|Element \| String|要显示的div的id| +|options|Object|附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|showHpr|Boolean|false|(可选) | +|showSelectTileInfo|Boolean|false|(可选)显示当前鼠标所在位置拾取到的级别| +|showViewLevelInfo|Boolean|false|(可选)显示视图级别| diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-2dvector.md b/website/public/static/demo/military/markdown/mapgis/mapgis-2dvector.md new file mode 100644 index 000000000..802dd8048 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-2dvector.md @@ -0,0 +1,118 @@ +## 添加二维矢量地图 + +### 示例功能 + +本示例实现在三维场景中加载在线二维矢量地图,对接MapGIS IGServer发布的二维矢量地图服务。 + +### 示例实现 + +数据准备:需提前在MapGIS Server Manager服务管理器中发布二维矢量地图服务。 + +本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`append2DDocTile()`方法,以此来加载IGServer二维矢量地图服务数据。 + +> 开发库使用请参见*首页-概述-原生JS调用*内容。 + +### 实现步骤 + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库; + +2. 创建布局:创建`id='GlobeView'`的div作为三维视图的容器,并设置其样式; + +3. 构造三维场景控件:实例化WebSceneControl对象; + + ``` javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +4. 加载数据:调用`appendMapGISTile()`方法,传入地图服务的URL地址及参数,即可加载IGServer二维示例地图文档数据; + + ``` javascript + //定义矢量类 + var vecDoc; + var options = { + //默认范围为全球范围 + tileRang: Cesium.Rectangle.fromDegrees(-180, -90, 180, 90), + //瓦片初始级的列数 默认为2 + colNum: 2, + //瓦片初始级的行数 默认为2 + rowNum: 1, + //瓦片最大显示级数 默认为19 + maxLevel: 5, + // proxy: '/ZDproxy.ashx',//如不存在跨域可不设置 + //如瓦片裁的不是256,则需设置下面两个参数 + tileWidth: 256, + tileHeight: 256 + }; + //添加二维矢量地图文档 + vecDoc = webGlobe.append2DDocTile('http://develop.smaryun.com:6163/igs/rest/mrms/docs/WorldJWVector', options); + ``` + +5. 鼠标位置显示控件:创建`id="coordinate_location"`的div作为容器,用于显示鼠标当前位置的经纬度、高程、视角高度信息;然后调用`showPosition()`方法为三维场景控件设置鼠标位置显示控件。 + + ``` javascript + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location'); + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +##### (1)`new WebSceneControl(elementId, options)`:三维场景控件构造函数 + +> `WebSceneControl`构造函数主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|elementId|Element \| String|放置视图的div的id| +|options|Object|(可选)附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|viewerMode|String|‘3D’|(可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图| +|showInfo|Boolean|false|(可选)是否显示默认的属性信息框| +|animation|Boolean|true|(可选)默认动画控制不显示| +|baseLayerPicker|Boolean|true|(可选)是否创建图层控制显示小组件| +|fullscreenButton|Boolean|true|(可选)是否创建全屏控制按钮| +|vrButton|Boolean|false|(可选)是否创建VR按钮| + +##### (2)`append2DDocTile(url, options)`:加载二维地图文档瓦片 + +> `append2DDocTile`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|url|String|发布的文档地址| +|options|Object|附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|options.tileRange=|Rectangle|无|Rectangle.fromDegrees(-180,-90,180,90) 默认范围为全球范围| +|colNum|Number|2|瓦片初始级的列数 默认为2| +|rowNum|Number|1|瓦片初始级的列数 默认为1| +|maxLevel|Number|19|瓦片最大显示级数 默认为19| +|proxy|String|无|转发代理,不存在跨域可不设置| + +##### (3)`showPosition(elementId, options)`:显示经纬度 高程 视角高度 + +> `showPosition`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|elementId|Element \| String|要显示的div的id| +|options|Object|附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|showHpr|Boolean|false|(可选) | +|showSelectTileInfo|Boolean|false|(可选)显示当前鼠标所在位置拾取到的级别| +|showViewLevelInfo|Boolean|false|(可选)显示视图级别| diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-dem.md b/website/public/static/demo/military/markdown/mapgis/mapgis-dem.md new file mode 100644 index 000000000..e1ee6e603 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-dem.md @@ -0,0 +1,80 @@ +## 加载地形高程数据 + +### 示例功能 + +    本示例实现在三维场景中加载在线地形高程数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### 示例实现 + +    数据准备:首先需在 MapGIS Desktop 桌面平台软件中将地形高程数据组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.TerrainLayer`类提供的`append()`方法,以此来加载地形数据的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    构造`CesiumZondy.Layer.TerrainLayer`地形图层管理对象,调用`append()`方法,传入三维地图服务的 URL 地址即可加载浏览数据,也可传入相关配置参数。 + +- Example: + ```javascript + //构造地形层管理对象(视图) + var layer = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer, + }) + //添加三维地图文档:地形数据 + var terrainlayer = layer.append('http://develop.smaryun.com:6163/igs/rest/g3d/250DEM_3D', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【地形图层管理类】`CesiumZondy.Layer.TerrainLayer` + +##### 【method】`append(url, options)`:添加三维场景地形服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ---------------- | +| url | String | 地形文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------- | ------------ | ------------ | -------------------- | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-dem250.md b/website/public/static/demo/military/markdown/mapgis/mapgis-dem250.md new file mode 100644 index 000000000..598100e16 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-dem250.md @@ -0,0 +1,101 @@ +## 加载地形高程数据 + +### 示例功能 + +本示例实现在三维场景中加载在线地形高程数据,对接MapGIS IGServer发布的三维地图服务。 + +### 示例实现 + +数据准备:首先需在MapGIS Desktop桌面平台软件中将地形高程数据组织为地图文档;然后在MapGIS Server Manager服务管理器中根据地图文档发布为三维地图服务。 + +本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`append()`方法,以此来加载三维地图服务。 + +> 开发库使用请参见*首页-概述-原生JS调用*内容。 + +### 实现步骤 + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库; + +2. 创建布局:创建`id='GlobeView'`的div作为三维视图的容器,并设置其样式; + +3. 构造三维场景控件:实例化WebSceneControl对象; + + ``` javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +4. 加载数据:调用`append()`方法,传入三维地图服务的URL地址即可加载浏览数据,也可传入相关配置参数; + + ``` javascript + //加载地图文档 + webGlobe.append("http://192.168.10.186:6163/igs/rest/g3d/250DEM_3D",{}); + ``` + +5. 鼠标位置显示控件:创建`id="coordinate_location"`的div作为容器,用于显示鼠标当前位置的经纬度、高程、视角高度信息;然后调用`showPosition()`方法为三维场景控件设置鼠标位置显示控件。 + + ``` javascript + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location'); + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +##### (1)`new WebSceneControl(elementId, options)`:三维场景控件构造函数 + +> `WebSceneControl`构造函数主要参数 + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | ----------------- | +| elementId | Element \| String | 放置视图的div的id | +| options | Object | (可选)附加属性 | + +> `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | ------------------------------------------------------------ | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建VR按钮 | + +##### (2)`append(url, options, 代理)`:添加地图文档 + +> `append`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------- | ----------- | -------- | +| url | String | 文档地址 | +| options | Object | 附加属性 | +| 代理 | DefaultProxy | 代理 | + +> `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------- | ------- | -------- | -------------------- | +| autoReset | Boolean | true | optional 是否自动定位 | +| synchronous | Boolean | true | optional 是否异步请求 | +| loaded | Boolean | function | optional 回调函数 | + +##### (3)`showPosition(elementId, options)`:显示经纬度 高程 视角高度 + +> `showPosition`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | --------------- | +| elementId | Element \| String | 要显示的div的id | +| options | Object | 附加属性 | + +> `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------------ | ------- | ------ | ---------------------------------------- | +| showHpr | Boolean | false | (可选) | +| showSelectTileInfo | Boolean | false | (可选)显示当前鼠标所在位置拾取到的级别 | +| showViewLevelInfo | Boolean | false | (可选)显示视图级别 | diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-oblique.md b/website/public/static/demo/military/markdown/mapgis/mapgis-oblique.md new file mode 100644 index 000000000..f7a1bddc8 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-oblique.md @@ -0,0 +1,75 @@ +## 加载倾斜摄影 + +### 示例功能 + +    本示例实现在三维场景中加载在线倾斜摄影数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### 示例实现 + +    数据准备:首先需在 MapGIS Desktop 桌面平台软件中将倾斜摄影数据组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`append()`方法,以此来加载三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:调用`append()`方法,传入三维地图服务的 URL 地址即可加载浏览数据,也可传入相关配置参数; + +- Example: + ```javascript + //加载地图文档 + webGlobe.append('http://localhost:6163/igs/rest/g3d/TongLiang', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +##### 【method】`append(url, options, 代理)`:添加地图文档 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------------ | -------- | +| url | String | 文档地址 | +| options | Object | 附加属性 | +| 代理 | DefaultProxy | 代理 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------- | ------- | -------- | --------------------- | +| autoReset | Boolean | true | optional 是否自动定位 | +| synchronous | Boolean | true | optional 是否异步请求 | +| loaded | Boolean | function | optional 回调函数 | diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-raster.md b/website/public/static/demo/military/markdown/mapgis/mapgis-raster.md new file mode 100644 index 000000000..a4a5bce02 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-raster.md @@ -0,0 +1,99 @@ +## 加载地形影像 + +### 示例功能 + +    本示例实现在三维场景中加载在线地形影像数据,对接 MapGIS IGServer 发布的二维瓦片地图服务。 + +### 示例实现 + +    数据准备:需提前在 MapGIS Server Manager 服务管理器中将地形影像数据发布为二维瓦片地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.TilesLayer`类提供的`appendMapGISTile()`方法,以此来加载 IGServer 二维瓦片地图服务数据。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:首先构造`CesiumZondy.Layer.TilesLayer`瓦片图层管理对象,然后构造图层加载的参数,如范围、瓦片初始级行列数、最大显示级别等信息,可用来指定瓦片显示的范围、最大级别等;然后调用`appendMapGISTile()`方法传入二维瓦片服务地址及参数,即可加载浏览数据。 + +- Example: + ```javascript + //构造瓦片图层管理对象(视图) + var layer = new CesiumZondy.Layer.TilesLayer({ + viewer: webGlobe.viewer, + }) + //参数 + var options = { + tileRang: Cesium.Rectangle.fromDegrees(-180, -90, 180, 90), + //瓦片初始级的列数 默认为2 + colNum: 2, + //瓦片初始级的行数 默认为1 + rowNum: 1, + //瓦片最大显示级数 默认为19 + maxLevel: 19, + //如瓦片裁的不是256,则需设置下面两个参数 + //瓦片宽度 + tileWidth: 256, + //瓦片高度 + tileHeight: 256, + } + //添加MapGIS IGServer发布的二维瓦片地图服务 + var tilelayer = layer.appendMapGISTile('http://develop.smaryun.com:6163/igs/rest/mrms/tile/250DEM', options) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【瓦片图层管理类】`CesiumZondy.Layer.TilesLayer` + +##### 【method】`appendMapGISTile(url, options)`:添加 MapGIS IGSserver 发布的瓦片服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ------------ | +| url | String | 瓦片服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| --------- | --------- | ------ | --------------------------------------------------------- | +| tileRange | Rectangle | 无 | Rectangle.fromDegrees(-180,-90,180,90) 默认范围为全球范围 | +| colNum | Number | 2 | 瓦片初始级的列数 | +| rowNum | Number | 1 | 瓦片初始级的行数 | +| tileWidth | Number | 256 | 瓦片宽度 | +| tileHeigh | Number | 256 | 瓦片高度 | +| maxLevel | Number | 19 | 瓦片最大显示级数 默认为 19 | +| proxy | String | 无 | 转发代理,不存在跨域可不设置 | diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-raster250.md b/website/public/static/demo/military/markdown/mapgis/mapgis-raster250.md new file mode 100644 index 000000000..b95642bca --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-raster250.md @@ -0,0 +1,126 @@ +## 加载地形影像 + +### 示例功能 + +本示例实现在三维场景中加载在线地形影像,对接MapGIS IGServer发布的二维瓦片地图服务。 + +### 示例实现 + +数据准备:需提前在MapGIS Server Manager服务管理器中将地形影像数据发布为二维瓦片地图服务。 + +本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`appendMapGISTile()`方法,以此来加载IGServer二维瓦片地图服务数据。 + +> 开发库使用请参见*首页-概述-原生JS调用*内容。 + +### 实现步骤: + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库; + +2. 创建布局:创建`id='GlobeView'`的div作为三维视图的容器,并设置其样式; + +3. 构造三维场景控件:实例化WebSceneControl对象; + + ``` javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + +4. 加载数据:首先需构造图层加载的参数,如范围、瓦片初始级行列数、最大显示级别等信息,可用来指定瓦片显示的范围、最大级别等;然后调用`appendMapGISTile()`方法传入二维瓦片服务地址及参数,即可加载浏览数据; + + ``` javascript + var options = { + tileRang: Cesium.Rectangle.fromDegrees(-180, -90, 180, 90), + //瓦片初始级的列数 默认为2 + colNum: 2, + //瓦片初始级的行数 默认为2 + rowNum: 1, + //瓦片最大显示级数 默认为19 + maxLevel: 5, + // proxy: '/ZDproxy.ashx',//如不存在跨域可不设置 + //如瓦片裁的不是256,则需设置下面两个参数 + tileWidth: 256, + tileHeight: 256, + }; + //添加MapGISIGServer发布的瓦片 + tilelayer = webGlobe.appendMapGISTile( + "http://localhost:6163/igs/rest/mrms/tile/250DEM", + options + ); + ``` + +5. 鼠标位置显示控件:创建`id="coordinate_location"`的div作为容器,用于显示鼠标当前位置的经纬度、高程、视角高度信息;然后调用`showPosition()`方法为三维场景控件设置鼠标位置显示控件。 + + ``` javascript + //显示鼠标位置控件 + webGlobe.showPosition('coordinate_location'); + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +##### (1)`new WebSceneControl(elementId, options)`:三维场景控件构造函数 + +> `WebSceneControl`构造函数主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|elementId|Element \| String|放置视图的div的id| +|options|Object|(可选)附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|viewerMode|String|‘3D’|(可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图| +|showInfo|Boolean|false|(可选)是否显示默认的属性信息框| +|animation|Boolean|true|(可选)默认动画控制不显示| +|baseLayerPicker|Boolean|true|(可选)是否创建图层控制显示小组件| +|fullscreenButton|Boolean|true|(可选)是否创建全屏控制按钮| +|vrButton|Boolean|false|(可选)是否创建VR按钮| + +##### (2)`appendMapGISTile(url, options)`:添加MapGIS发布的瓦片服务 + +> `appendMapGISTile`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|url|String|瓦片服务地址| +|options|Object|附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|options.tileRange=|Rectangle|无|Rectangle.fromDegrees(-180,-90,180,90) 默认范围为全球范围| +|colNum|Number|2|瓦片初始级的列数 默认为2| +|rowNum|Number|1|瓦片初始级的列数 默认为1| +|maxLevel|Number|19|瓦片最大显示级数 默认为19| +|proxy|String|无|转发代理,不存在跨域可不设置| + +##### (3)`removeImageryLayer(imageryLayer)`:移除瓦片图层 + +> `removeImageryLayer`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|imageryLayer|imageryLayer|图层对象| + +##### (4)`showPosition(elementId, options)`:显示经纬度 高程 视角高度 + +> `showPosition`方法主要参数 + +|参数名|类 型|说 明| +|-|-|-| +|elementId|Element \| String|要显示的div的id| +|options|Object|附加属性| + +> `options`属性主要参数 + +|参数名|类 型|默认值|说 明| +|-|-|-|-| +|showHpr|Boolean|false|(可选) | +|showSelectTileInfo|Boolean|false|(可选)显示当前鼠标所在位置拾取到的级别| +|showViewLevelInfo|Boolean|false|(可选)显示视图级别| diff --git a/website/public/static/demo/military/markdown/mapgis/mapgis-terrain.md b/website/public/static/demo/military/markdown/mapgis/mapgis-terrain.md new file mode 100644 index 000000000..7b1a772e3 --- /dev/null +++ b/website/public/static/demo/military/markdown/mapgis/mapgis-terrain.md @@ -0,0 +1,80 @@ +## 加载地形数据 + +### 示例功能 + +    本示例实现在三维场景中加载地形数据,对接 MapGIS IGServer 发布的三维地图服务。 + +### 示例实现 + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中将地形数据(例如 TIF 数据)并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.TerrainLayer`类提供的`append()`方法,以此来加载地形数据的三维地图服务。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.TerrainLayer`地形图层管理对象,调用`append()`方法,传入三维地图服务的 URL 地址即可加载浏览数据,可传入相关配置参数。 + +- Example: + ```javascript + //构造地形层管理对象(视图) + var layer = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer, + }) + //加载三维地图文档(服务地址,配置参数) + var terrainlayer = layer.append('http://develop.smaryun.com:6163/igs/rest/g3d/terrain', {}) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【地形图层管理类】`CesiumZondy.Layer.TerrainLayer` + +##### 【method】`append(url, options)`:添加三维场景地形服务 + +| 参数名 | 类 型 | 说 明 | +| ------- | ------ | ---------------- | +| url | String | 地形文档服务地址 | +| options | Object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ----------- | ------------ | ------------ | -------------------- | +| synchronous | Boolean | true | (可选)是否异步请求 | +| loaded | function | function | (可选)回调函数 | +| proxy | DefaultProxy | defaultProxy | (可选)代理 | diff --git a/website/public/static/demo/military/markdown/measure/measure-area.md b/website/public/static/demo/military/markdown/measure/measure-area.md new file mode 100644 index 000000000..2343a8368 --- /dev/null +++ b/website/public/static/demo/military/markdown/measure/measure-area.md @@ -0,0 +1,80 @@ +## 计算面积 + +### 示例功能 + +    本示例提供用于计算绘制区面积的功能,可以应用于各个场景,满足用户在使用时进行区域面积等业务需求。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过初始化面积计算工具对象 `Cesium.MeasureAreaTool()` ,实现面积计算功能。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 创建面积计算工具对象**: +    初始化面积计算工具对象 `Cesium.MeasureAreaTool()` ,完成此步后可在三维场景中加载面积计算工具; + +- Example: + ```Javascript + //初始化面积计算工具对象 + var measureAreaTool = new Cesium.MeasureAreaTool(webGlobe.viewer); + ``` + +**Step 4. 激活面积计算工具**: +    调用面积计算工具对象 `Cesium.MeasureAreaTool()` 的 `startTool()` 方法激活面积计算工具,完成此步后可在三维场景中使用面积计算工具; + +- Example: + + ```Javascript + //激活面积计算工具 + measureAreaTool.startTool(); + ``` + +**Step 5. 停止面积计算工具**: +    功能使用结束后调用面积计算工具对象 `Cesium.MeasureAreaTool()` 的 `stopTool()` 方法停止面积计算工具,完成此步后可在三维场景中停止使用面积计算工具。 + +- Example: + ```Javascript + //停止面积计算工具 + measureAreaTool.stopTool(); + ``` + +### 关键接口 + +#### 1. 【面积测量工具主要类】`Cesium.MeasureAreaTool(viewer, options)` + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ------------------------------ | +| viewer | Object | viewer 对象 | +| options | Object | (可选)面积测量工具可选参数设置 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ------------------------ | ------- | ------------------------- | ----------------------------------------------------------------------- | +| callBack | Boolean | function(){} | (可选)回调函数 | +| exHeight | Number | 0 | (可选)附加高程偏移 (避免遮挡) | +| disableDepthTestDistance | Number | Number. POSITIVE_INFINITY | (可选)只要小于这个距离深度检测就会失效,就会一直显示在最前面 不会被遮挡 | + +##### 【method】`startTool()` 激活面积计算工具方法 + +##### 【method】`stopTool()` 停止激活面积计算工具方法 diff --git a/website/public/static/demo/military/markdown/measure/measure-length.md b/website/public/static/demo/military/markdown/measure/measure-length.md new file mode 100644 index 000000000..a08d1f2d2 --- /dev/null +++ b/website/public/static/demo/military/markdown/measure/measure-length.md @@ -0,0 +1,87 @@ +## 计算长度 + +### 示例功能 + +    本示例提供用于计算绘制线的长度的功能,可以应用于各个场景,满足用户在使用时进行两点之间距离测量,多点之间距离测量等业务需求。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,通过初始化长度计算工具对象 `Cesium.MeasureLengthTool()` ,实现长度计算功能。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 创建长度计算工具**: +    初始化长度计算工具对象 `Cesium.MeasureLengthTool()` ,完成此步后可在三维场景中加载长度计算工具; + +- Example: + ```Javascript + //创建长度计算工具 + var measureLengthTool = new Cesium.MeasureLengthTool(webGlobe.viewer); + ``` + +**Step 4. 激活长度计算工具**: +    调用长度计算工具对象 `Cesium.MeasureLengthTool()` 的 `startTool()` 方法激活长度计算工具,完成此步后可在三维场景中使用长度计算工具; + +- Example: + ```Javascript + //激活长度计算工具 + measureLengthTool.startTool(); + ``` + +**Step 5. 停止长度计算工具**: +    功能使用结束后调用长度计算工具对象 `Cesium.MeasureLengthTool()` 的 `stopTool()` 方法停止长度计算工具,完成此步后可在三维场景中停止使用长度计算工具。 + +- Example: + ```Javascript + //停止长度计算工具 + measureLengthTool.stopTool(); + ``` + +### 关键接口 + +#### 1. 【距离测量工具主要类】`Cesium.MeasureLengthTool(viewer, options)` + +- `Cesium.MeasureLengthTool` 主要参数 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ------------------------------ | +| viewer | Object | viewer 对象 | +| options | Object | (可选)距离测量工具可选参数设置 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ------------------------ | ------- | ------------------------- | ----------------------------------------------------------------------- | +| showMoreInfo | Boolean | false | (可选)是否显示详细测量信息 | +| exHeight | Number | 0 | (可选)附加高程偏移 (避免遮挡) | +| disableDepthTestDistance | Number | Number. POSITIVE_INFINITY | (可选)只要小于这个距离深度检测就会失效,就会一直显示在最前面 不会被遮挡 | + +##### 【method】 `calcDistanceFromDegrees(positions)` 计算距离方法(经纬度的坐标点) + +| 参数名 | 类型 | 说明 | +| --------- | ----- | ---- | +| positions | Array | 暂无 | + +##### 【method】 `startTool()` 激活长度计算工具方法 + +##### 【method】 `stopTool()` 停止激活长度计算工具方法 diff --git a/website/public/static/demo/military/markdown/measure/measure-slpoe.md b/website/public/static/demo/military/markdown/measure/measure-slpoe.md new file mode 100644 index 000000000..b20e1475a --- /dev/null +++ b/website/public/static/demo/military/markdown/measure/measure-slpoe.md @@ -0,0 +1,80 @@ +## 坡度测量 + +### 示例功能 + +    本示例提供用于计算两点坡度的功能,可以应用于各个场景,满足用户在使用时对不在同一水平面的两点进行坡度测量。 + +### 示例实现 + +    本示例需要使用 include-cesium-local.js 开发库实现,通过初始化坡度计算工具对象 `Cesium.MeasureSlopeTool()` ,实现坡度计算功能。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 创建坡度计算工具**: +    初始化坡度计算工具对象 `Cesium.MeasureSlopeTool()` ,完成此步后可在三维场景中加载坡度计算工具; + +- Example: + ```Javascript + //创建坡度计算工具 + var measureSlopeTool = new Cesium.MeasureSlopeTool(webGlobe.viewer); + ``` + +**Step 4. 激活坡度计算工具**: +    调用坡度计算工具对象 `Cesium.MeasureSlopeTool()` 的 `startTool()` 方法激活坡度计算工具,完成此步后可在三维场景中使用坡度计算工具; + +- Example: + ```Javascript + //激活坡度计算工具 + measureSlopeTool.startTool(); + ``` + +**Step 5. 停止坡度计算工具**: +    功能使用结束后调用坡度计算工具对象 `Cesium.MeasureSlopeTool()` 的 `stopTool()` 方法停止坡度计算工具,完成此步后可在三维场景中停止使用坡度计算工具。 + +- Example: + ```Javascript + //停止坡度计算工具 + measureSlopeTool.stopTool(); + ``` + +### 关键接口 + +#### 1. 【坡度测量工具主要类】`Cesium.MeasureSlopeTool(viewer, options)` + +- `Cesium.MeasureSlopeTool` 主要参数 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ------------------------------ | +| viewer | Object | viewer 对象 | +| options | Object | (可选)坡度测量工具可选参数设置 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ------------------------ | ------- | ------------------------- | ----------------------------------------------------------------------- | +| callBack | Boolean | function(){} | (可选)回调函数 | +| disableDepthTestDistance | Number | Number. POSITIVE_INFINITY | (可选)只要小于这个距离深度检测就会失效,就会一直显示在最前面 不会被遮挡 | + +##### 【method】 `startTool()` 激活坡度测量工具方法 + +##### 【method】 `stopTool()` 停止激活坡度测量工具方法 diff --git a/website/public/static/demo/military/markdown/measure/measure-triangle.md b/website/public/static/demo/military/markdown/measure/measure-triangle.md new file mode 100644 index 000000000..8ffd0f73f --- /dev/null +++ b/website/public/static/demo/military/markdown/measure/measure-triangle.md @@ -0,0 +1,80 @@ +## 三角测量 + +### 示例功能 + +    本示例提供两点之间三角测量功能,可测量两点之间高差、水平距离、直线距离等信息,可以应用于各个场景,满足用户在使用时对于两点之间距离的直观数据获取。 + +### 功能实现 + +    本示例需要使用 include-cesium-local.js 开发库实现,通过初始化三角测量工具对象 `Cesium.TriangulationTool()` ,实现三角测量功能。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 创建三角测量工具**: +    初始化三角测量工具对象 `Cesium.TriangulationTool()` ,完成此步后可在三维场景中加载三角测量工具; + +- Example: + ```Javascript + //创建三角测量工具 + var triangulationTool = new Cesium.TriangulationTool(webGlobe.viewer); + ``` + +**Step 4. 激活三角测量工具**: +    调用三角测量工具对象 `Cesium.TriangulationTool()` 的 `startTool()` 方法激活三角测量工具,完成此步后可在三维场景中使用三角测量工具; + +- Example: + ```Javascript + //激活三角测量工具 + triangulationTool.startTool(); + ``` + +**Step 5.停止三角测量工具**: +    功能使用结束后调用三角测量工具对象 `Cesium.TriangulationTool()` 的 `stopTool()` 方法停止三角测量工具,完成此步后可在三维场景中停止使用三角测量工具。 + +- Example: + ```Javascript + //停止三角测量工具 + triangulationTool.stopTool(); + ``` + +### 关键接口 + +#### 1. 【三角测量工具主要类】`Cesium.TriangulationTool(viewer, options)` + +- `Cesium.TriangulationTool` 主要参数 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | ------------------------ | +| viewer | Object | viewer 对象 | +| options | Object | 三角测量工具可选参数设置 | + +- `options` 主要参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ------------------------ | ------- | ------------------------- | ----------------------------------------------------------------- | +| callBack | Boolean | function(){} | 回调函数 | +| disableDepthTestDistance | Number | Number. POSITIVE_INFINITY | 只要小于这个距离深度检测就会失效,就会一直显示在最前面 不会被遮挡 | + +##### 【method】 `startTool()` 激活三角测量工具方法 + +##### 【method】 `stopTool()` 停止激活三角测量工具方法 diff --git a/website/public/static/demo/military/markdown/ogc/document.png b/website/public/static/demo/military/markdown/ogc/document.png new file mode 100644 index 000000000..576271cd7 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/document.png differ diff --git a/website/public/static/demo/military/markdown/ogc/document_dynamic.png b/website/public/static/demo/military/markdown/ogc/document_dynamic.png new file mode 100644 index 000000000..bd9c04991 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/document_dynamic.png differ diff --git a/website/public/static/demo/military/markdown/ogc/igserver_document.png b/website/public/static/demo/military/markdown/ogc/igserver_document.png new file mode 100644 index 000000000..d50306137 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/igserver_document.png differ diff --git a/website/public/static/demo/military/markdown/ogc/igserver_document_config.png b/website/public/static/demo/military/markdown/ogc/igserver_document_config.png new file mode 100644 index 000000000..ebcaecc28 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/igserver_document_config.png differ diff --git a/website/public/static/demo/military/markdown/ogc/igserver_ogc_config.png b/website/public/static/demo/military/markdown/ogc/igserver_ogc_config.png new file mode 100644 index 000000000..4e477a684 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/igserver_ogc_config.png differ diff --git a/website/public/static/demo/military/markdown/ogc/igserver_ogc_map.png b/website/public/static/demo/military/markdown/ogc/igserver_ogc_map.png new file mode 100644 index 000000000..2bf1de004 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/igserver_ogc_map.png differ diff --git a/website/public/static/demo/military/markdown/ogc/layerinfo.png b/website/public/static/demo/military/markdown/ogc/layerinfo.png new file mode 100644 index 000000000..44eff0aa3 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/layerinfo.png differ diff --git a/website/public/static/demo/military/markdown/ogc/layers_name.png b/website/public/static/demo/military/markdown/ogc/layers_name.png new file mode 100644 index 000000000..8793d2a43 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/layers_name.png differ diff --git a/website/public/static/demo/military/markdown/ogc/ogc-wms.md b/website/public/static/demo/military/markdown/ogc/ogc-wms.md new file mode 100644 index 000000000..7db2e7e3c --- /dev/null +++ b/website/public/static/demo/military/markdown/ogc/ogc-wms.md @@ -0,0 +1,128 @@ +## 加载 OGC-WMS 地图 + +### 示例功能 + +    本示例对接 OGC 服务,实现在三维场景中加载 WMS 服务地图。 + +### WMS 介绍 + +    Web Map Service(网络地图服务),简称 WMS,由开放地理信息联盟(Open GeoSpatial Consortium,OGC)制定。该规范定义了 Web 客户端从网络地图服务器获取地图的接口标准。一个 WMS 可以动态地生成具有地理参考数据的地图,这些地图通常用 GIF、JPEG 或 PNG 等图像格式,或者 SVG、KML、VML 和 WebCGM 等矢量图形格式来表现。使用者通过指定的参数获取相应的地图图片。 + +### 示例实现 + +    数据准备:可在 MapGIS IGServer 中发布 WMS 地图服务获取数据地址,也可通过其他方式发布服务或者获取地址,只要是基于 OGC 标准的 WMS 地图服务都能支持。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.OGCLayer`类提供的`appendWMSTile()`方法,以此来加载 WMS 地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    构造`CesiumZondy.Layer.OGCLayer`M3D 图层管理对象,调用`appendWMSTile()`方法,并配置服务地址、图层名称、附加信息,即可实现 WMS 地图服务数据的加载,在此传入的是 IGServer 中发布的 WMS 地图服务地址,可做参考。 + +- Example: + ```javascript + //构造OGC图层管理对象(视图) + var ogcLayer = new CesiumZondy.Layer.OGCLayer({ + viewer: webGlobe.viewer, + }) + //添加WMS服务地图 + var wmsLayer = ogcLayer.appendWMSTile( + //地图服务URL地址 + 'http://develop.smaryun.com:6163/igs/rest/ogc/doc/北京市/WMSServer', + //图层名 + '北京市,绿地_1,水域_3,大学,学校,动物园', + //附加属性 + {} + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【OGC 标准瓦片服务管理类】`CesiumZondy.Layer.OGCLayer` + +##### 【method】`appendWMSTile(tileUrl, layerName, options)`:添加 WMS 服务图层 + +| 参数名 | 类 型 | 说 明 | +| --------- | ------ | -------- | +| tileUrl | String | 服务地址 | +| layerName | String | 图层名 | +| options | object | 附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------- | ------ | ------- | --------------- | +| version | String | '1.1.0' | 版本 默认 1.1.0 | +| proxy | String | 无 | 代理 | + +### 要点补充:WMS 服务操作介绍 + +    Web 地图服务(WMS)能够根据用户的请求返回相应的地图(包括 PNG,GIF,JPEG 等栅格形式或者是 SVG 和 WEB CGM 等矢量形式)。WMS 支持网络协议 HTTP,所支持的操作是由 URL 定义的。 + +    WMS 实现规范由三个基础性操作协议(GetCapabilities、GetMap 和 GetFeatureInfo)组成,这些协议共同构成了利用 WMS 创建和叠加显示不同来源的远程异构地图服务的基础。其中,GetCapabilities 可用户获取服务的元数据信息;GetMap 是数据的表现,可获取地图内容进而用以展示;GetFeatureInfo 可用来获取屏幕坐标某处的相关信息,也可同时返回多个图层中的要素信息。还有一些其它操作如 DescribeLayer,GetLegendGraphic,GetStyles 可获取其他信息。 + +- WMS 服务操作列表见下表所示 + +| 操作 | 实现要求 | 描述 | +| --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| GetCapabilities | 强制实现 | 获取服务级元数据。获取 WMS 的能力文档(即元数据文档),里面包含服务的所有信息 | +| GetMap | 强制实现 | 获取地图图片。该操作根据客户端发出的请求参数在服务端进行检索,服务器端返回一个地图图像,其地理空间参数和大小参数是已经明确定义的,返回的地图图像可以是 GIF、JPEG、PNG 或 SVG 格式。 | +| GetFeatureInfo | 选择实现 | 获取显示在地图上的某些特殊要素的信息。该操作根据用户所请求的 X、Y 坐标或感兴趣的图层,返回地图上某些特殊要素的信息,信息以 HTML,GML 或 ASCII 的格式表示。 | + +- GetMap 操作请求方法实现参数 + +| 参数名称 | 参数个数 | 参数类型和值 | +| ----------- | --------------- | ------------------------------------------------------------------------------ | +| service | 1 个(必选) | 字符类型,服务类型标识值为“WMS” | +| request | 1 个(必选) | 字符类型,值为“GetMap” | +| version | 1 个(必选) | 字符类型,值为请求的 WMS 的版本号 | +| layers | 1 个(必选) | 字符类型,值为一个或多个地图图层列表,多个图层之间用”,”隔开 | +| styles | 1 个(必选) | 字符类型,值为请求图层的地图渲染样式 | +| CRS | 1 个(必选) | 字符类型,值为坐标参照系统 | +| BBOX | 1 个(必选) | Wkt 格式,值为某个 CRS 下的地图边界范围的坐标序列 | +| width | 1 个(必选) | 整型类型,值为地图图片的像素宽度 | +| height | 1 个(必选) | 整型类型,值为地图图片的像素高度 | +| format | 1 个(必选) | 字符类型,值为地图的输出格式 | +| transparent | 0 或 1 个(可选) | 字符类型,值为 true 或者 false,用来表示地图图层是否透明(默认情况下是不透明的) | +| bgcolor | 0 或 1 个(可选) | 值为十六进制的 RGB 值,表示地图的背景颜色 | +| exceptions | 0 或 1 个(可选) | 值为 WMS 的异常信息报告的格式(默认情况下是 XML 格式) | +| time | 0 或 1 个(可选) | 时间类型,值为时间值,表示需要在图层中有时间信息 | +| elevation | 0 或 1 个(可选) | 数字类型,值为高程值,表示需要在图层中有高程信息 | + +也可查看其英文原址介绍: +OpenGIS Web Map Service (WMS) Implementation Specification diff --git a/website/public/static/demo/military/markdown/ogc/ogc-wmts.md b/website/public/static/demo/military/markdown/ogc/ogc-wmts.md new file mode 100644 index 000000000..932447047 --- /dev/null +++ b/website/public/static/demo/military/markdown/ogc/ogc-wmts.md @@ -0,0 +1,125 @@ +## 加载 OGC-WMTS 地图 + +### 示例功能 + +    本示例对接 OGC 服务,实现在三维场景中加载 WMTS 服务地图。 + +### WMTS 介绍 + +    Web Map Tile Service(网络地图瓦片服务),简称 WMTS,由开放地理信息联盟(Open GeoSpatial Consortium,OGC)制定,是和 WMS 并列的重要 OGC 规范之一。WMTS 不同于 WMS,它最重要的特征是采用缓存技术能够缓解 WebGIS 服务器端数据处理的压力,提高交互响应速度,大幅改善在线地图应用客户端的用户体验。WMTS 是 OGC 主推的缓存技术规范,是目前各种缓存技术相互兼容的一种方法。 + +### 示例实现 + +    数据准备:可在 MapGIS IGServer 中发布 WMTS 地图服务获取数据地址,也可通过其他方式发布服务或者获取地址,只要是基于 OGC 标准的 WMTS 地图服务都能支持。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.OGCLayer`类提供的`appendWMSTile()`方法,以此来加载 WMTS 地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:调用`appendWMTSTile()`方法,并配置服务地址、图层名称、最大级数等信息,即可实现 WMTS 地图服务数据的加载,在此传入的是 IGServer 中发布的 WMTS 地图服务地址,可做参考。 + +- Example: + ```javascript + //构造OGC图层管理对象(视图) + var ogcLayer = new CesiumZondy.Layer.OGCLayer({ + viewer: webGlobe.viewer, + }) + //添加WMTS地图服务 + var wmtsLayer = ogcLayer.appendWMTSTile( + //瓦片服务地址 + 'http://develop.smaryun.com:6163/igs/rest/ogc/WMTSServer', + //图层名称 + 'beijing', + 'EPSG:4326_北京市_028mm_GB', + //最大级数 + 17, + null, + 'default', + 0 + ) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【OGC 标准瓦片服务管理类】`CesiumZondy.Layer.OGCLayer` + +##### 【method】`appendWMTSTile(tileUrl, layerName, tileMatrixSetID, maximumLevel, startLevel)`:添加 WMTS 标准的瓦片服务 + +| 参数名 | 类 型 | 说 明 | +| --------------- | ------ | ------------------------------ | +| tileUrl | String | 瓦片服务地址 | +| layerName | String | 图层名称 | +| tileMatrixSetID | String | 瓦片数据集格式 | +| maximumLevel | Number | 最大级数 | +| startLevel | Number | 初始级别 正常默认为 0 有的为 1 | + +### 要点补充:WMTS 服务操作介绍 + +    WMTS 服务支持 RESTful 访问,其接口包括 GetCapabilities、GetTile 和 GetFeatureInfo3 个操作,这些操作允许用户访问切片地图。 + +    WMTS 服务属于一种瓦片地图服务,在此可了解下瓦片规则: + +![WMTS](./static/demo/mapboxgl/markdown/ogc/wmts.png) + +- WMTS 服务操作列表见下表所示 + +| 操作 | 实现要求 | 描述 | +| --------------- | -------- | ---------------------------------------------------------------------------------------- | +| GetCapabilities | 强制实现 | 获取 WMTS 的能力文档(即元数据文档),里面包含服务的所有信息 | +| GetTile | 强制实现 | 获取地图瓦片。该操作根据客户端发出的请求参数在服务端进行检索,服务器端返回地图瓦片图像。 | +| GetFeatureInfo | 选择实现 | 通过在 WMTS 图层上指定一定的条件,返回指定的地图瓦片内容对应的要素信息 | + +- GetTile 操作请求方法实现参数 + +| 参数名称 | 参数个数 | 参数类型和值 | +| ----------------------- | --------------- | ------------------------------------------------------ | +| service | 1 个(必选) | 字符类型,服务类型标识值为“WMTS” | +| request | 1 个(必选) | 字符类型,请求的操作值为“GetTile” | +| version | 1 个(必选) | 字符类型,值为请求的 WMTS 的版本号 | +| layer | 1 个(必选) | 字符类型,值为请求的图层名称 | +| style | 1 个(必选) | 字符类型,值为请求图层的渲染样式 | +| format | 1 个(必选) | 字符类型,值为瓦片地图的输出格式 | +| tileMatrixSet | 1 个(必选) | 字符类型,瓦片矩阵数据集,其值在服务的元数据文档中指定 | +| tileMatrix | 1 个(必选) | 字符类型,瓦片矩阵,其值在服务的元数据文档中指定 | +| tileRow | 1 个(必选) | 整型类型,值为大于 0 的整数,表示瓦片矩阵的行号 | +| tileCol | 1 个(必选) | 整型类型,值为大于 0 的整数,表示瓦片矩阵的列号 | +| Other sample dimensions | 0 或 1 个(可选) | 字符类型,其他允许的参数 | + +也可查看其英文原址介绍: +OpenGIS Web Map Tile Service Implementation Standard diff --git a/website/public/static/demo/military/markdown/ogc/wfs.md b/website/public/static/demo/military/markdown/ogc/wfs.md new file mode 100644 index 000000000..5491ad9a3 --- /dev/null +++ b/website/public/static/demo/military/markdown/ogc/wfs.md @@ -0,0 +1,25 @@ +# WFS + +    Web 要素服务(WFS)返回的是要素级的 GML 编码,并提供对要素的增加、修改、删除等事务操作,是对 Web 地图服务的进一步深入。OGC Web 要素服务允许客户端从多个 Web 要素服务中取得使用地理标记语言(GML)编码的地理空间数据,这个远东定义了五个操作:GetCapabilites 返回 Web 要素服务性能描述文档(用 XML 描述);DescribeFeatureType 返回描述可以提供服务的任何要素结构的 XML 文档;GetFeature 为一个获取要素实例的请求提供服务;Transaction 为事务请求提供服务;LockFeature 处理在一个事务期间对一个或多个要素类型实例上锁的请求。 + +# 英文原址 + +[OpenGIS Web Feature Service (WFS) Implementation Specification](https://www.ogc.org/docs/is/) + +# GetFeature(获取图层要素) + +| URL Component | O/M | Description | +| :---------------------------------------------------------------------------- | :-- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| REQUEST=[GetFeature /GetFeatureWithLock] | M | The name of the WFS request. | +| OUTPUTFORMAT | O | `Default: text/xml;subtype=gml/3.1.1`The output format to use for the response. text/xml; subtype=gml/3.1.1 must be supported. Other output formats are possible as well as long as their MIME type is advertised in the capabilities document. | +| RESULTTYPE | O | `Default:results` The resulttype parameter is used to indicate whether a WFS should generate a complete response document of whether it should generate an empty response document indicating only the number of features that the query would return. A value of results indicates that a full response should be generated. A value of hits indicates that only a count of the number of features should be returned. | +| PROPERTYNAME | O | A list of properties may be specified for each feature type that is being queried. Refer to subclause 14.2.2 on how to form lists of parameters. A "\*" character can be used to indicate that all properties should be retrieved. There is a 1:1 mapping between each element in a FEATUREID or TYPENAME list and the PROPERTYNAME list. The absense of a value also indicates that all properties should be fetched. | +| FEATUREVERSION=[ALL/N] | O | If versioning is supported, the FEATUREVERSION parameter directs the WFS on which feature version to fetch.. A value of ALL indicates to fetch all versions of a feature. An integer value fetches the Nth version of a feature. No value indicates that the latest version of the feature should be fetched. | +| MAXFEATURES=N | O | A positive integer indicating the maximum number of features that the WFS should return in response to a query. If no value is specified then all result instances should be presented. | +| EXPIRY=N | O | This parameter may only be specified if the request is GetFeatureWithLock. It indicates the length of time (in minutes) that a lock will be held on the features in the result set. If the parameter is not specified then the locks will be held indefinitely. | +| SRSNAME | O | This parameter is used to specify a WFSsupported SRS that should be used for returned feature geometries. The value may be the DefaultSRS or any of the OtherSRS values that a WFS declares it supports in the capabilities document. The SRS may be indicated using EPSG codes or the URL form defined in [2]. If the parameter is not specified then the value of the DefaultSRS for the feature type being queried shall be used. | +| TYPENAME (Optional if FEATUREID isspecified.) | M | A list of feature type names to query. | +| FEATUREID (Mutually exclusive with FILTER and BBOX) | O | An enumerated list of feature instances to fetch identified by their feature identifiers. | +| FILTER (Prerequisite: TYPENAME) (Mutually exclusive with FEATUREID and BBOX) | O | A filter specification describes a set of features to operate upon. The filter is defined as specified in the Filter Encoding Specification [3]. If the FILTER parameter is used, one filter must be specified for each feature type listed in the TYPENAME parameter. Individual filters encoded in the FILTER parameter are enclosed in parentheses “(“ and “)”. | +| BBOX (Prerequisite: TYPENAME) (Mutually exclusive with FEATUREID and FILTER.) | O | In lieu of a FEATUREID or FILTER, a client may specify a bounding box as described in subclause 13.3.3. | +| SORTBY | O | The SORTBY parameter is used to specify a list of property names whose values should be used to order (upon presentation) the set of feature instances that satify the query. The value of the SORTBY parameter shall have the form “PropertyName [A/D],PropertyName [A/D],…]” where the letter A is used to indicate an ascending sort and the letter D is used to indicate a descending sort. If neither A nor D are specified, the default sort order shall be ascending. An example value might be: “SORTBY=Field1 D,Field2 D,Field3”. In this case the results are sorted by Field 1 descending, Field2 descending and Field3 ascending. | diff --git a/website/public/static/demo/military/markdown/ogc/wmts-uml.png b/website/public/static/demo/military/markdown/ogc/wmts-uml.png new file mode 100644 index 000000000..83be21ab3 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/wmts-uml.png differ diff --git a/website/public/static/demo/military/markdown/ogc/wmts.png b/website/public/static/demo/military/markdown/ogc/wmts.png new file mode 100644 index 000000000..cf997f022 Binary files /dev/null and b/website/public/static/demo/military/markdown/ogc/wmts.png differ diff --git a/website/public/static/demo/military/markdown/query/query-2dByAtt.md b/website/public/static/demo/military/markdown/query/query-2dByAtt.md new file mode 100644 index 000000000..0b47dee5b --- /dev/null +++ b/website/public/static/demo/military/markdown/query/query-2dByAtt.md @@ -0,0 +1,140 @@ +## 二维地图文档属性查询 + +### 示例功能 + +    此功能实现基于二维地图文档的属性查询功能,即通过属性查询方式查询三维场景中加载的二维地图文档的要素信息,包括要素的几何信息与属性信息。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。先初始化查询参数`CesiumZondy.Query.MapDocQuery`类对象,设置查询属性条件等参数后,调用`beginQuery()`方法进行查询,然后在回调中获取处理查询到的要素信息,解析所需的几何信息与属性信息进行展示。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +**Step 3. 加载地图数据**: +    使用`CesiumZondy.Layer.ThirdPartyLayer`的`appendTDTuMap()`方法加载天地图作为底图,然后再使用`CesiumZondy.Layer.TilesLayer`的`append2DDocTile()`方法叠加显示北京市地图数据; + +**Step 4. 实现查询功能**: +    实例化地图查询 `CesiumZondy.Query.MapDocQuery`对象,设置查询的数据与查询属性条件,再调用`beginQuery()` 方法进行查询,在其回调函数中获取解析查询结果并显示。 + +- Example: + + ```javascript + var queryParam = new CesiumZondy.Query.MapDocQuery() + //查询图层的URL路径 + //queryParam.gdbp = encodeURI("gdbp://MapGisLocal/北京市/ds/行政区/sfcls/北京市"); + queryParam.docName = '北京市' + queryParam.mapIndex = 0 + queryParam.layerID = 0 + queryParam.structs = '{"IncludeAttribute":true,"IncludeGeometry":true,"IncludeWebGraphic":false}' + //设置要素的属性条件 + queryParam.where = "省名='北京'" + //服务器的ip + queryParam.ip = ip + queryParam.port = port + queryParam.beginQuery( + function(result) { + //查询结果处理 + }, + function quryError(err) { + alert(err) + } + ) + ``` + + ```javascript + if (result != null) { + data = result + //解析显示要素的属性信息 + document.getElementById('code').value = result.SFEleArray[0].AttValue[2] + document.getElementById('name').value = result.SFEleArray[0].AttValue[3] + document.getElementById('spell').value = result.SFEleArray[0].AttValue[4] + document.getElementById('population').value = result.SFEleArray[0].AttValue[40] + //解析要素的几何信息 + var GeompointArray = new Array() + for (var pointlength = 0; pointlength < result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots.length; pointlength++) { + var PntCartesian3 = Cesium.Cartesian3.fromDegrees(result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots[pointlength].x, result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots[pointlength].y, 10) + GeompointArray.push(PntCartesian3) + } + GeompointArray.push(GeompointArray[0]) + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //构造区对象 + var polygon = { + name: '立体区', + polygon: { + //坐标点 + hierarchy: GeompointArray, + //是否指定各点高度 + perPositionHeight: true, + //颜色 + material: new Cesium.Color(33 / 255, 150 / 255, 243 / 255, 0.5), + //轮廓线是否显示 + outline: true, + //轮廓线颜色 + outlineColor: Cesium.Color.BLACK, + }, + } + //绘制图形通用方法:对接Cesium原生特性 + var stericPolygon = entityController.appendGraphics(polygon) + } + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【地图数据显示地图图层类】`CesiumZondy.Layer.ThirdPartyLayer、CesiumZondy.Layer.TilesLayer` + +#### 3.【二维地图文档查询类】`CesiumZondy.Query.MapDocQuery` + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------ | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| docObj | MapDocObj | null | 查询对应的地图服务,参考 ClassLib.js 中的 MapDocObj 对象 | +| docName | String | '' | 地图服务名称 | +| mapIndex | Int | 0 | 地图在文档下得序号,一般为 0 | +| layerID | Int | 0 | 图层序号 | +| geometryType | String | '' | 几何类型描述,格式:'point | circle | rect | line | polygon' | +| geometry | String | '' | 点的集合,几何约束区域参数,其形式取决于 geometryType 的值,即取决于几何约束类型
point--x,y,[ neardistance],neardistance 为可选,即容差,下同
circle--x,y,r 注意在球上执行画圆时由于插件提供的圆为椭圆,给出的点集也是大量离散点,因此这种情况下,依然采用 polygon 方式执行查询
rect--xmin,ymin,xmax,ymax
line--x1,y1,x2,y2,x3,y3…;[neardistance]
polygon--x1,y1,x2,y2,x3,y3…第一个点与最后一个点相同 | +| where | String | '' | 查询属性条件,符合 SQL 查询规范的任何字符串 | +| f | String | 'json' | 返回结果的序列化形式 | +| objectIds | String | '' | 需要查询的要素 Id 号,格式:oid1,oid2,oid3 | +| structs | json | '' | 指定查询结果的结构,json 规范 | +| page | String | '' | 返回的要素分页的页数,默认返回第 0 页 | +| pageCount | String | '' | 要素结果集每页的记录数量,默认为 20 条/页 | +| rule | String | '' | 指定查询规则,Json 表示形式 | +| queryResult | String | '未查询' | 这里查询结果,这里主要是存放查询过程中报错信息 | +| ip | String | '' | 查询数据服务的 IP | +| port | String | '' | 查询数据服务的端口号 | + +##### 【method】`beginQuery(successCallback, errorCallback)`:开始查询 + +| 参数名 | 类 型 | 说 明 | +| --------------- | -------- | -------------------- | +| successCallback | function | 查询执行成功回调函数 | +| errorCallback | function | 询执行失败回调函数 | diff --git a/website/public/static/demo/military/markdown/query/query-2dByOID.md b/website/public/static/demo/military/markdown/query/query-2dByOID.md new file mode 100644 index 000000000..bdc90aa6c --- /dev/null +++ b/website/public/static/demo/military/markdown/query/query-2dByOID.md @@ -0,0 +1,140 @@ +## 二维地图文档 OID 查询 + +### 示例功能 + +    此功能实现基于二维地图文档的 OID 查询功能,即通过要素 OID 查询方式查询三维场景中加载的二维地图文档的要素信息,包括要素的几何信息与属性信息。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。先初始化查询参数`CesiumZondy.Query.MapDocQuery`类对象,设置查询属性条件等参数后,调用`beginQuery()`方法进行查询,然后在回调中获取处理查询到的要素信息,解析所需的几何信息与属性信息进行展示。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +**Step 3. 加载地图数据**: +    使用`CesiumZondy.Layer.ThirdPartyLayer`的`appendTDTuMap()`方法加载天地图作为底图,然后再使用`CesiumZondy.Layer.TilesLayer`的`append2DDocTile()`方法叠加显示北京市地图数据; + +**Step 4. 实现查询功能**: +    实例化地图查询 `CesiumZondy.Query.MapDocQuery`对象,设置查询的数据与要素的 OID 条件,再调用`beginQuery()` 方法进行查询,在其回调函数中获取解析查询结果并显示。 + +- Example: + + ```javascript + var queryParam = new CesiumZondy.Query.MapDocQuery() + //查询图层的URL路径 + //queryParam.gdbp = encodeURI("gdbp://MapGisLocal/北京市/ds/行政区/sfcls/北京市"); + queryParam.docName = '北京市' + queryParam.mapIndex = 0 + queryParam.layerID = 0 + queryParam.structs = '{"IncludeAttribute":true,"IncludeGeometry":true,"IncludeWebGraphic":false}' + //设置要素的OID + queryParam.objectIds = '30' + //服务器的ip + queryParam.ip = ip + queryParam.port = port + queryParam.beginQuery( + function(result) { + //查询结果处理 + }, + function quryError(err) { + alert(err) + } + ) + ``` + + ```javascript + if (result != null) { + data = result + //解析显示要素的属性信息 + document.getElementById('code').value = result.SFEleArray[0].AttValue[2] + document.getElementById('name').value = result.SFEleArray[0].AttValue[3] + document.getElementById('spell').value = result.SFEleArray[0].AttValue[4] + document.getElementById('population').value = result.SFEleArray[0].AttValue[40] + //解析要素的几何信息 + var GeompointArray = new Array() + for (var pointlength = 0; pointlength < result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots.length; pointlength++) { + var PntCartesian3 = Cesium.Cartesian3.fromDegrees(result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots[pointlength].x, result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots[pointlength].y, 10) + GeompointArray.push(PntCartesian3) + } + GeompointArray.push(GeompointArray[0]) + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //构造区对象 + var polygon = { + name: '立体区', + polygon: { + //坐标点 + hierarchy: GeompointArray, + //是否指定各点高度 + perPositionHeight: true, + //颜色 + material: new Cesium.Color(33 / 255, 150 / 255, 243 / 255, 0.5), + //轮廓线是否显示 + outline: true, + //轮廓线颜色 + outlineColor: Cesium.Color.BLACK, + }, + } + //绘制图形通用方法:对接Cesium原生特性 + var stericPolygon = entityController.appendGraphics(polygon) + } + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【地图数据显示地图图层类】`CesiumZondy.Layer.ThirdPartyLayer`、`CesiumZondy.Layer.TilesLayer` + +#### 3.【二维地图文档查询类】CesiumZondy.Query.MapDocQuery + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------ | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| docObj | MapDocObj | null | 查询对应的地图服务,参考 ClassLib.js 中的 MapDocObj 对象 | +| docName | String | '' | 地图服务名称 | +| mapIndex | Int | 0 | 地图在文档下得序号,一般为 0 | +| layerID | Int | 0 | 图层序号 | +| geometryType | String | '' | 几何类型描述,格式:'point | circle | rect | line | polygon' | +| geometry | String | '' | 点的集合,几何约束区域参数,其形式取决于 geometryType 的值,即取决于几何约束类型
point--x,y,[ neardistance],neardistance 为可选,即容差,下同
circle--x,y,r 注意在球上执行画圆时由于插件提供的圆为椭圆,给出的点集也是大量离散点,因此这种情况下,依然采用 polygon 方式执行查询
rect--xmin,ymin,xmax,ymax
line--x1,y1,x2,y2,x3,y3…;[neardistance]
polygon--x1,y1,x2,y2,x3,y3…第一个点与最后一个点相同 | +| where | String | '' | 查询属性条件,符合 SQL 查询规范的任何字符串 | +| f | String | 'json' | 返回结果的序列化形式 | +| objectIds | String | '' | 需要查询的要素 Id 号,格式:oid1,oid2,oid3 | +| structs | json | '' | 指定查询结果的结构,json 规范 | +| page | String | '' | 返回的要素分页的页数,默认返回第 0 页 | +| pageCount | String | '' | 要素结果集每页的记录数量,默认为 20 条/页 | +| rule | String | '' | 指定查询规则,Json 表示形式 | +| queryResult | String | '未查询' | 这里查询结果,这里主要是存放查询过程中报错信息 | +| ip | String | '' | 查询数据服务的 IP | +| port | String | '' | 查询数据服务的端口号 | + +##### 【method】`beginQuery(successCallback, errorCallback)`:开始查询 + +| 参数名 | 类 型 | 说 明 | +| --------------- | -------- | -------------------- | +| successCallback | function | 查询执行成功回调函数 | +| errorCallback | function | 询执行失败回调函数 | diff --git a/website/public/static/demo/military/markdown/query/query-2dBygeometry.md b/website/public/static/demo/military/markdown/query/query-2dBygeometry.md new file mode 100644 index 000000000..9f6aeb552 --- /dev/null +++ b/website/public/static/demo/military/markdown/query/query-2dBygeometry.md @@ -0,0 +1,141 @@ +## 二维地图文档几何查询 + +### 示例功能 + +    此功能实现基于二维地图文档的几何查询功能,即通过几何查询方式查询三维场景中加载的二维地图文档的要素信息,包括要素的几何信息与属性信息。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。先初始化查询参数`CesiumZondy.Query.MapDocQuery`类对象,设置查询属性条件等参数后,调用`beginQuery()`方法进行查询,然后在回调中获取处理查询到的要素信息,解析所需的几何信息与属性信息进行展示。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +**Step 3. 加载地图数据**: +    使用`CesiumZondy.Layer.ThirdPartyLayer`的`appendTDTuMap()`方法加载天地图作为底图,然后再使用`CesiumZondy.Layer.TilesLayer`的`append2DDocTile()`方法叠加显示北京市地图数据; + +**Step 4. 实现查询功能**: +    实例化地图查询 `CesiumZondy.Query.MapDocQuery`对象,设置查询的数据与查询几何条件,再调用`beginQuery()` 方法进行查询,在其回调函数中获取解析查询结果并显示。 + +- Example: + + ```javascript + var queryParam = new CesiumZondy.Query.MapDocQuery() + //查询图层的URL路径 + //queryParam.gdbp = encodeURI("gdbp://MapGisLocal/北京市/ds/行政区/sfcls/北京市"); + queryParam.docName = '北京市' + queryParam.mapIndex = 0 + queryParam.layerID = 0 + queryParam.structs = '{"IncludeAttribute":true,"IncludeGeometry":true,"IncludeWebGraphic":false}' + //设置要素的几何查询方式与条件 + queryParam.geometryType = 'point' + queryParam.geometry = '116.3909, 39.9148' + //服务器的ip + queryParam.ip = ip + queryParam.port = port + queryParam.beginQuery( + function(result) { + //查询结果处理 + }, + function quryError(err) { + alert(err) + } + ) + ``` + + ```javascript + if (result != null) { + data = result + //解析显示要素的属性信息 + document.getElementById('code').value = result.SFEleArray[0].AttValue[2] + document.getElementById('name').value = result.SFEleArray[0].AttValue[3] + document.getElementById('spell').value = result.SFEleArray[0].AttValue[4] + document.getElementById('population').value = result.SFEleArray[0].AttValue[40] + //解析要素的几何信息 + var GeompointArray = new Array() + for (var pointlength = 0; pointlength < result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots.length; pointlength++) { + var PntCartesian3 = Cesium.Cartesian3.fromDegrees(result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots[pointlength].x, result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots[pointlength].y, 10) + GeompointArray.push(PntCartesian3) + } + GeompointArray.push(GeompointArray[0]) + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //构造区对象 + var polygon = { + name: '立体区', + polygon: { + //坐标点 + hierarchy: GeompointArray, + //是否指定各点高度 + perPositionHeight: true, + //颜色 + material: new Cesium.Color(33 / 255, 150 / 255, 243 / 255, 0.5), + //轮廓线是否显示 + outline: true, + //轮廓线颜色 + outlineColor: Cesium.Color.BLACK, + }, + } + //绘制图形通用方法:对接Cesium原生特性 + var stericPolygon = entityController.appendGraphics(polygon) + } + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【地图数据显示地图图层类】`CesiumZondy.Layer.ThirdPartyLayer`、`CesiumZondy.Layer.TilesLayer` + +#### 3.【二维地图文档查询类】`CesiumZondy.Query.MapDocQuery` + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------ | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| docObj | MapDocObj | null | 查询对应的地图服务,参考 ClassLib.js 中的 MapDocObj 对象 | +| docName | String | '' | 地图服务名称 | +| mapIndex | Int | 0 | 地图在文档下得序号,一般为 0 | +| layerID | Int | 0 | 图层序号 | +| geometryType | String | '' | 几何类型描述,格式:'point | circle | rect | line | polygon' | +| geometry | String | '' | 点的集合,几何约束区域参数,其形式取决于 geometryType 的值,即取决于几何约束类型
point--x,y,[ neardistance],neardistance 为可选,即容差,下同
circle--x,y,r 注意在球上执行画圆时由于插件提供的圆为椭圆,给出的点集也是大量离散点,因此这种情况下,依然采用 polygon 方式执行查询
rect--xmin,ymin,xmax,ymax
line--x1,y1,x2,y2,x3,y3…;[neardistance]
polygon--x1,y1,x2,y2,x3,y3…第一个点与最后一个点相同 | +| where | String | '' | 查询属性条件,符合 SQL 查询规范的任何字符串 | +| f | String | 'json' | 返回结果的序列化形式 | +| objectIds | String | '' | 需要查询的要素 Id 号,格式:oid1,oid2,oid3 | +| structs | json | '' | 指定查询结果的结构,json 规范 | +| page | String | '' | 返回的要素分页的页数,默认返回第 0 页 | +| pageCount | String | '' | 要素结果集每页的记录数量,默认为 20 条/页 | +| rule | String | '' | 指定查询规则,Json 表示形式 | +| queryResult | String | '未查询' | 这里查询结果,这里主要是存放查询过程中报错信息 | +| ip | String | '' | 查询数据服务的 IP | +| port | String | '' | 查询数据服务的端口号 | + +##### 【method】`beginQuery(successCallback, errorCallback)`:开始查询 + +| 参数名 | 类 型 | 说 明 | +| --------------- | -------- | -------------------- | +| successCallback | function | 查询执行成功回调函数 | +| errorCallback | function | 询执行失败回调函数 | diff --git a/website/public/static/demo/military/markdown/query/query-attquery.md b/website/public/static/demo/military/markdown/query/query-attquery.md new file mode 100644 index 000000000..baad48ecf --- /dev/null +++ b/website/public/static/demo/military/markdown/query/query-attquery.md @@ -0,0 +1,113 @@ +## 三维模型数据属性查询 + +### 示例功能 + +    此功能通过模型要素的属性信息来查询已加载显示的三维模型数据的属性、几何等要素信息。 + +### 示例实现: + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为景观模型数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口`CesiumZondy.Query.G3DDocQuery`提供的`queryG3DFeature`方法来查询模型要素信息 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数; + +- Example: + + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ModelM3D', { + //是否自动定位到数据位置 + autoReset: false, + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 8, + }) + ``` + + 加载数据默认会自动跳转定位到数据所在位置,如果需要自定义设置跳转的位置,可在`append()`方法中设置`autoReset: false`参数,取消自动定位,然后调用`SceneManager`视图功能管理对象的`flyToEx()`方法跳转视角; + + ```javascript + //视点跳转(经度,纬度,视角高度,方位角,俯仰角,翻滚角) + sceneManager.flyToEx(114.40298522106733, 30.465568703723072, { + height: 100.85856618500283, + heading: -45.4940479913348135, + pitch: -15, + roll: 0, + }) + ``` + +**Step 5. 初始化三维地图文档查询对象**: +    初始化三维地图文档查询对象:构造`CesiumZondy.Query.G3DDocQuery`三维地图文档查询对象,配置相关参数后调用 `queryG3DFeature`方法执行查询方法。 + +- Example: + ```javascript + var queryParam = new CesiumZondy.Query.G3DDocQuery() + //查询图层的URL路径 + queryParam.gdbp = encodeURI('gdbp://MapGisLocal/示例数据/ds/三维示例/sfcls/景观_模型') + //设置查询结果结构 + queryParam.structs = '{"IncludeAttribute":true,"IncludeGeometry":true,"IncludeWebGraphic":false}' + //属性查询 + queryParam.where = "test='19.6'" + //服务器的ip + queryParam.serverIp = ip + queryParam.serverPort = port + queryParam.queryG3DFeature( + function(result) {}, + function(err) {} + ) + ``` + +### 关键接口 + +#### 1.【三维地图文档查询类】`CesiumZondy.Query.G3DDocQuery(option)` + +- `options` 属性说明 + +| 参数名 | 类型 | 说明 | +| ------------ | ------ | ------------------------------------------------ | +| serverIp | string | igs 服务 ip | +| serverPort | string | igs 服务端口号 | +| docName | string | 三维文档的名称 | +| gdbp | string | 三维图层的 gdbpUrl | +| layerIndex | int | 图层序号 | +| geometryType | string | 几何类型描述 | +| geometry | string | 几何约束区域参数,其形式取决于 geometryType 的值 | +| where | string | 符合 SQL 查询规范的任何字符串 | +| objectIds | string | 需要查询的要素 Id 号 | +| structs | json | 指定查询结果的结构 | +| page | string | 回的要素分页的页数 | +| pageCount | string | 要素结果集每页的记录数量 | +| rule | json | 查询规则 | +| queryResult | string | 查询结果,这里主要是存放查询过程中报错信息 | + +##### 【method】 `queryG3DFeature(successCallback, errorCallback, type)` 查询对应的三维地图 + +| 参数名 | 类型 | 说明 | +| --------------- | -------- | ------------- | +| successCallback | function | 成功回调 | +| errorCallback | function | 失败回调 | +| type | String | 类型 post/get | diff --git a/website/public/static/demo/military/markdown/query/query-geomquery.md b/website/public/static/demo/military/markdown/query/query-geomquery.md new file mode 100644 index 000000000..6ca3d47fe --- /dev/null +++ b/website/public/static/demo/military/markdown/query/query-geomquery.md @@ -0,0 +1,117 @@ +## 三维模型数据几何查询 + +### 示例功能 + +    此功能通过几何信息来查询已加载显示的三维模型数据的属性、几何等要素信息。 + +### 示例实现: + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为景观模型数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口`CesiumZondy.Query.G3DDocQuery`提供的`queryG3DFeature`方法来查询模型要素信息 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数; + +- Example: + + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ModelM3D', { + //是否自动定位到数据位置 + autoReset: false, + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 8, + }) + ``` + +加载数据默认会自动跳转定位到数据所在位置,如果需要自定义设置跳转的位置,可在`append()`方法中设置`autoReset: false`参数,取消自动定位,然后调用`SceneManager`视图功能管理对象的`flyToEx()`方法跳转视角; + +- Example: + ```javascript + //视点跳转(经度,纬度,视角高度,方位角,俯仰角,翻滚角) + sceneManager.flyToEx(114.40298522106733, 30.465568703723072, { + height: 100.85856618500283, + heading: -45.4940479913348135, + pitch: -15, + roll: 0, + }) + ``` + +**Step 5. 初始化三维地图文档查询对象**: +    初始化三维地图文档查询对象:构造`CesiumZondy.Query.G3DDocQuery`三维地图文档查询对象,配置相关参数后调用 `queryG3DFeature`方法执行查询方法。 + +- Example: + ```javascript + var queryParam = new CesiumZondy.Query.G3DDocQuery() + //查询图层的URL路径 + queryParam.gdbp = encodeURI('gdbp://MapGisLocal/示例数据/ds/三维示例/sfcls/景观_模型') + //设置查询结果结构 + queryParam.structs = '{"IncludeAttribute":true,"IncludeGeometry":true,"IncludeWebGraphic":false}' + //几何查询 + //设置查询方式 + queryParam.geometryType = 'Point3D' + //设置查询的点坐标 + queryParam.geometry = 92.37674872254775 + ',' + 163.57024299752067 + ',' + 21 + //服务器的ip + queryParam.serverIp = ip + queryParam.serverPort = port + queryParam.queryG3DFeature( + function(result) {}, + function(err) {} + ) + ``` + +### 关键接口 + +#### 1.【三维地图文档查询类】`CesiumZondy.Query.G3DDocQuery(option)` + +- `options` 属性说明 + +| 参数名 | 类型 | 说明 | +| ------------ | ------ | ------------------------------------------------ | +| serverIp | string | igs 服务 ip | +| serverPort | string | igs 服务端口号 | +| docName | string | 三维文档的名称 | +| gdbp | string | 三维图层的 gdbpUrl | +| layerIndex | int | 图层序号 | +| geometryType | string | 几何类型描述 | +| geometry | string | 几何约束区域参数,其形式取决于 geometryType 的值 | +| where | string | 符合 SQL 查询规范的任何字符串 | +| objectIds | string | 需要查询的要素 Id 号 | +| structs | json | 指定查询结果的结构 | +| page | string | 回的要素分页的页数 | +| pageCount | string | 要素结果集每页的记录数量 | +| rule | json | 查询规则 | +| queryResult | string | 查询结果,这里主要是存放查询过程中报错信息 | + +##### 【method】 `queryG3DFeature(successCallback, errorCallback, type)` 查询对应的三维地图 + +| 参数名 | 类型 | 说明 | +| --------------- | -------- | ------------- | +| successCallback | function | 成功回调 | +| errorCallback | function | 失败回调 | +| type | String | 类型 post/get | diff --git a/website/public/static/demo/military/markdown/query/query-m3deditor.md b/website/public/static/demo/military/markdown/query/query-m3deditor.md new file mode 100644 index 000000000..02a1bd358 --- /dev/null +++ b/website/public/static/demo/military/markdown/query/query-m3deditor.md @@ -0,0 +1,64 @@ +## M3D 数据交互编辑 + +### 示例功能 + +    本示例实现移动在三维场景中加载的 M3D 数据,只是修改数据上层显示位置,并不会修改数据本身。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,首先加载 M3D 数据,然后构造`Cesium.TransformEditor()` 平移编辑器对象,获取其模型视图成员`viewModel`,然后调用模型视图的`setModeTranslation()`设置模型视图平移方法、调用`activate()`激活平移工具,即可激活模型数据,会展示 XYZ 三条轴线,拖动轴线即可实现模型在对应方向上的平移。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 加载数据**: +    加载 M3D 数据:例如加载 M3D 地质体数据; + +- Example: + ```Javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + modelLayers = m3dLayer.append( + 'http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', + { + maximumScreenSpaceError: 1 + } + ); + ``` + +**Step 4. 创建编辑器**: +    创建编辑器:初始化 `Cesium.TransformEditor()` 平移编辑器对象,然后调用模型视图的 `setModeTranslation()` 设置模型视图平移,最后调用模型视图的 `activate()`方法激活平移工具,即可在场景中添加 XYZ 三条轴线,拖动轴线即可实现模型在对应方向上的平移。 + +- Example: + + ```Javascript + //创建平移编辑器 + var transformEditor = new Cesium.TransformEditor({ + container: webGlobe.viewer.container, + scene: webGlobe.viewer.scene, + transform: modelLayers[0]._root.transform, + boundingSphere: modelLayers[0].boundingSphere + }); + //获取模型视图对象 + var viewModel = transformEditor.viewModel; + //设置模型视图平移 + viewModel.setModeTranslation(); + //激活工具 + viewModel.activate(); + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +#### 2.【平移编辑器类】Cesium.TransformEditor(options)(API 暂无) diff --git a/website/public/static/demo/military/markdown/query/query-m3dquery.md b/website/public/static/demo/military/markdown/query/query-m3dquery.md new file mode 100644 index 000000000..ef064e932 --- /dev/null +++ b/website/public/static/demo/military/markdown/query/query-m3dquery.md @@ -0,0 +1,140 @@ +## M3D 数据单体查询 + +### 示例功能 + +    本示例实现在三维场景中展示 M3D 模型数据,并实现单体查询功能。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为:`Cesium.WebSceneControl.Scene`类的`pick()`方法来选取要素,`CesiumZondy.Manager.AnalysisManager`类的`startCustomDisplay()`方法来实现模型高亮。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    引用开发库:本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建三维视图 Div 容器,构造三维场景控件 WebSceneControl,构造并设置鼠标位置信息显示控件,加载 Google 地图作为底图显示; + +**Step 3. 加载数据**: +    加载 M3D 模型数据:例如 M3D 建筑粗模数据; + +- Example: + + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var layerList = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/buildings1', { + maximumScreenSpaceError: 1, + }) + ``` + +**Step 4. 注册鼠标点击杀事件**: +    注册鼠标点击事件:构造`CesiumZondy.Manager.MouseEventManager`对象,调用`registerMouseEvent()`方法注册鼠标左键单击事件,在事件方法中选取要素,然后构造`CesiumZondy.Manager.AnalysisManager`对象,调用其`startCustomDisplay()`方法实现高亮。 + +- Example: + ```javascript + //构造鼠标事件管理对象 + var mouseEventManager = new CesiumZondy.Manager.MouseEventManager({ + viewer: webGlobe.viewer, + }) + //注册鼠标左键单击事件 + mouseEventManager.registerMouseEvent('LEFT_CLICK', highlightPicking) + ``` + +鼠标左键单击事件方法:实现高亮; + +- Example: + + ```javascript + /*鼠标左键单击事件回调:模型高亮*/ + function highlightPicking(movement) { + //根据鼠标点击位置选择对象 + var pickedFeature = webGlobe.scene.pick(movement.position) + + //获取要素的瓦片集 + var currentLayer = [pickedFeature.tileset] + //获取名称属性 + var title = pickedFeature.getProperty('name') + //采用_分割 + var values = title.split('_') + //获取数组中第三个数值,即为要素的ID + var vlueNumber = parseInt(values[2]) + //构建数组 + var idList = [vlueNumber] + //构建参数:设置颜色 + var options = { + //高亮颜色 + color: new Cesium.Color(255 / 255, 255 / 255, 0 / 255, 1), + //高亮模式:REPLACE为替换 + colorBlendMode: Cesium.Cesium3DTileColorBlendMode.REPLACE, + } + + //构造分析功能管理对象 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer, + }) + //开始闪烁查找到的模型 + analysisManager.startCustomDisplay(currentLayer, idList, options) + } + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【鼠标事件管理类】`MouseEventManager` + +##### 【method】`registerMouseEvent(eventType, callbackFun, handler) → {Handler}`:注册鼠标事件 + +| 参数名 | 类 型 | 说 明 | +| ----------- | -------- | ----------------------------------------------------------------------------------------------------- | +| eventType | String | 事件类型:LEFT_CLICK、RIGHT_CLICK、MOUSE_MOVE、LEFT_DOUBLE_CLICK、RIGHT_DOUBLE_CLICK、WHEEL(鼠标滚轮) | +| callbackFun | function | 回调函数 | +| handler | Object | 事件句柄 | + +#### 3.【分析功能管理类】AnalysisManager + +##### 【method】`startCustomDisplay(layerList, idList, options)`:高亮显示 + +| 参数名 | 类 型 | 说 明 | +| ------------ | -------------- | -------- | +| layerList | Array.\ | 图层列表 | +| idList | Array.\ | id 列表 | +| optionsParam | Object | 扩展属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | -------------------------- | ------------------------------------------- | ------------------------------------------------------- | +| color | Color | new Cesium.Color(1.0,0,0,0.5) | (可选)高亮颜色 | +| colorBlendMode | Cesium3DTileColorBlendMode | Cesium.Cesium3DTileColorBlendMode.HIGHLIGHT | (可选)高亮模式 | +| colorBlendAmount | Number | 0.5 | (可选)混合系数 | +| applyForLayer | Boolean | false | (可选)是否应用至图层 | +| negate | Color | true | (可选)是否取反 ——意思是除了 id 列表中的要素应用 color | +| negateColor | Color | new Cesium.Color.WHITE | (可选)取反的颜色 只有在 negate=true 的时候才起作用 | +| style | String | 'EdgeHighlight' | (可选)高亮模式//'EdgeHighlight'高亮+描边 'Edge'//描边 | +| edgeColor | Color | new Cesium.Color(0, 0, 1,1.0) | (可选)默认红色 | + +##### 【method】`stopCustomDisplay()`:停止全部高亮 diff --git a/website/public/static/demo/military/markdown/query/query-oidquery.md b/website/public/static/demo/military/markdown/query/query-oidquery.md new file mode 100644 index 000000000..6716da809 --- /dev/null +++ b/website/public/static/demo/military/markdown/query/query-oidquery.md @@ -0,0 +1,115 @@ +## 三维模型数据 OID 查询 + +### 示例功能 + +    此功能通过模型要素的 OID 信息来查询已加载显示的三维模型数据的属性、几何等要素信息。 + +### 示例实现: + +    数据准备:本示例采用的数据经过两个步骤生成,首先需在 MapGIS Desktop 桌面平台软件中为景观模型数据生成 M3D 缓存,并组织为地图文档;然后在 MapGIS Server Manager 服务管理器中根据地图文档发布为三维地图服务。 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口`CesiumZondy.Query.G3DDocQuery`提供的`queryG3DFeature`方法来查询模型要素信息。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:构造`CesiumZondy.Layer.M3DLayer`M3D 图层管理对象,调用`append()`方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数; + +- Example: + ```javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer, + }) + //加载M3D地图文档(服务地址,配置参数) + var landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ModelM3D', { + //是否自动定位到数据位置 + autoReset: false, + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 8, + }) + ``` + +加载数据默认会自动跳转定位到数据所在位置,如果需要自定义设置跳转的位置,可在`append()`方法中设置`autoReset: false`参数,取消自动定位,然后调用`SceneManager`视图功能管理对象的`flyToEx()`方法跳转视角; + +- Example: + ```javascript + //视点跳转(经度,纬度,视角高度,方位角,俯仰角,翻滚角) + sceneManager.flyToEx(114.40298522106733, 30.465568703723072, { + height: 100.85856618500283, + heading: -45.4940479913348135, + pitch: -15, + roll: 0, + }) + ``` + +**Step 5. 初始化三维地图文档查询对象**: +    初始化三维地图文档查询对象:构造`CesiumZondy.Query.G3DDocQuery`三维地图文档查询对象,配置相关参数后调用 `queryG3DFeature`方法执行查询方法。 + +- Example: + ```javascript + var queryParam = new CesiumZondy.Query.G3DDocQuery() + //查询图层的URL路径 + queryParam.gdbp = encodeURI('gdbp://MapGisLocal/示例数据/ds/三维示例/sfcls/景观_模型') + //设置查询结果结构 + queryParam.structs = '{"IncludeAttribute":true,"IncludeGeometry":true,"IncludeWebGraphic":false}' + //OID查询 + queryParam.objectIds = '1' + //服务器的ip + queryParam.serverIp = ip + queryParam.serverPort = port + queryParam.queryG3DFeature( + function(result) {}, + function(err) {} + ) + ``` + +### 关键接口 + +#### 1.【三维地图文档查询类】`CesiumZondy.Query.G3DDocQuery(option)` + +- `options` 属性说明 + +| 参数名 | 类型 | 说明 | +| ------------ | ------ | ------------------------------------------------ | +| serverIp | string | igs 服务 ip | +| serverPort | string | igs 服务端口号 | +| docName | string | 三维文档的名称 | +| gdbp | string | 三维图层的 gdbpUrl | +| layerIndex | int | 图层序号 | +| geometryType | string | 几何类型描述 | +| geometry | string | 几何约束区域参数,其形式取决于 geometryType 的值 | +| where | string | 符合 SQL 查询规范的任何字符串 | +| objectIds | string | 需要查询的要素 Id 号 | +| structs | json | 指定查询结果的结构 | +| page | string | 回的要素分页的页数 | +| pageCount | string | 要素结果集每页的记录数量 | +| rule | json | 查询规则 | +| queryResult | string | 查询结果,这里主要是存放查询过程中报错信息 | + +##### 【method】 `queryG3DFeature(successCallback, errorCallback, type)` 查询对应的三维地图 + +- `queryG3DFeature` 方法主要参数 + +| 参数名 | 类型 | 说明 | +| --------------- | -------- | ------------- | +| successCallback | function | 成功回调 | +| errorCallback | function | 失败回调 | +| type | String | 类型 post/get | diff --git a/website/public/static/demo/military/markdown/scene/scene-2D.md b/website/public/static/demo/military/markdown/scene/scene-2D.md new file mode 100644 index 000000000..075417025 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-2D.md @@ -0,0 +1,52 @@ +## 二维模式 + +### 示例功能 + +此功能用于将三维球展开,变成二维地图模式。 + +### 示例实现: + +本示例需要使用include-cesium-local.js开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `changeSceneMode()` 方法切换地图显示模式。 + +### 实现步骤: + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +2. 创建三维地图容器并加载三维球控件:创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +``` Javascript +//构造三维视图类(视图容器div的id,三维视图设置参数) +var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, +}); +``` + +``` html +
+``` + +3. 模式切换:初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `changeSceneMode()` 方法切换地图显示模式; + +``` Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //切换场景模式 + sceneManager.changeSceneMode('2D', 1); +``` + +### 关键接口 + +#### 1. 【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2. 【视图功能管理类】 `CesiumZondy.Manager.SceneManager` + +##### (1) `changeSceneMode(sceneMode, duration)` 切换场景模式 + +> `changeSceneMode` 方法主要参数 + +|参数名|类型|说明| +|-|-|-| +|sceneMode|String|场景模式'3D', '2D', 'COLUMBUS_VIEW'(平面三维)| +|duration|Number|动画持续时间,<=0时,保持场景范围不变| diff --git a/website/public/static/demo/military/markdown/scene/scene-3Dground.md b/website/public/static/demo/military/markdown/scene/scene-3Dground.md new file mode 100644 index 000000000..775c30811 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-3Dground.md @@ -0,0 +1,52 @@ +## 平面三维模式 + +### 示例功能 + +此功能用于将三维球变成平面三维模式。 + +### 示例实现: + +本示例需要使用include-cesium-local.js开发库实现,初始化Cesium三维球控件 `Cesium.WebSceneControl()` 后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `changeSceneMode()` 方法切换地图显示模式。 + +### 实现步骤: + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +2. 创建三维地图容器并加载三维球控件:创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +``` Javascript +//构造三维视图类(视图容器div的id,三维视图设置参数) +var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, +}); +``` + +``` html +
+``` + +3. 模式切换:初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `changeSceneMode()` 方法切换地图显示模式; + +``` Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //切换场景模式 + sceneManager.changeSceneMode('COLUMBUS_VIEW', 1) +``` + +### 关键接口 + +#### 1. 【三维视图的主要类】 `Cesium.WebSceneControl` + +#### 2. 【视图功能管理类】 `CesiumZondy.Manager.SceneManager` + +##### (1) `changeSceneMode(sceneMode, duration)` 切换场景模式 + +> `changeSceneMode` 方法主要参数 + +|参数名|类型|说明| +|-|-|-| +|sceneMode|String|场景模式'3D', '2D', 'COLUMBUS_VIEW'(平面三维)| +|duration|Number|动画持续时间,<=0时,保持场景范围不变| diff --git a/website/public/static/demo/military/markdown/scene/scene-changeSkyBox.md b/website/public/static/demo/military/markdown/scene/scene-changeSkyBox.md new file mode 100644 index 000000000..e69de29bb diff --git a/website/public/static/demo/military/markdown/scene/scene-fly.md b/website/public/static/demo/military/markdown/scene/scene-fly.md new file mode 100644 index 000000000..372dcc555 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-fly.md @@ -0,0 +1,161 @@ +## 视点跳转 + +### 示例功能 + +    本示例实现场景视点跳转功能,根据坐标点在三维球上进行定位跳转。此功能为场景视图的基础功能,应用非常广泛,可根据具体应用场景需求调用合适的方法。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` , 初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的如下 4 个视点跳转方法进行视点跳转。 + +- `flyTo`:视点跳转简单方法,根据经纬度、视角高度、跳转持续时间进行视点跳转; +- `flyToComm`:视点跳转通用方法,根据经纬度、视角高度,以及原生的可扩展参数进行视点跳转; +- `flyToEx`:视点跳转扩展方法,根据经纬度,以及可扩展的参数(包括视角高度、持续时间、方位角、俯仰角、翻滚角)进行视点跳转; +- `flyToFeatureById`:根据 ID 飞行到特定要素位置,即通过图层的某个要素进行定位跳转。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 视点跳转**: +    初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,根据具体场景需求选择调用视图功能管理类的几个视点跳转方法( `flyTo、flyToComm、flyToEx、flyToFeatureById`)进行视点跳转。 + +- Example: + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +* flyTo() + +* Example: + ```Javascript + //跳转视图(北京) + sceneManager.flyTo(116.44, 40, 300000, 2); + ``` + +- flyToComm() + +* Example: + ```Javascript + //跳转视图(武汉) + sceneManager.flyToComm(114.3, 30.6, 100000); + ``` + +- flyToEx() + +* Example: + ```Javascript + //视点跳转(中地科技园) + sceneManager.flyToEx(114.40298522106733, 30.465568703723072, { + height: 100.85856618500283, + heading: -45.4940479913348135, + pitch: -15, + roll: 0 + }); + ``` + +- flyToFeatureById() + +* Example: + + ```Javascript + //加载M3D地图文档(服务地址,配置参数) + Layer2 = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/buildings1', { + autoReset: false, + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 0 + }); + //视点跳转-根据 ID 飞行到特定要素位置(上海) + sceneManager.flyToFeatureById(Layer2, 10 ,{ + height: 950, + heading: 22, + pitch: -20, + roll: 0 + }); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2. 【视图功能管理类】 `CesiumZondy.Manager.SceneManager` + +##### 【method】`flyTo(lon, lon, heightParam, duration)` 跳转 + +| 参数名 | 类型 | 说明 | +| ----------- | ------ | ------------ | +| lon | Number | 经度 | +| lon | Number | 纬度 | +| heightParam | Number | 视角高度 | +| duration | Number | 跳转持续时间 | + +##### 【method】 `flyToComm(lon, lat, heightParam, options opt)` 通用跳转接口 + +| 参数名 | 类型 | 说明 | +| ----------- | ------ | -------------------------- | +| lon | Number | 经度 | +| lon | Number | 纬度 | +| heightParam | Number | 视角高度 | +| options | Object | (可选)扩展属性,兼容原生 | + +##### 【method】 `flyToEx(lon, lon, options opt)` 跳转到 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | -------------------------- | +| lon | Number | 经度 | +| lon | Number | 纬度 | +| options | Object | (可选)扩展属性,兼容原生 | + +- `options` 属性参数 + +| 参数名 | 类型 | 说明 | +| -------- | ------ | ---------------- | +| height | Number | (可选)视角高度 | +| duration | Number | (可选)持续时间 | +| heading | Number | (可选)方位角 | +| pitch | Number | (可选)俯仰角 | +| roll | Number | (可选)翻滚角 | + +##### 【method】 `flyToFeatureById(layerList, id, optionsParamopt)` 根据 ID 飞行到特定要素位置 + +| 参数名 | 类型 | 说明 | +| --------- | ------------- | ---------------- | +| layerList | Array. | 图层列表 | +| id | Array. | ID 列表 | +| options | Object | (可选)扩展属性 | diff --git a/website/public/static/demo/military/markdown/scene/scene-operation.md b/website/public/static/demo/military/markdown/scene/scene-operation.md new file mode 100644 index 000000000..47de553f5 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-operation.md @@ -0,0 +1,134 @@ +## 场景基本操作 + +### 示例功能 + +    本示例实现场景的基本操作功能,包括场景视图缩放、复位、三维球自转、设置天空盒等。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` , 然后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的如下几个方法分别实现对应的场景操作功能。 + +- `zoomIn`:放大; +- `zoomOut`:缩小; +- `goHome`:复位; +- `openRotation`:开启自转; +- `closeRotation`:关闭自转; +- `changeSkyBox`:修改天空盒。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 实现场景操作功能**: +    初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,根据具体场景操作需求选择调用视图功能管理类的对应方法实现。 + +- Example: + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +* zoomin() + +- Example: + + ```Javascript + sceneManager.zoomin();//放大 + ``` + +- zoomout() + +- Example: + + ```Javascript + sceneManager.zoomout();//缩小 + ``` + +- goHome() + +- Example: + + ```Javascript + sceneManager.goHome();//复位 + ``` + +- openRotation()与 closeRotation() + +```Javascript + sceneManager.openRotation();//开启自转 + ceneManager.closeRotation();//关闭自转 +``` + +- changeSkyBox() + +- Example: + ```Javascript + var skybox = new Cesium.SkyBox({ + sources: { + positiveX: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/front.jpg', + negativeX: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/back.jpg', + positiveY: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/left.jpg', + negativeY: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/right.jpg', + positiveZ: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/top.jpg', + negativeZ: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/bottom.jpg' + } + }); + sceneManager.changeSkyBox(skybox); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2. 【视图功能管理类】 `CesiumZondy.Manager.SceneManager` + +##### 【method】 `zoomIn()` 放大 + +##### 【method】 `zoomOut()` 缩小 + +##### 【method】 `goHome()` 复位 + +##### 【method】 `openRotation()` 开启自转 + +##### 【method】 `closeRotation()` 关闭自转 + +##### 【method】 `changeSkyBox(skybox)` 修改天空盒 + +| 参数名 | 类型 | 说明 | +| ------ | ---------------------------- | ---------- | +| skybox | SkyBox,即 Cesium.SkyBox 对象 | 天空盒对象 | diff --git a/website/public/static/demo/military/markdown/scene/scene-rotationView.md b/website/public/static/demo/military/markdown/scene/scene-rotationView.md new file mode 100644 index 000000000..67c146c04 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-rotationView.md @@ -0,0 +1,132 @@ +## 绕点旋转 + +### 示例功能 + +    本示例实现场景绕点旋转功能,配合场景绕点旋转事件,实现开启、暂停、停止绕点旋转功能。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。 +先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` , 然后初始化公共方法管理类 `CesiumZondy.Manager.CommonFuncManager()` ,分别调用如下对应的方法实现开启、暂停、停止绕点旋转功能。 + +- `rotationView`:绕点旋转事件,相机绕点飞行一周或者相机绕自身旋转一周; +- `removeRotationView`:移除绕点自旋转事件; +- `startRotationAroundPos`:开始围绕旋转,与暂停配合使用; +- `pauseRotationView`:暂停围绕旋转,与开始围绕旋转配合使用。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 实现场景绕点旋转控制功能**: +    初始化公共方法管理类 `CesiumZondy.Manager.CommonFuncManager()` ,分别调用如下对应的方法实现开启、暂停、停止绕点旋转功能。 + +- rotationView() + +* Example: + ```Javascript + //设置旋转点 + var opt ={ + position:Cesium.Cartesian3.fromDegrees(108.96044700955785,34.21796237686321,60.99772929683282), + pitch:-15, + distance:700, + duration:10, + ClockRange:Cesium.ClockRange.CLAMPED + }; + //初始化公共方法管理类 + var commfun = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //初始化创建一个绕点旋转事件 + var update = commfun.rotationView('rotationAroundPos',opt) ; + ``` + +- startRotationAroundPos() + +* Example: + ```Javascript + //设置开始绕点旋转 + commfun.startRotationAroundPos(update); + ``` + +- pauseRotationView() + +* Example: + ```Javascript + //设置暂停绕点旋转 + commfun.pauseRotationView(update); + ``` + +- removeRotationView() + +* Example: + ```Javascript + //设置移除绕点旋转事件 + commfun.removeRotationView(update); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2. 【公共方法管理类】 `CesiumZondy.Manager.CommonFuncManager` + +##### 【method】 `rotationView(typeopt, optionsParam opt) → {Event}` 绕点旋转事件,相机绕点飞行一周或者相机绕自身旋转一周 + +| 参数名 | 类型 | 默认值 | 说明 | +| ------------ | ------ | ------------------- | ------------------------------------ | +| type | String | 'rotationAroundPos' | (可选)旋转类型,默认绕相机自身旋转 | +| optionsParam | Object | —— | (可选)附加参数信息 | + +- `optionsParam` 属性参数 + +| 参数名 | 类型 | 默认值 | 说明 | +| ---------- | ---------- | ------------------------- | ----------------------------------- | +| position | Cartesian3 | | (可选)要进行围绕旋转的点 | +| pitch | Number | -30 | (可选)相机的俯仰角 单位(度) | +| distance | Number | 500000 | (可选)相机距离点的距离 单位(米) | +| duration | Number | 10 | 绕点飞行一周所用的时间 单位(秒) | +| ClockRange | Number | Cesium.ClockRange.CLAMPED | (可选)循环方式 | + +##### 【method】 `removeRotationView(event)` 移除绕点自旋转事件 + +| 参数名 | 类型 | 说明 | +| ------ | ---------------------------------------- | ------------ | +| event | Event,即 rotationView 方法返回的事件对象 | 绕点旋转事件 | + +##### 【method】 `startRotationAroundPos()` 开始围绕旋转,与暂停配合使用 + +##### 【method】 `pauseRotationView()` 暂停围绕旋转,与开始围绕旋转配合使用 diff --git a/website/public/static/demo/military/markdown/scene/scene-sceneMode.md b/website/public/static/demo/military/markdown/scene/scene-sceneMode.md new file mode 100644 index 000000000..c43661594 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-sceneMode.md @@ -0,0 +1,83 @@ +## 场景视图模式 + +### 示例功能 + +    场景视图模式提供三种模式:三维球面模式、三维平面模式、二维地图模式,在实际应用中可根据具体应用场景设置。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` 后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `changeSceneMode()` 方法切换地图显示模式。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 模式切换**: +    模式切换:初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `changeSceneMode()` 方法切换地图显示模式。 + +- Example: + + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + let mode = document.getElementById("modeSelect").value; + //根据选择切换场景视图模式 + if (mode == '3D') { + //切换场景模式为三维球面 + sceneManager.changeSceneMode('3D', 1); + } else if (mode === '3DC') { + //切换场景模式为三维平面 + sceneManager.changeSceneMode('COLUMBUS_VIEW', 1); + } else if (mode === '2D') { + //切换场景模式为二维地图 + sceneManager.changeSceneMode('2D', 1); + } + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2. 【视图功能管理类】 `CesiumZondy.Manager.SceneManager` + +##### 【method】 `changeSceneMode(sceneMode, duration)` 切换场景模式 + +| 参数名 | 类型 | 说明 | +| --------- | ------ | --------------------------------------------- | +| sceneMode | String | 场景模式'3D', '2D', 'COLUMBUS_VIEW'(平面三维) | +| duration | Number | 动画持续时间,<=0 时,保持场景范围不变 | diff --git a/website/public/static/demo/military/markdown/scene/scene-sceneOut.md b/website/public/static/demo/military/markdown/scene/scene-sceneOut.md new file mode 100644 index 000000000..60a5eefd1 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-sceneOut.md @@ -0,0 +1,101 @@ +## 场景出图 + +### 示例功能 + +    此功能用于将当前场景输出成图片。可通过 CommonFuncManager 类的 outputImageFile()与 outputImageObj()实现此功能。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` 加载数据;然后初始化常用功能管理类 `CesiumZondy.Manager.CommonFuncManager()` ,调用常用功能管理类的 `outputImageFile()` 方法或`outputImageObj()`方法进行场景输出图片。 + +- `outputImageFile`:将屏幕截图输出为`图片文件`; +- `outputImageObj`:将屏幕截图输出为`图像对象`,可保存为不同类型图片,应用场景比较丰富。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 场景出图**: +    初始化常用功能管理类 `CesiumZondy.Manager.CommonFuncManager()` ,调用常用功能管理类的 `outputImageFile()` 方法或`outputImageObj()`方法进行场景输出图片。 + +- 使用 outputImageFile() + +* Example: + ```Javascript + var commonFuncManager = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //当前屏幕图片输出为一个图片文件 + commonFuncManager.outputImageFile("图片.png"); + ``` + +- 使用 outputImageObj() + +* Example: + ```Javascript + var comm = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //当前屏幕输出为一个图片对象 + var res = comm.outputImageObj(); + //下载打印此图片对象为png + res.downloadPng("image.png"); + //可输出如下其他格式,可结合其他应用场景使用: + //res.toImg(); + //res.toBase64(); + //res.downloadPng(name); + //res.toCanvas(); + //res.toJpeg(); + //res.toPng(); + ``` + +说明:outputImageObj()返回的是一个图像对象,可直接输出为图片,也可以结合其他应用场景使用,如将图像输出到 Canvas 显示等。 + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2. 【常用功能管理类】`CesiumZondy.Manager.CommonFuncManager` + +##### 【method】 `outputImageFile(fileName)` 屏幕截图输出为图片文件 + +- `outputImageFile` 方法主要参数 + +| 参数名 | 类型 | 说明 | +| -------- | ------ | ------------ | +| fileName | String | 输出图片名称 | + +##### 【method】`outputImageObj()` 屏幕截图输出为图像对象,返回值为图片对象(Object) diff --git a/website/public/static/demo/military/markdown/scene/scene-screenPosition.md b/website/public/static/demo/military/markdown/scene/scene-screenPosition.md new file mode 100644 index 000000000..7c259dd84 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-screenPosition.md @@ -0,0 +1,137 @@ +## 屏幕坐标转换计算 + +    本示例实现根据鼠标事件获取的屏幕坐标进行坐标转换与相关计算的功能,包括常用的屏幕坐标转笛卡尔坐标、屏幕坐标转经纬度、根据经纬度计算高度值。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` , 然后初始化公共方法管理类 `CesiumZondy.Manager.CommonFuncManager()` ,分别调用如下对应的方法实现屏幕坐标转换与相关计算功能。 + +- `screenPositionToCartesian`:屏幕坐标转为笛卡尔坐标; +- `screenPositionToCartographic`:屏幕坐标转为经纬度坐标; +- `getHeightFromDegrees`:根据经纬度计算高度值。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 实现屏幕坐标转换与相关计算功能**: +    初始化公共方法管理类 `CesiumZondy.Manager.CommonFuncManager()` ,分别调用如下对应的方法实现屏幕坐标转笛卡尔坐标、屏幕坐标转经纬度、根据经纬度计算高度值的功能。 + +- Example: + ```Javascript + //初始化公共方法管理类 + var commonFuncManager = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //初始化鼠标事件管理类 + var mouseEventManager = new CesiumZondy.Manager.MouseEventManager({ + viewer: webGlobe.viewer + }); + ``` + +* screenPositionToCartesian() + +* Example: + ```Javascript + //添加鼠标左键单击事件获取屏幕坐标点 + mouseEventManager.registerMouseEvent("LEFT_CLICK", leftToCartesian); + function leftToCartesian(movement) { + //将鼠标左键点击的屏幕坐标转为笛卡尔坐标 + var position = commonFuncManager.screenPositionToCartesian(movement.position); + } + ``` + +- screenPositionToCartographic() + +* Example: + ```Javascript + //添加鼠标左键单击事件获取屏幕坐标点 + mouseEventManager.registerMouseEvent("LEFT_CLICK", leftToCartographic); + function leftToCartographic(movement) { + //将鼠标左键点击的屏幕坐标转为经纬度坐标 + var result = commonFuncManager.screenPositionToCartographic(movement.position); + let lng=Cesium.Math.toDegrees(result.longitude);//转为经度值 + let lat=Cesium.Math.toDegrees(result.latitude);//转为纬度值 + } + ``` + +- getHeightFromDegrees() + +* Example: + + ```Javascript + //添加鼠标左键单击事件获取屏幕坐标点 + mouseEventManager.registerMouseEvent("LEFT_CLICK", leftToHeightFromDegrees); + function leftToHeightFromDegrees(movement) { + //屏幕坐标转笛卡尔坐标 + var cartesian = webGlobe.viewer.getCartesian3Position(movement.position, cartesian); + var cartographic = Cesium.Cartographic.fromCartesian(cartesian); + var lng = Cesium.Math.toDegrees(cartographic.longitude); + var lat = Cesium.Math.toDegrees(cartographic.latitude); + + //根据鼠标左键单击点经纬度计算其高度值 + var height = commonFuncManager.getHeightFromDegrees(lng, lat); + } + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2. 【公共方法管理类】 `CesiumZondy.Manager.CommonFuncManager` + +##### 【method】 `screenPositionToCartesian(position) → {Position}` 屏幕坐标转为笛卡尔坐标,返回三维笛卡尔坐标点对象(Position) + +- `screenPositionToCartesian` 方法主要参数 + +| 参数名 | 类型 | 说明 | +| -------- | -------- | ---------- | +| position | Position | 屏幕坐标点 | + +##### 【method】 `screenPositionToCartographic(position) → {Position}` 屏幕坐标转为经纬度坐标,返回三维经纬度坐标点(单位弧度)对象(Position) + +- `screenPositionToCartographic` 方法主要参数 + +| 参数名 | 类型 | 说明 | +| -------- | -------- | ---------- | +| position | Position | 屏幕坐标点 | + +##### 【method】 `getHeightFromDegrees(longitude, latitude) → {Number}` 根据经纬度计算高度值,返回计算的高度值(Number) + +| 参数名 | 类型 | 说明 | +| --------- | ------ | ------ | +| longitude | Number | 经度值 | +| latitude | Number | 纬度值 | diff --git a/website/public/static/demo/military/markdown/scene/scene-setView.md b/website/public/static/demo/military/markdown/scene/scene-setView.md new file mode 100644 index 000000000..0c30113ab --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-setView.md @@ -0,0 +1,74 @@ +## 设置当前视图范围 + +    本示例实现根据鼠标事件获取的屏幕坐标进行坐标转换与相关计算的功能,包括常用的屏幕坐标转笛卡尔坐标、屏幕坐标转经纬度、根据经纬度计算高度值。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` , 然后初始化场景视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用 setView()方法实现设置当前视图范围功能。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 实现设置当前视图范围功能**: +    初始化场景视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用 setView()方法实现设置当前视图范围功能。 + +- Example: + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //设置当前视图范围 + sceneManager.setView(114.40298522106733, 30.465568703723072, 100.85856618500283, -45.4940479913348135, -15, 0); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2. 【视图功能管理类】 `CesiumZondy.Manager.SceneManager` + +##### 【method】 `setView(lon, lat, height, curHeading, curPitch, curRoll)` 设置当前视图范围 + +| 参数名 | 类型 | 说明 | +| ---------- | ------ | -------------------------- | +| lon | Number | 经度 | +| lat | Number | 纬度 | +| height | Number | 高度 | +| curHeading | Number | 绕垂直于地心的轴旋转的度数 | +| curPitch | Number | 绕纬度线旋转度数 | +| curRoll | Number | 绕经度线旋转度数 | diff --git a/website/public/static/demo/military/markdown/scene/scene-showPosition.md b/website/public/static/demo/military/markdown/scene/scene-showPosition.md new file mode 100644 index 000000000..beac706d9 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-showPosition.md @@ -0,0 +1,124 @@ +## 常用控件 + +### 示例功能 + +    此功能示例显示常用的基础控件,包括鼠标位置、导航控件、比例尺、罗盘等。鼠标位置控件显示当前鼠标所在点的经纬度,高程等位置信息;导航控件提供放大、缩小、复位基础场景导航功能;罗盘控件则为方位指向,通常与导航控件结合使用。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现。先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,然后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `showPosition()` 方法显示位置信息;再初始化通用功能管理类`CesiumZondy.Manager.CommonFuncManager()` ,调用`createNavigationTool()`方法显示常用导航控件。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 创建坐标显示容器,显示鼠标位置**: +    创建一个用于承载显示位置信息的容器,然后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `showPosition()` 方法显示位置信息; + +- Example: + + ```html + +
+ + +
+ ``` + + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //显示鼠标位置控件 + sceneManager.showPosition('coordinateDiv'); + ``` + +**Step 4. 显示常用导航控件**: +    初始化通用功能管理类`CesiumZondy.Manager.CommonFuncManager()` ,调用 `createNavigationTool()` 方法显示常用导航控件,通过设置缩放、比例尺、罗盘的可见属性进行控制。 + +- Example: + ```Javascript + //初始化通用功能管理类 + var commFun = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //显示导航控件(罗盘、场景导航、比例尺) + var navigation = commFun.createNavigationTool({ + enableCompass: true, + enableZoomControls: true, + enableDistanceLegend: true, + enableCompassOuterRing: true + }); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2. 【视图功能管理类】 `CesiumZondy.Manager.SceneManager` + +##### 【method】 `showPosition(elementId, options)` 显示鼠标坐标位置 + +| 参数名 | 类型 | 说明 | +| --------- | ------ | -------- | +| elementId | String | 附加属性 | +| options | Object | 附加属性 | + +- `options` 参数说明 + +| 参数名 | 类型 | 默认值 | 说明 | +| ------------------ | ------- | ------ | ---------------------------------------- | +| showHpr | Boolean | false | (可选)暂无 | +| showSelectTileInfo | Boolean | false | (可选)显示当前鼠标所在位置拾取到的级别 | +| showViewLevelInfo | Boolean | false | (可选)显示视图级别 | + +#### 3. 【通用功能管理类】 `CesiumZondy.Manager.CommonFuncManager` + +##### 【method】 `createNavigationTool(options)` 显示导航控件 + +| 参数名 | 类型 | 说明 | +| ------- | ------ | -------- | +| options | Object | 附加属性 | + +- `options` 参数说明 + +| 参数名 | 类型 | 默认值 | 说明 | +| ---------------------- | ------- | ------ | ---------------------------------------------------- | +| enableCompass | Boolean | true | (可选)用于启用或禁用罗盘控件 | +| enableZoomControls | Boolean | false | (可选)用于启用或禁用缩放导航控件,提供缩放复位功能 | +| enableDistanceLegend | Boolean | false | (可选)用于启用或禁用比例尺控件,即距离图例 | +| enableCompassOuterRing | Boolean | false | (可选)用于启用或禁用指南针外环 | diff --git a/website/public/static/demo/military/markdown/scene/scene-undergroundMode.md b/website/public/static/demo/military/markdown/scene/scene-undergroundMode.md new file mode 100644 index 000000000..790753d52 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-undergroundMode.md @@ -0,0 +1,85 @@ +## 地下模式 + +### 示例功能 + +    此功能用于开启地下模式。地下模式通常用于加载地下三维场景的需求,如加载地下管线等。 + +### 示例实现: + +    本示例需要使用【include-cesium-local.js】开发库实现,通过修改 Cesium 三维球控件 `Cesium.WebSceneControl()` 的参数来实现,根据应用场景需求具体设置相应参数。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example: + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 修改参数**: +    修改 Cesium 三维球控件 `Cesium.WebSceneControl()` 的视图对象的 scene 参数。 + +-地下模式一:开启地下模式并关闭大气层、设置球面透明度 + +- Example: + ```Javascript + //设置地下模式 + webGlobe.viewer.scene.globe.undergroundMode = true; + //大气显示关闭 + webGlobe.viewer.scene.skyAtmosphere.show = false; + //透明度设置 + webGlobe.viewer.scene.globe.transparent = 0.3; + ``` + +-地下模式二:开启地下模式、关闭大气层与地面大气效果、设置球面透明度、设置背景色 + +- Example: + ```Javascript + //设置地下模式 + webGlobe.viewer.scene.globe.undergroundMode = true; + //大气显示关闭 + webGlobe.viewer.scene.skyAtmosphere.show = false; + //地面大气效果关闭 + webGlobe.viewer.scene.skyAtmosphere.showGroundAtmosphere = false; + //透明度设置 + webGlobe.viewer.scene.enableTransparent = true; + //透明度设置 + webGlobe.viewer.scene.globe.transparent = 1; + //背景颜色设置 + webGlobe.viewer.scene.baseColor = new Cesium.Color(1, 1, 1, 0.0001); + webGlobe.viewer.scene.globe.imageryLayers.get(0).alpha = 0; + webGlobe.viewer.scene.globe.imageryLayers.get(1).alpha = 0; + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | diff --git a/website/public/static/demo/military/markdown/scene/scene-undergroundOne.md b/website/public/static/demo/military/markdown/scene/scene-undergroundOne.md new file mode 100644 index 000000000..8ff290da5 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-undergroundOne.md @@ -0,0 +1,38 @@ +## 地下模式一 + +### 示例功能 + +此功能用于开启地下模式。 + +### 示例实现: + +本示例需要使用include-cesium-local.js开发库实现,通过修改Cesium三维球控件 `Cesium.WebSceneControl()` 的参数来实现。 + +### 实现步骤: + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +2. 创建三维地图容器并加载三维球控件:创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +``` Javascript +//构造三维视图类(视图容器div的id,三维视图设置参数) +var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, +}); +``` + +``` html +
+``` + +3. 修改参数:修改Cesium三维球控件 `Cesium.WebSceneControl()` 的视图对象的scene参数 + +``` Javascript +webGlobe.viewer.scene.globe.undergroundMode = true; +webGlobe.viewer.scene.skyAtmosphere.show = false; +webGlobe.viewer.scene.globe.transparent = 0.3; +``` + +### 关键接口 + +#### 1. 【三维视图的主要类】 `Cesium.WebSceneControl` diff --git a/website/public/static/demo/military/markdown/scene/scene-undergroundTwo.md b/website/public/static/demo/military/markdown/scene/scene-undergroundTwo.md new file mode 100644 index 000000000..98fe7d5f6 --- /dev/null +++ b/website/public/static/demo/military/markdown/scene/scene-undergroundTwo.md @@ -0,0 +1,41 @@ +## 地下模式二 + +### 示例功能 + +此功能用于开启地下模式。 + +### 示例实现: + +本示例需要使用include-cesium-local.js开发库实现,通过修改Cesium三维球控件 `Cesium.WebSceneControl()` 的参数来实现。 + +### 实现步骤: + +1. 引用开发库:本示例引用local本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维WebGL的功能; + +2. 创建三维地图容器并加载三维球控件:创建 `id='GlobeView'` 的div作为三维视图的容器,并设置其样式,初始化Cesium三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +``` Javascript +//构造三维视图类(视图容器div的id,三维视图设置参数) +var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, +}); +``` + +``` html +
+``` + +3. 修改参数:修改Cesium三维球控件 `Cesium.WebSceneControl()` 的视图对象的scene参数 + +``` Javascript +webGlobe.viewer.scene.skyAtmosphere.show = false; +webGlobe.viewer.scene.skyAtmosphere.showGroundAtmosphere = false; +webGlobe.viewer.scene.enableTransparent = true; +webGlobe.viewer.scene.baseColor = new Cesium.Color(1, 1, 1, 0.0001); +webGlobe.viewer.scene.globe.imageryLayers.get(0).alpha = 0; +webGlobe.viewer.scene.globe.imageryLayers.get(1).alpha = 0; +``` + +### 关键接口 + +#### 1. 【三维视图的主要类】 `Cesium.WebSceneControl` \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/third/arcgis.md b/website/public/static/demo/military/markdown/third/arcgis.md new file mode 100644 index 000000000..e76f2cc85 --- /dev/null +++ b/website/public/static/demo/military/markdown/third/arcgis.md @@ -0,0 +1,34 @@ +# Esri地图 +> Esri ArcGIS地图请注意`藏南`与`南海九段线`问题,建议使用天地图 + +# 坐标系 +> EPSG:3857 + +# 网络地址 +> 该网络为公网地址 + +## arcgis wms服务 + +> [ArcGIS服务](http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer) + +> > 点击上面的网页,弹出对应的网页如下所示: + + +![igserver](./static/demo/leaflet/markdown/internet/arcserver.png) + +1. `关注上面的红色框,第一个红色框需要注意的是一定要发布对应的WMS服务即出现“WMS”关键字眼` + > 如果没有WMS选项,请先发布个WMS服务,要不然webclient脚本调用不了 +2. 点击wms,获得对应的链接 http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer?request=GetCapabilities&service=WMS +3. 将上面链接 `?` 号之前的地址复制到脚本里面 + ``` javascript + var Layer = L.tileLayer.wms('http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer?', { + //图层序列号 + layers: '0,1,2', + //wms版本号 + version: '1.3.0', + //设置地图不连续显示 + noWrap:true + }).addTo(map); + ``` +4. 设置对应的中心点,请注意 `纬度在前面, 经度在后面` 与正常的习惯相反 +5. 设置对应的显示级别 \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/third/arcserver.png b/website/public/static/demo/military/markdown/third/arcserver.png new file mode 100644 index 000000000..0a28e90a5 Binary files /dev/null and b/website/public/static/demo/military/markdown/third/arcserver.png differ diff --git a/website/public/static/demo/military/markdown/third/bings.md b/website/public/static/demo/military/markdown/third/bings.md new file mode 100644 index 000000000..244b1af7f --- /dev/null +++ b/website/public/static/demo/military/markdown/third/bings.md @@ -0,0 +1,11 @@ +# Bings地图 +> 微软Bing地图请注意`藏南`与`南海九段线`问题,建议使用天地图 + +# 坐标系 +> EPSG:3857 + +# 网络地址 +> 该网络为公网地址 + +# bing key +[创建自己的bing地图key](https://www.bingmapsportal.com/Application) \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/third/osm.md b/website/public/static/demo/military/markdown/third/osm.md new file mode 100644 index 000000000..4549b142d --- /dev/null +++ b/website/public/static/demo/military/markdown/third/osm.md @@ -0,0 +1,8 @@ +# OSM地图 +> OSM地图请注意`藏南`与`南海九段线`问题,建议使用天地图 + +# 坐标系 +> EPSG:3857 + +# 网络地址 +> 该网络为公网地址 \ No newline at end of file diff --git a/website/public/static/demo/military/markdown/third/third-amap.md b/website/public/static/demo/military/markdown/third/third-amap.md new file mode 100644 index 000000000..e883eed55 --- /dev/null +++ b/website/public/static/demo/military/markdown/third/third-amap.md @@ -0,0 +1,81 @@ +## 加载高德地图 + +### 示例功能 + +    本示例对接高德地图服务,实现在三维场景中加载高德地图,坐标系为 EPSG:3857,即 Web 墨卡托坐标系,网络为公网地址。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.ThirdPartyLayer`类提供的`appendGaodeMap()`方法,以此来加载高德地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 特别说明:使用高德地图请注意`藏南`与`南海九段线`问题,建议使用天地图。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,调用`appendGaodeMap()`方法加载高德地图,配置不同参数可加载不同类型地图,如矢量:'vec'、影像:'img'、道路:'road'。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //加载高德地图 + var amapLayer = thirdPartyLayer.appendGaodeMap({ + //地图类型:矢量:'vec'、影像:'img'、道路:'road' + ptype: 'vec', + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【第三方数据图层类】`CesiumZondy.Layer.ThirdPartyLayer` + +##### 【method】`appendGaodeMap(optionsParam) → {ImageryLayer}`:添加高德地图服务,返回瓦片层对象(ImageryLayer),可用于操作移除 + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| optionsParam | Object | 附加属性 | + +- `optionsParam`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------------ | ------ | ------ | ---------------------------------------------- | +| ptype | String | 'vec' | (可选)矢量:'vec'、影像:'img'、道路:'road' | +| maximumLevel | Number | 16 | (可选) | diff --git a/website/public/static/demo/military/markdown/third/third-baidu.md b/website/public/static/demo/military/markdown/third/third-baidu.md new file mode 100644 index 000000000..88d449744 --- /dev/null +++ b/website/public/static/demo/military/markdown/third/third-baidu.md @@ -0,0 +1,82 @@ +## 加载百度地图 + +### 示例功能 + +    本示例对接百度地图服务,实现在三维场景中加载百度地图,具体类型包括矢量、影像。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.ThirdPartyLayer`类提供的`appendBaiduMap()`方法,以此来加载百度地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 特别说明:对接百度地图,需获取其 key,在此封装的接口中采用的是普通开发者授权的 key,如果需商用,需了解其商业授权。友情链接:商用授权 配额提升 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,调用`appendBaiduMap()`方法,配置不同参数可加载不同类型地图,包括:瓦片(ptype:'tile')、卫星(ptype:'sate')和交通地图(ptype:'traffic')。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //添加百度地图 + var baiduLayer = thirdPartyLayer.appendBaiduMap({ + //地图类型:瓦片:'tile'、卫星:'sate'、交通地图:'traffic' + ptype: 'tile', + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【第三方数据图层类】`CesiumZondy.Layer.ThirdPartyLayer` + +##### 【method】`appendBaiduMap(optionsParam) → {ImageryLayer}`:添加百度地图服务,返回瓦片层对象(ImageryLayer),可用于操作移除 + +- `appendBaiduMap`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| optionsParam | Object | 附加属性 | + +- `optionsParam`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------ | ------ | ------ | --------------------------------------------------------------------------- | +| ptype | String | 'vec' | (必选)地图类型,提供瓦片-'tile'、卫星-'sate'、 交通-'traffic'三种百度地图 | diff --git a/website/public/static/demo/military/markdown/third/third-geoway.md b/website/public/static/demo/military/markdown/third/third-geoway.md new file mode 100644 index 000000000..eca608469 --- /dev/null +++ b/website/public/static/demo/military/markdown/third/third-geoway.md @@ -0,0 +1,76 @@ +## 加载吉威地图 + +### 示例功能 + +    本示例实现在三维场景中加载吉威地图。此示例中对接的地图服务坐标系为 EPSG:3857,即 Web 墨卡托,其网络为为国内镜像网络地址。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`WebSceneControl`类提供的`appendWMTSTileExt()`方法,以此来加载吉威地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 特别说明:使用吉威地图请注意`藏南`与`南海九段线`问题,建议使用天地图。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:在此示例中对接的是 WMTS 类型的吉威地图,所以可调用 WMTS 类型地图的通用方法`appendWMTSTileExt()`来加载,需传入地图服务的 URL 地址,以及相应的参数,设置`from`为`'jiwei'`即代表是吉威地图。 + +- Example: + ```javascript + //添加吉威地图 + webGlobe.appendWMTSTileExt('http://59.252.165.22:8066/ime-cloud/rest/2016qgfdqrjszy/wmts', { + from: 'jiwei', + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +##### 【method】`appendWMTSTileExt(wmtsBaseUrl, options)`:添加 WMTS(WebMapTileService) 标准的瓦片(扩展) + +| 参数名 | 类 型 | 说 明 | +| ----------- | ------ | -------------------------------------------------------- | +| wmtsBaseUrl | String | wmts 服务基地址 :localhost:6163/igs/rest/ogc/WMTSServer | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------- | ------ | ------- | ---------------------- | +| serverName | String | 无 | (可选)服务名 | +| proxy | String | 无 | (可选)代理服务器地址 | +| from | String | 'jiwei' | (可选)哪家公司的服务 | diff --git a/website/public/static/demo/military/markdown/third/third-google.md b/website/public/static/demo/military/markdown/third/third-google.md new file mode 100644 index 000000000..aa3107a58 --- /dev/null +++ b/website/public/static/demo/military/markdown/third/third-google.md @@ -0,0 +1,98 @@ +## 加载谷歌地图 + +### 示例功能 + +    本示例对接谷歌地图服务,实现在三维场景中加载谷歌地图,具体类型包括矢量、影像、栅格、道路。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.ThirdPartyLayer`类提供的`appendGoogleMapExt()`方法或者`appendGoogleMap()`方法,以此来加载谷歌地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 使用谷歌地图请注意`藏南`与`南海九段线`问题,建议使用天地图。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件 + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,在此调用`appendGoogleMapExt()`方法加载 Google 地图,为`ptype`属性配置不同参数可加载不同类型地图,如加载矢量可传入:‘m@207000000’、影像:‘s@130’、栅格:‘t@130’、道路:‘h@207000000’。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + var googleLayer = thirdPartyLayer.appendGoogleMapExt({ + //m-全地图(含矢量与道路)、r-矢量地图、h-道路地图、s-卫星影像地图、t-地形图 + ptype: 'r', + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件】WebSceneControl + +##### (1)`new WebSceneControl(elementId, options)`:三维场景控件构造函数 + +- `WebSceneControl`构造函数主要参数 + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【第三方数据图层类】CesiumZondy.Layer.ThirdPartyLayer + +##### (1)`appendGoogleMapExt(optionsParam) → {ImageryLayer}`:添加 google 地图服务(扩展),返回瓦片层对象(ImageryLayer),可用于操作移除 + +- `appendGoogleMapExt`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | ---------- | +| optionsParam | Object | 可扩展参数 | + +- `optionsParam`属性主要参数 +- |参数名|类 型|说 明| + > |-|-|-| + > |ptype|string|(可选)地图类型: s-卫星影像地图、 h-道路地图、 m-全地图(含矢量与道路)、r-矢量地图、t-地形图;也可以进行组合,例如:s,r 或者 t,h| + +##### (2)`appendGoogleMap(optionsParam) → {ImageryLayer}`:添加 Google 地图服务,返回瓦片层对象(ImageryLayer),可用于操作移除 + +> `appendGoogleMap`方法主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------------- | +| optionsParam | Object | 预留可扩展参数 | + +- `optionsParam`属性主要参数 + +| 参数名 | 类 型 | 说 明 | +| ------ | ------ | --------------------------------------------------------------------------------------------- | +| ptype | string | (必选)地图类型:矢量‘m@207000000’ 、影像‘s@130’ 、栅格‘t@130,r@207000000、道路‘h@207000000’ | diff --git a/website/public/static/demo/military/markdown/third/third-openweather.md b/website/public/static/demo/military/markdown/third/third-openweather.md new file mode 100644 index 000000000..cab957ac6 --- /dev/null +++ b/website/public/static/demo/military/markdown/third/third-openweather.md @@ -0,0 +1,84 @@ +## 加载 OpenWeather 地图 + +### 示例功能 + +    本示例实现在三维场景中加载 OpenWeather 地图,它是一种免费的天气预报云图服务。此示例中对接的地图服务坐标系为 EPSG:3857,即 Web 墨卡托,其网络为为国内镜像网络地址。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.ThirdPartyLayer`类提供的`appendOpenWeatherMap()`方法,以此来加载 OpenWeather 地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 特别说明:使用 OpenWeather 地图请注意`藏南`与`南海九段线`问题,建议使用天地图。 + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,调用`appendOpenWeatherMap()`方法加载 OpenWeather 地图。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //加载OpenWeather地图 + var owLayer = thirdPartyLayer.appendOpenWeatherMap({ + ptype: 'Label', + appid: 'b1b15e88fa797225412429c150c122a1', + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【第三方数据图层类】`CesiumZondy.Layer.ThirdPartyLayer` + +##### 【method】`appendOpenWeatherMap(optionsParam) → {ImageryLayer}`:添加 OpenWeather 服务(免费的天气预报云图),返回瓦片层对象(ImageryLayer) + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| optionsParam | Object | 附加属性 | + +- `optionsParam`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------ | ----- | ------ | ----- | + + +|ptype|String||(必选)云图类型,如 Pressure,Temperature,Windspeed,Clouds,Label,具体请查看 OpenWeather 官网| +|appid|String||(必选)授权 id (请到 OpenWeather 官网申请授权)| diff --git a/website/public/static/demo/military/markdown/third/third-osm.md b/website/public/static/demo/military/markdown/third/third-osm.md new file mode 100644 index 000000000..c61612daf --- /dev/null +++ b/website/public/static/demo/military/markdown/third/third-osm.md @@ -0,0 +1,77 @@ +## 加载 OSM 地图 + +### 示例功能 + +        本示例对接高德地图服务,实现在三维场景中加载高德地图,坐标系为 EPSG:3857,即 Web 墨卡托坐标系,网络为公网地址。 + +### 示例实现 + +        本示例需要使用【include-cesium-local.js】开发库实现,关键接口为 `CesiumZondy. Layer. ThirdPartyLayer` 类提供的 `appendOsmMap()` 方法,以此来加载高德地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 特别说明:使用 osm 地图请注意 `藏南` 与 `南海九段线` 问题,建议使用天地图。 + +### 实现步骤 + +**Step 1. 引用开发库**: + +        本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: + +        创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: + +        实例化 `Cesium. WebSceneControl` 对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + + ```javascript + //构造三维视图对象(视图容器 div 的 id,三维视图设置参数) + webGlobe = new Cesium.WebSceneControl('GlobeView', {}); + ``` + +**Step 4. 加载数据**: + +        加载数据:创建第三方数据图层类 `CesiumZondy. Layer. ThirdPartyLayer` 的对象,调用 `appendOsmMap()` 方法加载 osm 地图。 + +- Example: + + ```javascript + //构造第三方图层对象 + thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer + }); + //加载OSM地图 + var osm = thirdPartyLayer.appendOsmMap(); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】 `Cesium. WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【第三方数据图层类】 `CesiumZondy. Layer. ThirdPartyLayer` + +##### 【method】 `appendOsmMap(optionsParam) → {ImageryLayer}` :添加 osm 地图服务。 + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| optionsParam | Object | 附加属性 | diff --git a/website/public/static/demo/military/markdown/third/third-tianditu-wmts.md b/website/public/static/demo/military/markdown/third/third-tianditu-wmts.md new file mode 100644 index 000000000..0049a6d3f --- /dev/null +++ b/website/public/static/demo/military/markdown/third/third-tianditu-wmts.md @@ -0,0 +1,81 @@ +## 加载天地图 WMTS + +### 示例功能 + +    本示例对接天地图服务,实现在三维场景中加载天地图。具体类型包括影像、地形、注记。由于天地图地图服务采用的是 OGC WMTS 标准,所以同样可以按照 WMTS 的规则进行天地图的加载,本示例与前一个示例的区别就在此。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.ThirdPartyLayer`类提供的`appendTDTuMapByWMTS()`方法,按照 WMTS 服务来加载天地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 特别说明:根据天地图的要求,调用天地图 API 及服务接口都需要申请开发授权,获取服务许可(key)!本示例采用一个参考 key,实际使用需开发者自行申请。 友情链接:天地图官网申请 key + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,调用`appendTDTuMapByWMTS()`方法,传入数据类型参数,可实现不同类型数据的加载。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //通过WMTS服务方式加载天地图:如影像'img'、地形'ter'、 注记'cta',具体请查看天地图官网: + var tdtLayer = thirdPartyLayer.appendTDTuMapByWMTS({ + ptype: 'img', + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【第三方数据图层类】`CesiumZondy.Layer.ThirdPartyLayer` + +##### 【method】`appendTDTuMapByWMTS(optionsParam) → {ImageryLayer}`:通过 wmts 服务添加天地图,返回瓦片层对象(ImageryLayer) + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| optionsParam | Object | 附加属性 | + +- `optionsParam`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------ | ------ | ------ | ---------------------------------------------------------------------------------------------- | +| ptype | String | | (必选)地图类型,影像-'img'、地形-'ter'、注记-'cta',具体请查看天地图官网 | +| token | String | | (必选)开发 token (请到天地图官网申请自己的开发 token,自带 token 仅做功能验证随时可能失效) | diff --git a/website/public/static/demo/military/markdown/third/third-tianditu.md b/website/public/static/demo/military/markdown/third/third-tianditu.md new file mode 100644 index 000000000..880750cd4 --- /dev/null +++ b/website/public/static/demo/military/markdown/third/third-tianditu.md @@ -0,0 +1,97 @@ +## 加载天地图 + +### 示例功能 + +    本示例对接天地图服务,实现在三维场景中加载天地图,具体类型包括矢量、影像、地形,坐标系为 EPSG:4326,即 WGS-84 经纬度。 + +### 示例实现 + +    本示例需要使用【include-cesium-local.js】开发库实现,关键接口为`CesiumZondy.Layer.ThirdPartyLayer`类提供的`appendTDTuMap()`方法,以此来加载天地图。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +> 特别说明:根据天地图的要求,调用天地图 API 及服务接口都需要申请开发授权,获取服务许可(key)!本示例采用一个参考 key,实际使用需开发者自行申请。 友情链接:天地图官网申请 key + +### 实现步骤 + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}) + ``` + +**Step 4. 加载数据**: +    加载数据:创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,调用`appendTDTuMap()`方法,需配置 url 或 type(二选一设置即可)、token 参数,可实现矢量、影像、地形数据的加载。 + +(1) url 地址:可参考提供的 URL 示例 + +天地图经纬度数据:http://t0.tianditu.com/DataServer?T=vec_c&X={x}&Y={y}&L={l} + +30 米全球地表覆盖数据服务:http://glcdata.tianditu.com/DataServer?T=glc_c&X={x}&Y={y}&L={l} + +(2) token:请前往天地图官网申请自己的开发 token,示例自带 token 仅做功能演示; + +(3) type 类型:可传入'vec'、'img'、'ter'等,分别代表矢量、影像、地形地图,具体请查看天地图官网。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //加载天地图 + var tdtLayer = thirdPartyLayer.appendTDTuMap({ + //天地图经纬度数据url,注意url与ptype设置其中一个即可 + //url: 'http://t0.tianditu.com/DataServer?T=vec_c&X={x}&Y={y}&L={l}', + //开发token (请到天地图官网申请自己的开发token,自带token仅做功能验证随时可能失效) + token: '9c157e9585486c02edf817d2ecbc7752', + //地图类型,如'vec'矢量 'img'影像 'ter'地形 + ptype: 'vec', + }) + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【第三方数据图层类】`CesiumZondy.Layer.ThirdPartyLayer` + +##### 【method】`appendTDTuMap(optionsParam) → {ImageryLayer}`:添加天地图(经纬度),返回瓦片层对象(ImageryLayer) + +| 参数名 | 类 型 | 说 明 | +| ------------ | ------ | -------- | +| optionsParam | Object | 附加属性 | + +- `optionsParam`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------ | ------ | ------ | ---------------------------------------------------------------------------------------------- | +| url | String | | (与 ptype 必选一个)地图数据 url 地址,具体请查看天地图官网 | +| ptype | String | | (与 url 必选一个)地图类型,矢量-'vec'、影像-'img'、地形-'ter',具体请查看天地图官网 | +| token | String | | (必选)开发 token (请到天地图官网申请自己的开发 token,自带 token 仅做功能验证随时可能失效) | diff --git a/website/public/static/demo/military/markdown/track/track-dynamicflight.md b/website/public/static/demo/military/markdown/track/track-dynamicflight.md new file mode 100644 index 000000000..822034a74 --- /dev/null +++ b/website/public/static/demo/military/markdown/track/track-dynamicflight.md @@ -0,0 +1,102 @@ +## 动态航线 + +### 示例功能 + +    此功能用于动态显示两点之间的动态飞行轨迹效果。 + +### 示例实现: + +    本示例需要使用 【include-cesium-local.js】开发库实现,初始化 `CesiumZondy.Manager.AdvancedAnalysisManager()`高级分析功能管理对象,然后调用 `createDynamicPolyline()` 方法创建动态航线。 + +> 开发库使用请参见*首页-概述-调用方式*。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: +    创建`id='GlobeView'`的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: +    实例化`Cesium.WebSceneControl`对象,完成此步骤后可在三维场景中加载三维球控件。 + +- Example: + + ```Javascript + //开启动画 + webGlobe.viewer.clock.shouldAnimate = true; + //构造高级分析功能管理对象 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //创建动态航线 + var dynamicLine = advancedAnalysisManager.createDynamicPolyline( + //航线起始城市经纬度 + { + lon: 114.302312702, + lat: 30.598026044 + }, + //航线终点城市数组,经纬度 + [ + { "lon": 115.028495718, "lat": 30.200814617 }, + { "lon": 110.795000473, "lat": 32.638540762 }, + { "lon": 111.267729446, "lat": 30.698151246 }, + { "lon": 112.126643144, "lat": 32.058588576 }, + { "lon": 114.885884938, "lat": 30.395401912 }, + { "lon": 112.190419415, "lat": 31.043949588 }, + { "lon": 113.903569642, "lat": 30.932054050 }, + { "lon": 112.226648859, "lat": 30.367904255 }, + { "lon": 114.861716770, "lat": 30.468634833 }, + { "lon": 114.317846048, "lat": 29.848946148 }, + { "lon": 113.371985426, "lat": 31.704988330 }, + { "lon": 109.468884533, "lat": 30.289012191 }, + { "lon": 113.414585069, "lat": 30.368350431 }, + { "lon": 112.892742589, "lat": 30.409306203 }, + { "lon": 113.160853710, "lat": 30.667483468 }, + { "lon": 110.670643354, "lat": 31.748540780 } + ], + { + //是否已经添加动态航线 + isAdd: false, + //航线颜色:默认红色 + color: new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1) + } + ); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【高级分析功能管理类】`CesiumZondy.Manager.AdvancedAnalysisManager` + +##### 【method】 `createDynamicPolyline(posStart, posEnds, options) → {Object}` 添加动态航线 + +| 参数名 | 类型 | 说 明 | +| -------- | ------ | ------------ | +| posStart | Object | 轨迹线起点 | +| posEnds | Array | 轨迹线终点 | +| options | Object | 动态航班参数 | + +- `options` 主要参数 + +| 参数名 | 类型 | 说明 | +| ------ | ------- | ------------------------ | +| isAdd | Boolean | (可选)是否已添加航班线 | diff --git a/website/public/static/demo/military/markdown/track/track-flow.md b/website/public/static/demo/military/markdown/track/track-flow.md new file mode 100644 index 000000000..fb7617ce6 --- /dev/null +++ b/website/public/static/demo/military/markdown/track/track-flow.md @@ -0,0 +1,91 @@ +## 模型漫游 + +### 示例功能 + +    此功能用于在三维场景中添加模型动态运动显示效果。 + +### 示例实现: + +    本示例需要使用 【include-cesium-local.js 】开发库实现,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `cruiseModel()` 方法创建模型漫游,通过 `startCruiseModel()` 方法开始模型漫游,通过 `stopCruiseModel()` 方法暂停模型漫游, 通过 `clearCruiseModel()` 方法清除模型漫游。 + +> 开发库使用请参见*首页-概述-调用方式*。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +**Step 3. 创建模型漫游**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `cruiseModel()` 方法创建模型漫游; + +- Example: + ```Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //模型漫游 + var modelEntity = analysisManager.cruiseModel( + //模型URL地址 + './static/data/model/GroundVehicle.glb', + //漫游点集 + positionArr, + //是否显示漫游路径 + true, + //漫游时钟频率 + 10 + ); + ``` + +**Step 4. 开始模型漫游**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `startCruiseModel()` 方法开始模型漫游。 + +- Example: + ```Javascript + /*开始漫游*/ + analysisManager.startCruiseModel(); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【分析功能管理类】 `CesiumZondy.Manager.AnalysisManager` + +##### 【method】 `cruiseModel(modelURL, positionArr, isShowPath, clockFrequency) → {Array}` 模型漫游 + +| 参数名 | 类型 | 说明 | +| -------------- | ------------- | ---------------------------------- | +| modelURL | String | 模型 url | +| positionArr | Array. | 漫游线路节点坐标数组 Array<[x, y]> | +| isShowPath | Boolean | 是否显示线路和节点 | +| clockFrequency | Number | 漫游时钟频率 | + +##### 【method】 `startCruiseModel()` 开始模型漫游 + +##### 【method】 `stopCruiseModel()` 结束模型漫游 + +##### 【method】 `clearCruiseModel(modelEntities)` 清除模型漫游 + +| 参数名 | 类型 | 说明 | +| ------------- | ------ | -------- | +| modelEntities | Object | 模型实例 | diff --git a/website/public/static/demo/military/markdown/track/track-groundflow.md b/website/public/static/demo/military/markdown/track/track-groundflow.md new file mode 100644 index 000000000..5a7d18bcb --- /dev/null +++ b/website/public/static/demo/military/markdown/track/track-groundflow.md @@ -0,0 +1,88 @@ +## 模型贴地漫游 + +### 示例功能 + +    此功能用于在三维场景中添加模型跟随地形动态运动显示效果。 + +### 示例实现: + +    本示例需要使用 【include-cesium-local.js】 开发库实现,通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `cruiseModelGround()` 方法创建模型贴地漫游,通过 `startCruiseModel()` 方法开始模型漫游,通过 `stopCruiseModel()` 方法暂停模型漫游, 通过 `clearCruiseModel()` 方法清除模型漫游。 + +> 开发库使用请参见*首页-概述-调用方式*。 + +### 实现步骤: + +**Step 1. 引用开发库**: +    本示例引用 local 本地【include-cesium-local.js】开发库, 完成此步后方可正常使用所有三维 WebGL 的功能; + +**Step 2. 创建三维地图容器并加载三维球控件**: +    创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式,初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,完成此步后可在三维场景中加载三维球控件; + +- Example + + ```Javascript + //构造三维视图类(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', { + terrainExaggeration: 1, + }); + ``` + + ```html +
+ ``` + +**Step 3. 创建模型贴地漫游**: +    通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `cruiseModelGround()` 方法创建模型漫游; + +- Example: + ```Javascript + //模型URL地址、漫游点集、是否显示漫游路径、漫游时钟频率、漫游成功回调 + modelEntity = webGlobe.cruiseModelGround('./static/data/model/donghua.gltf', positionArr, true, 30, function(entities) {}) + ``` + +**Step 4. 开始模型漫游**: +    通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `startCruiseModel()` 方法开始模型漫游。 + +- Example: + ```Javascript + /*开始漫游*/ + webGlobe.startCruiseModel(); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】`Cesium.WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +##### 【method】 `cruiseModelGround(modelURL, positionArr, isShowPath, clockFrequency,function)` 模型漫游 + +- `cruiseModelGround` 方法主要参数 + +| 参数名 | 类型 | 说明 | +| -------------- | ------------- | ---------------------------------- | +| modelURL | string | 模型 url | +| positionArr | Array. | 漫游线路节点坐标数组 Array<[x, y]> | +| isShowPath | bool | 是否显示线路和节点 | +| clockFrequency | Number | 漫游时钟频率 | +| function | function | 成功回调 | + +##### 【method】 `startCruiseModel()` 开始模型漫游 + +##### 【method】 `stopCruiseModel()` 结束模型漫游 + +##### 【method】 `clearCruiseModel()` 清除模型漫游 diff --git a/website/public/static/demo/military/markdown/vectortile/mapgis-vectortile-3857.md b/website/public/static/demo/military/markdown/vectortile/mapgis-vectortile-3857.md new file mode 100644 index 000000000..4b1a40ef3 --- /dev/null +++ b/website/public/static/demo/military/markdown/vectortile/mapgis-vectortile-3857.md @@ -0,0 +1,110 @@ +## 添加二维矢量瓦片服务 + +### 示例功能 + +        本示例实现在三维场景中加载在线二维地图数据,对接 MapGIS IGServer 发布的二维矢量瓦片服务,坐标系为 EPSG:3857,即 Web 墨卡托坐标系。 + +### 示例实现 + +        数据准备:需提前在 MapGIS Server Manager 服务管理器中发布二维矢量瓦片服务。 + +        本示例需要使用【include-cesium-local.js】开发库实现,关键接口为 `CesiumZondy.Overlayer.VectorTileLayer` 类。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: + +        本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: + +        创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: + +        实例化 `Cesium. WebSceneControl` 对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}); + ``` + +**Step 4. 加载数据**: + +        加载数据:构造 `CesiumZondy.Overlayer.VectorTileLayer` 传入参数即可直接加载矢量瓦片数据服务。 + +- Example: + ```javascript + //构造矢量瓦片图层对象 + vectortileLayer = new CesiumZondy.Overlayer.VectorTileLayer( + //视图 + webGlobe.viewer, + { + //样式json文件路径 + styleUrl: `${protocol}://${ip}:${port}/igs/rest/mrms/vtiles/styles/蓝色-墨卡托.json`, + //第三方需要的token + token: '', + //是否可见 + show: true, + callback: handleLayerAdd + } + ); + //构造矢量瓦片图层对象 + chinaLayer = new CesiumZondy.Overlayer.VectorTileLayer( + //视图 + webGlobe.viewer, + { + //样式json文件路径 + styleUrl: `${protocol}://${ip}:${port}/igs/rest/mrms/vtiles/styles/中国行政区.json`, + //第三方需要的token + token: '', + //是否可见 + show: true + } + ); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】 `Cesium. WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【矢量瓦片类】 `CesiumZondy.zondy.VectorTileLayer` + +| 参数名 | 类 型 | 说 明 | +| ------ | ------ | --------------------------- | +| viewer | Object | 传入的 cesium 的地图 viewer | +| option | Object | 属性键值对,地图属性字段。 | + +- `option`属性主要参数 + +| 参数名 | 类 型 | 属性 | 默认值 | 说 明 | +| -------------- | ------------------- | ----------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ip | String | \ | localhost | 地图服务 ip | +| port | String | \ | 6163 | 地图服务 port | +| layerName | String | \ | | 地图名 | +| mvtStyle | String | | | 样式 json 文件路径或者 MVT-JSON 对象,当为 url 时等于 styleUrl;当为 vectortilejson 等于 vectortilejson | +| styleUrl | String | \ | | 样式 json 文件路径,有 styleUrl 就可以直接读取 styleUrl 里的信息;不然就是加载中地发布的矢量瓦片,使用 ip,port 和 layerName 先拼接 styleUrl 路径再进行查询。 | +| vectortilejson | Object | \ | | 矢量瓦片 json 对象,直接取 json 对象,不需要再去请求。 | +| tilingScheme | Cesium.TilingScheme | \ | | 矢量瓦片瓦片切分规则:经纬度还是墨卡托 | +| token | String | \ | | 第三方需要的 token,比如 mapbox | +| show | String | \ | true | 是否可见 | +| callback | String | \ | | 加载矢量瓦片成功回调,返回 Provider | diff --git a/website/public/static/demo/military/markdown/vectortile/mapgis-vectortile-4326.md b/website/public/static/demo/military/markdown/vectortile/mapgis-vectortile-4326.md new file mode 100644 index 000000000..7c36552c3 --- /dev/null +++ b/website/public/static/demo/military/markdown/vectortile/mapgis-vectortile-4326.md @@ -0,0 +1,101 @@ +## 添加二维矢量瓦片服务 + +### 示例功能 + +        本示例实现在三维场景中加载在线二维地图数据,对接 MapGIS IGServer 发布的二维矢量瓦片服务,坐标系为 EPSG:4326,即经纬度坐标系。 + +### 示例实现 + +        数据准备:需提前在 MapGIS Server Manager 服务管理器中发布二维矢量瓦片服务。 + +        本示例需要使用【include-cesium-local.js】开发库实现,关键接口为 `CesiumZondy.Overlayer.VectorTileLayer` 类。 + +> 开发库使用请参见*首页-概述-原生 JS 调用*内容。 + +### 实现步骤 + +**Step 1. 引用开发库**: + +        本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能; + +**Step 2. 创建布局**: + +        创建 `id='GlobeView'` 的 div 作为三维视图的容器,并设置其样式; + +**Step 3. 构造三维场景控件**: + +        实例化 `Cesium. WebSceneControl` 对象,完成此步骤后可在三维场景中加载三维球控件; + +- Example: + ```javascript + //构造三维视图对象(视图容器div的id,三维视图设置参数) + var webGlobe = new Cesium.WebSceneControl('GlobeView', {}); + ``` + +**Step 4. 加载数据**: + +        加载数据:构造 `CesiumZondy.Overlayer.VectorTileLayer` 传入参数即可直接加载矢量瓦片数据服务。 + +- Example: + ```javascript + //构造矢量瓦片图层对象 + vectortileLayer = new CesiumZondy.Overlayer.VectorTileLayer( + //视图 + webGlobe.viewer, + { + //样式json文件路径 + styleUrl: `${protocol}://${ip}:${port}/igs/rest/mrms/vtiles/styles/OSM全中国经纬度.json`, + //第三方需要的token + token: '', + //是否可见 + show: true, + tilingScheme: new Cesium.GeographicTilingScheme({ + numberOfLevelZeroTilesX: 2, + numberOfLevelZeroTilesY: 1 + }), + callback: handleLayerAdd + } + ); + ``` + +### 关键接口 + +#### 1.【三维场景控件类】 `Cesium. WebSceneControl(elementId, options)` + +| 参数名 | 类 型 | 说 明 | +| --------- | ----------------- | -------------------- | +| elementId | Element \| String | 放置视图的 div 的 id | +| options | Object | (可选)附加属性 | + +- `options`属性主要参数 + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ---------------- | ------- | ------ | -------------------------------------------------------------------------------------- | +| viewerMode | String | ‘3D’ | (可选)初始视图模式默认为三维球视图 '2D'表示二维视图 'COLUMBUS_VIEW' 表示三维平面视图 | +| showInfo | Boolean | false | (可选)是否显示默认的属性信息框 | +| animation | Boolean | true | (可选)默认动画控制不显示 | +| baseLayerPicker | Boolean | true | (可选)是否创建图层控制显示小组件 | +| fullscreenButton | Boolean | true | (可选)是否创建全屏控制按钮 | +| vrButton | Boolean | false | (可选)是否创建 VR 按钮 | + +#### 2.【矢量瓦片类】 `CesiumZondy.zondy.VectorTileLayer` + +| 参数名 | 类 型 | 说 明 | +| ------ | ------ | --------------------------- | +| viewer | Object | 传入的 cesium 的地图 viewer | +| option | Object | 属性键值对,地图属性字段。 | + +- `option`属性主要参数 + +| 参数名 | 类 型 | 属性 | 默认值 | 说 明 | +| -------------- | ------------------- | ----------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ip | String | \ | localhost | 地图服务 ip | +| port | String | \ | 6163 | 地图服务 port | +| layerName | String | \ | | 地图名 | +| mvtStyle | String | | | 样式 json 文件路径或者 MVT-JSON 对象,当为 url 时等于 styleUrl;当为 vectortilejson 等于 vectortilejson | +| styleUrl | String | \ | | 样式 json 文件路径,有 styleUrl 就可以直接读取 styleUrl 里的信息;不然就是加载中地发布的矢量瓦片,使用 ip,port 和 layerName 先拼接 styleUrl 路径再进行查询。 | +| vectortilejson | Object | \ | | 矢量瓦片 json 对象,直接取 json 对象,不需要再去请求。 | +| tilingScheme | Cesium.TilingScheme | \ | | 矢量瓦片瓦片切分规则:经纬度还是墨卡托 | +| token | String | \ | | 第三方需要的 token,比如 mapbox | +| show | String | \ | true | 是否可见 | +| callback | String | \ | | 加载矢量瓦片成功回调,返回 Provider | diff --git a/website/public/static/demo/military/source/development_cesium.md b/website/public/static/demo/military/source/development_cesium.md new file mode 100644 index 000000000..c266a044b --- /dev/null +++ b/website/public/static/demo/military/source/development_cesium.md @@ -0,0 +1,3694 @@ + +## 准备开发 + +    进行WebGIS应用开发,一般均采用前端开发库+GIS服务的模式,开发者须完成如下三个步骤: + +    **第一步:安装配置开发环境,包括MapGIS开发环境(含开发授权)、集成开发环境;** + +    根据实际应用需求,选择.NET或九州系列MapGIS开发平台产品安装,通常包括MapGIS Desktop桌面工具、MapGIS IGServer等云GIS产品。 + +    例如选用.NET版本,常用环境如下: +- MapGIS开发包:MapGIS IGServer .NET x64 for Windows开发包 +- MapGIS开发授权:云开发授权(基础版/高级版) +- 集成开发环境:Visual Studio Code + +    **第二步:发布GIS服务资源,在MapGIS IGServer的服务管理器中发布所需的地图服务,以及扩展的功能服务等;** + +    基于MapGIS Server Manager发布地图服务的具体操作,请查看**MapGIS IGServer操作手册**(.NET版九州版) + +    在访问MapGIS IGServer的服务时,需要先确定GIS服务器IP地址与服务端口号;在二次开发时,根据所使用的MapGIS IGServer平台版本以及其服务管理器中IGServer配置情况(ip、port),对二次开发接口中涉及的地图服务访问的ip、port进行相应设置。 + +- .NET版:IGServer服务管理器访问默认地址(127.0.0.1:9999)、IGServer服务访问默认基地址(127.0.0.1:6163) +- 九州版:IGServer服务管理器访问默认地址(127.0.0.1:8089)、IGServer服务访问默认基地址(127.0.0.1:8089) + +    **第三步:获取前端开发库(MapGIS Client for JavaScript开发库)**,通过文件拷贝或npm方式引用开发库,进行WebGIS二维或三维应用开发。 + +- MapGIS官方下载地址:http://smaryun.com/dev/download_detail.html#/download828 +- GitHub 托管地址:https://github.com/MapGIS/WebClient-JavaScript +- Gitee 托管地址:https://gitee.com/osmapgis/WebClient-JavaScript + +### 引入开发库 + + +#### 文件方式(离线) + +    请下载MapGIS Client for JavaScript开发包,将开发库目录libs下的cdn文件夹与include-xx.js文件放在工程同一目录下,然后在网页中引入对应的include-xx.js文件即可,可以将整个目录[..\static\libs]拷贝到工程中 + +> 离线版本的核心原理就是根据include=""中的名字,在当前cdn文件夹下寻找对应的js的脚本并按照规定的顺序引入到浏览器中 +> “include-*.js 通过include="xxx"的方式自动寻找引入对应的第三方脚本” + +    新建一个 HTML 文件,在 标签中引入 MapGIS Client for JavaScript(Cesium)的开发库: + +- Example: + + ```javascript + + ``` + +MapGIS Client for JavaScript开发库 + +#### npm 方式引用 + +    使用此方式前请先检查电脑中是否已安装应用程序 Node.js,若未安装,需要先安装Node.js环境。 + +    由于本公司在开源的 cesium 地图引擎上做了一定修改,所以在引入 cesium 地图引擎时需要通过以下 npm 指令引入。 + +- Example: + + ```javascript + npm install @mapgis/cesium + ``` + +    通过 npm 指令引入 MapGIS Client for JavaScript 开发包。 + + +## 开始开发 + +    先根据“开发环境”要求安装配置好MapGIS开发环境(含MapGIS云开发授权),然后获取MapGIS Client for JavaScript(Cesium)SDK进行二次开发。 + +    下面使用H5原生JS方式,演示如何在网页中加载显示一个M3D缓存模型数据(大雁塔)。 + +### 数据准备 + +    本示例使用MapGIS官方云端(develop.smaryun.com)已经发布的名称为“DaYanTa”的M3D数据服务进行演示。若您需要显示自己的数据,需要在开发前进行数据处理,如创建/附加地理数据库、导入数据、生成M3D缓存数据等,最后通过**MapGIS Server Manager**配置GIS服务环境并发布三维地图服务。 + +
+ MapGIS服务发布 +
+
MapGIS Server Manager发布服务
+
+
+ +> 基于MapGIS Server Manager发布地图服务的具体操作,请查看**MapGIS IGServer操作手册**(.NET版九州版) + +### 开发入门:加载M3D模型数据 + +> 本示例使用的开发集成工具为 Visual Studio Code(简称VSCode),您可以根据开发习惯选择适合自己的开发工具 + +#### Step 1. 新建Web网站 + +    在VSCode或本地磁盘中新建一个文件目录作为Web网站目录,名称为SceneDisplay; + +
+ 新建网站目录 +
+
新建网站目录
+
+
+ +#### Step 2. 引入JavaScript开发库(离线方式) + +    在新建的Web网站(文件目录)中,拷贝MapGIS Client for JavaScript开发库到网站根目录下,即将SDK包路径MapGIS Client for JavaScript_V10.5.X.X\static\libs的libs拷贝到“SceneDisplay”目录下。此libs包含了全部的开发库(js与css文件),可选择只拷贝cesium的库。 + +
+ 引入脚本库资源 +
+
引入脚本库资源
+
+
+ +#### Step 3. 加载显示M3D模型 + +(1) 在上述新建的网站中,通过新建文件方式,创建一个名称为“SceneM3DDisplay”的html网页文件,可通过自定义模板快速创建网页结构内容; + +
+ 新建HTML页面(空) +
+
新建HTML页面(空)
+
+
+ +
+ 新建HTML页面(模板) +
+
新建HTML页面(模板)
+
+
+ +(2) 设置示例标题,在该页面引入for WebGL开发的必要脚本库include-cesium-local.js,此脚本库会动态引入核心库webclient-cesium-plugin.min.js等与相关第三方库、样式文件等 + +
+ 引用开发库 +
+
引用开发库
+
+
+ + +(3) 创建一个ID为“GlobeView”的div层,并设置其样式,用来作为显示矢量地图文档的地图容器; + +
+ 创建div层并设置样式 +
+
创建div层并设置样式
+
+
+ +(4) 通过body的onload事件触发调用M3D模型缓存数据显示的脚本函数init(); + +
+ body的onload事件 +
+
body的onload事件
+
+
+ +(5) 在该页面中嵌入JavaScript代码,实现加载M3D缓存模型的脚本函数init(),即初始化三维场景视图Cesium.WebSceneControl类,然后构造M3D模型层管理对象CesiumZondy.Layer.M3DLayer类对象,再通过此图层对象的append()方法加载三维地图文档,并自动跳转到数据位置; + +> 注意:通常情况下,功能实现的JavaScript代码可以单独放置到一个JS文件中,便于维护 + +
+ 加载M3D缓存模型的脚本函数init +
+
加载M3D缓存模型的脚本函数init()
+
+ +- Example: + + ```javascript + //在JS脚本开发中使用严格模式,及时捕获一些可能导致编程错误的ECMAScript行为 + 'use strict'; + //定义三维场景控件对象 + var webGlobe; + //定义M3D图层对象 + var obliqueLayerArr; + //加载三维场景 + function init() { + //构造三维视图对象(视图容器div的id,三维视图设置参数) + webGlobe = new Cesium.WebSceneControl('GlobeView', {}); + + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + obliqueLayerArr = m3dLayer.append( + `http://develop.smaryun.com:6163/igs/rest/g3d/DaYanTa`, + { + autoReset: true //允许自动定位 + } + ); + } + ``` + +    实现M3D模型缓存的加载显示过程如下: + +    (1)首先需要创建三维场景视图对象。三维场景控件构造函数如下: + +    **WebSceneControl(elementId, options)** + +    *参数说明:* + +- elementId:( string类型)可选项,三维视图容器div的id。 +- options:(Object类型)可选项,MapGIS三维场景初始化相关参数,以键值对的形式设置,主要参数如下: + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------ | ------|------|------| +|viewerMode |String |‘3D’ |(可选)初始视图模式默认为三维球视图 '2D’表示二维视图 ‘COLUMBUS_VIEW’ 表示三维平面视图| +|showInfo |Boolean| false |(可选)是否显示默认的属性信息框 +|animation| Boolean| true| (可选)默认动画控制不显示| +|baseLayerPicker| Boolean| true| (可选)是否创建图层控制显示小组件| +|fullscreenButton |Boolean |true |(可选)是否创建全屏控制按钮| +|vrButton |Boolean| false |(可选)是否创建VR按钮| + +    (2)然后构造M3D模型层管理类CesiumZondy.Layer.M3DLayer对象,通过其append()方法加载显示M3D模型缓存数据。 + +    **append(url, options)** + +    *参数说明:* +- url:(string类型)必选项,M3D地图文档服务的地址。 +- options:(object类型)可选项,附加的其他属性,以键值对的形式设置,主要属性参数如下: + +| 参数名 | 类 型 | 默认值 | 说 明 | +| ------ | ------|------|------| +|autoReset |Boolean |true |(可选)是否自动定位| +|synchronous| Boolean |true |(可选)是否异步请求| +|loaded| Boolean| function| (可选)回调函数| +|proxy |DefaultProxy |defaultProxy |(可选)代理| +|showBoundingVolume| Boolean |false| (可选)是否显示包围盒| +|maximumScreenSpaceError| Number| 16| (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量| + + +> 相关接口的详细说明请查看MapGIS 3DClient for WebGL、MapGIS扩展cesium库、原生cesium库的API说明 + +#### Step 4. 运行调试 + +    VSCode是一个非常流行的Web前端开发IDE,在编写Web网站时一般需要发布后编译运行,也可安装相关插件调试运行。 + +    在此,可先将“SceneDisplay”站点发布,然后通过浏览器查看与调试。例如:在IIS中发布站点后,右键“浏览”选中的“SceneM3DDisplay.html”文件,即可在浏览器中查看,并进行前端调试。 + +
+ 在IIS中浏览网页 +
+
在IIS中浏览网页
+
+
+
+ M3D缓存模型显示效果图 +
+
M3D缓存模型显示效果图
+
+
+    需要调试时,可以利用浏览器的开发者工具进行测试,例如IE、Firefox、Chrome等。打开浏览器的开发者工具,在代码行前端设置断点,然后在浏览器中重新运行示例页面,程序将会运行进入到代码断点处,方便查看相关信息。 + + +## 服务发布 + +    开发前,基于应用的具体需求,可根据开发中采用的出图方式(地图类型)组织制作二维地图(矢量地图文档或瓦片地图),或者三维地图(三维地图文档,M3D缓存等)。通过GIS服务管理器(MapGIS Server Manager)页面左侧的“地图与数据服务”页面,可以发布和查看所发布的地图服务,可以提供地图数据的预览,查看信息,状态控制,删除等操作。 + +### 二维地图发布 + +    在此以发布地图文档(REST模式)为例,发布单个地图文档的配置操作如下: +在MapGIS Server Manager页面左侧导航栏中的“地图与数据服务”中,单击“发布服务”,在下拉菜单中选择“文档发布(包括WMS/WFS/WMTS)”选项。页面跳转至发布服务配置页面。 + +
+ MapGIS服务发布 +
+
MapGIS Server Manager发布服务
+
+
+ +    配置项参数说明: +1. 选取地图文档:点击“地图文档路径”后的“浏览”按钮,在服务器磁盘中选择发布的地图文档(.mapx),选取后自动读取该文档的名称。矢量地图文档分为如下两种类型,即本地数据源、远程数据源(也称网络数据源,即关系数据库存储地理数据的GDBServer)。 + +- 本地数据源(HDF):适用于地理数据库文件,存在并且添加到MapGIS IGServer中,对应的gdbServer名称为“MapGISLocal”,gdb用户名和密码为空; +- 本地数据源(HDB)【推荐使用】:适用于地理数据库文件,存在并且添加到MapGIS IGServer中,对应的gdbServer名称为“MapGISLocalPlus”,gdb用户名和密码为空; +- 远程数据源:适用于地图文档所调用要素图层数据,存在于非本地数据库中,如Oracle数据库; + +> MapGIS IGServer(九州)支持本地数据源HDB方式,不支持本地数据源HDF方式。 + +2. 发布地图文档:在服务器磁盘中找到需要发布的mapx地图文档并添加之后,点击“发布”按钮,即可发布二维地图文档为MapGIS Rest地图服务格式; +3. 获取地图服务的基地址与相关信息,用于Web应用开发。 + +### 三维地图发布(M3D缓存) + +    在此以MapGIS Desktop自带的三维模型数据(景观_建筑模型)为例,说明配置三维模型地图文档操作步骤。 + +#### 生成M3D缓存 + +1. 打开MapGIS Desktop,新建一个空场景; + +
+ 新建空场景 +
+
新建空场景
+
+
+ +2. 在新场景中添加示例数据库(Sample)中的景观_建筑模型,即鼠标右击【新场景1】,通过【添加图层】->【添加模型层】进行操作; + +
+ 添加模型层 +
+
添加模型层
+
+
+ +
+ 选择模型数据 +
+
选择模型数据
+
+
+ +
+ 显示模型 +
+
显示模型
+
+
+ +3. 将已添加的模型数据生成M3D缓存; + + - (1) 右击【景观_建筑模型】,选择【属性】,在属性页面设置渲染方式为分块渲染,然后点击【应用】,关闭属性页面; + +
+ 选择模型属性 +
+
选择模型属性
+
+
+ +
+ 设置渲染方式 +
+
设置渲染方式
+
+
+ + - (2) 在新场景节点上,点击【生成缓存】->【生成M3D缓存】; + +
+ 生成M3D缓存 +
+
生成M3D缓存
+
+
+ + - (3) 配置M3D缓存参数,可设置缓存存储目录、LOD级别等,详细参数说明请查看,此处以默认参数为例; + +
+ 配置M3D缓存参数 +
+
配置M3D缓存参数
+
+
+ + - (4) 设置相关参数后,先点击【预计算】,然后再点击【生成】,即开始生成M3D缓存,成功操作后将生成M3D缓存文件; + +4. 生成M3D缓存成功后,关闭【生成缓存】对话框,并移除场景中的景观_建筑模型图层(为提交三维场景渲染效率,移除场景中原模型图层); + +
+ 移除图层 +
+
移除图层
+
+
+ +5. 将生成的M3D缓存添加到三维场景中:右击【新场景1】,选择【添加模型缓存图层】,选择生成的.mcj文件; + +
+ 添加模型缓存图层 +
+
添加模型缓存图层
+
+
+ +
+ 选择M3D缓存文件 +
+
选择M3D缓存文件
+
+
+ +
+ M3D缓存显示效果 +
+
M3D缓存显示效果
+
+
+ + +6. 在场景中添加了M3D缓存后,将其保存为三维地图文档(.mapx)。 + +
+ 保存三维地图文档 +
+
保存三维地图文档
+
+
+ +#### 发布M3D地图文档 + +1. 登录进入MapGIS Server Manager管理界面,如MapGIS IGServer .NET的访问地址为【http://localhost:9999/】,用户名与密码默认为【admin/sa.mapgis】; + +
+ 登录MapGIS Server Manager +
+
登录MapGIS Server Manager
+
+
+ +2. 发布三维地图文档,选择【地图与数据服务】->【发布服务】->【三维服务发布】选择保存的地图文档; + +
+ 发布三维地图文档 +
+
发布三维地图文档
+
+
+ +3. 获取发布之后的三维地图访问基地址,在应用中需要用到。 + +
+ 获取三维地图访问基地址 +
+
获取三维地图访问基地址
+
+
+ +
+ 复制基地址 +
+
复制基地址
+
+
+ + + +## 第三方地图 + +    第三方地图,主要指的就是互联网上涌现的大量地图服务资源,提供免费开放的基础地图服务,一般均为瓦片地图形式,常在应用中作为底图直接调用。网络上主流的公共地图服务包括百度地图、高德地图、天地图、OpenWeather地图等。这些免费的在线地图服务资源,吸引了众多用户,不仅方便了广大开发者使用在线地图开发丰富的地图应用,扩宽互联网地图应用范围,挖掘GIS的潜在价值;同时也让更多人了解电子地图、了解互联网GIS,享受互联网GIS带来的便利和乐趣。 + +     支持第三方公共互联网地图,如百度地图、天地图、高德地图、OpenWeather地图等,通过CesiumZondy.Layer.ThirdPartyLayer类下的方法加载各类地图。 + +| 地图类型 | 类名/方法名 | API说明 | +| ------- | -------------- |----------------| +| 天地图 | appendTDTuMap() / appendTDTuMapByWMTS()| 天地图,具体类型包括矢量、影像、地形,坐标系为 EPSG:4326,即 WGS-84 经纬度 ,访问需要token | +| 百度地图 | appendBaiduMap() | 百度地图,类型包括矢量、影像| +| 高德地图 | appendGaodeMap() | 高德地图,Web 墨卡托坐标系,EPSG:3857 | +| OpenWeather地图 | appendOpenWeatherMap() | OpenStreetMap地图 ,天气预报云图服务| + +### 天地图 + + + 天地图 + + +     具体实现:创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,调用`appendTDTuMap()`方法,需配置 url 或 type(二选一设置即可)、token 参数,可实现矢量、影像、地形数据的加载。 + +(1) url 地址:可参考提供的 URL 示例 + +- 天地图经纬度数据:http://t0.tianditu.com/DataServer?T=vec_c&X={x}&Y={y}&L={l} + +- 30 米全球地表覆盖数据服务:http://glcdata.tianditu.com/DataServer?T=glc_c&X={x}&Y={y}&L={l} + +(2) token:请前往天地图官网申请自己的开发 token,示例自带 token 仅做功能演示; + +(3) type 类型:可传入'vec'、'img'、'ter'等,分别代表矢量、影像、地形地图,具体请查看天地图官网。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //加载天地图 + var tdtLayer = thirdPartyLayer.appendTDTuMap({ + //天地图经纬度数据url,注意url与ptype设置其中一个即可 + //url: 'http://t0.tianditu.com/DataServer?T=vec_c&X={x}&Y={y}&L={l}', + //开发token (请到天地图官网申请自己的开发token,自带token仅做功能验证随时可能失效) + token: '9c157e9585486c02edf817d2ecbc7752', + //地图类型,如'vec'矢量 'img'影像 'ter'地形 + ptype: 'vec', + }) + ``` + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //通过WMTS服务方式加载天地图:如影像'img'、地形'ter'、 注记'cta',具体请查看天地图官网: + var tdtLayer = thirdPartyLayer.appendTDTuMapByWMTS({ + ptype: 'img', + }) + ``` + + +### 百度地图 + + + 百度地图 + + +    具体实现:创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,调用`appendBaiduMap()`方法,配置不同参数可加载不同类型地图,包括:瓦片(ptype:'tile')、卫星(ptype:'sate')和交通地图(ptype:'traffic')。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //添加百度地图 + var baiduLayer = thirdPartyLayer.appendBaiduMap({ + //地图类型:瓦片:'tile'、卫星:'sate'、交通地图:'traffic' + ptype: 'tile', + }) + ``` + + +### 高德地图 + + + 高德地图 + + +    具体实现:创建第三方数据图层类`CesiumZondy.Layer.ThirdPartyLayer`的对象,调用`appendGaodeMap()`方法加载高德地图,配置不同参数可加载不同类型地图,如矢量:'vec'、影像:'img'、道路:'road'。 + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //加载高德地图 + var amapLayer = thirdPartyLayer.appendGaodeMap({ + //地图类型:矢量:'vec'、影像:'img'、道路:'road' + ptype: 'vec', + }) + ``` + +### OpenWeather地图 + + + OpenWeather地图 + + +- Example: + ```javascript + //构造第三方图层对象 + var thirdPartyLayer = new CesiumZondy.Layer.ThirdPartyLayer({ + viewer: webGlobe.viewer, + }) + //加载OpenWeather地图 + var owLayer = thirdPartyLayer.appendOpenWeatherMap({ + ptype: 'Label', + appid: 'b1b15e88fa797225412429c150c122a1', + }) + ``` + + +## M3D图层 + + +> M3D是针对多端应用的轻量级三维数据交换格式,对海量三维数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。具备高效网络传输模式、多级LOD模型支持、WebGL无缝融合等优点。可以将多样类型、多种格式的三维数据通过M3D数据交换格式进行高效解析并渲染,能够支持的数据类型包括:精细模型(景观模型、BIM模型)、实景三维(倾斜摄影、地质体、管线)、点云(激光点云las等)、其他(栅格、地形、矢量、瓦片)等。 + + +    在三维场景中支持加载M3D缓存数据,对接MapGIS IGServer发布的三维地图服务,数据类型包括景观模型、BIM模型、倾斜摄影、地质体模型等。 + +    数据准备:针对M3D缓存数据的加载,需要进行数据的处理与发布,即先通过MapGIS Desktop桌面工具将三维模型数据生成M3D缓存,并组织为地图文档;再在MapGIS Server Manager服务管理器中根据地图文档发布为三维地图服务。 + +    具体实现:构造`CesiumZondy.Layer.M3DLayer`M3D图层管理对象,调用`append()`方法,传入M3D缓存三维地图服务的URL地址即可加载浏览数据,同时可传入相关配置参数。 + +    **以加载M3D的景观模型为例**: + + + M3D图层 + + +* Example: + ``` javascript + //构造M3D模型层管理对象(视图) + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + var landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', { + //是否自动定位到数据位置 + autoReset: false, + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 8 + }); + ``` + + +## 地图服务 + +    全面支持MapGIS地图服务数据加载,包括基于二维矢量数据、瓦片数据发布的二维矢量与瓦片服务;栅格影像、DEM地形数据、倾斜摄影等三维模型数据发布的三维地图服务。 + +### 矢量服务(二维地图文档) + + + 二维地图文档 + + +    具体实现:首先构造`CesiumZondy.Layer.TilesLayer`瓦片图层管理对象,然后调用`append2DDocTile()`方法,传入地图服务的 URL 地址及相关参数,即可加载 IGServer 二维地图文档数据。 + +- Example: + ```javascript + //构造瓦片图层管理对象(视图) + var layer = new CesiumZondy.Layer.TilesLayer({ + viewer: webGlobe.viewer, + }) + //添加MapGIS IGServer发布的二维地图文档服务 + vecDoc = layer.append2DDocTile('http://develop.smaryun.com:6163/igs/rest/mrms/docs/北京市', {}) + ``` + +### 瓦片服务 + + + 二维瓦片 + + +    具体实现:首先构造`CesiumZondy.Layer.TilesLayer`瓦片图层管理对象,然后构造图层加载的参数,如范围、瓦片初始级行列数、最大显示级别等信息,可用来指定瓦片显示的范围、最大级别等;然后调用`appendMapGISTile()`方法传入二维瓦片服务地址及参数,即可加载浏览数据。 + +- Example: + ```javascript + //构造瓦片图层管理对象(视图) + var tilelayer = new CesiumZondy.Layer.TilesLayer({ + viewer: webGlobe.viewer, + }) + //参数 + var options = { + tileRang: Cesium.Rectangle.fromDegrees(-180, -90, 180, 90), + //瓦片初始级的列数 默认为2 + colNum: 2, + //瓦片初始级的行数 默认为1 + rowNum: 1, + //瓦片最大显示级数 默认为19 + maxLevel: 19, + //如瓦片裁的不是256,则需设置下面两个参数 + //瓦片宽度 + tileWidth: 256, + //瓦片高度 + tileHeight: 256, + } + //添加MapGIS IGServer发布的二维瓦片服务 + var layer = tilelayer.appendMapGISTile('http://develop.smaryun.com:6163/igs/rest/mrms/tile/北京市', options) + ``` + +### 地形服务 + + + 三维地形 + + +    具体实现:构造`CesiumZondy.Layer.TerrainLayer`地形图层管理对象,调用`append()`方法,传入三维地图服务的 URL 地址即可加载浏览数据,可传入相关配置参数。 + +- Example: + ```javascript + //构造地形层管理对象(视图) + var layer = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer, + }) + //加载三维地图文档(服务地址,配置参数) + var terrainlayer = layer.append('http://develop.smaryun.com:6163/igs/rest/g3d/terrain', {}) + ``` + +## OGC服务 + +     OGC(OpenGIS Consortium OpenGIS协会)是一个公益的行业协会,成立于1994年,致力于促进采用新的技术和商业方式来提高地理信息处理的互操作性(Interoperability)。OGC为实现地理信息共享与互操作,定义了一系列Web地理信息服务的抽象接口与实现规范,包括WMS、WFS、WMTS、WCS等. + + +| 服务类型 | 类名/方法名 | API说明 | +| ------- | -------------- |----------------| +| WMS | CesiumZondy.Layer.OGCLayer/ appendWMSTile() |加载WMS服务地图,WMS的GetMap接口返回指定范围内的地图图片 | +| WMTS | CesiumZondy.Layer.OGCLayer/ appendWMTSTile() | 加载WMTS服务地图,WMTS的GetTile接口返回的就是单张瓦片| + + +     MapGIS IGServer全面支持OGC服务的发布与应用,包括WMS、WFS、WMTS、WCS等服务。其中,常用的WMS、WFS、WMTS中对应的MapGIS格式的数据类型为: +- WMS:MapIGS格式的地图文档、矢量图层; +- WFS:MapIGS格式的地图文档、矢量图层; +- WMTS:MapIGS格式的瓦片图层、实时瓦片图层、分布式瓦片图层。 + +> 要在客户端调用OGC服务,需要先在IGServer服务管理器中发布OGC服务,具体操作请查看**MapGIS IGServer操作手册**(.NET版九州版) + +### WMS + +    Web Map Service(网络地图服务),简称 WMS,由开放地理信息联盟(Open GeoSpatial Consortium,OGC)制定。该规范定义了 Web 客户端从网络地图服务器获取地图的接口标准。一个 WMS 可以动态地生成具有地理参考数据的地图,这些地图通常用 GIF、JPEG 或 PNG 等图像格式,或者 SVG、KML、VML 和 WebCGM 等矢量图形格式来表现。使用者通过指定的参数获取相应的地图图片。 + +    数据准备:可在 MapGIS IGServer 中发布 WMS 地图服务获取数据地址,也可通过其他方式发布服务或者获取地址,只要是基于 OGC 标准的 WMS 地图服务都能支持。 + +    具体实现:构造`CesiumZondy.Layer.OGCLayer`M3D 图层管理对象,调用`appendWMSTile()`方法,并配置服务地址、图层名称、附加信息,即可实现 WMS 地图服务数据的加载,在此传入的是 IGServer 中发布的 WMS 地图服务地址,可做参考。 + + + WMS地图 + + +- Example: + ```javascript + //构造OGC图层管理对象(视图) + var ogcLayer = new CesiumZondy.Layer.OGCLayer({ + viewer: webGlobe.viewer, + }) + //添加WMS服务地图 + var wmsLayer = ogcLayer.appendWMSTile( + //地图服务URL地址 + 'http://develop.smaryun.com:6163/igs/rest/ogc/doc/北京市/WMSServer', + //图层名 + '北京市,绿地_1,水域_3,大学,学校,动物园', + //附加属性 + {} + ) + ``` + + +### WMTS + +    Web Map Tile Service(网络地图瓦片服务),简称 WMTS,由开放地理信息联盟(Open GeoSpatial Consortium,OGC)制定,是和 WMS 并列的重要 OGC 规范之一。WMTS 不同于 WMS,它最重要的特征是采用缓存技术能够缓解 WebGIS 服务器端数据处理的压力,提高交互响应速度,大幅改善在线地图应用客户端的用户体验。WMTS 是 OGC 主推的缓存技术规范,是目前各种缓存技术相互兼容的一种方法。 + +    数据准备:可在 MapGIS IGServer 中发布 WMTS 地图服务获取数据地址,也可通过其他方式发布服务或者获取地址,只要是基于 OGC 标准的 WMTS 地图服务都能支持。 + +    具体实现:调用`CesiumZondy.Layer.OGCLayer`的`appendWMTSTile()`方法,并配置服务地址、图层名称、最大级数等信息,即可实现 WMTS 地图服务数据的加载,在此传入的是 IGServer 中发布的 WMTS 地图服务地址,可做参考。 + + + WMTS地图 + + +- Example: + ```javascript + //构造OGC图层管理对象(视图) + var ogcLayer = new CesiumZondy.Layer.OGCLayer({ + viewer: webGlobe.viewer, + }) + //添加WMTS地图服务 + var wmtsLayer = ogcLayer.appendWMTSTile( + //瓦片服务地址 + 'http://develop.smaryun.com:6163/igs/rest/ogc/WMTSServer', + //图层名称 + 'beijing', + 'EPSG:4326_北京市_028mm_GB', + //最大级数 + 17, + null, + 'default', + 0 + ) + ``` + +## 通用数据 + +    基于原生Cesium,支持加载各类通用格式数据,如3DTiles、 GLTF、CZML、GeoJSON、KML、KMZ数据,以及各种图片数据等。 + + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Manager.CommonDataManager / append3DTile() | 3DTiles数据 | +| CesiumZondy.Manager.CommonDataManager / appendModel() | GLTF数据 | +| CesiumZondy.Manager.CommonDataManager / appendCZML() | CZML数据 | +| CesiumZondy.Manager.CommonDataManager / appendGeoJson() | GeoJSON数据 | +| CesiumZondy.Manager.CommonDataManager / appendKml() | KML、KMZ数据 | +| CesiumZondy.Manager.CommonDataManager / appendImageByUrl() | 图片数据 | + + +### 3DTiles 数据 + +> 什么是3DTiles? + +    3DTiles 是用于流式传输大规模异构 3D 地理空间数据集的开放规范。为了扩展 Cesium 的地形和图像流,3DTiles 将用于流式传输 3D 内容,包括建筑物,树木,点云和矢量数据。关于 3DTiles 可自行了解其更多内容。 + +    具体实现:针对3DTiles数据支持本地数据和网络数据加载,关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`append3DTile()`方法与`remove3DTile()`方法,实现 3D Tiles 数据的加载与移除功能。加载数据须设置 3DTiles 数据的 URL 参数,通过加载成功回调函数定位跳转到所加载的 3DTiles 数据范围。 + + + 3DTiles数据 + + +- Example: + ```Javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer + }); + //加载3DTile数据 + var tiles = commonDataManager.append3DTile( + //3DTile数据路径,支持本地与网络数据 + './static/data/3DTile/BatchedTilesets/tileset.json', + //成功回调函数 + load + ); + function load(layer) { + //加载成功后定位跳转 + webGlobe.viewer.flyTo(layer); + console.log("这是一个加载成功回调"); + } + //通过remove3DTile方法移除 + //commonDataManager.remove3DTile(tiles); + ``` + +### GLTF 数据 + +> 什么是 GLTF? + +    GLTF(GL Transmission Format),即图形语言交换格式,是一种三维数据的格式标准,由 Khronos Group 推出。由于三维数据格式众多,所以其致力于成为像音频界的 MP3、图像界的 JPEG 那样的 3D 领域通用的数据格式。目前多款三维软件支持了 GLTF 格式数据的读写,如 Maya、3dmax、unity 等等。采用 GLTF 可避免不同软件中数据转换操作造成的各方面问题。 +GLTF 官方介绍 + +    具体实现:关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendModel()`方法,设置模型 id、模型文件 URL 路径、模型所在经纬度、高度、缩放比参数信息,即可实现 GLTF 模型的加载。如果模型自带动画,需要设置`webGlobe.viewer.clock.shouldAnimate`参数为 true 来开启动画。 + + +  GLTF数据 + + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //开启动画:如果模型自带动画,需开启此参数 + webGlobe.viewer.clock.shouldAnimate = true + //添加模型(gltf文件) + var model = commonDataManager.appendModel( + //模型id + 'model', + //模型文件URL路径 + './static/data/model/WuRenJi/WuRenJi.gltf', + //模型经度、纬度、高度 + 114.3938, + 30.5045, + 200, + //缩放比 + 200 + ) + ``` + +     **批量加载 GLTF 模型**:支持在三维场景中批量添加多个 GLTF 模型数据。常用于需要一次性添加多个模型的应用场景,多个模型可为相同数据,也可以是不同数据,参数单独设置,简化代码操作步骤。 + + + 批量GLTF数据 + + + - Example: + ```javascript + //多个模型 + var models = [ + { + id: 'document', + name: 'Models', + version: '1.0', + }, + { + //模型的ID + id: 'aerogenerator1', + //模型的名字 + name: '风机1', + //模型要添加的坐标位置 + position: { + cartographicDegrees: [118.0385, 42.6374, -5], + }, + //模型文件参数 + model: { + //模型文件的路径 + gltf: './static/data/model/donghua.gltf', + //模型的比例 + scale: 50, + //模型最小显示的像素 + minimumPixelSize: 16, + }, + //描述 + description: '这是1号风机', + }, + { + //模型的ID + id: 'aerogenerator2', + //模型的名字 + name: '风机2', + //模型要添加的坐标位置 + position: { + cartographicDegrees: [118.0356, 42.6354, -5], + }, + //模型文件参数 + model: { + //模型文件的路径 + gltf: './static/data/model/donghua.gltf', + //模型的比例 + scale: 50, + //模型最小显示的像素 + minimumPixelSize: 16, + }, + //描述 + description: '这是2号风机', + }, + ] + //开启动画:如果模型自带动画,需开启此参数 + webGlobe.viewer.clock.shouldAnimate = true + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加多个模型 + modelSource = commonDataManager.appendModels(models) + ``` + +- Example: + ```javascript + //跳转到模型处 + webGlobe.viewer.zoomTo(modelSource) + ``` + +### CZML 数据 + +> 什么是 CZML? + +    CZML,是一种用来描述动态场景的 JSON 架构的地理数据可视化语言,可以用来描述点、线、布告板、模型以及其他的图元,不仅提供了丰富的图形及其外观选择,还专注于表现动态地理数据的变化特征,主要用于 Cesium 在浏览器中的展示。 +CZML 介绍参考 + +    具体实现:关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendCZML()`方法,传入 CZML 文件的地址即可实现 CZML 数据的加载,并可添加回调函数根据 CZML 文件中某一模型 ID 判断是否添加成功;对应可通过`removeDataSource()`方法移除。 + + + CZML数据 + + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加CZML数据 + var datasource = commonDataManager.appendCZML( + //CZML文件地址 + './static/data/czml/fengji.czml', + //成功回调 + function(entities) { + //判断是否添加成功 + var enti = entities.getById('aerogenerator10') + if (enti == undefined) { + alert('失败') + } + } + ) + ``` + + +### GeoJSON 数据 + +> 什么是 GeoJSON? + +    GeoJSON,是一种对各种地理数据结构进行编码的格式,基于 Javascript 对象表示法的地理空间信息数据交换格式。通过键值对的方式表达几何、特征或者特征集合,能够支持点、线、面、多点、多线、多面和几何集合的数据类型。 +GeoJSON 官方介绍 + +    具体实现:关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendGeoJson()`方法,传入 GeoJSON 文件地址,实现 GeoJSON 数据的加载;对应可通过`removeDataSource()`方法移除。 + +    在此以本地文件为例: + + + GeoJSON数据 + + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加GeoJson数据(GeoJson文件地址) + var datasource = commonDataManager.appendGeoJson('./static/data/geojson/wuhan_bounds.geojson') + ``` + +### KML 数据 + +> 什么是 KML? + +    KML(Keyhole Markup Language,Keyhole 标记语言)是由 Google 旗下的 Keyhole 公司开发和维护的一种基于 XML 的标记语言,可用于描述和保存地理空间信息(如点、线、面、图像、模型等),适合网络环境下的地理信息协作与共享。KML 在 2008 年 4 月被 OGC(开放地理信息系统协会)宣布成为开放地理信息编码标准。KML 是纯粹的 xml 文本格式,两者之间最大的区别就在于 KML 描述的是地理信息数据。 +KML 百科介绍 + +    具体实现:关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendKml()`方法,传入 KML 文件地址,实现 KML 数据的加载;对应可通过`removeDataSource()`方法移除。 + +    在此以本地文件为例: + + + KML数据 + + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加KML数据 + datasource = commonDataManager.appendKml('./static/data/kml/bikeRide_wuhan.kml') + ``` + + +### KMZ 数据 + +> 什么是 KMZ? + +    KMZ 文件是经过压缩的 KML 文件,将其解压后即可获得最原始的 KML 文件。与 KML 不同的是,由于 KMZ 是压缩包文件,所以其中不仅可以包括 KML 文本文件,还可以包括其他类型的文件,如图片等,所以 KMZ 能够表达的信息可以更加丰富多样。 + +    具体实现:实现 KMZ 数据的加载与 KML 数据的方法一样,都采用`CesiumZondy.Manager.CommonDataManager`类提供的`appendKml()`方法;对应可通过`removeDataSource()`方法移除。 + +    在此以本地文件为例: + + + KMZ数据 + + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加KMZ数据 + var datasource = commonDataManager.appendKml('./static/data/kmz/sample.kmz') + ``` + +### 图片数据 + +    可在三维场景中叠加显示图片文件数据,支持本地数据和网络数据加载。 + +    具体实现:关键接口为`CesiumZondy.Manager.CommonDataManager`类提供的`appendImageByUrl()`方法与`removeImage()`方法,实现图片叠加显示与移除功能。调用`appendImageByUrl()`方法时,需要传入图片的地址(可为本地图片地址,也可以为网络图片的 URL),以及图片显示的坐标范围。 + +    **本地图片**: + + + 本地图片 + + +- Example: + ```javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer, + }) + //添加图片 + var image = commonDataManager.appendImageByUrl( + //本地图片地址 + './static/data/picture/world.jpg', + //图片显示范围(西经、南纬、东经、北纬) + -180.0, + -90, + 180.0, + 90 + ) + ``` + +    **在线图片**: + + + 在线图片 + + +- Example: + ```Javascript + //构造通用数据管理对象 + var commonDataManager = new CesiumZondy.Manager.CommonDataManager({ + viewer: webGlobe.viewer + }); + + //通过地址添加图片,支持本地图片和网络图片 + var imgObj = commonDataManager.appendImageByUrl( + //图片URL + 'http://5b0988e595225.cdn.sohucs.com/images/20180917/455c51316ec24a97958a254dc66c18f6.jpeg', + //东经 + 114.3473, + //北纬 + 30.5479, + //西经 + 114.4637, + //南纬 + 30.6120 + ); + //定位跳转 + sceneManager.flyToComm(114.4, 30.55, 30000); + + //通过removeImage()删除 + //commonDataManager.removeImage(imgObj,false); + ``` + + +## 场景操作 + +    基于原生Cesium,结合三维GIS应用进一步封装,提供丰富的场景交互操作功能,其中常用功能为常用控件、场景模式设置、场景浏览基本操作、视点跳转、坐标转换等功能。 + +### 常用控件 + +    常用的基础控件,包括鼠标位置、导航控件、比例尺、罗盘等。鼠标位置控件显示当前鼠标所在点的经纬度,高程等位置信息;导航控件提供放大、缩小、复位基础场景导航功能;罗盘控件则为方位指向,通常与导航控件结合使用。 + +    具体实现:先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` ,然后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `showPosition()` 方法显示位置信息;再初始化通用功能管理类`CesiumZondy.Manager.CommonFuncManager()` ,调用`createNavigationTool()`方法显示常用导航控件。 + + + 常用控件 + + +- Example: + + ```html + +
+ + +
+ ``` + + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + //显示鼠标位置控件 + sceneManager.showPosition('coordinateDiv'); + ``` + + +- Example: + ```Javascript + //初始化通用功能管理类 + var commFun = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //显示导航控件(罗盘、场景导航、比例尺) + var navigation = commFun.createNavigationTool({ + enableCompass: true, + enableZoomControls: true, + enableDistanceLegend: true, + enableCompassOuterRing: true + }); + ``` + +### 场景模式 + +    场景视图模式提供三种模式:三维球面模式、三维平面模式、二维地图模式,在实际应用中可根据具体应用场景设置。 + +    具体实现:初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` 后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的 `changeSceneMode()` 方法切换地图显示模式。另外,通过修改 Cesium 三维球控件 `Cesium.WebSceneControl()` 的视图对象的 scene 参数来设置地下模式。 + +    **常用场景模式** + + + 场景模式 + + +- Example: + + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + let mode = document.getElementById("modeSelect").value; + //根据选择切换场景视图模式 + if (mode == '3D') { + //切换场景模式为三维球面 + sceneManager.changeSceneMode('3D', 1); + } else if (mode === '3DC') { + //切换场景模式为三维平面 + sceneManager.changeSceneMode('COLUMBUS_VIEW', 1); + } else if (mode === '2D') { + //切换场景模式为二维地图 + sceneManager.changeSceneMode('2D', 1); + } + ``` + +    **地下场景模式** + +    **地下模式一**:开启地下模式并关闭大气层、设置球面透明度 + +- Example: + ```Javascript + //设置地下模式 + webGlobe.viewer.scene.globe.undergroundMode = true; + //大气显示关闭 + webGlobe.viewer.scene.skyAtmosphere.show = false; + //透明度设置 + webGlobe.viewer.scene.globe.transparent = 0.3; + ``` + +    **地下模式二**:开启地下模式、关闭大气层与地面大气效果、设置球面透明度、设置背景色 + +- Example: + ```Javascript + //设置地下模式 + webGlobe.viewer.scene.globe.undergroundMode = true; + //大气显示关闭 + webGlobe.viewer.scene.skyAtmosphere.show = false; + //地面大气效果关闭 + webGlobe.viewer.scene.skyAtmosphere.showGroundAtmosphere = false; + //透明度设置 + webGlobe.viewer.scene.enableTransparent = true; + //透明度设置 + webGlobe.viewer.scene.globe.transparent = 1; + //背景颜色设置 + webGlobe.viewer.scene.baseColor = new Cesium.Color(1, 1, 1, 0.0001); + webGlobe.viewer.scene.globe.imageryLayers.get(0).alpha = 0; + webGlobe.viewer.scene.globe.imageryLayers.get(1).alpha = 0; + ``` + + +### 场景操作 + +    场景的基本操作功能,包括场景视图缩放、复位、三维球自转、设置天空盒等。 + +    具体实现:先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` , 然后初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的如下几个方法分别实现对应的场景操作功能。 + + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Manager.SceneManager / zoomIn() | 放大 | +| CesiumZondy.Manager.SceneManager / zoomOut() | 缩小| +| CesiumZondy.Manager.SceneManager / goHome() | 复位 | +| CesiumZondy.Manager.SceneManager/ openRotation() | 开启自转| +| CesiumZondy.Manager.SceneManager / closeRotation() | 关闭自转| +| CesiumZondy.Manager.SceneManager / changeSkyBox() | 修改天空盒| + + + 场景操作 + + + +- Example: + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +    **zoomin():** + +- Example: + + ```Javascript + sceneManager.zoomin();//放大 + ``` + +    **zoomout():** + +- Example: + + ```Javascript + sceneManager.zoomout();//缩小 + ``` + +    **goHome():** + +- Example: + + ```Javascript + sceneManager.goHome();//复位 + ``` + +    **openRotation()与 closeRotation():** + +```Javascript +sceneManager.openRotation();//开启自转 +ceneManager.closeRotation();//关闭自转 +``` + +    **changeSkyBox():** + +- Example: + ```Javascript + var skybox = new Cesium.SkyBox({ + sources: { + positiveX: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/front.jpg', + negativeX: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/back.jpg', + positiveY: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/left.jpg', + negativeY: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/right.jpg', + positiveZ: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/top.jpg', + negativeZ: './static/libs/cdn/Cesium/Assets/Textures/SkyBox2/bottom.jpg' + } + }); + sceneManager.changeSkyBox(skybox); + ``` + +### 视点跳转 + +    场景视点跳转功能,即根据坐标点在三维球上进行定位跳转。此功能为场景视图的基础功能,应用非常广泛,可根据具体应用场景需求调用合适的方法。 + +    具体实现:初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` , 初始化视图功能管理类 `CesiumZondy.Manager.SceneManager()` ,调用视图功能管理类的如下 4 个视点跳转方法进行视点跳转。 + + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Manager.SceneManager / flyTo() | 视点跳转简单方法,根据经纬度、视角高度、跳转持续时间进行视点跳转 | +| CesiumZondy.Manager.SceneManager / flyToComm() | 视点跳转通用方法,根据经纬度、视角高度,以及原生的可扩展参数进行视点跳转 | +| CesiumZondy.Manager.SceneManager / flyToEx() | 视点跳转扩展方法,根据经纬度,以及可扩展的参数(包括视角高度、持续时间、方位角、俯仰角、翻滚角)进行视点跳转 | +| CesiumZondy.Manager.SceneManager/ flyToFeatureById() | 根据 ID 飞行到特定要素位置,即通过图层的某个要素进行定位跳转| + + + 视点跳转 + + +- Example: + ```Javascript + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +    **flyTo():** + +* Example: + ```Javascript + //跳转视图(北京) + sceneManager.flyTo(116.44, 40, 300000, 2); + ``` + +    **flyToComm():** + +* Example: + ```Javascript + //跳转视图(武汉) + sceneManager.flyToComm(114.3, 30.6, 100000); + ``` + +    **flyToEx():** + +* Example: + ```Javascript + //视点跳转(中地科技园) + sceneManager.flyToEx(114.40298522106733, 30.465568703723072, { + height: 100.85856618500283, + heading: -45.4940479913348135, + pitch: -15, + roll: 0 + }); + ``` + +    **flyToFeatureById():** + +* Example: + + ```Javascript + //加载M3D地图文档(服务地址,配置参数) + Layer2 = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/buildings1', { + autoReset: false, + //模型细节显示控制参数:较大值可提高渲染性能,较低值可提高视觉质量 + maximumScreenSpaceError: 0 + }); + //视点跳转-根据 ID 飞行到特定要素位置(上海) + sceneManager.flyToFeatureById(Layer2, 10 ,{ + height: 950, + heading: 22, + pitch: -20, + roll: 0 + }); + + ``` + + +### 坐标转换 + +    根据鼠标事件获取的屏幕坐标进行坐标转换与相关计算的功能,包括常用的屏幕坐标转笛卡尔坐标、屏幕坐标转经纬度、根据经纬度计算高度值。 + +    具体实现:先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` , 然后初始化公共方法管理类 `CesiumZondy.Manager.CommonFuncManager()` ,分别调用如下对应的方法实现屏幕坐标转换与相关计算功能。 + +- `screenPositionToCartesian`:屏幕坐标转为笛卡尔坐标; +- `screenPositionToCartographic`:屏幕坐标转为经纬度坐标; +- `getHeightFromDegrees`:根据经纬度计算高度值。 + + + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Manager.CommonFuncManager / screenPositionToCartesian() | 屏幕坐标转为笛卡尔坐标 | +| CesiumZondy.Manager.CommonFuncManager / screenPositionToCartographic() | 屏幕坐标转为经纬度坐标 | +| CesiumZondy.Manager.CommonFuncManager / getHeightFromDegrees() | 根据经纬度计算高度值 | + + +- Example: + ```Javascript + //初始化公共方法管理类 + var commonFuncManager = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //初始化鼠标事件管理类 + var mouseEventManager = new CesiumZondy.Manager.MouseEventManager({ + viewer: webGlobe.viewer + }); + ``` + +    **screenPositionToCartesian():** + +* Example: + ```Javascript + //添加鼠标左键单击事件获取屏幕坐标点 + mouseEventManager.registerMouseEvent("LEFT_CLICK", leftToCartesian); + function leftToCartesian(movement) { + //将鼠标左键点击的屏幕坐标转为笛卡尔坐标 + var position = commonFuncManager.screenPositionToCartesian(movement.position); + } + ``` + +    **screenPositionToCartographic():** + +* Example: + ```Javascript + //添加鼠标左键单击事件获取屏幕坐标点 + mouseEventManager.registerMouseEvent("LEFT_CLICK", leftToCartographic); + function leftToCartographic(movement) { + //将鼠标左键点击的屏幕坐标转为经纬度坐标 + var result = commonFuncManager.screenPositionToCartographic(movement.position); + let lng=Cesium.Math.toDegrees(result.longitude);//转为经度值 + let lat=Cesium.Math.toDegrees(result.latitude);//转为纬度值 + } + ``` + +    ** getHeightFromDegrees():** + +* Example: + + ```Javascript + //添加鼠标左键单击事件获取屏幕坐标点 + mouseEventManager.registerMouseEvent("LEFT_CLICK", leftToHeightFromDegrees); + function leftToHeightFromDegrees(movement) { + //屏幕坐标转笛卡尔坐标 + var cartesian = webGlobe.viewer.getCartesian3Position(movement.position, cartesian); + var cartographic = Cesium.Cartographic.fromCartesian(cartesian); + var lng = Cesium.Math.toDegrees(cartographic.longitude); + var lat = Cesium.Math.toDegrees(cartographic.latitude); + + //根据鼠标左键单击点经纬度计算其高度值 + var height = commonFuncManager.getHeightFromDegrees(lng, lat); + } + ``` + + +### 场景出图 + +    此功能用于将当前场景输出成图片,可导出图片文件或图像对象。 + + +    具体实现:先初始化 Cesium 三维球控件 `Cesium.WebSceneControl()` 加载数据;然后初始化常用功能管理类 `CesiumZondy.Manager.CommonFuncManager()` ,调用常用功能管理类的 `outputImageFile()` 方法或`outputImageObj()`方法进行场景输出图片。 + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Manager.SceneManager / outputImageFile() | 将屏幕截图输出为图片文件 | +| CesiumZondy.Manager.SceneManager / outputImageObj() | 将屏幕截图输出为图像对象,可保存为不同类型图片,应用场景比较丰富 | + +    **使用 outputImageFile():** + +* Example: + ```Javascript + var commonFuncManager = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //当前屏幕图片输出为一个图片文件 + commonFuncManager.outputImageFile("图片.png"); + ``` + +    **使用 outputImageObj():** + +* Example: + ```Javascript + var comm = new CesiumZondy.Manager.CommonFuncManager({ + viewer: webGlobe.viewer + }); + //当前屏幕输出为一个图片对象 + var res = comm.outputImageObj(); + //下载打印此图片对象为png + res.downloadPng("image.png"); + //可输出如下其他格式,可结合其他应用场景使用: + //res.toImg(); + //res.toBase64(); + //res.downloadPng(name); + //res.toCanvas(); + //res.toJpeg(); + //res.toPng(); + ``` + +>outputImageObj()返回的是一个图像对象,可直接输出为图片,也可以结合其他应用场景使用,如将图像输出到 Canvas 显示等。 + + +## 绘制 + +    图形绘制是Web端实现相关GIS功能的基础,尤其是基本几何图形的交互绘制,查询、编辑、分析等功能均涉及到客户端的图形绘制。一般通过绘制图形来获取地图的空间范围,为查询等功能提供条件限制、或提供操作要素的空间属性等。 + +    图形绘制的基础就是空间坐标,任何图形都由空间坐标组成的。一般有两种方式绘制图形:一种是空间坐标已知,通常根据已有的空间坐标信息直接添加图形,实现图形的绘制功能;另一种则通过鼠标交互获取空间坐标,这也是图形绘制常用的方法,通常通过鼠标在地图上进行交互式操作,以获取所需的空间范围信息,以此空间坐标绘制图形。第二种基于鼠标交互式操作完成的图形绘制,被称为交互式图形绘制。 + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Manager.EntityController / appendPoint()、appendPointComm() | 绘制点实体 | +| CesiumZondy.Manager.EntityController / appendLine() | 绘制立体线、绘制贴地形线 | +| CesiumZondy.Manager.EntityController / appendGroundLine() | 绘制贴地球线 | +| CesiumZondy.Manager.EntityController / appendGraphics() | 绘制立体区、绘制贴地形区 | +| CesiumZondy.Manager.EntityController / appendPolygon() | 绘制拉伸区 | +| CesiumZondy.Manager.EntityController / appendGroundPolygon() | 绘制贴地球区 | +| CesiumZondy.Manager.EntityController / appendHolePolygon() | 绘制带洞区 | + + +### 绘制图形 + + +#### 绘制点实体 + + + 绘制点 + + +    具体实现:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,然后调用`appendPoint()`方法,设置点实体所在经纬度、高程,以及名称、像素大小、颜色、边线颜色、边线宽度信息,即可添加绘制点实体。 + +- Example: + + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //添加点实体:经度、纬度、高程、名称、大小(像素单位)、颜色、外边线颜色、边线宽度 + var point = entityController.appendPoint(114.30252625376454, 30.544631482624357, 20, '黄鹤楼', 12, new Cesium.Color(255 / 255, 255 / 255, 0 / 255, 1), new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), 2) + + //方法二:添加点通用方法,对接Cesium原生,可设置更多属性 + point4 = entityController.appendPointComm( + //经度、纬度、高程 + 114.28478689925817, + 30.555691346035022, + 0, + //名称、描述 + '晴川阁', + '晴川阁景点', + //附加属性:像素大小、颜色、外边线颜色、边线宽度 + { + pixelSize: 12, + color: new Cesium.Color(255 / 255, 255 / 255, 0 / 255, 1), + outlineColor: new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), + outlineWidth: 2, + } + ) + ``` + +#### 绘制立体线/贴地形线 + + + 绘制立体线 + + + + 绘制贴地形线 + + +    具体实现:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,调用`appendLine()`方法,设置:线名称、线坐标点数组、线宽、线颜色、是否识别带高度的坐标(如果为 true 即代表立体线)、是否贴地形等信息,即可实现立体线实体的添加绘制。 + +- Example: + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //点数组 + var pointArr = [114.3984603010489, 30.506836857208143, 90, 114.39820581466965, 30.50638419163618, 0, 114.39817448017338, 30.505889144282214, 50] + //绘制立体线实体 + var line = entityController.appendLine( + //名称 + '立体线', + //点数组 + pointArr, + //线宽 + 2, + //线颜色 + new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), + //是否识别带高度的坐标(如果为true即代表立体线) + true, + //是否贴地形 + false, + //附加属性 + {} + ) + ``` + + +#### 绘制立体区/贴地形区 + + + 绘制立体区 + + + + 绘制贴地形区 + + +    具体实现:构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,根据坐标点、是否指定各点高度、颜色等信息构造区对象,然后调用`appendGraphics()`方法即可实现立体区或贴地形区的绘制。注意贴地形区的分类类型需设置为`Cesium.ClassificationType.TERRAIN`。 + +- Example: + + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + + //构造区对象 + var polygon = { + name: '立体区', + polygon: { + //坐标点 + hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights([114.3992, 30.5062, 100, 114.39921899282697, 30.507118866456594, 0, 114.39817867190918, 30.505787946817524, 0, 114.40013927896888, 30.505694066567706, 0]), + //是否指定各点高度 + perPositionHeight: true, + //颜色 + material: new Cesium.Color(33 / 255, 150 / 255, 243 / 255, 0.5), + //轮廓线是否显示 + outline: true, + //轮廓线颜色 + outlineColor: Cesium.Color.BLACK, + }, + } + //绘制图形通用方法:对接Cesium原生特性 + var stericPolygon = entityController.appendGraphics(polygon) + ``` + +- Example: + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //三维坐标点数组 + let points = [121.12838249665901, 23.828496638766055, 2816.2788, 121.150053294749, 23.82435802607214, 2584.9714, 121.14258923767652, 23.8125039217518, 2197.3468, 121.11461042047392, 23.809568499354498, 2405.1721] + //构造区对象 + let polygon = { + //区 + polygon: { + //坐标 + hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(points), + //颜色 + material: Cesium.Color.BLUE.withAlpha(0.5), + //分类类型:地形类型 + classificationType: Cesium.ClassificationType.TERRAIN, + }, + } + //绘制图形通用方法:对接Cesium原生特性 + terrainPolygon = entityController.appendGraphics(polygon) + ``` + +#### 绘制贴地球线 + + + 绘制贴地球线 + + +    具体实现:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,然后调用`appendGroundLine()`方法,传入定义的坐标数组、颜色、线宽,即可实现贴地线的添加绘制。 + +- Example: + + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + + //定义一组坐标位置 + var pointArr = [114.29326686402278, 30.54691048615991, 114.28238521698825, 30.552850641911828, 114.27353580837766, 30.536521489533488, 114.29257062566866, 30.525800315003725] + //颜色 + var color = new Cesium.ColorGeometryInstanceAttribute(1, 0, 0, 0.5) + + //绘制贴地线(坐标点数组,线颜色,线宽) + var groundLine = entityController.appendGroundLine(pointArr, color, 40) + ``` + +#### 绘制贴地球区 + + + 绘制贴地球区 + + +    具体实现:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象、构造外圈坐标数组、内圈坐标数组、填充颜色对象等信息,然后调用`appendGroundPolygon()`方法,即可实现贴地区的添加绘制。如果要绘制单圈的不带洞区,内圈坐标数组传空即可。 + +- Example: + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //坐标点数组(经纬度) + var point_out = [70, 0, 150, 0, 150, 60, 70, 60, 70, 0] + //根据给定点画贴地多边形 + var groundPolygon = webGlobe.appendGroundPolygon( + //外圈坐标数组(经纬度) + point_out, + //内圈坐标数组(经纬度) + null, + //填充颜色 + new Cesium.ColorGeometryInstanceAttribute(255 / 255, 255 / 255, 0 / 255, 0.5), + //附加属性 + {} + ) + ``` + +#### 绘制带洞区 + + + 绘制带洞区 + + +    具体实现:首先构造`CesiumZondy.Manager.EntityController`几何绘制控制对象,构造外圈、内圈坐标点数组,然后调用`appendHolePolygon()`方法,设置信息:区名称、内圈与外圈坐标点数组、区填充色,即可实现带洞区的添加绘制。每一圈坐标点序列,都必须首尾点一致形成闭合区,并且可以添加多圈内圈坐标。 + +- Example: + ```javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //外圈坐标点 + var point_out = [114.40328987990017, 30.479789358042233, 114.40255973680176, 30.473707285934392, 114.40905754990294, 30.473938016458956, 114.40971219770601, 30.479196348500707, 114.40328987990017, 30.479789358042233] + //内圈坐标点(可添加多圈内圈坐标点) + var point_in = [ + [114.40788399535329, 30.47712432587247, 114.4077781482791, 30.47586494219165, 114.40919532034856, 30.47700722872353, 114.40788399535329, 30.47712432587247], + [114.40582893901652, 30.478599513299535, 114.40570115301699, 30.47795978731544, 114.40655655628692, 30.478318639933967, 114.40582893901652, 30.478599513299535], + ] + //添加带洞多边形 + var holePolygon = entityController.appendHolePolygon( + //名称 + '带洞区', + //外圈坐标 + point_out, + //内圈坐标 + point_in, + { + //颜色 + material: new Cesium.Color(0 / 255, 0 / 255, 255 / 255, 0.5), + //多边形相对于地球表面的高度 + extrudedHeight: 100, + } + ) + ``` + + +### 交互绘制 + +    在三维球上使用鼠标完成点、线、区等图形的绘制,绘制的图形在临时图层上,绘制结果不会被保存,可应用于各个场景,满足用户在三维球上使用鼠标交互式绘制显示区域,或将此功能和其他功能混合使用,将其他功能变成交互式的功能。 + +    具体实现:通过几何绘制控制`CesiumZondy.Manager.EntityController`的方法实现点、线、区的添加绘制,结合三维场景鼠标事件即 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法实现鼠标交互绘制图形功能。其中,可通过 `Cesium.DrawPolygonTool()` 在三维场景中添加交互式绘制区控件,实现交互式绘制区功能。 + + + 交互绘制 + + +    以绘制点、线实体为例,关键步骤如下: + + +**Step 1. 注册鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下示例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +- Example: + ```Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}) + ``` + +**Step 2. 坐标转换**: +    鼠标事件执行方法中的形参包含当前鼠标点击的一些信息,可以获取其中的 position 位置信息用于图形绘制,其中鼠标点击获取到的 position 位置坐标为屏幕坐标,需要将屏幕坐标转换为经纬度坐标进行图形绘制; + +- Example: + ```Javascript + //屏幕坐标转世界坐标 + var cartesian = webGlobe.viewer.getCartesian3Position(movement.position, cartesian); + //世界坐标转地理坐标(弧度) + var cartographic = Cesium.Cartographic.fromCartesian(cartesian); + //地理坐标(弧度)转经纬度坐标:纬度、经度、高程 + var lng = Cesium.Math.toDegrees(cartographic.longitude); + var lat = Cesium.Math.toDegrees(cartographic.latitude); + var height = cartographic.height; + ``` + +**Step 3. 添加点、线实体**: +    调用几何绘制控制 `CesiumZondy.Manager.EntityController` 的 `appendPoint()` 方法/ `appendLine()` 方法传入相关经纬度坐标信息以及其他的信息添加图形,完成此步后可在三维场景中看到添加的点/线等图形; + +- Example: + + ```Javascript + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer + }); + //添加点:经度、纬度、高程、名称、像素大小、颜色、外边线颜色、边线宽度 + entityController.appendPoint(lng, lat, height, '点', 10, new Cesium.Color(1, 0, 0, 1), new Cesium.Color(1, 1, 0, 1), 2); + ``` + + ```Javascript + //添加线:名称、点数组、线宽、线颜色、是否贴地形 + entityController.appendLine('不贴地线', allPoint, 2, new Cesium.Color(1, 0, 0, 0.8), true, {}); + + ``` + +**Step 4. 注销鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `unRegisterMouseEvent()` 方法注销已添加的鼠标事件,完成此步后,点击鼠标不再触发鼠标事件。 + +- Example: + ```Javascript + //注销鼠标事件 + webGlobe.unRegisterMouseEvent('LEFT_CLICK'); + ``` + + +## 标注 + +    地图标注是将空间位置信息点与地图关联,通过图标、窗口等形式把点相关的信息展现到地图上。地图标注也是WebGIS中的比较重要的功能之一,在大众应用中较为常见。基于地图标注,丰富GIS应用,可以为用户提供更多个性化的地图服务,如标注兴趣点等。 + +    地图标注的应用比较灵活,提供用户交互式标注功能,以及在程序中预先加载标注等多种方式。用户交互式标注,指在地图上知道大概位置,用户通过鼠标交互添加标注。如果已知要标注点的位置信息与其他属性,就可以直接在程序中处理并添加,在地图上叠加显示标注点。地图标注的表现形式多样,包括简单的图片标注、冒泡信息窗口标注、聚合标注等。 + + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Manager.LabelLayer / appendBillboard() | 添加图片标注到地图 | +| CesiumZondy.Manager.LabelLayer / appendLabel() | 添加文本标注到地图 | +| CesiumZondy.Manager.LabelLayer / appendLabelIcon()、appendLabelIconComm() | 添加图片+文本标注到地图 | +| CesiumZondy.Manager.PopupController / appendPopup() | PopUp 标注,弹窗实现 | + + + +### 图片标注 + + + 图片标注 + + +    具体实现:首先构造`CesiumZondy.Manager.LabelLayer`注记图层管理对象,调用`appendBillboard()`方法可实现图片标注的添加,需要设置基本必要信息,如:图片标注的经纬度、高程、名称、图标文件路径、图片宽度、高度等信息。 + +- Example: + + ```javascript + //构造注记图层管理对象 + var labelLayer = new CesiumZondy.Manager.LabelLayer({ + viewer: webGlobe.viewer, + }) + + //添加图片标注(经度、纬度、高程、名称、图片地址、图标宽度、图标高度) + var icon = labelLayer.appendBillboard(114.3992, 30.5062, 0, '图标', './static/data/picture/icon.png', 50, 50) + ``` + +### 文本标注 + + + 文本标注 + + +    具体实现:首先构造`CesiumZondy.Manager.LabelLayer`注记图层管理对象,调用`appendLabel()`方法可实现文本标注的添加,需要设置基本必要信息,如:文本标注的经纬度、高程、文本内容;还可设置各项样式信息:字体、颜色、样式、标签位置等。 + +- Example: + + ```javascript + //构造注记图层管理对象 + var labelLayer = new CesiumZondy.Manager.LabelLayer({ + viewer: webGlobe.viewer, + }) + + //添加文字标注 + label = labelLayer.appendLabel( + //经度、纬度、高程 + 114.3992, + 30.5062, + 0, + //文本内容 + '光谷广场', + { + //文字大小、字体样式 + font: '20pt 楷体', + //文本颜色 + fillColor: Cesium.Color.YELLOW, + //文本样式,FILL:只填充;OUTLINE:只显示轮廓;FILL_AND_OUTLINE:填充颜色并显示轮廓 + style: Cesium.LabelStyle.FILL_AND_OUTLINE, + //边线颜色 + outlineColor: Cesium.Color.RED, + //边线宽度 + outlineWidth: 2, + //文本垂直方向与坐标点的相对位置:LEFT、CENTER、RIGHT + verticalOrigin: Cesium.VerticalOrigin.CENTER, + //文本水平方向与坐标点的相对位置:LEFT、CENTER、RIGHT + horizontalOrigin: Cesium.HorizontalOrigin.CENTER, + } + ) + ``` + + +### 图文标注 + + + 图文标注 + + +    具体实现:关键接口为`CesiumZondy.Manager.LabelLayer`类提供的`appendLabelIconComm()`方法、`appendLabelIcon()`方法,实现图文标注的添加。在实际应用场景中可根据具体应用需求选择调用不同的方法。 + +(1)调用`appendLabelIcon()`方法,设置各项基本信息,可实现图文标注的添加; + +- Example: + ```javascript + //构造注记图层管理对象 + var labelLayer = new CesiumZondy.Manager.LabelLayer({ + viewer: webGlobe.viewer, + }) + //方法一 + var labelIcon = labelLayer.appendLabelIcon( + //文本内容 + '湖北省老年大学', + //经度、纬度、高度 + 114.3639, + 30.5603, + 0, + //文字大小、字体 + '16pt 宋体', + //文字颜色 + new Cesium.Color(0 / 255, 0 / 255, 0 / 255, 0.8), + //图片地址 + './static/data/picture/icon.png', + //图片宽度、高度 + 50, + 50, + //最远显示距离:相机到注记的距离大于该值 注记不显示 + 10000000, + //最近显示距离:相机到注记的距离小于该值 注记不显示 + 1, + //图片位置:'center','top','bottom' + 'center' + ) + ``` + +(2)调用`appendLabelIconComm()`方法,传入构造的位置、图片、文本对象等参数信息,同样也可实现图文标注的添加,此方法对接 Cesium 原生属性,可实现更加丰富的效果; + +- Example: + ```javascript + //位置(x、y、z) + var position = Cesium.Cartesian3.fromDegrees(114.36517991431259, 30.56206615740468, 10) + //图片对象 + var billboardGraphics = new Cesium.BillboardGraphics({ + //图片地址 + image: './static/data/picture/icon.png', + //图片宽度 + width: 64, + //图片高度 + height: 64, + //随远近缩放 + pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1.5e5, 3.0, 1.5e7, 0.5), + //随远近隐藏 + translucencyByDistance: new Cesium.NearFarScalar(1.5e5, 1.0, 1.5e7, 0.0), + }) + //文本对象 + var labelGraphics = new Cesium.LabelGraphics({ + //文本 + text: '湖北省博物馆', + //文字大小、字体 + font: '20pt 宋体', + //文字颜色 + fillColor: Cesium.Color.BLACK, + //文本垂直位置 + verticalOrigin: Cesium.VerticalOrigin.BOTTOM, + //文本水平位置 + horizontalOrigin: Cesium.HorizontalOrigin.BOTTOM, + //偏移量 + pixelOffset: new Cesium.Cartesian2(0.0, -64 / 4), //x,y方向偏移 相对于屏幕 + //随远近缩放 + pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1.5e2, 3.0, 1.5e7, 0.5), + //随远近隐藏 + translucencyByDistance: new Cesium.NearFarScalar(1.5e5, 1.0, 1.5e7, 0.0), + }) + //添加图标注记(文字内容、描述、位置、图片对象、文本对象) + labelIcon1 = labelLayer.appendLabelIconComm('湖北省博物馆', '坐落于湖北省武汉市武昌区东湖风景区', position, billboardGraphics, labelGraphics) + ``` + +    其中,位置对象需使用 Cesium.Cartesian3 类来构造,图片对象需由 Cesium.BillboardGraphics 构造,文本对象需由 Cesium.LabelGraphics 构造,这三个类都属于 Cesium 原生提供的类,具体用法可参考其 API 文档。 + + +### Popup标注 + + + 气泡标注 + + +    具体实现:关键接口为`CesiumZondy.Manager.PopupController`类提供的`appendPopup()`方法,实现气泡弹窗的添加;可分别通过`removePopup()、clearPopups()、refreshPopups()`方法移除、更新 Popup 标注。 + + +- Example: + + ```javascript + //构造气泡弹窗控制对象 + var popupController = new CesiumZondy.Manager.PopupController({ + viewer: webGlobe.viewer, + }) + + //添加PopUP + var popup = popupController.appendPopup( + //容器div的id + 'popup', + //文本 + '
黄鹤楼
位于湖北省武汉市长江南岸的武昌蛇山之巅', + //坐标位置 + Cesium.Cartesian3.fromDegrees(114.30252372618706, 30.544641875459394), + //偏移量 + [0, 0], + //弹窗的关闭按钮点击回调函数 + function() { + popupController.removePopup(popup, 'popup', {}) + } + ) + //刷新 + popupController.refreshPopups() + ``` + + +## 查询 + +    查询是WebGIS中最常用的核心功能之一,广泛应用于各类项目中。通过对空间和属性要素的查询,提取需要的信息,与地图联动进行展示,满足应用的需求。 + +    查询定位在应用中很常见,根据不同的应用需求,可以选择不同的查询方式、实现方式以及表现方式。查询方式:基于GIS的特性,查询主要包括几何查询、属性条件查询以及两者结合的复合查询,以及OID查询。 + +- 几何查询有点击、画线、画圆、拉框、多边形五种操作方式,以操作的空间范围作为限定条件进行查询; +- 属性条件查询以要素属性限定条件进行查询; +- 复合查询则是两者的结合,空间范围组合属性条件,统一查询满足要求的空间要素; +- - OID查询:根据地图要素的唯一标识OID进行查询; + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Query.MapDocQuery / beginQuery() | 二维地图文档查询,支持几何、属性、OID查询 | +| CesiumZondy.Query.G3DDocQuery / queryG3DFeature() | 三维模型数据查询,支持几何、属性、OID查询 | +| CesiumZondy.Manager.AnalysisManager / startCustomDisplay() | M3D单体查询,模型高亮 | +| / | M3D交互编辑 | + + +### 二维地图文档查询 + +    基于二维地图文档的要素查询,提供几何、属性、OID查询方式,以及复合查询,即查询三维场景中加载的二维地图文档的要素信息,包括要素的几何信息与属性信息。 + +    具体实现:先初始化查询参数`CesiumZondy.Query.MapDocQuery`类对象,设置查询属性条件等参数后,调用`beginQuery()`方法进行查询,然后在回调中获取处理查询到的要素信息,解析所需的几何信息与属性信息进行展示。 + + + 二维地图文档要素查询 + + + +    以属性查询为例: + +- Example: + + ```javascript + var queryParam = new CesiumZondy.Query.MapDocQuery() + //查询图层的URL路径 + //queryParam.gdbp = encodeURI("gdbp://MapGisLocal/北京市/ds/行政区/sfcls/北京市"); + queryParam.docName = '北京市' + queryParam.mapIndex = 0 + queryParam.layerID = 0 + queryParam.structs = '{"IncludeAttribute":true,"IncludeGeometry":true,"IncludeWebGraphic":false}' + //设置要素的属性条件 + queryParam.where = "省名='北京'" + //服务器的ip + queryParam.ip = ip + queryParam.port = port + queryParam.beginQuery( + function(result) { + //查询结果处理 + }, + function quryError(err) { + alert(err) + } + ) + ``` + + ```javascript + if (result != null) { + data = result + //解析显示要素的属性信息 + document.getElementById('code').value = result.SFEleArray[0].AttValue[2] + document.getElementById('name').value = result.SFEleArray[0].AttValue[3] + document.getElementById('spell').value = result.SFEleArray[0].AttValue[4] + document.getElementById('population').value = result.SFEleArray[0].AttValue[40] + //解析要素的几何信息 + var GeompointArray = new Array() + for (var pointlength = 0; pointlength < result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots.length; pointlength++) { + var PntCartesian3 = Cesium.Cartesian3.fromDegrees(result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots[pointlength].x, result.SFEleArray[0].fGeom.RegGeom[0].Rings[0].Arcs[0].Dots[pointlength].y, 10) + GeompointArray.push(PntCartesian3) + } + GeompointArray.push(GeompointArray[0]) + //构造几何绘制控制对象 + var entityController = new CesiumZondy.Manager.EntityController({ + viewer: webGlobe.viewer, + }) + //构造区对象 + var polygon = { + name: '立体区', + polygon: { + //坐标点 + hierarchy: GeompointArray, + //是否指定各点高度 + perPositionHeight: true, + //颜色 + material: new Cesium.Color(33 / 255, 150 / 255, 243 / 255, 0.5), + //轮廓线是否显示 + outline: true, + //轮廓线颜色 + outlineColor: Cesium.Color.BLACK, + }, + } + //绘制图形通用方法:对接Cesium原生特性 + var stericPolygon = entityController.appendGraphics(polygon) + } + ``` + +### 三维模型数据查询 + +    基于三维模型数据的要素查询,提供几何、属性、OID查询方式,以及复合查询,即查询三维场景中加载的三维模型数据的要素信息,包括三维模型数据的属性、几何等要素信息。 + +    具体实现:先构造`CesiumZondy.Query.G3DDocQuery`三维地图文档查询对象,配置相关参数后调用 `queryG3DFeature`方法执行查询,然后在回调中获取处理查询到的要素信息,并在三维场景中展示。 + + + 三维模型数据查询 + + +    以几何查询为例: + +- Example: + ```javascript + var queryParam = new CesiumZondy.Query.G3DDocQuery() + //查询图层的URL路径 + queryParam.gdbp = encodeURI('gdbp://MapGisLocal/示例数据/ds/三维示例/sfcls/景观_模型') + //设置查询结果结构 + queryParam.structs = '{"IncludeAttribute":true,"IncludeGeometry":true,"IncludeWebGraphic":false}' + //几何查询 + //设置查询方式 + queryParam.geometryType = 'Point3D' + //设置查询的点坐标 + queryParam.geometry = 92.37674872254775 + ',' + 163.57024299752067 + ',' + 21 + //服务器的ip + queryParam.serverIp = ip + queryParam.serverPort = port + queryParam.queryG3DFeature( + function(result) {}, + function(err) {} + ) + ``` + +### M3D单体查询 + +    M3D单体查询,针对的是M3D数据,实现在三维场景中展示 M3D 模型数据并实现单体查询功能。 + + + M3D单体查询 + + +    具体实现:结合鼠标点击事件,在点击事件回调函数中先通过`Cesium.WebSceneControl.Scene`类的`pick()`方法来选取要素,然后调用`CesiumZondy.Manager.AnalysisManager`类的`startCustomDisplay()`方法来实现模型高亮。 + +- Example: + ```javascript + //构造鼠标事件管理对象 + var mouseEventManager = new CesiumZondy.Manager.MouseEventManager({ + viewer: webGlobe.viewer, + }) + //注册鼠标左键单击事件 + mouseEventManager.registerMouseEvent('LEFT_CLICK', highlightPicking) + ``` + +- Example: + + ```javascript + /*鼠标左键单击事件回调:模型高亮*/ + function highlightPicking(movement) { + //根据鼠标点击位置选择对象 + var pickedFeature = webGlobe.scene.pick(movement.position) + + //获取要素的瓦片集 + var currentLayer = [pickedFeature.tileset] + //获取名称属性 + var title = pickedFeature.getProperty('name') + //采用_分割 + var values = title.split('_') + //获取数组中第三个数值,即为要素的ID + var vlueNumber = parseInt(values[2]) + //构建数组 + var idList = [vlueNumber] + //构建参数:设置颜色 + var options = { + //高亮颜色 + color: new Cesium.Color(255 / 255, 255 / 255, 0 / 255, 1), + //高亮模式:REPLACE为替换 + colorBlendMode: Cesium.Cesium3DTileColorBlendMode.REPLACE, + } + + //构造分析功能管理对象 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer, + }) + //开始闪烁查找到的模型 + analysisManager.startCustomDisplay(currentLayer, idList, options) + } + ``` + + +## 分析 + +    具备全空间一体化分析能力,提供模型压平、动态剖切等专业分析功能;提供可视域分析、地形开挖、洪水淹没分析、填挖方计算等地形分析功能。 + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| Cesium.VisiblityAnalysis() | 通视分析 | +| CesiumZondy.Manager.AnalysisManager / createDynamicCutting() | 动态剖切、开挖分析、卷帘分析 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createFlood() | 洪水淹没分析 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createViewshedAnalysis() | 可视域分析 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createSkyLine() | 天际线分析 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createSceneProjector() | 视频投放 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createModelFlatten() | 模型压平 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createAspectAnalysis() | 坡向分析 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createSlopeAnalysis() | 坡度分析 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createCutFill()、startCutFill() | 填挖方计算 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createAnimation() | 动画漫游 | + + +### 通视分析 + +    通视分析,用于检测当前三维场景中两点之间是否可以没有阻碍的看到。 + + + 通视分析 + + +    具体实现:通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法在三维场景里面自定义注册鼠标事件完成通视分析两个点的拾取,通过两点通视分析对象 `Cesium.VisiblityAnalysis()`实现两点通视分析。 + +**Step 1. 创建通视分析**: +    初始化两点通视分析对象 `Cesium.VisiblityAnalysis()` ; + +- Example: + ```Javascript + //初始化通视分析类 + visiblity = new Cesium.VisiblityAnalysis(); + ``` + +**Step 2. 添加通视分析**: +    将两点通视分析对象 `Cesium.VisiblityAnalysis()` 添加到 Cesium 三维球控件中; + +- Example: + ```Javascript + //添加通视分析显示 + viewer.scene.VisualAnalysisManager.add(visiblity); + ``` + +**Step 3. 注册鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +- Example: + ```Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('MOUSE_MOVE', function(e) {}); + ``` + +**Step 4. 设置两点通视分析参数**: +    给两点通视分析对象设置进行两点通视分析使用的必要参数。 + +- Example: + ```Javascript + //设置通视分析观察点 + visiblity.viewPosition = cartesian; + //设置通视分析结果点 + visiblity.targetPosition = cartesian; + ``` + +### 动态剖切 + +    此功能对已加载的M3D数据进行任意距离的剖切,动态的显示或隐藏一部分数据。 + + + 动态剖切 + + +    具体实现:创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例,通过设置剖切面距离进行数据剖切分析。 + +**Step 1. 创建切面**: +    初始化切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //进行剖切分析的面,从上往下切,Cesium.Cartesian3中第一个参数是左右,第二个参数是前后,第三个参数是上下 + var plane = new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, -1.0), -500.0) + ``` + +**Step 2. 获取剖切切面**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建剖切对象实例 + dynaCut = analysisManager.createDynamicCutting(landscapeLayer, [plane], { + color: new Cesium.Color(0.0, 1.0, 1.0, 0.3) + }); + ``` + +**Step 3. 设置剖切面距离**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + //设置切面回调函数 + dynaCut.planes[0].plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane.distance = distance; + return Cesium.Plane.transform(plane, landscapeLayer[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + ``` + + +### 开挖分析 + +    开挖分析,指对已加载的M3D数据进行任意距离深度开挖,动态的显示或隐藏一部分数据。 + + + 开挖分析 + + +    具体实现: 先初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,再创建 `Cesium.ClippingPlane()` 切面对象,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建开挖分析对象通过设置剖切面距离进行数据开挖分析。 + +**Step 1. 加载数据**: +    初始化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入M3D数据服务地址,即可加载浏览数据; + +* Example: + ``` Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + var drilllayer = m3dLayer.append( + "http://develop.smaryun.com:6163/igs/rest/g3d/钻孔_2_钻孔模型s", { + autoReset: false, + } + ); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {}); + ``` + +**Step 2. 创建切面**: +    初始化切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //开挖面设置,这五个面分别表示前后左右,底面,其中底面用于控制开挖深度 + var clippingPlanes = [ + new Cesium.ClippingPlane(new Cesium.Cartesian3(3, 0.0, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(-3, 0.0, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 3, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, -3, 0.0), -1500.0), + new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, -5), 0.0) + ] + ``` + +**Step 3. 创建开挖分析**: +    化M3D模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载M3D数据后,创建 `Cesium.ClippingPlane()` 切面对象,创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建开挖分析对象, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建开挖分析实例 + dynaCut = analysisManager.createExcavateAnalysis({ + //图层信息 + tileSet: landscapeLayer[0], + //开挖面的形状 + planes: planes, + //裁剪面材质 + material: new Cesium.Color(0.2, 0.4, 0.3, 0.7), + //边界线颜色 + edgeColor: new Cesium.Color(0.2, 0.4, 0.3, 0.7), + //边界线宽度 + edgeWidth: 3, + //裁减法线方向,默认值为 false + unionClippingRegions: false, + //开挖坐标 + longitude: 113.0402, + latitude: 30.0264, + height: 0 + }); + ``` + +**Step 4. 设置剖切面距离**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + dynaCut.planes[0].plane.plane = new Cesium.CallbackProperty(function(date) { + console.log(planes); + for (var i = 0; i < planes.length; i++) { + if (i === planes.length - 1) { + var plane = planes[i]; + plane.distance = distance; + Cesium.Plane.transform(plane, landscapeLayer[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + } + } + }, false); + ``` + +### 卷帘分析 + +    卷帘分析目前通过剖切功能实现,即对已加载的两个M3D数据进行任意距离的剖切,动态的显示或隐藏一部分数据,一个显示的同时不显示另一个数据,打到卷帘效果。 + + + 卷帘分析 + + +    具体实现:创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建两个M3D数据的切面对象通过设置剖切面距离进行数据剖切分析,实现卷帘效果。 + +**Step 1. 创建切面对象**: +    创建切面对象 `Cesium.ClippingPlane()` ; + +* Example: + ``` Javascript + //进行剖切分析的面,向右切 + var plane = new Cesium.ClippingPlane(new Cesium.Cartesian3(1, 0, 0), -200.0) + //进行剖切分析的面,向左切 + var plane1 = new Cesium.ClippingPlane(new Cesium.Cartesian3(-1, 0, 0), -200.0) + ``` + +**Step 2. 创建剖切对象**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `createDynamicCutting()` 方法创建剖切对象实例, 并获取剖切切面; + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //创建剖切对象实例 + dynaCut = analysisManager.createDynamicCutting(landscapeLayer, [plane], { + color: new Cesium.Color(0.0, 1.0, 1.0, 0.3) + }); + ``` + +**Step 3. 通过切面回调完成动态剖切分析**: +    通过设置切面回调函数,动态设置剖切面距离完成动态剖切分析。 + +* Example: + ``` Javascript + //设置切面回调函数 + planetEntity.plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane.distance = distance; + return Cesium.Plane.transform(plane, tileset[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + //设置切面回调函数 + planetEntity1.plane.plane = new Cesium.CallbackProperty(function(date) { + //设置剖切面距离 + plane1.distance = distance1; + return Cesium.Plane.transform(plane1, tileset[0].modelMatrix, new Cesium.ClippingPlane(Cesium.Cartesian3.UNIT_X, 0.0)); + }, false); + ``` + + +### 洪水淹没分析 + +    洪水淹没分析,即在三维场景下动态模拟洪水淹没分析的场景,根据设定的高程与范围分析洪水淹没区域,可应用在抗洪抢险、水库管理等领域,辅助决策。支持三维模型、地形等数据应用场景。 + + + 洪水淹没分析 + + +    具体实现:初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createFlood()` 方法创建洪水淹没分析示例,将结果显示到三维球控件上。 + +**Step 1. 创建洪水淹没分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createFlood()` 方法创建洪水淹没分析示例; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //初始化洪水淹没分析类 + flood = advancedAnalysisManager.createFlood(); + //设置洪水淹没分析区域点集 + flood.dotsList = newArray; + //设置洪水淹没区域最底高度 + flood.minHeight = Number(document.getElementById('minHeight').value <= 0 ? 0 : document.getElementById('minHeight').value); + //设置洪水淹没区域最高高度 + flood.maxHeight = Number(document.getElementById('maxHeight').value <= 0 ? 30 : document.getElementById('maxHeight').value); + //设置洪水上涨速度 + flood.floodSpeed = Number(document.getElementById('floodSpeed').value <= 0 ? 1 : document.getElementById('floodSpeed').value); + //水纹频率 指波浪的个数 + flood.frequency = Number(document.getElementById('frequency').value <= 0 ? 1000 : document.getElementById('frequency').value); + //水纹速度 + flood.animationSpeed = Number(document.getElementById('animationSpeed').value <= 0 ? 0.01 : document.getElementById('animationSpeed').value); + //水波的高度 + flood.amplitude = Number(document.getElementById('amplitude').value <= 0 ? 10 : document.getElementById('amplitude').value); + //指定水面颜色 和 透明度 + flood.floodColor = new Cesium.Color(0.2, 0.5, 0.4, 0.7); + // 指定光线强度 + flood.specularIntensity = 3.0; + ``` + +**Step 2. 洪水淹没结果显示**: +    将结果显示到三维球控件上。 + +* Example: + ``` Javascript + //添加洪水淹没结果显示 + webGlobe.scene.VisualAnalysisManager.add(flood); + ``` + + +### 可视域分析 + +    可视域分析,用于检测当前三维场景中某个点朝一个方向看的时候可以看到的区域。 + + + 可视域分析 + + +    具体实现:先通过 Cesium 三维球控件 `Cesium.WebSceneControl()` 对象的 `registerMouseEvent()` 方法在三维场景里面自定义注册鼠标事件完成可视域分析点的拾取;然后初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createViewshedAnalysis()` 方法实现可视域分析。 + +**Step 1. 加载数据**: +    初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 2. 创建可视域分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createViewshedAnalysis()` 方法实现可视域分析; + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //创建可视化分析对象 + viewshed3d = advancedAnalysisManager.createViewshedAnalysis(); + ``` + +**Step 3. 注册鼠标事件**: +    调用 Cesium 三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +- Example: + ```Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('MOUSE_MOVE', function(e) {}); + ``` + +**Step 4. 设置可视域分析参数**: +    给可视域分析对象设置进行可视域分析使用的必要参数; + +- Example: + ```Javascript + //设置观察点坐标 + viewshed3d.viewPosition = cartesian; + //设置可视域结果点 + viewshed3d.targetPosition = cartesian; + ``` + +**Step 5. 添加可视域分析**: +    将可视域分析对象 `Cesium.ViewshedAnalysis()` 添加到 Cesium 三维球控件中。 + +- Example: + ```Javascript + //添加可视域分析结果显示 + viewer.scene.VisualAnalysisManager.add(viewshed3d); + ``` + + +### 天际线分析 + +    天际线分析,用于检测当前视角的天际线,并绘制在三维场景中。 + + + 天际线分析 + + +    具体实现:先初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法加载 M3D 数据后,再初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSkyLine()` 方法创建天际线分析。 + + +**Step 1. 加载数据**: +    初始化 M3D 模型层管理类 `CesiumZondy.Layer.M3DLayer` 并调用 `append()` 方法传入 M3D 数据服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造M3D模型层管理对象 + var m3dLayer = new CesiumZondy.Layer.M3DLayer({ + viewer: webGlobe.viewer + }); + //加载M3D地图文档(服务地址,配置参数) + landscapeLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/ZondyModels', {}); + ``` + +**Step 2. 创建天际线分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSkyLine()` 方法创建天际线分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //创建天际线实例 + skyLineAn = advancedAnalysisManager.createSkyLine() + ``` + + +### 视频投放 + +    视频投放,即在三维场景中加载色块、图片、视屏等功能。 + +    具体实现:主要初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSceneProjector` 方法创建场景投放示例,实现场景投影分析。 + +**Step 1. 创建场景投影对象**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createSceneProjector()` 方法创建场景投放示例; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //初始化场景投影对象 + scenePro = advancedAnalysisManager.createSceneProjector(2); + ``` + +**Step 2. 注册鼠标事件**: +    调用Cesium三维球控件 `Cesium.WebSceneControl()` 的 `registerMouseEvent()` 方法注册鼠标事件, 以下事例中的匿名函数为触发鼠标事件后执行的方法,完成此步后,在三维场景中点击鼠标左键可触发点击事件,点击完成后进入匿名函数; + +* Example: + ``` Javascript + //注册事件 + webGlobe.registerMouseEvent('LEFT_CLICK', function(e) {}); + webGlobe.registerMouseEvent('RIGHT_CLICK', function(e) {}); + ``` + +**Step 3. 设置场景投影参数**: +    给场景投影对象设置进行场景投影使用的必要参数。 + +* Example: + ``` Javascript + //设置投影观察点 + scenePro.viewPosition = cartesian; + //数据url路径 + scenePro.textureSource = './static/data/picture/world.jpg'; + //设置场景投影结果点 + scenePro.targetPosition = cartesian; + ``` + + +### 模型压平 + +    模型压平,即将加载完成的M3D数据进行压平处理。一般可通过交互式方式实现模型压平功能。 + + + 模型压平 + + +    具体实现:添加交互式绘制工具 `Cesium.DrawPolygonTool()` 选择绘制区域, 初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createModelFlatten()` 方法,创建模型压平分析,将结果显示到三维球控件上。 + +**Step 1. 创建交互式绘制区工具**: +    初始化 `Cesium.DrawPolygonTool()` 对象,完成交互式绘制区工具的创建; + +* Example: + ``` Javascript + //创建交互式绘制区工具 + var drawPolygon = new Cesium.DrawPolygonTool(webGlobe.viewer, getDrawResult); + ``` + +**Step 2. 激活交互式绘制区工具**: +    调用 `Cesium.DrawPolygonTool()` 对象的activeTool()方法,激活交互式绘制区工具,完成此步后,可在三维场景中通过鼠标左键点击绘制多边形。 + +* Example: + ``` Javascript + //激活交互式绘制区工具 + drawPolygon.activeTool(); + ``` + +**Step 3. 顶点处理**: +    将交互式选取的点处理; + +* Example: + ``` Javascript + /*对绘制区域的顶点循环处理一下,以便用于模型压平参数的赋值*/ + var array = []; + for (let i = 0; i < positionsArray.length; i++) { + let point = positionsArray[i]; + let resPoint = new Cesium.Cartesian3; + let invserTran = new Cesium.Matrix4; + Cesium.Matrix4.inverse(tileset[0]._root.transform, invserTran); + Cesium.Matrix4.multiplyByPoint(invserTran, point, resPoint); + resPoint.y = -resPoint.y; + array.push(new Cesium.Cartesian2(resPoint.x, resPoint.y)); + } + array.push(array[0]); + ``` + +**Step 4. 创建模型压平分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createModelFlatten()` 方法,创建模型压平分析 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + advancedAnalysisManager.createModelFlatten(landscapeLayer[0], { + //是否进行压平。值为true时执行压平 + isFlatten: true, + //将高度压到0 + height: 0, + //压平多边形的顶点序列长度 + arrayLength: positionsArray.length, + //顶点序列。顶点序列需要闭合,也就是说,例如一个矩形是四个顶点ABCD,那序列就应该是【ABCDA】 + array: array + }); + ``` + +**Step 5. 结果显示**: +    将结果显示到三维球控件上。 + +* Example: + ``` Javascript + //场景渲染(渲染最新的压平效果) + webGlobe.viewer.scene.requestRender(); + ``` + + +### 坡向分析 + +    此功能用于地形数据的坡向分析。 坡向是指地表面上一点的切平面的法线在水平面的投影与该点的正北方向的夹角,描述该点高程值改变量的最大变化方向。坡向分析作用是:决定地表面局部地面接收阳光和重新分配太阳辐射量的重要地形因子,直接造成局部地区气候特征差异,影响各项农业生产指标。 + + + 坡向分析 + + +    具体实现:初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法加载地形数据后,跳转视点,创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createAspectAnalysis()` 方法进行坡向分析。 + +**Step 1. 加载数据**: +    初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法传入三维地形数据地图服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造地形图层管理类 + var terrain = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer + }); + //加载三维地形地图文档(服务地址,配置参数) + var { protocol, ip, port } = window.webclient; + var terrainlayer = terrain.append(`http://develop.smaryun.com:6163/igs/rest/g3d/terrain`, {}); + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +**Step 2. 坡向分析**: +    创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createAspectAnalysis()` 方法进行坡向分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //进行坡向分析 + var aspectAna = advancedAnalysisManager.createAspectAnalysis([ + Cesium.Color.ALICEBLUE, + Cesium.Color.ANTIQUEWHITE, + Cesium.Color.AQUA, + Cesium.Color.AQUAMARINE, + Cesium.Color.AZURE, + Cesium.Color.BEIGE + ]); + ``` + + +### 坡度分析 + +    此功能用于地形数据的坡度分析。 坡度是指过地表一点的切平面与水平面的夹角,描述地表面在该点的倾斜程度。坡度分析的作用是:影响地表物质流动与能量转换的规模与强度,制约生产力空间布局。 + + + 坡度分析 + + + +    具体实现:初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法加载地形数据后,跳转视点,创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createSlopeAnalysis()` 方法进行坡度分析。 + +**Step 1. 加载数据**: +    初始化地形图层管理类 `CesiumZondy.Layer.TerrainLayer` 并调用 `append()` 方法传入三维地形数据地图服务地址,即可加载浏览数据; + +- Example: + ```Javascript + //构造地形图层管理类 + var terrain = new CesiumZondy.Layer.TerrainLayer({ + viewer: webGlobe.viewer + }); + //加载三维地形地图文档(服务地址,配置参数) + var { protocol, ip, port } = window.webclient; + var terrainlayer = terrain.append(`http://develop.smaryun.com:6163/igs/rest/g3d/terrain`, {}); + //初始化视图功能管理类 + var sceneManager = new CesiumZondy.Manager.SceneManager({ + viewer: webGlobe.viewer + }); + ``` + +**Step 2. 坡度分析**: +    创建高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` ,调用 `createSlopeAnalysis()` 方法进行坡度分析。 + +- Example: + ```Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //进行坡度分析 + var slopeAna = advancedAnalysisManager.createSlopeAnalysis([ + Cesium.Color.ALICEBLUE, + Cesium.Color.ANTIQUEWHITE, + Cesium.Color.AQUA, + Cesium.Color.AQUAMARINE, + Cesium.Color.AZURE, + Cesium.Color.BEIGE + ]); + ``` + + +### 填挖方计算 + +    此功能提供用于计算将一定范围内的地形填平到某一高度时,需要挖开或填充的空间体积,可以应用于智慧城市,地质,公安等多个领域的业务功能,实用性强。 + + + 填挖方计算 + + + +    具体实现:初始化 `Cesium.DrawElement()` 对象在三维场景中添加交互式绘制区控件用来界定量算区域,初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createCutFill()` 方法创建填挖方分析对象, 调用高级分析功能管理类的 `startCutFill()` 方法执行填挖方分析。 + +**Step 1. 创建交互式绘制工具**: +    初始化 `Cesium.DrawElement()` 对象,完成交互式绘制工具的创建; + +* Example: + ``` Javascript + //创建交互式绘制工具 + var drawElement = new Cesium.DrawElement(webGlobe.viewer); + ``` + +**Step 2. 激活交互式绘制区工具**: +    调用 `Cesium.DrawElement()` 对象的startDrawingPolygon()方法,激活交互式绘制区工具,完成此步后,可在三维场景中通过鼠标左键点击绘制多边形; + +* Example: + ``` Javascript + //激活交互式绘制区工具 + drawElement.startDrawingPolygon(); + ``` + +**Step 3. 创建填挖方分析**: +    初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager()` 对象,调用高级分析功能管理类的 `createCutFill()` 方法创建填挖方分析对象; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: viewer + }); + //创建填挖方实例 + cutFill = advancedAnalysisManager.createCutFill(0.0, { + //设置x方向采样点个数 + xPaneNum: document.getElementById("x").value <= 0 ? 16 : document.getElementById("x").value, + //设置y方向采样点个数参数 + yPaneNum: document.getElementById("y").value <= 0 ? 16 : document.getElementById("y").value, + //设置填挖规整高度 + Height: document.getElementById("z").value <= 0 ? 16 : document.getElementById("z").value, + //返回结果的回调函数 + callback: function(result) { + document.getElementById("height").value = result.minHeight.toFixed(2) + '~' + result.maxHeight.toFixed(2); + document.getElementById("surfaceArea").value = result.surfaceArea; + document.getElementById("cutVolume").value = result.cutVolume; + document.getElementById("fillVolume").value = result.fillVolume; + } + }); + ``` + +**Step 4. 执行填挖方分析**: +    调用高级分析功能管理类的 `startCutFill()` 方法执行填挖方分析。 + +* Example: + ``` Javascript + //开始执行填挖方分析 + advancedAnalysisManager.startCutFill(cutFill, positions); + ``` + + +### 动画漫游 + +    此功能用于在三维场景中实现动画漫游功能,即让模型沿着路径漫游,默认为第一人称漫游,可修改动画漫游方式。本示例实现让飞机模型按既定的路径漫游。在实际应用中,可结合具体应用场景开发,如绘制路径进行动画漫游等功能需求等。 + + + 动画漫游 + + +    具体实现:初始化高级分析功能管理类 `CesiumZondy.Manager.AdvancedAnalysisManager` 对象,调用高级分析功能管理类的 `createAnimation()` 方法创建动画漫游对象实例实现动画漫游功能。 + +**Step 1. 创建动画漫游对象**: +    初始化高级分析功能管理类对象`CesiumZondy.Manager.AdvancedAnalysisManager`,调用`createAnimation()`方法创建动画漫游对象; + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //创建动画漫游对象 + animation = advancedAnalysisManager.createAnimation({ + exHeight: 9, + isLoop: false, + //漫游模型url + modelUrl: './static/data/model/WuRenJi.glb', + //完成动画漫游回调函数 + complete: function () { + alert('完毕'); + } + }); + ``` + +**Step 2. 实现动画漫游控制**: +    通过动画漫游对象的属性和方法实现动画漫游控制,即通过属性设置漫游路径、漫游方式、速度、俯仰角、方位角等参数,分别通过调用方法`start()`、`stop()`开始和结束漫游。 + +* Example: + ``` Javascript + //漫游路径 + positions = Cesium.Cartesian3.fromDegreesArray([ + 117.213063, 31.812956, 117.213162, 31.812389, 117.212929, 31.812056, 117.213275, 31.811582, + 117.21348, 31.811513, 117.214141, 31.811682, 117.21497, 31.811691, 117.216318, 31.811454, + 117.216962, 31.812037, 117.217893, 31.812298, 117.218607, 31.811488, 117.219466, 31.810935, + 117.224439, 31.810929, 117.225266, 31.811119, 117.225308, 31.81131, 117.224819, 31.811724, + 117.225189, 31.811928, 117.225676, 31.811624, 117.225843, 31.811943, 117.22625, 31.812183, + 117.226292, 31.81281, 117.225888, 31.813287, 117.226093, 31.814059, 117.22564, 31.814582, + 117.225953, 31.814731, 117.225611, 31.814954, 117.22576, 31.815233, 117.224073, 31.816329, + 117.223694, 31.81627, 117.222769, 31.817007, 117.222259, 31.816871, 117.221922, 31.816707, + 117.221653, 31.816788, 117.22151, 31.817002, 117.221039, 31.816891, 117.220395, 31.816352, + 117.220166, 31.815734, 117.219804, 31.815607, 117.219461, 31.815122, 117.21878, 31.814846, + 117.218297, 31.815275, 117.217975, 31.815172, 117.217142, 31.815229, 117.216753, 31.815124, + 117.216652, 31.814308, 117.215726, 31.814049, 117.214769, 31.813517, 117.214111, 31.813717, + 117.213552, 31.814099, 117.213024, 31.813954, 117.212897, 31.813892, 117.213224, 31.813681, + 117.212788, 31.813147, 117.212928, 31.813018, 117.213063, 31.812956 + ]); + //设置路径 + animation.positions = positions; + //漫游方式:1-跟随、2-锁定第一视角、3-上帝视角 + animation.animationType = 2; + //漫游速度 + animation.speed = 1; + ``` + +* Example: + ``` Javascript + function start() { + //开始漫游 + animation.start(); + } + function pause() { + //暂停漫游 + animation.pause = true; + } + function stop() { + //停止漫游 + animation.stop(); + } + ``` + + +## 场景特效 + +    支持常用粒子特效,如雨、雪、雾、火焰、烟雾等,模拟自然天气或动态场景。 + +| 类名/方法名 | API说明 | +| -------------- |----------------| +| CesiumZondy.Manager.AdvancedAnalysisManager / createRain() | 降雨粒子特效 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createSnow() | 降雪粒子特效 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createFog() | 雾粒子特效 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createFire() | 火焰粒子特效 | +| CesiumZondy.Manager.AdvancedAnalysisManager / createStableParticle() | 自定义粒子特效 | + +### 降雨特效 + + + 降雨特效 + + +    具体实现:首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createRain()`方法添加降雨粒子特效,可通过可选参数实现降雨效果的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }); + //添加下雨特效 + advancedAnalysisManager.createRain({ + //色调调整 + hueShift: 0.7 + }); + + ``` + +### 降雪特效 + + + 降雪特效 + + +    具体实现:首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createSnow()`方法添加降雪粒子特效,可通过可选参数实现降雪效果的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }); + //添加下雪特效 + advancedAnalysisManager.createSnow({ + //色调 + hueShift: 0.7 + }); + ``` + +### 雾特效 + + + 雾特效 + + +    具体实现:首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createFog()`方法添加雾粒子特效,可通过可选参数实现雾效的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }); + //添加雾效 + advancedAnalysisManager.createFog({ + //雾特效透明度 + alpha:0.5 + }); + + ``` + +### 火焰特效 + + + 火焰特效 + + +    具体实现:首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createFire()`方法添加火焰粒子特效,可通过可选参数实现火焰特效的调整。 + +- Example: + + ```javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }) + //位置点 + let position = [114.40103, 30.4679, 12] + //火焰图片url + let imageUrl = './static/data/effect/fire.png' + //添加火焰粒子特效 + fireObj = advancedAnalysisManager.createFire(imageUrl, position) + ``` + +- Example: + ```Javascript + if (name === 'emissionRate') { + //排放率 + fireObj.emissionRate = parseFloat(newValue); + } + if (name === 'particleSize') { + var particleSize = parseFloat(newValue); + //图像尺寸 + fireObj.imageSize = new Cesium.Cartesian2(particleSize, particleSize); + } + if (name === 'particleLife') { + //粒子生命 + fireObj.particleLife = parseFloat(newValue); + } + if (name === 'speed') { + //速度 + fireObj.speed = parseFloat(newValue); + } + if (name === 'startScale') { + //起始规模 + fireObj.startScale = parseFloat(newValue); + } + if (name === 'endScale') { + //终止规模 + fireObj.endScale = parseFloat(newValue); + } + ``` + +### 自定义粒子特效(烟雾) + + +    烟雾粒子特效,与火焰粒子特效相同,可以模拟火灾等各类火焰烟雾、水汽烟雾相关的场景。可通过自定义粒子特效接口实现烟雾粒子特效。 + + + 烟雾特效 + + + +    具体实现:首先构造`CesiumZondy.Manager.AdvancedAnalysisManager`高级分析功能类对象,然后调用`createStableParticle()`方法分别添加火焰与烟雾粒子特效,可通过可选参数实现烟雾特效的调整。 + +* Example: + ``` Javascript + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //粒子发射位置点 + let position = [114.40103, 30.4679, 12]; + //火焰与烟雾图片url + let imageUrl1 = './static/data/effect/fire1.png'; + let imageUrl2 = './static/data/effect/smoke1.png'; + //添加烟雾粒子特效 + fireObj = advancedAnalysisManager.createStableParticle(imageUrl1, position, { + emissionRate: 3, + startScale: 1, + endScale: 3 + }); + //添加烟雾粒子特效 + smokeObj = advancedAnalysisManager.createStableParticle(imageUrl2, position, { + emissionRate: 35, + startScale: 5, + endScale: 8 + }); + ``` + +* Example: + ``` Javascript + if (name === 'emissionRate') { + //排放率 + smokeObj.emissionRate = parseFloat(newValue); + } + if (name === 'particleSize') { + var particleSize = parseFloat(newValue); + //图像尺寸 + smokeObj.imageSize = new Cesium.Cartesian2(particleSize, particleSize); + + } + if (name === 'particleLife') { + smokeObj.particleLife = parseFloat(newValue); + } + if (name === 'speed') { + smokeObj.speed = parseFloat(newValue); + } + + if (name === 'startScale') { + //起始规模 + smokeObj.startScale = parseFloat(newValue); + } + if (name === 'endScale') { + //终止规模 + smokeObj.endScale = parseFloat(newValue); + } + ``` + + +## 轨迹模拟 + + +### 模型漫游 + +    模型漫游,此功能用于在三维场景中添加模型动态运动显示效果。 + + + 模型漫游 + + +    具体实现:创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `cruiseModel()` 方法创建模型漫游,通过 `startCruiseModel()` 方法开始模型漫游,通过 `stopCruiseModel()` 方法暂停模型漫游, 通过 `clearCruiseModel()` 方法清除模型漫游。 + +**Step 1. 创建模型漫游**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `cruiseModel()` 方法创建模型漫游; + +- Example: + ```Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //模型漫游 + var modelEntity = analysisManager.cruiseModel( + //模型URL地址 + './static/data/model/GroundVehicle.glb', + //漫游点集 + positionArr, + //是否显示漫游路径 + true, + //漫游时钟频率 + 10 + ); + ``` + +**Step 2. 开始模型漫游**: +    创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用 `startCruiseModel()` 方法开始模型漫游。 + +- Example: + ```Javascript + /*开始漫游*/ + analysisManager.startCruiseModel(); + ``` + + +### 动态航线 + +    动态航线,此功能用于动态显示两点之间的动态飞行轨迹效果。 + + + 动态航线 + + +    具体实现:初始化 `CesiumZondy.Manager.AdvancedAnalysisManager()`高级分析功能管理对象,然后调用 `createDynamicPolyline()` 方法创建动态航线。 + +- Example: + + ```Javascript + //开启动画 + webGlobe.viewer.clock.shouldAnimate = true; + //构造高级分析功能管理对象 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ + viewer: webGlobe.viewer + }); + //创建动态航线 + var dynamicLine = advancedAnalysisManager.createDynamicPolyline( + //航线起始城市经纬度 + { + lon: 114.302312702, + lat: 30.598026044 + }, + //航线终点城市数组,经纬度 + [ + { "lon": 115.028495718, "lat": 30.200814617 }, + { "lon": 110.795000473, "lat": 32.638540762 }, + { "lon": 111.267729446, "lat": 30.698151246 }, + { "lon": 112.126643144, "lat": 32.058588576 }, + { "lon": 114.885884938, "lat": 30.395401912 }, + { "lon": 112.190419415, "lat": 31.043949588 }, + { "lon": 113.903569642, "lat": 30.932054050 }, + { "lon": 112.226648859, "lat": 30.367904255 }, + { "lon": 114.861716770, "lat": 30.468634833 }, + { "lon": 114.317846048, "lat": 29.848946148 }, + { "lon": 113.371985426, "lat": 31.704988330 }, + { "lon": 109.468884533, "lat": 30.289012191 }, + { "lon": 113.414585069, "lat": 30.368350431 }, + { "lon": 112.892742589, "lat": 30.409306203 }, + { "lon": 113.160853710, "lat": 30.667483468 }, + { "lon": 110.670643354, "lat": 31.748540780 } + ], + { + //是否已经添加动态航线 + isAdd: false, + //航线颜色:默认红色 + color: new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1) + } + ); + ``` + + + +## 客户端可视化 + + +### 热力图 + +    热力图,此功能用于在当前三维场景中添加热力图显示效果。 + + + 热力图 + + +    具体实现:创建分析功能管理类 `CesiumZondy.Manager.AnalysisManager()` ,调用关键接口 `createHeatMap()` 添加热力图。 + +* Example: + ``` Javascript + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }) + //创建热力图(范围、最大值、最小值) + var instance = analysisManager.createHeatMap(bounds, valueMin, valueMax, data, options); + ``` + +### 动态圆 + +    动态圆,此功能用于在当前场景中绘制动态的圆显示效果,可应用于任意场景中。 + + + 动态圆 + + +    具体实现:先初始化 `Cesium.CircleScanEffect()` 动态圆对象,然后通过分析功能管理类`CesiumZondy.Manager.AnalysisManager` 的`addSceneEffect()`方法添加动态圆显示;`removeSceneEffect()`方法移除动态圆显示。 + +**Step 1. 创建动态圆**: +    初始化动态圆对象 `Cesium.CircleScanEffect()`,注意使用动态圆功能`必须开启深度检测` ; + +* Example: + ``` Javascript + //开启地形深度检测(必须) + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //初始化动态圆对象 + var scanEffect = new Cesium.CircleScanEffect(webGlobe.viewer, { + center: Cesium.Cartesian3.fromDegrees(114.06, 22.54, 20), + maxRadius: 5000, + scanColor: new Cesium.Color(1, 0, 0, 1), + duration: 8000 + }); + ``` + +**Step 2. 添加/移除动态圆**: +    调用Cesium三维球分析功能管理类`CesiumZondy.Manager.AnalysisManager` 的`addSceneEffect()`方法添加动态圆显示,相应可调用`removeSceneEffect()`方法移除。 + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //添加添加场景特效-动态圆 + analysisManager.addSceneEffect(scanEffect); + + //通过removeSceneEffect()移除场景特效 + //analysisManager.removeSceneEffect(scanEffect); + ``` + +### 雷达扫描圆 + +    雷达扫描圆,此功能用于在当前场景中添加雷达扫描圆显示效果,可应用于任意场景中。 + + + 雷达扫描圆 + + +    具体实现:初始化高级分析管理类 `CesiumZondy.Manager.AdvancedAnalysisManager` 的`createRadarScan()`方法创建雷达扫描圆对象,然后分别通过分析功能管理类`CesiumZondy.Manager.AnalysisManager` 的`addSceneEffect()`方法与`removeSceneEffect()`方法来添加与移除雷达扫描圆显示功能。 + +**Step 1. 创建雷达扫描圆**: +    初始化高级分析功能管理类对象 `CesiumZondy.Manager.AdvancedAnalysisManager` ,调用`createRadarScan()`方法创建雷达扫描圆对象,注意`必须开启深度检测` ; + +* Example: + ``` Javascript + //开启深度检测(必须) + webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true; + //初始化高级分析功能管理类 + var advancedAnalysisManager = new CesiumZondy.Manager.AdvancedAnalysisManager({ viewer: webGlobe.viewer }); + //创建一个雷达扫描圆对象 + var radarScanEffect = advancedAnalysisManager.createRadarScan( + //雷达中心点 + Cesium.Cartesian3.fromDegrees(120.9558, 23.4481, 3657), + //扫描半径 + 5000, + //扫描区域颜色 + new Cesium.Color(255 / 255, 0 / 255, 0 / 255, 1), + //周期时间,单位毫秒 + 8000 + ); + + ``` + +**Step 2. 添加/移除雷达扫描圆显示**: +    调用分析功能管理类`CesiumZondy.Manager.AnalysisManager` 的`addSceneEffect()`方法添加雷达扫描圆显示,相应可调用`removeSceneEffect()`方法移除。 + +* Example: + ``` Javascript + //初始化分析功能管理类 + var analysisManager = new CesiumZondy.Manager.AnalysisManager({ + viewer: webGlobe.viewer + }); + //添加场景特效-雷达扫描圆 + analysisManager.addSceneEffect(radarScanEffect); + //移除场景特效-雷达扫描圆 + //analysisManager.removeSceneEffect(radarScanEffect); + ``` + + +## 客户端可视化-Echarts + +    在三维场景中接入百度ECharts,支持三维场景中加载ECharts散点图、热力图、路径图、渐近线、自定义网格专题图等。 + +> 百度 ECharts:ECharts完整、详细使用方法可参考官方教程API,开发库下载可参考官方下载 + +> 对接Echarts特别说明:MapGIS Client for JavaScript在Cesium中对接了百度Echarts图表插件,若插件本身存在问题,请优先参考Echarts官网解决方案 + +    **以散点图-空气质量为例:实现在三维场景中加载ECharts散点图,基于全国主要城市空气质量数据实现散点图的可视化。**通过关键接口`CesiumZondy.Overlayer.EchartsLayer()`来实现ECharts图层的加载。 + + + + Echarts散点图-空气质量 + + + +**Step 1. 数据准备**: +    准备全国主要城市的数据,包括名称、坐标点、空气质量,并按照格式要求进行处理; + +* Example: + ```javascript + function initData() { + data = [ + {name: '海门',value: 9}, + {name: '鄂尔多斯',value: 12}, + {name: '招远',value: 12}, + {name: '舟山',value: 12}, + ··· + ]; + geoCoordMap = { + '海门': [121.15, 31.89], + '鄂尔多斯': [109.781327, 39.608266], + '招远': [120.38, 37.35], + '舟山': [122.207216, 29.985295], + ··· + }; + } + + function convertData(data) { + var res = []; + for (var i = 0; i < data.length; i++) { + var geoCoord = geoCoordMap[data[i].name]; + if (geoCoord) { + res.push({ + name: data[i].name, + value: geoCoord.concat(data[i].value) + }); + } + } + return res; + }; + ``` + +**Step 2. 配置参数项**: +    创建各种需要的组件,如标题、图例、提示框等,其中最关键的是“series-系列”组件,构造完成后,即可调用`CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map)`方法,将ECharts图层添加到三维场景中。 + +* Example: + ```javascript + function initEcharts() { + option = { + title: { + text: '全国主要城市空气质量 - 百度地图提供数据', + textStyle: { + color: '#eee' + }, + subtext: 'data from PM25.in', + sublink: 'http://www.pm25.in', + left: 'center' + }, + legend: { + orient: 'vertical', + y: 'top', + x: 'left', + data: ['pm2.5'], + textStyle: { + color: '#fff' + } + }, + tooltip: { + trigger: 'item' + }, + cesium: { + roam: true + }, + series: [{ + name: 'pm2.5', + type: 'scatter', + coordinateSystem: 'cesium', + data: convertData(data), + symbolSize: function (val) { + return val[2] / 10; + }, + showEffectOn: 'render', + rippleEffect: { + brushType: 'stroke' + }, + hoverAnimation: true, + label: { + normal: { + formatter: '{b}', + position: 'right', + show: false + }, + emphasis: { + show: true + } + }, + itemStyle: { + normal: { + color: '#ddb926' + } + }, + zlevel: 1 + }, + { + name: 'Top 5', + type: 'effectScatter', + coordinateSystem: 'cesium', + data: convertData(data.sort(function (a, b) { + return b.value - a.value; + }).slice(0, 6)), + symbolSize: function (val) { + return val[2] / 10; + }, + showEffectOn: 'render', + rippleEffect: { + brushType: 'stroke' + }, + hoverAnimation: true, + label: { + normal: { + formatter: '{b}', + position: 'right', + show: true + } + }, + itemStyle: { + normal: { + color: '#f4e925', + shadowBlur: 10, + shadowColor: '#333' + } + }, + zlevel: 1 + } + ] + } + layer = new CesiumZondy.Overlayer.EchartsLayer(map, option).addTo(map); + } + ``` + +## 客户端可视化-MapV + +    在三维场景中接入MapV,支持三维场景中加载MapV热力图、等。 + +> 对接Mapv特别说明:MapGIS Client for JavaScript在Cesium中对接了MapV插件,若插件本身存在问题,请优先参考Mapv官方教程寻找解决方案 + +    **以MapV热力图为例**:实现在三维场景中加载MapV热力图,热力图采用特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域。通过关键接口 `CesiumZondy.Overlayer.MapvLayer()` 来实现MapV图层的加载。 + + + MapV热力图 + + +**Step 1. 创建 `DataSet` 对象**: +    首先构造DataSet对象需要的数据,然后使用数据创建DataSet对象。DataSet对象使用Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var randomCount = 1000; + var data = []; + var citys = ["北京", "天津", "上海", "重庆", "石家庄", "太原", "呼和浩特", "哈尔滨", "长春", "沈阳", "济南", "南京", "合肥", "杭州", "南昌", "福州", + "郑州", "武汉", "长沙", "广州", "南宁", "西安", "银川", "兰州", "西宁", "乌鲁木齐", "成都", "贵阳", "昆明", "拉萨", "海口" + ]; + // 构造数据 + while (randomCount--) { + var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]); + data.push({ + geometry: { + type: 'Point', + coordinates: [cityCenter.lng - 2 + Math.random() * 4, cityCenter.lat - 2 + Math.random() * 4] + }, + count: 30 * Math.random(), + time: 100 * Math.random() + }); + } + + var dataSet = new mapv.DataSet(data); + ``` + +**Step 2. 构造 `options` 参数**: +    options参数参考Mapv框架的原生API创建,更多详细信息参考Mapv官方教程; + +* Example: + ``` javascript + var options = { + context: '2d', + size: 13, + gradient: { + 0.25: "rgb(0,0,255)", + 0.55: "rgb(0,255,0)", + 0.85: "yellow", + 1.0: "rgb(255,0,0)" + }, + max: 60, + animation: { + type: 'time', + stepsRange: { + start: 0, + end: 100 + }, + trails: 10, + duration: 4, + }, + draw: 'heatmap' + } + ``` + +**Step 3. 数据展示**: +    根据前面的步骤,将 `map` 、 `dataSet` 、 `options` 三个参数传入 `CesiumZondy.Overlayer.MapvLayer` 中创建对象,创建完成数据在三维场景中加载展示。 + +* Example: + ``` javascript + var mapvLayer = new CesiumZondy.Overlayer.MapvLayer(map, dataSet, options); + ``` + + + +## 客户端空间分析 + +    在三维场景中接入第三方开源空间分析库Turf.js,支持客户端实现缓冲区分析、泰森多边形、TIN三角网、中心点、插值、光滑曲线、求交判断等功能。 + + +> Turf.js: turf是JavaScript编写的模块化地理空间引擎,具体使用请查看turf官方教程下载 + +> GeoJSON.js: 地理数据转换成GeoJSON格式,GeoJSON.js官方地址 + + +    **以缓冲区分析为例**,给定一个缓冲半径进行缓冲区分析,单位支持 `miles 米`,`kilometers 千米`,`degrees 度`。 + + + + 客户端缓冲区分析 + + +    具体实现:先通过Cesium三维球控件 `Cesium.WebSceneControl()` 加载三维场景控件后,使用 `Turf.js` 空间分析库的 `turf.buffer()` 方法进行缓冲区分析。 + + +**Step 1. 执行缓冲区分析**: +      准备`点`、`线`、`面`要素数据,根据`缓冲区分析算法`得到缓冲区分析结果,实现关键步骤如下: + +   (1)准备`点`、`线`、`面`要素数据 + +* Example: + ```javascript + var origindata = { + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [114.24270629882811,30.622550184776674] + } + }, + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "LineString", + "coordinates": [ + [114.34810638427734,30.634958017061198], + [114.2856216430664,30.554869984737515], + [114.246826171875,30.4954261715298] + ] + } + }, + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [114.33815002441406,30.502230042106245], + [114.34398651123045,30.485071542395932], + [114.3728256225586,30.472348632640834], + [114.38278198242188,30.49010107130931], + [114.35256958007811,30.50518809826035], + [114.33815002441406,30.502230042106245] + ] + ] + } + } + ] + }; + ``` + +   (2)执行 `缓冲区分析算法`,返回缓冲结果要素数据 + +* Example: + ```javascript + geojson = turf.buffer(origindata, 1.5, { + units: 'miles' + }); + ``` + +**Step 2. 显示缓冲区分析结果**: +      更新数据,将得到的缓冲结果要素数据添加到地图中。 + +* Example: + ```javascript + map.dataSources.add(Cesium.GeoJsonDataSource.load(geojson, { + stroke: Cesium.Color.BLACK, + fill: Cesium.Color.GRAY, + strokeWidth: 15 + })); + ``` \ No newline at end of file diff --git "a/website/public/static/demo/military/source/img/01.\346\226\260\345\273\272\347\275\221\347\253\231\347\233\256\345\275\225.png" "b/website/public/static/demo/military/source/img/01.\346\226\260\345\273\272\347\275\221\347\253\231\347\233\256\345\275\225.png" new file mode 100644 index 000000000..bdb65764b Binary files /dev/null and "b/website/public/static/demo/military/source/img/01.\346\226\260\345\273\272\347\275\221\347\253\231\347\233\256\345\275\225.png" differ diff --git "a/website/public/static/demo/military/source/img/02.\345\274\225\347\224\250\350\204\232\346\234\254\345\272\223\350\265\204\346\272\220.png" "b/website/public/static/demo/military/source/img/02.\345\274\225\347\224\250\350\204\232\346\234\254\345\272\223\350\265\204\346\272\220.png" new file mode 100644 index 000000000..5b476446b Binary files /dev/null and "b/website/public/static/demo/military/source/img/02.\345\274\225\347\224\250\350\204\232\346\234\254\345\272\223\350\265\204\346\272\220.png" differ diff --git "a/website/public/static/demo/military/source/img/03.\346\226\260\345\273\272HTML\351\241\265\351\235\242\357\274\210\346\250\241\346\235\277\357\274\211.png" "b/website/public/static/demo/military/source/img/03.\346\226\260\345\273\272HTML\351\241\265\351\235\242\357\274\210\346\250\241\346\235\277\357\274\211.png" new file mode 100644 index 000000000..e5727690b Binary files /dev/null and "b/website/public/static/demo/military/source/img/03.\346\226\260\345\273\272HTML\351\241\265\351\235\242\357\274\210\346\250\241\346\235\277\357\274\211.png" differ diff --git "a/website/public/static/demo/military/source/img/03.\346\226\260\345\273\272HTML\351\241\265\351\235\242\357\274\210\347\251\272\357\274\211.png" "b/website/public/static/demo/military/source/img/03.\346\226\260\345\273\272HTML\351\241\265\351\235\242\357\274\210\347\251\272\357\274\211.png" new file mode 100644 index 000000000..08271528c Binary files /dev/null and "b/website/public/static/demo/military/source/img/03.\346\226\260\345\273\272HTML\351\241\265\351\235\242\357\274\210\347\251\272\357\274\211.png" differ diff --git "a/website/public/static/demo/military/source/img/04.\345\274\225\347\224\250\345\274\200\345\217\221\345\272\223.png" "b/website/public/static/demo/military/source/img/04.\345\274\225\347\224\250\345\274\200\345\217\221\345\272\223.png" new file mode 100644 index 000000000..897b68076 Binary files /dev/null and "b/website/public/static/demo/military/source/img/04.\345\274\225\347\224\250\345\274\200\345\217\221\345\272\223.png" differ diff --git "a/website/public/static/demo/military/source/img/05.\345\210\233\345\273\272div\345\261\202\345\271\266\350\256\276\347\275\256\346\240\267\345\274\217.png" "b/website/public/static/demo/military/source/img/05.\345\210\233\345\273\272div\345\261\202\345\271\266\350\256\276\347\275\256\346\240\267\345\274\217.png" new file mode 100644 index 000000000..7fb5f0ac1 Binary files /dev/null and "b/website/public/static/demo/military/source/img/05.\345\210\233\345\273\272div\345\261\202\345\271\266\350\256\276\347\275\256\346\240\267\345\274\217.png" differ diff --git "a/website/public/static/demo/military/source/img/06. body\347\232\204onload\344\272\213\344\273\266.png" "b/website/public/static/demo/military/source/img/06. body\347\232\204onload\344\272\213\344\273\266.png" new file mode 100644 index 000000000..1a53df09b Binary files /dev/null and "b/website/public/static/demo/military/source/img/06. body\347\232\204onload\344\272\213\344\273\266.png" differ diff --git "a/website/public/static/demo/military/source/img/07.\345\212\240\350\275\275M3D\347\274\223\345\255\230\346\250\241\345\236\213\347\232\204\350\204\232\346\234\254\345\207\275\346\225\260.png" "b/website/public/static/demo/military/source/img/07.\345\212\240\350\275\275M3D\347\274\223\345\255\230\346\250\241\345\236\213\347\232\204\350\204\232\346\234\254\345\207\275\346\225\260.png" new file mode 100644 index 000000000..9972cec74 Binary files /dev/null and "b/website/public/static/demo/military/source/img/07.\345\212\240\350\275\275M3D\347\274\223\345\255\230\346\250\241\345\236\213\347\232\204\350\204\232\346\234\254\345\207\275\346\225\260.png" differ diff --git "a/website/public/static/demo/military/source/img/08.\345\234\250IIS\344\270\255\346\265\217\350\247\210\347\275\221\351\241\265.png" "b/website/public/static/demo/military/source/img/08.\345\234\250IIS\344\270\255\346\265\217\350\247\210\347\275\221\351\241\265.png" new file mode 100644 index 000000000..a2b2edbc3 Binary files /dev/null and "b/website/public/static/demo/military/source/img/08.\345\234\250IIS\344\270\255\346\265\217\350\247\210\347\275\221\351\241\265.png" differ diff --git "a/website/public/static/demo/military/source/img/09.M3D\347\274\223\345\255\230\346\250\241\345\236\213\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.png" "b/website/public/static/demo/military/source/img/09.M3D\347\274\223\345\255\230\346\250\241\345\236\213\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.png" new file mode 100644 index 000000000..0ba6cfb96 Binary files /dev/null and "b/website/public/static/demo/military/source/img/09.M3D\347\274\223\345\255\230\346\250\241\345\236\213\346\230\276\347\244\272\346\225\210\346\236\234\345\233\276.png" differ diff --git a/website/public/static/demo/military/source/img/3D GeoModeler.png b/website/public/static/demo/military/source/img/3D GeoModeler.png new file mode 100644 index 000000000..b05e741ce Binary files /dev/null and b/website/public/static/demo/military/source/img/3D GeoModeler.png differ diff --git a/website/public/static/demo/military/source/img/3D SceneBuilder.png b/website/public/static/demo/military/source/img/3D SceneBuilder.png new file mode 100644 index 000000000..79b745c90 Binary files /dev/null and b/website/public/static/demo/military/source/img/3D SceneBuilder.png differ diff --git "a/website/public/static/demo/military/source/img/Cesium API\347\273\223\346\236\204.png" "b/website/public/static/demo/military/source/img/Cesium API\347\273\223\346\236\204.png" new file mode 100644 index 000000000..765abc49d Binary files /dev/null and "b/website/public/static/demo/military/source/img/Cesium API\347\273\223\346\236\204.png" differ diff --git a/website/public/static/demo/military/source/img/Cesium.png b/website/public/static/demo/military/source/img/Cesium.png new file mode 100644 index 000000000..560c4586f Binary files /dev/null and b/website/public/static/demo/military/source/img/Cesium.png differ diff --git "a/website/public/static/demo/military/source/img/Cesium\345\274\200\345\217\221\345\272\223.png" "b/website/public/static/demo/military/source/img/Cesium\345\274\200\345\217\221\345\272\223.png" new file mode 100644 index 000000000..afe4a85c1 Binary files /dev/null and "b/website/public/static/demo/military/source/img/Cesium\345\274\200\345\217\221\345\272\223.png" differ diff --git "a/website/public/static/demo/military/source/img/Cesium\345\274\200\345\217\221\347\244\272\344\276\213.png" "b/website/public/static/demo/military/source/img/Cesium\345\274\200\345\217\221\347\244\272\344\276\213.png" new file mode 100644 index 000000000..990d27f97 Binary files /dev/null and "b/website/public/static/demo/military/source/img/Cesium\345\274\200\345\217\221\347\244\272\344\276\213.png" differ diff --git a/website/public/static/demo/military/source/img/D3.png b/website/public/static/demo/military/source/img/D3.png new file mode 100644 index 000000000..1c6a97c25 Binary files /dev/null and b/website/public/static/demo/military/source/img/D3.png differ diff --git "a/website/public/static/demo/military/source/img/Desktop\344\271\235\345\267\236.png" "b/website/public/static/demo/military/source/img/Desktop\344\271\235\345\267\236.png" new file mode 100644 index 000000000..c07ddd39a Binary files /dev/null and "b/website/public/static/demo/military/source/img/Desktop\344\271\235\345\267\236.png" differ diff --git "a/website/public/static/demo/military/source/img/Desktop\351\253\230\347\272\24764.png" "b/website/public/static/demo/military/source/img/Desktop\351\253\230\347\272\24764.png" new file mode 100644 index 000000000..aaec53d54 Binary files /dev/null and "b/website/public/static/demo/military/source/img/Desktop\351\253\230\347\272\24764.png" differ diff --git a/website/public/static/demo/military/source/img/ECharts.png b/website/public/static/demo/military/source/img/ECharts.png new file mode 100644 index 000000000..ef6874140 Binary files /dev/null and b/website/public/static/demo/military/source/img/ECharts.png differ diff --git a/website/public/static/demo/military/source/img/IGServer64.png b/website/public/static/demo/military/source/img/IGServer64.png new file mode 100644 index 000000000..c4b9e04bd Binary files /dev/null and b/website/public/static/demo/military/source/img/IGServer64.png differ diff --git "a/website/public/static/demo/military/source/img/IGServer\344\271\235\345\267\236.png" "b/website/public/static/demo/military/source/img/IGServer\344\271\235\345\267\236.png" new file mode 100644 index 000000000..ff3b5fba2 Binary files /dev/null and "b/website/public/static/demo/military/source/img/IGServer\344\271\235\345\267\236.png" differ diff --git "a/website/public/static/demo/military/source/img/MapGIS\345\217\221\345\270\203\346\234\215\345\212\241.png" "b/website/public/static/demo/military/source/img/MapGIS\345\217\221\345\270\203\346\234\215\345\212\241.png" new file mode 100644 index 000000000..9f7a65898 Binary files /dev/null and "b/website/public/static/demo/military/source/img/MapGIS\345\217\221\345\270\203\346\234\215\345\212\241.png" differ diff --git a/website/public/static/demo/military/source/img/MapV.png b/website/public/static/demo/military/source/img/MapV.png new file mode 100644 index 000000000..d24081b26 Binary files /dev/null and b/website/public/static/demo/military/source/img/MapV.png differ diff --git "a/website/public/static/demo/military/source/img/dev/001-\346\226\260\345\273\272\347\251\272\345\234\272\346\231\257.png" "b/website/public/static/demo/military/source/img/dev/001-\346\226\260\345\273\272\347\251\272\345\234\272\346\231\257.png" new file mode 100644 index 000000000..ab86aaa82 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/001-\346\226\260\345\273\272\347\251\272\345\234\272\346\231\257.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/002-\346\267\273\345\212\240\346\250\241\345\236\213\345\261\202.png" "b/website/public/static/demo/military/source/img/dev/002-\346\267\273\345\212\240\346\250\241\345\236\213\345\261\202.png" new file mode 100644 index 000000000..5f8c96ada Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/002-\346\267\273\345\212\240\346\250\241\345\236\213\345\261\202.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/003-\351\200\211\346\213\251\346\250\241\345\236\213\346\225\260\346\215\256.png" "b/website/public/static/demo/military/source/img/dev/003-\351\200\211\346\213\251\346\250\241\345\236\213\346\225\260\346\215\256.png" new file mode 100644 index 000000000..ef9228e4a Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/003-\351\200\211\346\213\251\346\250\241\345\236\213\346\225\260\346\215\256.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/004-\346\230\276\347\244\272\346\250\241\345\236\213.png" "b/website/public/static/demo/military/source/img/dev/004-\346\230\276\347\244\272\346\250\241\345\236\213.png" new file mode 100644 index 000000000..5eb934392 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/004-\346\230\276\347\244\272\346\250\241\345\236\213.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/005-\351\200\211\346\213\251\346\250\241\345\236\213\345\261\236\346\200\247.png" "b/website/public/static/demo/military/source/img/dev/005-\351\200\211\346\213\251\346\250\241\345\236\213\345\261\236\346\200\247.png" new file mode 100644 index 000000000..e1ab5f562 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/005-\351\200\211\346\213\251\346\250\241\345\236\213\345\261\236\346\200\247.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/006-\350\256\276\347\275\256\346\270\262\346\237\223\346\226\271\345\274\217.png" "b/website/public/static/demo/military/source/img/dev/006-\350\256\276\347\275\256\346\270\262\346\237\223\346\226\271\345\274\217.png" new file mode 100644 index 000000000..8042b7a97 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/006-\350\256\276\347\275\256\346\270\262\346\237\223\346\226\271\345\274\217.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/007-\347\224\237\346\210\220M3D\347\274\223\345\255\230.png" "b/website/public/static/demo/military/source/img/dev/007-\347\224\237\346\210\220M3D\347\274\223\345\255\230.png" new file mode 100644 index 000000000..46c43c4e0 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/007-\347\224\237\346\210\220M3D\347\274\223\345\255\230.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/008-\351\205\215\347\275\256M3D\347\274\223\345\255\230\345\217\202\346\225\260.png" "b/website/public/static/demo/military/source/img/dev/008-\351\205\215\347\275\256M3D\347\274\223\345\255\230\345\217\202\346\225\260.png" new file mode 100644 index 000000000..aed16e932 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/008-\351\205\215\347\275\256M3D\347\274\223\345\255\230\345\217\202\346\225\260.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/009-\347\247\273\351\231\244\345\233\276\345\261\202.png" "b/website/public/static/demo/military/source/img/dev/009-\347\247\273\351\231\244\345\233\276\345\261\202.png" new file mode 100644 index 000000000..935c20864 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/009-\347\247\273\351\231\244\345\233\276\345\261\202.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/010-\346\267\273\345\212\240\346\250\241\345\236\213\347\274\223\345\255\230\345\233\276\345\261\202.png" "b/website/public/static/demo/military/source/img/dev/010-\346\267\273\345\212\240\346\250\241\345\236\213\347\274\223\345\255\230\345\233\276\345\261\202.png" new file mode 100644 index 000000000..054950ec6 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/010-\346\267\273\345\212\240\346\250\241\345\236\213\347\274\223\345\255\230\345\233\276\345\261\202.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/011-\351\200\211\346\213\251M3D\347\274\223\345\255\230\346\226\207\344\273\266.png" "b/website/public/static/demo/military/source/img/dev/011-\351\200\211\346\213\251M3D\347\274\223\345\255\230\346\226\207\344\273\266.png" new file mode 100644 index 000000000..b45a0c4ea Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/011-\351\200\211\346\213\251M3D\347\274\223\345\255\230\346\226\207\344\273\266.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/012-M3D\347\274\223\345\255\230\346\230\276\347\244\272\346\225\210\346\236\234.png" "b/website/public/static/demo/military/source/img/dev/012-M3D\347\274\223\345\255\230\346\230\276\347\244\272\346\225\210\346\236\234.png" new file mode 100644 index 000000000..7f2ebfa57 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/012-M3D\347\274\223\345\255\230\346\230\276\347\244\272\346\225\210\346\236\234.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/013-\344\277\235\345\255\230\344\270\211\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" "b/website/public/static/demo/military/source/img/dev/013-\344\277\235\345\255\230\344\270\211\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" new file mode 100644 index 000000000..b9982257d Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/013-\344\277\235\345\255\230\344\270\211\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/014-\347\231\273\345\275\225MapGIS Server Manager.png" "b/website/public/static/demo/military/source/img/dev/014-\347\231\273\345\275\225MapGIS Server Manager.png" new file mode 100644 index 000000000..ee7a0dc5e Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/014-\347\231\273\345\275\225MapGIS Server Manager.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/015-\345\217\221\345\270\203\344\270\211\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" "b/website/public/static/demo/military/source/img/dev/015-\345\217\221\345\270\203\344\270\211\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" new file mode 100644 index 000000000..140dcd466 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/015-\345\217\221\345\270\203\344\270\211\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/016-\350\216\267\345\217\226\344\270\211\347\273\264\345\234\260\345\233\276\350\256\277\351\227\256\345\237\272\345\234\260\345\235\200.png" "b/website/public/static/demo/military/source/img/dev/016-\350\216\267\345\217\226\344\270\211\347\273\264\345\234\260\345\233\276\350\256\277\351\227\256\345\237\272\345\234\260\345\235\200.png" new file mode 100644 index 000000000..08c03c2fe Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/016-\350\216\267\345\217\226\344\270\211\347\273\264\345\234\260\345\233\276\350\256\277\351\227\256\345\237\272\345\234\260\345\235\200.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/017-\345\244\215\345\210\266\345\237\272\345\234\260\345\235\200.png" "b/website/public/static/demo/military/source/img/dev/017-\345\244\215\345\210\266\345\237\272\345\234\260\345\235\200.png" new file mode 100644 index 000000000..cdbaf53a3 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/017-\345\244\215\345\210\266\345\237\272\345\234\260\345\235\200.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/1011-\345\244\251\345\234\260\345\233\276.png" "b/website/public/static/demo/military/source/img/dev/1011-\345\244\251\345\234\260\345\233\276.png" new file mode 100644 index 000000000..ba53d1319 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/1011-\345\244\251\345\234\260\345\233\276.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/1012-\347\231\276\345\272\246\345\234\260\345\233\276.png" "b/website/public/static/demo/military/source/img/dev/1012-\347\231\276\345\272\246\345\234\260\345\233\276.png" new file mode 100644 index 000000000..7ea5d8062 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/1012-\347\231\276\345\272\246\345\234\260\345\233\276.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/1013-\351\253\230\345\276\267\345\234\260\345\233\276.png" "b/website/public/static/demo/military/source/img/dev/1013-\351\253\230\345\276\267\345\234\260\345\233\276.png" new file mode 100644 index 000000000..fd50087ab Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/1013-\351\253\230\345\276\267\345\234\260\345\233\276.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/1014-OpenWeather\345\234\260\345\233\276.png" "b/website/public/static/demo/military/source/img/dev/1014-OpenWeather\345\234\260\345\233\276.png" new file mode 100644 index 000000000..d64d836f9 Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/1014-OpenWeather\345\234\260\345\233\276.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/1021-M3D\346\231\257\350\247\202\346\250\241\345\236\213.png" "b/website/public/static/demo/military/source/img/dev/1021-M3D\346\231\257\350\247\202\346\250\241\345\236\213.png" new file mode 100644 index 000000000..45184098f Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/1021-M3D\346\231\257\350\247\202\346\250\241\345\236\213.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/1031-\344\272\214\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" "b/website/public/static/demo/military/source/img/dev/1031-\344\272\214\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" new file mode 100644 index 000000000..dca4c872a Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/1031-\344\272\214\347\273\264\345\234\260\345\233\276\346\226\207\346\241\243.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/1032-\344\272\214\347\273\264\347\223\246\347\211\207.png" "b/website/public/static/demo/military/source/img/dev/1032-\344\272\214\347\273\264\347\223\246\347\211\207.png" new file mode 100644 index 000000000..3887345bd Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/1032-\344\272\214\347\273\264\347\223\246\347\211\207.png" differ diff --git "a/website/public/static/demo/military/source/img/dev/1033-\344\270\211\347\273\264\345\234\260\345\275\242.png" "b/website/public/static/demo/military/source/img/dev/1033-\344\270\211\347\273\264\345\234\260\345\275\242.png" new file mode 100644 index 000000000..b63f6279f Binary files /dev/null and "b/website/public/static/demo/military/source/img/dev/1033-\344\270\211\347\273\264\345\234\260\345\275\242.png" differ diff --git a/website/public/static/demo/military/source/img/dev/1041-WMS.png b/website/public/static/demo/military/source/img/dev/1041-WMS.png new file mode 100644 index 000000000..ddd0abdf0 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1041-WMS.png differ diff --git a/website/public/static/demo/military/source/img/dev/1042-WMTS.png b/website/public/static/demo/military/source/img/dev/1042-WMTS.png new file mode 100644 index 000000000..633344bc6 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1042-WMTS.png differ diff --git a/website/public/static/demo/military/source/img/dev/1051-data-3Dtiles.png b/website/public/static/demo/military/source/img/dev/1051-data-3Dtiles.png new file mode 100644 index 000000000..461e08b7c Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1051-data-3Dtiles.png differ diff --git a/website/public/static/demo/military/source/img/dev/1052-data-addgltf.png b/website/public/static/demo/military/source/img/dev/1052-data-addgltf.png new file mode 100644 index 000000000..ea2dc8ca1 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1052-data-addgltf.png differ diff --git a/website/public/static/demo/military/source/img/dev/1053-data-addgltfs.png b/website/public/static/demo/military/source/img/dev/1053-data-addgltfs.png new file mode 100644 index 000000000..c6b67fc29 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1053-data-addgltfs.png differ diff --git a/website/public/static/demo/military/source/img/dev/1054-data-czml.png b/website/public/static/demo/military/source/img/dev/1054-data-czml.png new file mode 100644 index 000000000..74c375b90 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1054-data-czml.png differ diff --git a/website/public/static/demo/military/source/img/dev/1055-data-geojson.png b/website/public/static/demo/military/source/img/dev/1055-data-geojson.png new file mode 100644 index 000000000..ad877c503 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1055-data-geojson.png differ diff --git a/website/public/static/demo/military/source/img/dev/1056-data-kml.png b/website/public/static/demo/military/source/img/dev/1056-data-kml.png new file mode 100644 index 000000000..2dbc93cea Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1056-data-kml.png differ diff --git a/website/public/static/demo/military/source/img/dev/1057-data-kmz.png b/website/public/static/demo/military/source/img/dev/1057-data-kmz.png new file mode 100644 index 000000000..b96d55eca Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1057-data-kmz.png differ diff --git a/website/public/static/demo/military/source/img/dev/1058-data-img1.png b/website/public/static/demo/military/source/img/dev/1058-data-img1.png new file mode 100644 index 000000000..ec088b157 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1058-data-img1.png differ diff --git a/website/public/static/demo/military/source/img/dev/1059-data-img2.png b/website/public/static/demo/military/source/img/dev/1059-data-img2.png new file mode 100644 index 000000000..b6ac1a0a5 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1059-data-img2.png differ diff --git a/website/public/static/demo/military/source/img/dev/1101-scene-showPosition.png b/website/public/static/demo/military/source/img/dev/1101-scene-showPosition.png new file mode 100644 index 000000000..b8a5d80ad Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1101-scene-showPosition.png differ diff --git a/website/public/static/demo/military/source/img/dev/1102-scene-sceneMode.png b/website/public/static/demo/military/source/img/dev/1102-scene-sceneMode.png new file mode 100644 index 000000000..d1736ab61 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1102-scene-sceneMode.png differ diff --git a/website/public/static/demo/military/source/img/dev/1103-scene-operation.png b/website/public/static/demo/military/source/img/dev/1103-scene-operation.png new file mode 100644 index 000000000..9c0643892 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1103-scene-operation.png differ diff --git a/website/public/static/demo/military/source/img/dev/1104-scene-fly.png b/website/public/static/demo/military/source/img/dev/1104-scene-fly.png new file mode 100644 index 000000000..9539d7998 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1104-scene-fly.png differ diff --git a/website/public/static/demo/military/source/img/dev/1201-drawGraphic-point.png b/website/public/static/demo/military/source/img/dev/1201-drawGraphic-point.png new file mode 100644 index 000000000..01e34afd7 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1201-drawGraphic-point.png differ diff --git a/website/public/static/demo/military/source/img/dev/1202-drawGraphic-line.png b/website/public/static/demo/military/source/img/dev/1202-drawGraphic-line.png new file mode 100644 index 000000000..e204c60e6 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1202-drawGraphic-line.png differ diff --git a/website/public/static/demo/military/source/img/dev/1202-drawGraphic-terrainline.png b/website/public/static/demo/military/source/img/dev/1202-drawGraphic-terrainline.png new file mode 100644 index 000000000..ca1855a0f Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1202-drawGraphic-terrainline.png differ diff --git a/website/public/static/demo/military/source/img/dev/1203-drawGraphic-polygon.png b/website/public/static/demo/military/source/img/dev/1203-drawGraphic-polygon.png new file mode 100644 index 000000000..916347535 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1203-drawGraphic-polygon.png differ diff --git a/website/public/static/demo/military/source/img/dev/1203-drawGraphic-terrainpolygon.png b/website/public/static/demo/military/source/img/dev/1203-drawGraphic-terrainpolygon.png new file mode 100644 index 000000000..32efc727c Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1203-drawGraphic-terrainpolygon.png differ diff --git a/website/public/static/demo/military/source/img/dev/1204-drawGraphic-groundline.png b/website/public/static/demo/military/source/img/dev/1204-drawGraphic-groundline.png new file mode 100644 index 000000000..ecc7d5456 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1204-drawGraphic-groundline.png differ diff --git a/website/public/static/demo/military/source/img/dev/1205-drawGraphic-groundpolygon.png b/website/public/static/demo/military/source/img/dev/1205-drawGraphic-groundpolygon.png new file mode 100644 index 000000000..296347671 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1205-drawGraphic-groundpolygon.png differ diff --git a/website/public/static/demo/military/source/img/dev/1206-drawGraphic-hole.png b/website/public/static/demo/military/source/img/dev/1206-drawGraphic-hole.png new file mode 100644 index 000000000..ab80bee06 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1206-drawGraphic-hole.png differ diff --git a/website/public/static/demo/military/source/img/dev/1207-drawGraphic-interaction.png b/website/public/static/demo/military/source/img/dev/1207-drawGraphic-interaction.png new file mode 100644 index 000000000..24b96b885 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1207-drawGraphic-interaction.png differ diff --git a/website/public/static/demo/military/source/img/dev/1208-drawGraphic-icon.png b/website/public/static/demo/military/source/img/dev/1208-drawGraphic-icon.png new file mode 100644 index 000000000..15105c389 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1208-drawGraphic-icon.png differ diff --git a/website/public/static/demo/military/source/img/dev/1209-drawGraphic-label.png b/website/public/static/demo/military/source/img/dev/1209-drawGraphic-label.png new file mode 100644 index 000000000..caf857727 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1209-drawGraphic-label.png differ diff --git a/website/public/static/demo/military/source/img/dev/1210-drawGraphic-labelicon.png b/website/public/static/demo/military/source/img/dev/1210-drawGraphic-labelicon.png new file mode 100644 index 000000000..2a4b83c6f Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1210-drawGraphic-labelicon.png differ diff --git a/website/public/static/demo/military/source/img/dev/1211-drawGraphic-popup.png b/website/public/static/demo/military/source/img/dev/1211-drawGraphic-popup.png new file mode 100644 index 000000000..1bbd13fc8 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1211-drawGraphic-popup.png differ diff --git a/website/public/static/demo/military/source/img/dev/1301-query-2dByAtt.png b/website/public/static/demo/military/source/img/dev/1301-query-2dByAtt.png new file mode 100644 index 000000000..bbf65c81f Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1301-query-2dByAtt.png differ diff --git a/website/public/static/demo/military/source/img/dev/1302-query-geomquery.png b/website/public/static/demo/military/source/img/dev/1302-query-geomquery.png new file mode 100644 index 000000000..bb334f9c6 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1302-query-geomquery.png differ diff --git a/website/public/static/demo/military/source/img/dev/1303-query-m3dquery.png b/website/public/static/demo/military/source/img/dev/1303-query-m3dquery.png new file mode 100644 index 000000000..36169c0f5 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1303-query-m3dquery.png differ diff --git a/website/public/static/demo/military/source/img/dev/1401-analysis-visibility.png b/website/public/static/demo/military/source/img/dev/1401-analysis-visibility.png new file mode 100644 index 000000000..70d7deb2a Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1401-analysis-visibility.png differ diff --git a/website/public/static/demo/military/source/img/dev/1402-analysis-dynamiccut.png b/website/public/static/demo/military/source/img/dev/1402-analysis-dynamiccut.png new file mode 100644 index 000000000..15cf25cfe Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1402-analysis-dynamiccut.png differ diff --git a/website/public/static/demo/military/source/img/dev/1403-analysis-excavate.png b/website/public/static/demo/military/source/img/dev/1403-analysis-excavate.png new file mode 100644 index 000000000..9ada00cd0 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1403-analysis-excavate.png differ diff --git a/website/public/static/demo/military/source/img/dev/1404-analysis-rollershutters.png b/website/public/static/demo/military/source/img/dev/1404-analysis-rollershutters.png new file mode 100644 index 000000000..2124a7cee Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1404-analysis-rollershutters.png differ diff --git a/website/public/static/demo/military/source/img/dev/1405-analysis-floor.png b/website/public/static/demo/military/source/img/dev/1405-analysis-floor.png new file mode 100644 index 000000000..40b77ba3a Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1405-analysis-floor.png differ diff --git a/website/public/static/demo/military/source/img/dev/1406-analysis-visiblerange.png b/website/public/static/demo/military/source/img/dev/1406-analysis-visiblerange.png new file mode 100644 index 000000000..6c6bec177 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1406-analysis-visiblerange.png differ diff --git a/website/public/static/demo/military/source/img/dev/1407-analysis-skyline.png b/website/public/static/demo/military/source/img/dev/1407-analysis-skyline.png new file mode 100644 index 000000000..325f673b5 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1407-analysis-skyline.png differ diff --git a/website/public/static/demo/military/source/img/dev/1408-analysis-modelflatten.png b/website/public/static/demo/military/source/img/dev/1408-analysis-modelflatten.png new file mode 100644 index 000000000..7bdc59afd Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1408-analysis-modelflatten.png differ diff --git a/website/public/static/demo/military/source/img/dev/1409-analysis-aspectAnalysis.png b/website/public/static/demo/military/source/img/dev/1409-analysis-aspectAnalysis.png new file mode 100644 index 000000000..c741d7e9f Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1409-analysis-aspectAnalysis.png differ diff --git a/website/public/static/demo/military/source/img/dev/1410-analysis-slopeAnalysis.png b/website/public/static/demo/military/source/img/dev/1410-analysis-slopeAnalysis.png new file mode 100644 index 000000000..336c39f5d Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1410-analysis-slopeAnalysis.png differ diff --git a/website/public/static/demo/military/source/img/dev/1411-analysis-cube.png b/website/public/static/demo/military/source/img/dev/1411-analysis-cube.png new file mode 100644 index 000000000..9cde6219d Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1411-analysis-cube.png differ diff --git a/website/public/static/demo/military/source/img/dev/1412-analysis-animation.png b/website/public/static/demo/military/source/img/dev/1412-analysis-animation.png new file mode 100644 index 000000000..e449989d8 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1412-analysis-animation.png differ diff --git a/website/public/static/demo/military/source/img/dev/1501-clientView-rain.png b/website/public/static/demo/military/source/img/dev/1501-clientView-rain.png new file mode 100644 index 000000000..676cf336f Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1501-clientView-rain.png differ diff --git a/website/public/static/demo/military/source/img/dev/1502-clientView-snow.png b/website/public/static/demo/military/source/img/dev/1502-clientView-snow.png new file mode 100644 index 000000000..ee54abb08 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1502-clientView-snow.png differ diff --git a/website/public/static/demo/military/source/img/dev/1503-clientView-fog.png b/website/public/static/demo/military/source/img/dev/1503-clientView-fog.png new file mode 100644 index 000000000..73fff508f Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1503-clientView-fog.png differ diff --git a/website/public/static/demo/military/source/img/dev/1504-clientView-fire.png b/website/public/static/demo/military/source/img/dev/1504-clientView-fire.png new file mode 100644 index 000000000..9ea10dc91 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1504-clientView-fire.png differ diff --git a/website/public/static/demo/military/source/img/dev/1505-clientView-smoke.png b/website/public/static/demo/military/source/img/dev/1505-clientView-smoke.png new file mode 100644 index 000000000..2101f5d30 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1505-clientView-smoke.png differ diff --git a/website/public/static/demo/military/source/img/dev/1601-track-flow.png b/website/public/static/demo/military/source/img/dev/1601-track-flow.png new file mode 100644 index 000000000..16528746a Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1601-track-flow.png differ diff --git a/website/public/static/demo/military/source/img/dev/1602-track-dynamicflight.png b/website/public/static/demo/military/source/img/dev/1602-track-dynamicflight.png new file mode 100644 index 000000000..d4501d942 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1602-track-dynamicflight.png differ diff --git a/website/public/static/demo/military/source/img/dev/1701-clientView-heatmap.png b/website/public/static/demo/military/source/img/dev/1701-clientView-heatmap.png new file mode 100644 index 000000000..94362e27b Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1701-clientView-heatmap.png differ diff --git a/website/public/static/demo/military/source/img/dev/1702-clientView-dynamiccircle.png b/website/public/static/demo/military/source/img/dev/1702-clientView-dynamiccircle.png new file mode 100644 index 000000000..555eb3574 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1702-clientView-dynamiccircle.png differ diff --git a/website/public/static/demo/military/source/img/dev/1703-clientView-radarscanning.png b/website/public/static/demo/military/source/img/dev/1703-clientView-radarscanning.png new file mode 100644 index 000000000..e854bce4c Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1703-clientView-radarscanning.png differ diff --git a/website/public/static/demo/military/source/img/dev/1801-echarts-air.png b/website/public/static/demo/military/source/img/dev/1801-echarts-air.png new file mode 100644 index 000000000..7d181cc79 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1801-echarts-air.png differ diff --git a/website/public/static/demo/military/source/img/dev/1901-mapv-heater.png b/website/public/static/demo/military/source/img/dev/1901-mapv-heater.png new file mode 100644 index 000000000..8eaf91e5a Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/1901-mapv-heater.png differ diff --git a/website/public/static/demo/military/source/img/dev/2001-clientAnalysis-buffer.png b/website/public/static/demo/military/source/img/dev/2001-clientAnalysis-buffer.png new file mode 100644 index 000000000..3acb1e9b4 Binary files /dev/null and b/website/public/static/demo/military/source/img/dev/2001-clientAnalysis-buffer.png differ diff --git a/website/public/static/demo/military/source/img/turf.png b/website/public/static/demo/military/source/img/turf.png new file mode 100644 index 000000000..ffeb503cf Binary files /dev/null and b/website/public/static/demo/military/source/img/turf.png differ diff --git "a/website/public/static/demo/military/source/img/\344\272\247\345\223\201\346\236\266\346\236\204.png" "b/website/public/static/demo/military/source/img/\344\272\247\345\223\201\346\236\266\346\236\204.png" new file mode 100644 index 000000000..212630b42 Binary files /dev/null and "b/website/public/static/demo/military/source/img/\344\272\247\345\223\201\346\236\266\346\236\204.png" differ diff --git "a/website/public/static/demo/military/source/img/\345\274\200\345\217\221\345\272\223.png" "b/website/public/static/demo/military/source/img/\345\274\200\345\217\221\345\272\223.png" new file mode 100644 index 000000000..d17364ff7 Binary files /dev/null and "b/website/public/static/demo/military/source/img/\345\274\200\345\217\221\345\272\223.png" differ diff --git "a/website/public/static/demo/military/source/img/\350\266\205\345\233\276\345\212\237\350\203\275\346\250\241\345\235\227.png" "b/website/public/static/demo/military/source/img/\350\266\205\345\233\276\345\212\237\350\203\275\346\250\241\345\235\227.png" new file mode 100644 index 000000000..1e116ac8e Binary files /dev/null and "b/website/public/static/demo/military/source/img/\350\266\205\345\233\276\345\212\237\350\203\275\346\250\241\345\235\227.png" differ diff --git a/website/public/static/demo/military/source/produce_cesium.md b/website/public/static/demo/military/source/produce_cesium.md new file mode 100644 index 000000000..82a3476c3 --- /dev/null +++ b/website/public/static/demo/military/source/produce_cesium.md @@ -0,0 +1,289 @@ +## 产品介绍 + +    MapGIS 3DClient for WebGL,即MapGIS Client for JavaScript(Cesium),是一款基于开源三维地图框架Cesium开发的跨浏览器端二次开发产品,零插件、简单、易开发、易扩展,用户可以通过该产品轻松构建功能强大的城市、城市群级别的全空间真三维Web应用。 + +
+ 产品架构 +
+
MapGIS Client for JavaScript产品架构图
+
+
+ + +    **MapGIS Client for JavaScript(Cesium) SDK**是一套基于Cesium的三维WebGIS开发库,无缝对接MapGIS云存储、云GIS服务器、云应用等产品,在原生Cesium的基础上进行扩展,融合了专业的MapGIS全空间GIS、大数据GIS、智能GIS能力,为全空间二三维一体化Web应用提供JavaScript功能接口,可帮助您快速构建三维WebGIS应用。 + +> MapGIS Client for JavaScript (Cesium) SDK包含了三维WebGIS开发所需的开发库、API、示例等,结合司马云开发世界资源中心的配套开发资源,以及云听社区、开源社区GitHubGitee,助力开发者高效开发。 + +### Cesium + +    Cesium是一个用于显示三维地球和地图的开源JavaScript库,是一个使用WebGL的地图引擎。支持球面、平面模式的二三维地图展示,提供良好的三维图形标绘与交互功能,以及场景模拟表达能力,具有最佳的性能、精度、视觉质量和易用性。从航空航天到智能城市再到无人机,各个行业的开发者都在使用Cesium来创建交互式Web应用程序,来共享动态地理空间数据。使用Cesium可显示海量三维模型数据、影像数据、地形高程数据、矢量数据等,三维模型格式支持gltf、三维瓦片模型格式支持3d tiles;矢量数据支持geojson、topojson格式;影像数据支持wmts等;高程支持STK格式。 + +>详情请参考Cesium官网地址 + +## 产品特点 + +### 全空间的数据融合能力 + +    提供地上地下、室内室外、空中地表全空间多源数据集成,从宏观到微观展示城市空间全要素。融合倾斜摄影、BIM、激光点云、物联感知数据、RTSP视频数据等多源异构数据,多角度、多粒度全面展示物理空间本源。 + +### 大体量数据承载及渲染 + +- 通过建立LOD、多级缓存、数据高效压缩等多种优化措施,支持大数据量地形可视化,以及多层影像数据的叠加显示。 +- 通过多级LOD技术,视锥体裁剪、可视范围调度等技术支持海量三维模型数据的快速渲染。 +- 支持海量三维数据网络应用数据交换格式(M3D),对海量三维模型数据进行网格划分与分层组织,采用流式传输模式,实现多端一体的高效解析和渲染。 + +### 强大的空间数据三维分析能力 + +    全面支持离散空间的三维数据模型的分析与计算,包括通视分析、可视域分析、动态可视域分析、开挖分析、透明地表分析、动态剖切分析、天际线分析、日照分析、阴影率分析、模型爆炸分析、X射线分析等,通过三维场景的可视化,展示三维模型之间的空间关系,为城市规划与监管、地下空间利用与开发提供科学依据和辅助决策。 + +### 炫酷的大数据客户端可视化 + +- 通过开源技术(EchartGL、MapV、d3等),提供蜂窝图、热力图、聚类、密度、时空立方体等多种客户端可视化表达方式。 +- 支持大体量的实时数据客户端绘制渲染,广泛应用于车联网、物联网,实现轨迹跟踪、轨迹渲染、实时视频投影等应用场景。 +- 于SVG实现大数据专题图的无损缩放和动态交互 + + + +## 资源下载 + +    MapGIS Client for JavaScript为开源产品,可从司马云-云开发世界下载正式发布的产品包,也可从开源社区(Gitee、GitHub)直接拉取。 + +    MapGIS官方下载地址:http://smaryun.com/dev/download_detail.html#/download828 + +    GitHub 托管地址:https://github.com/MapGIS/WebClient-JavaScript + +    Gitee 托管地址:https://gitee.com/osmapgis/WebClient-JavaScript + + +## 开发环境 + +    MapGIS Client for JavaScript产品已开源不收取费用,开发者可自行下载开发资源。 +    基于MapGIS服务器产品的WebGIS系统应用开发,__开发免费,商用收费__。对系统硬件环境没有特别要求,操作系统支持Microsoft Windows系列,包括Win7、Win8、Win10、Win Server2003、Win Server2008、Win Server2012、Win XP等,以及Linux 系列,包括redHat、ubuntu、centos等操作系统,均支持32位与64位机器。一般需要依次安装配置下列软件环境: + +### MapGIS开发平台: + +* MapGIS IGServer .NET版:获取MapGIS IGServer .NET x64 for Windows开发包,软件安装详细说明请参见《MapGIS IGServer .NET安装使用说明》; +* MapGIS IGServer(九州)版:九州版服务器产品暂无开发版本,请试用正式版MapGIS IGServer(九州)安装包,详细安装说明请参见《MapGIS IGServer(九州)操作手册》。 + +### 集成开发环境: +* .NET版:安装Microsoft Visual Studio(2015及以上)、Visual StudioCode等IDE; +* Java版:安装JDK,Eclipse/MyEclipse、WebStorm等IDE。 + + +## 开发授权 + +    您可以通过访问司马云官方网站获得开发者授权。申请免费开发授权请看帮助中心目前提供免费云开发授权与硬KEY开发授权两种模式,开发者可结合实际应用需求选用。 +* 免费云开发授权需要在有网环境下使用 +* 硬KEY可在离线环境下完成授权。 + + +## 开发SDK + +### 开发包 + +    MapGIS Client for JavaScript(Cesium) SDK,含三维WebGIS开发所需的开发库、API、示例、文档等资源,均集成在MapGIS Client for JavaScript产品门户中。 + +### 开发库 + +    MapGIS Client for JavaScript (Cesium)为用户提供了专业的三维WebGIS 客户端开发库,同时对接大数据应用提供相关功能接口,旨在帮助用户快速构建内容丰富、响应迅速、美观流畅,具有良好用户体验的WebGIS系统应用。 + +| 开发库 | 说明 | +| ------------ | -------------- | +| webclient-cesium-plugins.min.js / webclient-cesium-plugins.js(可调试版)| WebGL开发库,基于cesium原生库扩展,对接云GIS服务器产品,支持三维场景操作管理、二三维地图可视化(M3D图层、OGC、互联网地图服务、MapGIS地图服务、通用数据等)、图形绘制、三维数据查询、三维空间分析、轨迹模拟、场景漫游,含场景特效、热力图、动态扫描圆等客户端可视化功能,以及对接大数据应用的客户端可视化与空间分析相关功能 | +| include-cesium-local.js | 二次开发引用库,在此引入了for WebGL的核心库webclient-cesium-plugins.min.js,cesium原生库,以及其他第三方库,同时提供了示例访问MapGIS IGServer服务器的配置 | + +
+ Cesium开发库 +
+
MapGIS Client for JavaScript(Cesium)开发库
+
+
+ +>核心库分别提供压缩版(webclient-cesium-plugins.min.js)与开发版(webclient-cesium-plugins.js)两个版本,min版一般在应用开发完成后发布部署阶段使用;二次开发阶段通常使用开发版,方便查阅与调试。 + +### 开发API + +    MapGIS Client for JavaScript为用户提供离在线API(应用程序编程接口),开发者可以通过API查找学习MapGIS提供的实现功能的方法。 + +- MapGIS Client for JavaScript(Cesium) API +- Cesium API(MapGIS扩展的Cesium参考) +- MapGIS IGServer REST API(服务端API参考) +- Cesium API(原生参考) + +### 开发示例 + +    MapGIS Client for JavaScript(Cesium)为用户提供了功能全面的接口示例与配套文档,支持离在线访问,源码与效果可共同展现,同时提供即时编辑与运行功能,可以帮助您进行高效开发。 + +- 在线使用:MapGIS Client for JavaScript (Cesium)示例 +- 离线使用:方式一,可在云开发世界下载MapGIS Client for JavaScript开发包,解压后按说明步骤发布即可;方式二,可通过开源社区拉取整套源码,然后编译运行,此略 + +
+ 开发示例 +
+
MapGIS Client for JavaScript(Cesium)开发示例
+
+ + +### 开发模式 + +    针对WebGIS应用开发,有以下几种开发模式: +- 方式一:基于MapGIS IGServer等云GIS服务器提供的服务资源,使用MapGIS Client for JavaScript二次开发库的核心库,采用传统开发方式-**H5原生JS方式**构建您的应用系统 +- 方式二:以H5原生JS开发方式为基础,遵循统一的开发标准规范,将应用开发拆分为“开发框架+功能插件”方式,并通过桥梁(标准的JSON配置文件)进行动态衔接,即“纵生”式开发方式 +- 方式三:采用**组件式Vue开发方式**,该方式将提供丰富的Vue组件资源,全面提升开发效率 + +## 功能模块 + +    MapGIS Client for JavaScript(Cesium)的**核心库**为**webclient-cesium-plugins.min.js**,是基于开源框架Cesium进行扩展,面向客户端Web三维应用进行全新封装的脚本库,提供访问云GIS服务器的数据、服务、资源的能力。包括2D矢量、2D瓦片、3D地形、M3D模型缓存等;支持第三方地图服务,包括Google、高德、百度、天地图、天地图WMTS、OpenWeather、吉威WMTS;支持通用数据加载,包括通用模型文件的单个或批量操作(KML、KMZ、CZML、GLTF、GeoJson);支持添加、删除常规的点、线、面、图片、注记、PopUP等标绘功能;支持三维场景粒子特效、热力图、动态扫描圆等客户端可视化功能;重点提供丰富的三维分析功能,包括坡度坡向量测、洪水淹没模拟、挖填方计算、通视分析、可视域分析、天际线分析等功能。 + +### API 功能体系(导图) + +### API 结构说明 + +    MapGIS Client for JavaScript(Cesium)二次开发库的提供的开发接口如下图所示: + +
+ Cesium API结构 +
+
基于Cesium扩展的mapgis开发接口
+
+
+ + +## 产品更新 + +### V10.5.2.10 + +1. 功能新增 +- 实现模型压平功能,支持任意凸多边形的压平 +- 优化粒子特效:优化雨雪雾粒子效果,提升真实度;新增火焰、喷泉粒子特效、以及烟雾粒子特效 +- 提供解压M3D压缩数据流的功能,客户端支持将压缩的流进行高效解压,并渲染 + +2. 性能优化 +- 海量倾斜摄影数据缓存结构优化策略升级,提高网络传输效率以及前端渲染效率 +- 加载渲染亿级Las格式点云数据,帧率在15帧以上,交互流畅; +- 加载渲染亿级地质网格剖分结果数据,帧率在15帧以上,交互流畅; +- 加载渲染千万级三角网单个地质体数据,帧率在15帧以上,交互流畅; +- 加载渲染500平方公里以上倾斜模型,帧率在15帧以上,交互流畅; + +3. 站点维护 +- 示例说明文档美化 + + +### V10.5.0.10 + +1. 全面整合了Cesium等脚本库,代码模块化,采用最新的JavaScript ES6标准; +2. 提供Cesium开发库、示例、API,支持二三维数据可视化(含M3D、OGC、MapGIS地图服务、第三方地图服务等)、图形绘制、量算、模型漫游、三维查询与分析、场景特效,以及三维场景下的大数据可视化与分析等功能; +3. Cesium示例全面优化,提供配套示例说明文档与API; +4. 新增集成Echarts、MapV可视化库,支持在Web三维模式下实现大数据可视化、大数据分析功能; +5. 新增集成 Turf.js客户端空间分析库,提供Web三维客户端空间计算能力。 + + +## 相关产品 + + +> **面向Web应用开发,依赖MapGIS相关产品:** +> - **桌面端GIS工具产品**,MapGIS Desktop作为一个数据处理的桌面GIS工具,主要用于数据存储管理与地图制图;MapGIS 3D SceneBuilder主要用于地上景观模型快速构建;MapGIS 3D GeoModeler是地学建模工具,主要面向地下空间构建三维城市部件模型、地质体模型等; +> - **云GIS服务器产品-MapGIS IGServer、MapGIS IGServer-X、MapGIS IGServer-S**,作为云GIS服务器为Web应用提供高性能GIS、大数据GIS、人工智能GIS三大方向的地图、服务与资源; +> - **云存储产品-MapGIS DataStore**与MapGIS SDE无缝融合,为Web应用提供强大的数据层支撑。 + +### MapGIS Desktop + +
+ +MapGIS Desktop高级版 + + + +MapGIS Desktop(九州) + +
+ +> - **MapGIS Desktop**是一个专业的二三维一体化桌面GIS产品,具备强大的数据管理与编辑、数据制图与可视化、空间分析与影像处理、三维可视化与分析等能力,通过“框架+插件”的思想构建,支持按需定制。 + +> - **MapGIS Desktop 九州**是一个专业的跨平台桌面GIS产品,基于跨平台微内核构建,全面适配全国产化环境。在原有MapGIS Desktop产品功能基础上,重点增强了全国产化适配支持。 + +### MapGIS 3D SceneBuilder、MapGIS 3D GeoModeler + +
+ +MapGIS 3D SceneBuilder + + + +MapGIS 3D GeoModeler + +
+ +> - **MapGIS 3D SceneBuilder**是一个城市空间三维模型构建工具,提供多样化的建模方法,基于二维矢量或CAD数据,实现三维城市部件的快速、批量、自动化构建。融合丰富的粒子特效和三维分析工具,实现智慧城市的三维专业分析与应用。 + +> - **MapGIS 3D GeoModeler**是一个三维地学建模、可视化和分析的工具。融合钻孔、剖面、物化探等多源地学数据,通过自动和半自动化的快速建模技术,构建含断层、透镜体等复杂地学特征的结构和属性模型,实现地学模型的全流程一体化构建,并提供基于地学特征的可视化表达和分析功能。 + +### MapGIS IGServer、MapGIS IGServer-X、MapGIS IGServer-S + +
+ +MapGIS IGServer + + + +MapGIS IGServer(九州) + +
+ +> - **MapGIS IGServer**是一款跨平台的高性能GIS服务器产品,也是一款浏览器端GIS应用与开发的平台软件。为用户提供强大的空间数据管理、分析、可视化及共享服务,支持用户进行各行业领域的WebGIS应用开发与扩展。 + +> - **MapGIS IGServer-X**是一款大数据GIS服务器产品,提供矢量大数据、实时大数据、影像大数据和文本大数据等高性能计算服务,实现多维时空大数据的分析与挖掘。 + +> - **MapGIS IGServer-S**是一款智能GIS服务器产品,基于深度学习框架,提供数据关联与融合、空间分析与预测、聚类分类与统计等智能化服务,应用于遥感影像变化检测、建筑物提取等领域。 + +### MapGIS DataStore + +> - **MapGIS DataStore**产品是以分布式的方式存储和管理关系型数据、切片型数据、实时型数据以及非结构数据的混合数据库,与MapGIS SDE无缝融合,形成完整的地理大数据存储管理方案。 + +> 请访问司马云资源中心获取MapGIS相关产品的产品配套资料 + +## 三方产品 + +**第三方依赖产品:** + +     + +
+ +Cesium + + + +ECharts + + + +MapV + + + +turfjs + + + +d3js + +
+ +- Cesium:用于显示三维地球和地图的开源JavaScript库,基于WebGL的地图引擎(https://cesium.com/platform/cesiumjs/) + +- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) + +- MapV:地理信息可视化开源库(https://mapv.baidu.com/) + +- Turf:客户端空间分析开源库(https://turfjs.org/) + +- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) + + + + + + + + diff --git a/website/public/static/demo/military/style.css b/website/public/static/demo/military/style.css new file mode 100644 index 000000000..0bf689220 --- /dev/null +++ b/website/public/static/demo/military/style.css @@ -0,0 +1,88 @@ +#GlobeView { + width: 100%; + height: 100%; + position: absolute; +} + +#coordinateDiv { + position: absolute; + color: #F0EFEF; + line-height: 30px; + margin-left: 30%; + bottom: 0px; + font-size: 80%; + font: '雅黑'; +} + +.message { + position: absolute; + top: 10px; + left: 10px; + height: auto; + width: auto; + background-color: rgba(255, 255, 255, 0.3); + border-radius: 5px; + color: #ffffff; + font-size: 12px; + border: 1px solid #dddddd; + z-index: 200; +} + +.message p { + text-align: center; + height: 15px; + margin: 0; + border-bottom: groove 1px #dddddd; + margin-bottom: 3px; +} + +.message span { + display: block; + width: 230px; +} + +.message span font { + width: 95px; + text-align: center; + display: inline-block; +} + +.message input { + width: 125px; + height: 14px; + margin-left: 5px; + margin-right: 5px; + border: none; + font-family: Microsoft YaHei; + color: #373d41; + outline: none; +} + +.message button { + width: auto; + border: none; + background-color: white; + color: #373d41; + outline: none; + font-size: 12px; + font-family: "微软雅黑"; + border: 1px solid #dddddd; + border-radius: 5px; +} + +.message button:hover { + background-color: #1D9ED7; + color: white; +} + +.message select { + position: absolute; + width: 90px; + height: 21px; + line-height: 1; + border: none; + color: #000000; + background-color: #f4f7fb; + outline: none; + border-radius: 5px; +} \ No newline at end of file diff --git a/website/public/static/demo/openlayers/example/IGServer/ProjectionService/E02RectProject.htm b/website/public/static/demo/openlayers/example/IGServer/ProjectionService/E02RectProject.htm index 7b63cb611..ca727f1d3 100644 --- a/website/public/static/demo/openlayers/example/IGServer/ProjectionService/E02RectProject.htm +++ b/website/public/static/demo/openlayers/example/IGServer/ProjectionService/E02RectProject.htm @@ -1,97 +1,106 @@ - + - - - - - - - - - - + + + + -
-
- 源矩形坐标: - -
-
- -
-
- 目的矩形坐标: - -
-
- + +
+
+ 投影参数信息: +
数据源名称:
+
+
数据库名称:
+
+
源投影参照系名:
+
+
目的投影参照系名:
+
+
服务器地址:
+
+
服务器端口:
+
+
+
- \ No newline at end of file +
+
+ 源矩形坐标: + +
+
+ +
+
+ 目的矩形坐标: + +
+
+ + diff --git a/website/public/static/demo/openlayers/source/produce_ol.md b/website/public/static/demo/openlayers/source/produce_ol.md index 294993b41..b880adab8 100644 --- a/website/public/static/demo/openlayers/source/produce_ol.md +++ b/website/public/static/demo/openlayers/source/produce_ol.md @@ -241,16 +241,16 @@ MapGIS Client for JavaScript(OpenLayers5)对接云GIS产品,提供地图 -- OpenLayers:专为WebGIS 客户端开发提供的JavaScript 类库包,目前主流地图可视化引擎之一(https://openlayers.org/) +- OpenLayers:专为WebGIS 客户端开发提供的JavaScript 类库包,目前主流地图可视化引擎之一(https://openlayers.org/) -- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) +- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) -- MapV:地理信息可视化开源库(https://mapv.baidu.com/) +- MapV:地理信息可视化开源库(https://mapv.baidu.com/) -- Turf:客户端空间分析开源库(https://turfjs.org/) +- Turf:客户端空间分析开源库(https://turfjs.org/) -- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) +- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) diff --git a/website/public/static/demo/vue-mapboxgl/helper/draw/overflow.md b/website/public/static/demo/vue-mapboxgl/helper/draw/overflow.md new file mode 100644 index 000000000..4b4b8cbb9 --- /dev/null +++ b/website/public/static/demo/vue-mapboxgl/helper/draw/overflow.md @@ -0,0 +1,2 @@ +# 绘制溢出 + diff --git a/website/public/static/demo/vue-mapboxgl/helper/tilesize/tile/256.png b/website/public/static/demo/vue-mapboxgl/helper/tilesize/tile/256.png new file mode 100644 index 000000000..a12b551d0 Binary files /dev/null and b/website/public/static/demo/vue-mapboxgl/helper/tilesize/tile/256.png differ diff --git a/website/public/static/demo/vue-mapboxgl/helper/tilesize/tile/512.png b/website/public/static/demo/vue-mapboxgl/helper/tilesize/tile/512.png new file mode 100644 index 000000000..758df4a85 Binary files /dev/null and b/website/public/static/demo/vue-mapboxgl/helper/tilesize/tile/512.png differ diff --git a/website/public/static/demo/vue-mapboxgl/helper/tilesize/tilesize.md b/website/public/static/demo/vue-mapboxgl/helper/tilesize/tilesize.md new file mode 100644 index 000000000..723a12c4e --- /dev/null +++ b/website/public/static/demo/vue-mapboxgl/helper/tilesize/tilesize.md @@ -0,0 +1,122 @@ +# 显示模糊 + +以下**栅格**瓦片类组件会触发该场景: +1. **mapgis-rastertile-layer** +2. **mapgis-ogc-wmts-layer** +3. **mapgis-igs-tile-layer** +4. **mapgis-igs-vector-layer** +5. **mapgis-arcgis-tile-layer** + +## `tileSize` + - **类型:** `Number` +- **默认值:** `512` +- **描述:** 加载瓦片的大小,如果数据瓦片本身是256大小的设置512大小会被强制拉伸至512大小。 + +| 512 | 256 | +| :---------------------------------------------------------- | :---------------------------------------------------------- | +| ![512](./static/demo/mapboxgl/helper/tilesize/tile/512.png) | ![256](./static/demo/mapboxgl/helper/tilesize/tile/256.png) | + +# 天地图模糊 +请传入tileSize为256即可,2种方式 +``` vue + +``` +``` vue + +``` +::: + +``` vue + + +``` + +## 示例 + +```vue + + + + + +``` diff --git a/website/public/static/demo/vue-mapboxgl/helper/vue/vectotLayer.md b/website/public/static/demo/vue-mapboxgl/helper/vue/vectotLayer.md new file mode 100644 index 000000000..141f4e6e6 --- /dev/null +++ b/website/public/static/demo/vue-mapboxgl/helper/vue/vectotLayer.md @@ -0,0 +1,41 @@ +## 问题描述 + +> mapgis桌面程序导出矢量瓦片数据是,里面所有的链接地址都是localhost:6163,上传到igs(JAVA)服务器后,链接地址仍未做修改,因此或造成客户端无法访问服务器资源的问题。 + +## 如何解决 + +# 一、矢量瓦片数据已经上传到到igs(JAVA)服务器,但未保存最原始的样式文件 + +> 1、进入管理台 +> 2、点击左边菜单栏的地图与数据服务 + +步骤一 + +> 3、点击矢量瓦片资源管理,选择上传按钮,上传数据 + +步骤二 + +> 4、上传完成后点击矢量瓦片资源管理,选择查看按钮 + +步骤三 + +> 5、这里可以看到已上传的矢量瓦片资源 + +步骤四 + +> 6、在右侧的资源列表里选择你刚刚发布的资源,我这里选择名称为‘北京市_Java’的矢量瓦片,并点击预览按钮,进入到矢量瓦片编辑页面 + +步骤五 + +> 7、在编辑界面的最上方的工具栏中选择保存按钮,点击下载样式按钮,下载刚刚上传矢量瓦片资源 + +步骤五 +步骤五 + +> 8、打开下载好的样式文件,将所有的locaolhost:6163替换为当前igs(JAVA)服务的地址即可,之后重复第三步上传矢量瓦片资源, +> 由于下载的文件名英文字母会全部变成小写,请在上传前确保文件名与地图名称完全一致,这样即可正常访问矢量瓦片。 + +# 二、可以拿到最原始的样式文件 + +> 1、打开原样式文件,将所有的locaolhost:6163替换为当前igs(JAVA)服务的地址即可,之后重复上述第三步上传矢量瓦片资源, +> 由于下载的文件名英文字母会全部变成小写,请在上传前确保文件名与地图名称完全一致,这样即可正常访问矢量瓦片。 \ No newline at end of file diff --git a/website/public/static/demo/vue-mapboxgl/source/produce_vue.md b/website/public/static/demo/vue-mapboxgl/source/produce_vue.md index 2265e4409..94984570a 100644 --- a/website/public/static/demo/vue-mapboxgl/source/produce_vue.md +++ b/website/public/static/demo/vue-mapboxgl/source/produce_vue.md @@ -333,19 +333,19 @@
-- Vue:是一套用于构建用户界面的渐进式JavaScript框架,高效开发(https://cn.vuejs.org/) +- Vue:是一套用于构建用户界面的渐进式JavaScript框架,高效开发(https://cn.vuejs.org/) -- MapboxGL:使用WebGL技术独立渲染的开源JavaScript库,作为前端渲染矢量瓦片交互地图的工具(https://docs.mapbox.com/mapbox-gl-js/api/) +- MapboxGL:使用WebGL技术独立渲染的开源JavaScript库,作为前端渲染矢量瓦片交互地图的工具(https://docs.mapbox.com/mapbox-gl-js/api/) -- Cesium:用于显示三维地球和地图的开源JavaScript库,基于WebGL的地图引擎(https://cesium.com/platform/cesiumjs/) +- Cesium:用于显示三维地球和地图的开源JavaScript库,基于WebGL的地图引擎(https://cesium.com/platform/cesiumjs/) -- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) +- ECharts:基于 JavaScript 的开源可视化图表库(https://echarts.apache.org/zh/index.html) -- MapV:地理信息可视化开源库(https://mapv.baidu.com/) +- MapV:地理信息可视化开源库(https://mapv.baidu.com/) -- Turf:客户端空间分析开源库(https://turfjs.org/) +- Turf:客户端空间分析开源库(https://turfjs.org/) -- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) +- D3:基于Web标准的JavaScript图形可视化库(https://d3js.org/) diff --git a/website/public/static/libs/include-cesium-local.js b/website/public/static/libs/include-cesium-local.js index ea8a0e738..fc5a965b3 100644 --- a/website/public/static/libs/include-cesium-local.js +++ b/website/public/static/libs/include-cesium-local.js @@ -48,10 +48,19 @@ var httpUrl = getInitPath(); if (!inArray(excludes, 'cesium')) { - inputCSS(httpUrl + '/cdn/cesium/Widgets/widgets.css'); - inputCSS(httpUrl + '/cdn/cesium/MapGIS/css/mapgis.css'); - inputScript(httpUrl + '/cdn/cesium/Cesium.js'); + if (inArray(includes, 'cesium-1.59')) { + // 引入Cesium1.59版本 对应10.5.2 ~ 10.5.5之间的版本 + inputCSS(httpUrl + '/cdn/cesium-old/Widgets/widgets.css'); + inputCSS(httpUrl + '/cdn/cesium-old/MapGIS/css/mapgis.css'); + inputScript(httpUrl + '/cdn/cesium-old/Cesium.js'); + } else { + // 引入Cesium1.84版本 对应10.5.6之间的版本 + inputCSS(httpUrl + '/cdn/cesium/Widgets/widgets.css'); + inputCSS(httpUrl + '/cdn/cesium/MapGIS/css/mapgis.css'); + inputScript(httpUrl + '/cdn/cesium/Cesium.js'); + } } + // if (!inArray(includes, 'wmts')) { // inputScript("http://" + ip + ":" + socket + "/cdn/leaflet plugins/leaflet-tilelayer-wmts.js"); // } diff --git a/website/src/components/IconFont/iconfont.js b/website/src/components/IconFont/iconfont.js deleted file mode 100644 index 2a976767b..000000000 --- a/website/src/components/IconFont/iconfont.js +++ /dev/null @@ -1 +0,0 @@ -!function(l){var h,c,a,v,t,p,i='',z=(z=document.getElementsByTagName("script"))[z.length-1].getAttribute("data-injectcss");if(z&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}function s(){t||(t=!0,a())}h=function(){var l,h,c;(c=document.createElement("div")).innerHTML=i,i=null,(h=c.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",l=h,(c=document.body).firstChild?(h=c.firstChild).parentNode.insertBefore(l,h):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(c=function(){document.removeEventListener("DOMContentLoaded",c,!1),h()},document.addEventListener("DOMContentLoaded",c,!1)):document.attachEvent&&(a=h,v=l.document,t=!1,(p=function(){try{v.documentElement.doScroll("left")}catch(l){return void setTimeout(p,50)}s()})(),v.onreadystatechange=function(){"complete"==v.readyState&&(v.onreadystatechange=null,s())})}(window); \ No newline at end of file diff --git a/website/src/components/Card/PluginCard.vue b/website/src/config/components/Card/PluginCard.vue similarity index 100% rename from website/src/components/Card/PluginCard.vue rename to website/src/config/components/Card/PluginCard.vue diff --git a/website/src/components/CardGroup/index.vue b/website/src/config/components/CardGroup/index.vue similarity index 98% rename from website/src/components/CardGroup/index.vue rename to website/src/config/components/CardGroup/index.vue index debb1b8cc..3944b9c11 100644 --- a/website/src/components/CardGroup/index.vue +++ b/website/src/config/components/CardGroup/index.vue @@ -28,7 +28,7 @@