plot_dynamicPlot.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="utf-8">
  8. <title data-i18n="resources.title_dynamicPlot"></title>
  9. <style type="text/css">
  10. body {
  11. margin: 0;
  12. overflow: hidden;
  13. background: #fff;
  14. width: 100%;
  15. height: 100%;
  16. position: absolute;
  17. top: 0;
  18. }
  19. #map {
  20. position: absolute;
  21. left: 250px;
  22. right: 0px;
  23. height: 100%;
  24. }
  25. #menuPlotting {
  26. position: absolute;
  27. top: 20%;
  28. z-index: 99999999999;
  29. border-radius: 4px;
  30. padding-top: 2px;
  31. left: 265px;
  32. color: #000000;
  33. background-color: #fff;
  34. }
  35. #menu {
  36. float: left;
  37. background: #ffffff;
  38. width: 250px;
  39. height: 100%;
  40. }
  41. </style>
  42. </head>
  43. <body>
  44. <div id="menu">
  45. <div class="easyui-panel" style="position:absolute;top:0px;bottom:0px;left:0px;right:0px;padding:5px; width: 100%;">
  46. <div class="easyui-tabs" style="width: 100%;height: 100%">
  47. <div id="plotPanel" data-i18n="[title]resources.text_drawPanel" style="overflow: hidden"></div>
  48. <div id="stylePanel" data-i18n="[title]resources.text_attributePanel"></div>
  49. </div>
  50. </div>
  51. </div>
  52. <div id="map">
  53. <div id="menuPlotting" class="sticklr" style="left: 1%;color:rgb(0,0,0);background-color: #fff;">
  54. <li>
  55. <a class="glyphicon plotting-glyphicon-draw-deactivate notArrow"
  56. data-i18n="[title]resources.text_cancelDraw"
  57. onclick="PlottingDrawCancel()"></a>
  58. </li>
  59. <li>
  60. <a class="glyphicon plotting-glyphicon-draw-removeAll notArrow"
  61. data-i18n="[title]resources.text_input_value_clear"></a>
  62. <ul>
  63. <li><input type="button" data-i18n="[value]resources.btn_deleteMarker" onclick="deleteSymbol()"
  64. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  65. <li><input type="button" data-i18n="[value]resources.btn_clearLayers" onclick="PlottingClear()"
  66. style="width: 70px;height: 25px ;margin:0 auto;"/></li>
  67. </ul>
  68. </li>
  69. <li>
  70. <a class="glyphicon glyphicon-pencil notArrow" data-i18n="[title]resources.text_editor"></a>
  71. <ul>
  72. <li><input type="button" data-i18n="[value]resources.btn_copy" onclick="copySymbol()"
  73. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  74. <li><input type="button" data-i18n="[value]resources.btn_cut" onclick="cutSymbol()"
  75. style="width: 70px;height: 25px ;margin:0 auto;"/></li>
  76. <li><input type="button" data-i18n="[value]resources.btn_paste" onclick="pasteSymbol()"
  77. style="width: 70px;height: 25px ;margin:0 auto;"/></li>
  78. </ul>
  79. </li>
  80. <li>
  81. <a class="glyphicon glyphicon-plus notArrow" data-i18n="[title]resources.text_addLayer" onclick="addPlottingLayer()"></a>
  82. </li>
  83. <li>
  84. <a class="glyphicon plotting-lyphicon-save-simulationMap" data-i18n="[title]resources.text_situationMapOperation"></a>
  85. <ul>
  86. <li><input type="button" data-i18n="[value]resources.btn_saveSimulationMap" onclick="saveSimulationMap()"
  87. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  88. <li><input type="button" data-i18n="[value]resources.btn_loadSimulationMap" onclick="loadSimulationMap()"
  89. style="width: 70px;height: 25px ;margin:0 auto;"/></li>
  90. </ul>
  91. </li>
  92. <li>
  93. <a class="glyphicon glyphicon-edit notArrow" data-i18n="[title]resources.text_editMarker"></a>
  94. <ul>
  95. <li><input type="button" data-i18n="[value]resources.btn_editRectangle" onclick="editCircusRetangle()"
  96. style="width:85px;height: 25px ;margin:0 auto;"/> </li>
  97. <li><input type="button" data-i18n="[value]resources.btn_editNode" onclick="editContorPoints()"
  98. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  99. <li><input type="button" data-i18n="[value]resources.btn_addNode" onclick="addControlPoints()"
  100. style="width: 70px;height: 25px ;margin:0 auto;"/></li>
  101. </ul>
  102. </li>
  103. <li>
  104. <a class="glyphicon glyphicon-lock notArrow" data-i18n="[title]resources.text_aboutMode"></a>
  105. <ul>
  106. <li><input type="button" data-i18n="[value]resources.btn_lockSwitch" onclick="setPlottingLayerIsLocked()"
  107. style="width:85px;height: 25px ;margin:0 auto;"/> </li>
  108. <li><input type="button" data-i18n="[value]resources.btn_editSwitch" onclick="setPlottingLayerIsEdit()"
  109. style="width:85px;height: 25px ;margin:0 auto;"/> </li>
  110. <li><input type="button" data-i18n="[value]resources.btn_selectSwitch" onclick="setPlottingLayerIsSelected()"
  111. style="width:85px;height: 25px ;margin:0 auto;"/> </li>
  112. </ul>
  113. </li>
  114. <li>
  115. <a class="glyphicon glyphicon-check notArrow" data-i18n="[title]resources.text_multiselect" onclick="multiSelectModel()"></a>
  116. </li>
  117. <li>
  118. <a class="glyphicon glyphicon-align-justify notArrow" data-i18n="[title]resources.text_multiselectAlign"></a>
  119. <ul>
  120. <li><input type="button" data-i18n="[value]resources.btn_leftAlignment" onclick="setSymbolAlighLeft()"
  121. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  122. <li><input type="button" data-i18n="[value]resources.btn_rightAlignment" onclick="setSymbolAlighRight()"
  123. style="width: 70px;height: 25px ;margin:0 auto;"/></li>
  124. <li><input type="button" data-i18n="[value]resources.btn_topAlignment" onclick="setSymbolAlighUp()"
  125. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  126. <li><input type="button" data-i18n="[value]resources.btn_bottomAlignment" onclick="setSymbolAlighDown()"
  127. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  128. <li><input type="button" data-i18n="[value]resources.btn_verticalCenter" onclick="setSymbolAlighVerticalcenter()"
  129. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  130. <li><input type="button" data-i18n="[value]resources.btn_horizontalCenter" onclick="setSymbolAlighHorizontalcenter()"
  131. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  132. </ul>
  133. </li>
  134. <li>
  135. <a class="glyphicon glyphicon-adjust notArrow" data-i18n="[title]resources.text_avoid"></a>
  136. <ul>
  137. <li><input type="button" data-i18n="[value]resources.btn_avoidEdit" onclick="drawAvoidRegion()"
  138. style="width:80px;height: 25px ;margin:0 auto;"/> </li>
  139. <li><input type="button" data-i18n="[value]resources.btn_cancelAvoidEdit" onclick="doneAvoidEdit()"
  140. style="width:80px;height: 25px ;margin:0 auto;"/> </li>
  141. <li><input type="button" data-i18n="[value]resources.btn_deleteAvoid" onclick="deleteAvoidEdit()"
  142. style="width:80px;height: 25px ;margin:0 auto;"/> </li>
  143. </ul>
  144. </li>
  145. <li>
  146. <a class="glyphicon glyphicon-gift notArrow" data-i18n="[title]resources.text_createGroup"></a>
  147. <ul>
  148. <li><input type="button" data-i18n="[value]resources.btn_group" onclick="createGroupObjects()"
  149. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  150. <li><input type="button" data-i18n="[value]resources.btn_flags" onclick="createDrawFlags()"
  151. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  152. <li><input type="button" data-i18n="[value]resources.btn_unbundling" onclick="testUnGroupObject()"
  153. style="width:70px;height: 25px ;margin:0 auto;"/> </li>
  154. </ul>
  155. </li>
  156. <li>
  157. <a class="glyphicon glyphicon-arrow-left notArrow" data-i18n="[title]resources.btn_undo"
  158. onclick="undo()"></a>
  159. </li>
  160. <li>
  161. <a class="glyphicon glyphicon-arrow-right notArrow" data-i18n="[title]resources.btn_redo"
  162. onclick="redo()"></a>
  163. </li>
  164. <li>
  165. <a class="glyphicon glyphicon-th-large notArrow" data-i18n="[title]resources.text_symbolEqualSize" ></a>
  166. <ul>
  167. <li><input type="button" data-i18n="[value]resources.btn_symbolEqualWidth" onclick="setSymbolEqualWidth()"
  168. style="width:70px;height: 25px ;margin:0 auto;"> </input> </li>
  169. <li><input type="button" data-i18n="[value]resources.btn_symbolEqualHeight" onclick="setSymbolEqualHeight()"
  170. style="width: 70px;height: 25px ;margin:0 auto;"> </input></li>
  171. <li><input type="button" data-i18n="[value]resources.btn_symbolEqualWidthHeight" onclick="setSymbolEqualWidthHeight()"
  172. style="width:70px;height: 25px ;margin:0 auto;"> </input> </li>
  173. </ul>
  174. </li>
  175. <li>
  176. <a class="glyphicon glyphicon-th" data-i18n="[title]resources.text_symbolDistribution" ></a>
  177. <ul>
  178. <li><input type="button" data-i18n="[value]resources.btn_symbolLevelDistribution" onclick="setSymbolLevelDistribution()"
  179. style="width:70px;height: 25px ;margin:0 auto;"> </input> </li>
  180. <li><input type="button" data-i18n="[value]resources.btn_symbolVerticalDistribution" onclick="setSymbolVerticalDistribution()"
  181. style="width: 70px;height: 25px ;margin:0 auto;"> </input></li>
  182. </ul>
  183. </li>
  184. </div>
  185. </div>
  186. <script type="text/javascript" include="bootstrap,responsive,sticklr" src="../js/include-web.js"></script>
  187. <script type="text/javascript" exclude="iclient-classic" include="iclient8c-plot,bevInclude,PlottingPanel"
  188. src="../../dist/classic/include-classic.js"></script>
  189. <script>
  190. var map, plottingLayer, layer;
  191. var plotPanel, stylePanel;
  192. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  193. var mapurl = host + "/iserver/services/map-china400/rest/maps/China_4326";
  194. var serverUrl = host + "/iserver/services/plot-jingyong/rest/plot/";
  195. var plotting;
  196. var sitDataLayers;
  197. var drawGraphicObjects = [];
  198. var plottingEdit;
  199. init();
  200. function init() {
  201. Bev.Theme.set("bev-base");
  202. map = new SuperMap.Map("map", {
  203. controls: [
  204. new SuperMap.Control.LayerSwitcher(),
  205. new SuperMap.Control.ScaleLine(),
  206. new SuperMap.Control.Zoom(),
  207. new SuperMap.Control.Navigation({
  208. dragPanOptions: {
  209. enableKinetic: true
  210. }
  211. })]
  212. });
  213. layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", mapurl, {
  214. transparent: true,
  215. cacheEnabled: true
  216. }, {maxResolution: "auto"});
  217. layer.events.on({"layerInitialized": addLayer});
  218. //总控类
  219. plotting = SuperMap.Plotting.getInstance(map, serverUrl);
  220. plotting.getSitDataManager().events.on({"openSmlFileCompleted": success});
  221. plottingLayer = new SuperMap.Layer.PlottingLayer("标绘图层", serverUrl);
  222. //空间分析服务地址:目前使用的是服务器默认空间分析地址,可更换成实际使用的空间分析服务地址
  223. //plottingLayer.spatialAnalystUrl = host + "/iserver/services/spatialanalyst-sample/restjsr/spatialanalyst";
  224. plottingLayer.style = {
  225. fillColor: "#66cccc",
  226. fillOpacity: 0.4,
  227. strokeColor: "#66cccc",
  228. strokeOpacity: 1,
  229. strokeWidth: 3,
  230. pointRadius: 6
  231. };
  232. //态势标绘编辑
  233. plottingEdit = new SuperMap.Control.PlottingEdit();
  234. //plottingEdits.push(plottingEdit);
  235. // 绘制标号;
  236. var drawGraphicObject = new SuperMap.Control.DrawFeature(plottingLayer, SuperMap.Handler.GraphicObject);
  237. drawGraphicObjects.push(drawGraphicObject);
  238. //添加态势标绘控件
  239. map.addControls([plottingEdit, drawGraphicObject]);
  240. }
  241. function addLayer() {
  242. map.addLayers([layer, plottingLayer]);
  243. map.setCenter(new SuperMap.LonLat(104, 35), 3);
  244. //创建标绘面板
  245. plotPanel = new SuperMap.Plotting.PlotPanel("plotPanel", serverUrl, map);
  246. plotPanel.events.on({"initializeCompleted": initializeCompleted});
  247. plotPanel.initializeAsync();
  248. //创建属性面板
  249. stylePanel = new SuperMap.Plotting.StylePanel("stylePanel");
  250. stylePanel.addEditLayer(plottingLayer);
  251. }
  252. function initializeCompleted(evt) {
  253. if (drawGraphicObjects.length > 0) {
  254. plotPanel.setDrawFeature(drawGraphicObjects[0]);
  255. }
  256. plotting.getSymbolLibManager().cacheSymbolLib(100);
  257. }
  258. //取消标绘与编辑
  259. function plottingAllDeactivate() {
  260. for (var i = 0; i < drawGraphicObjects.length; i++) {
  261. drawGraphicObjects[i].deactivate();
  262. }
  263. plottingEdit.deactivate();
  264. }
  265. //清空绘制
  266. function PlottingClear() {
  267. plottingAllDeactivate();
  268. for (var i = 0; i < map.layers.length; i++) {
  269. if (map.layers[i].CLASS_NAME === "SuperMap.Layer.PlottingLayer") {
  270. map.layers[i].removeAllFeatures();
  271. }
  272. }
  273. }
  274. //删除选中标号
  275. function deleteSymbol() {
  276. plottingEdit.deleteSelectFeature();
  277. }
  278. //取消标绘,激活标绘编辑控件
  279. function PlottingDrawCancel() {
  280. plottingAllDeactivate();
  281. plottingEdit.activate();
  282. }
  283. //复制
  284. function copySymbol() {
  285. plotting.getEditor().copy();
  286. }
  287. //剪切
  288. function cutSymbol() {
  289. plotting.getEditor().cut();
  290. }
  291. //粘贴
  292. function pasteSymbol() {
  293. plotting.getEditor().paste();
  294. }
  295. //添加图层
  296. function addPlottingLayer() {
  297. PlottingDrawCancel();
  298. var newPlottingLayer = new SuperMap.Layer.PlottingLayer(getNewPlottingLayerName(), serverUrl);
  299. newPlottingLayer.style = {
  300. fillColor: "#66cccc",
  301. fillOpacity: 0.4,
  302. strokeColor: "#66cccc",
  303. strokeOpacity: 1,
  304. strokeWidth: 3,
  305. pointRadius: 6
  306. };
  307. //newPlottingLayer.spatialAnalystUrl = host + "/iserver/services/spatialanalyst-sample/restjsr/spatialanalyst";
  308. var drawGraphicObject = new SuperMap.Control.DrawFeature(newPlottingLayer, SuperMap.Handler.GraphicObject);
  309. drawGraphicObjects.push(drawGraphicObject);
  310. //将新创建的图层添加到属性面板中
  311. stylePanel.addEditLayer(newPlottingLayer);
  312. //将标绘句柄赋给标绘面板
  313. plotPanel.setDrawFeature(drawGraphicObject);
  314. map.addControls([drawGraphicObject]);
  315. map.addLayers([newPlottingLayer]);
  316. }
  317. //保存态势图
  318. function saveSimulationMap() {
  319. plottingAllDeactivate();
  320. plotting.getSitDataManager().saveAsSmlFile("situationMap");
  321. }
  322. function loadSimulationMap() {
  323. {
  324. plotting.getSitDataManager().openSmlFileOnServer("situationMap");
  325. }
  326. }
  327. function success() {
  328. var sitDataLayers = plotting.getSitDataManager().getSitDataLayers();
  329. plottingLayer = sitDataLayers[0];
  330. drawGraphicObjects = [];
  331. for (var i = 0; i < sitDataLayers.length; i++) {
  332. drawGraphicObjects.push(sitDataLayers[i].drawGraphicObject);
  333. stylePanel.addEditLayer(sitDataLayers[i]);
  334. }
  335. plotPanel.setDrawFeature(drawGraphicObjects[0]);
  336. }
  337. function getNewPlottingLayerName() {
  338. var layerCount = map.layers.length;
  339. var layerName = "新建标绘图层";
  340. var bExist = true;
  341. while (bExist) {
  342. bExist = false;
  343. var tempLayerName = layerName + layerCount;
  344. for (var i = 0; i < map.layers.length; i++) {
  345. var layer = map.layers[i];
  346. if (null == layer) {
  347. continue;
  348. }
  349. if (tempLayerName === layer.name) {
  350. bExist = true;
  351. }
  352. }
  353. if (!bExist) {
  354. layerName = tempLayerName;
  355. }
  356. layerCount++;
  357. }
  358. return layerName;
  359. }
  360. function editCircusRetangle() {
  361. plottingEdit.setEditMode(SuperMap.Plot.EditMode.EDITCIRCUMRECTANGLE);
  362. }
  363. function editContorPoints() {
  364. plottingEdit.setEditMode(SuperMap.Plot.EditMode.EDITCONTROLPOINT);
  365. }
  366. function addControlPoints() {
  367. plottingEdit.setEditMode(SuperMap.Plot.EditMode.ADDCONTROLPOINT);
  368. }
  369. //切换多选模式
  370. function multiSelectModel() {
  371. plottingEdit.multiSelect();
  372. }
  373. //多选对齐--左对齐
  374. function setSymbolAlighLeft() {
  375. plottingEdit.align(SuperMap.Plot.AlignType.LEFT);
  376. }
  377. //多选对齐--右对齐
  378. function setSymbolAlighRight() {
  379. plottingEdit.align(SuperMap.Plot.AlignType.RIGHT);
  380. }
  381. //多选对齐--上对齐
  382. function setSymbolAlighUp() {
  383. plottingEdit.align(SuperMap.Plot.AlignType.UP);
  384. }
  385. //多选对齐--下对齐
  386. function setSymbolAlighDown() {
  387. plottingEdit.align(SuperMap.Plot.AlignType.DOWN);
  388. }
  389. //多选对齐--竖直居中对齐
  390. function setSymbolAlighVerticalcenter() {
  391. plottingEdit.align(SuperMap.Plot.AlignType.VERTICALCENTER);
  392. }
  393. //多选对齐--水平居中对齐
  394. function setSymbolAlighHorizontalcenter() {
  395. plottingEdit.align(SuperMap.Plot.AlignType.HORIZONTALCENTER);
  396. }
  397. //切换图层是否锁定
  398. function setPlottingLayerIsLocked() {
  399. if (plottingLayer.getLocked() === true) {
  400. plottingLayer.setLocked(false);
  401. } else {
  402. plottingLayer.setLocked(true);
  403. }
  404. }
  405. //切换图层是否可编辑模式
  406. function setPlottingLayerIsEdit() {
  407. if (plottingLayer.getEditable() === true) {
  408. plottingLayer.setEditable(false);
  409. } else {
  410. plottingLayer.setEditable(true);
  411. }
  412. }
  413. //切换图层是否可选择模式
  414. function setPlottingLayerIsSelected() {
  415. if (plottingLayer.getSelected() === true) {
  416. plottingLayer.setSelected(false);
  417. } else {
  418. plottingLayer.setSelected(true);
  419. }
  420. }
  421. //绘制避让区域
  422. function drawAvoidRegion() {
  423. plottingEdit.avoidEdit(true);
  424. }
  425. //退出避让编辑
  426. function doneAvoidEdit() {
  427. plottingEdit.avoidEdit(false);
  428. }
  429. //删除避让编辑
  430. function deleteAvoidEdit() {
  431. plottingEdit.removeAllAvoidRegion();
  432. }
  433. //创建组合对象
  434. function createGroupObjects() {
  435. var features = plottingEdit.features;
  436. if (features.length >= 2) {
  437. plottingLayer.createGroupObject(features);
  438. }
  439. }
  440. //创建多旗
  441. function createDrawFlags() {
  442. var features = plottingEdit.features;
  443. if (features.length >= 2) {
  444. plottingLayer.createFlags(features);
  445. }
  446. }
  447. //解绑组合对象
  448. function testUnGroupObject() {
  449. var features = plottingEdit.features;
  450. for (var i = features.length - 1; i >= 0; i--) {
  451. if (features[i].geometry instanceof SuperMap.Geometry.GroupObject) {
  452. plottingLayer.unGroupObject(features[i].geometry.uuid);
  453. }
  454. }
  455. }
  456. function undo(){
  457. plotting.getTransManager().undo();
  458. }
  459. function redo(){
  460. plotting.getTransManager().redo();
  461. }
  462. //等大
  463. //等宽
  464. function setSymbolEqualWidth(){
  465. plottingEdit.equalLarge(SuperMap.Plot.EqualLargeType.WIDTH);
  466. }
  467. //等高
  468. function setSymbolEqualHeight(){
  469. plottingEdit.equalLarge(SuperMap.Plot.EqualLargeType.HEIGHT);
  470. }
  471. //等宽高
  472. function setSymbolEqualWidthHeight(){
  473. plottingEdit.equalLarge(SuperMap.Plot.EqualLargeType.SAME);
  474. }
  475. //均匀分布
  476. //横向均匀分布
  477. function setSymbolLevelDistribution(){
  478. plottingEdit.uniformDistribution(SuperMap.Plot.UniformDistributionType.LEVEL);
  479. }
  480. //纵向均匀分布
  481. function setSymbolVerticalDistribution(){
  482. plottingEdit.uniformDistribution(SuperMap.Plot.UniformDistributionType.VERTICAL);
  483. }
  484. document.onmouseup = function (evt) {
  485. var evt = evt || window.event;
  486. if (evt.button === 2) {
  487. PlottingDrawCancel();
  488. return false;
  489. }
  490. evt.stopPropagation();
  491. }
  492. </script>
  493. </body>
  494. </html>