initMap.js 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993
  1. /*
  2. * @Author: your name
  3. * @Date: 2020-12-28 08:16:54
  4. * @LastEditTime: 2021-06-08 14:30:55
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: \WEB\dispatchingManagement\src\utils\initMap.js
  8. */
  9. import envConfig from '@/config';
  10. import * as esriLoader from 'esri-loader';
  11. // import _GraphicsLayer from '@utils/_GraphicsLayer.js';
  12. export default {
  13. // mixins: [_GraphicsLayer],
  14. data() {
  15. return {
  16. // 图层渲染参数
  17. layercout:0,
  18. iconlayerArr:[],
  19. poplayerArr:[],
  20. // 地图配置
  21. envConfig: envConfig,
  22. gisConstructor: {},
  23. wkidval: '',
  24. getzoom:'',
  25. setcenterpoint:'',
  26. geometryServiceUrl: '',//缓冲查询服务路径
  27. scopeOfDemolitionSetting:'', //范围拆迁分析配置
  28. geoService: '',
  29. overviewBaseUrl: '',//概览背景底图
  30. overviewLevel: '' ,//概览地图默认层级
  31. baseUrl: '', //底图路径
  32. gwUrl: '', //管网路径
  33. gwPointUrl: '', //管网管点路径
  34. gwLineUrl: '', //管网管线路径
  35. burstUrl: '',// 爆管路径
  36. connectUrl: '', // 连通性路径
  37. getMoveXY:'', // 偏移量
  38. mapSuspensionDisplay: false,
  39. mapDataRefresh: 60000,
  40. modules: [
  41. 'dojo/_base/lang',
  42. "dojo/_base/declare",
  43. 'dojo/on',
  44. 'esri/config',
  45. 'esri/request',
  46. 'esri/core/urlUtils',
  47. 'esri/Map',
  48. 'esri/layers/MapImageLayer',
  49. 'esri/layers/TileLayer',
  50. 'esri/views/MapView',
  51. 'esri/Graphic',
  52. 'esri/layers/GraphicsLayer',
  53. 'esri/layers/FeatureLayer',
  54. 'esri/renderers/ClassBreaksRenderer',
  55. 'esri/PopupTemplate',
  56. 'esri/geometry/Point',
  57. 'esri/geometry/Polyline',
  58. 'esri/geometry/Polygon',
  59. 'esri/symbols/TextSymbol',
  60. 'esri/tasks/support/IdentifyParameters',
  61. 'esri/views/draw/Draw',
  62. 'esri/views/draw/PointDrawAction',
  63. 'esri/views/draw/MultipointDrawAction',
  64. 'esri/tasks/IdentifyTask',
  65. 'esri/tasks/Geoprocessor',
  66. 'esri/tasks/support/FeatureSet',
  67. 'esri/symbols/SimpleMarkerSymbol',
  68. 'esri/geometry/Multipoint',
  69. 'esri/tasks/support/BufferParameters',
  70. 'esri/tasks/support/LengthsParameters',
  71. 'esri/tasks/GeometryService',
  72. "esri/tasks/support/Query",
  73. 'esri/tasks/QueryTask',
  74. "esri/tasks/support/DistanceParameters",
  75. 'esri/views/draw/SegmentDrawAction',
  76. 'esri/tasks/RouteTask',
  77. 'esri/tasks/support/RouteParameters',
  78. 'esri/layers/support/FeatureReductionCluster',
  79. 'esri/tasks/support/StatisticDefinition',
  80. 'esri/tasks/FindTask',
  81. 'esri/tasks/support/FindParameters',
  82. "esri/geometry/geometryEngine"
  83. ],
  84. getWkidVal:'',
  85. WeatherGraphicLayer:'',
  86. TileLayerAllSublayers:[]
  87. // testMapurlInit:'http://58.250.37.159:1523/arcgis/arcgis_v4.16/init.js',
  88. // testMapurlCss:'http://58.250.37.159:1523/arcgis/arcgis_v4.16/esri/css/main.css'
  89. }
  90. },
  91. mounted() {
  92. this.initmap();
  93. },
  94. methods: {
  95. initmap() {
  96. let _self=this;
  97. const options = {
  98. url: this.envConfig.baseMapApi + '/arcgis/init.js'
  99. // url: this.testMapurlInit
  100. };
  101. esriLoader.loadCss(this.envConfig.baseMapApi + '/arcgis/esri/css/main.css');
  102. // esriLoader.loadCss(this.testMapurlCss);
  103. new Promise((resolve, reject) => {
  104. this.$http.post('/sc-community/dict/selectList', { parentDictCode: 'GIS_SERVER_TYPE' }).then(({ status, data, msg }) => {
  105. if (0 === status) {
  106. _self.allserviceType = data;
  107. }
  108. resolve();
  109. });
  110. })
  111. .then(() => {
  112. return new Promise((resolve, reject) => {
  113. this.$http.post('/zoniot-water/systemSetting/selectGis',{}).then(({ status, data, msg }) => {
  114. if (0 === status) {
  115. _self.selectGislist = data;
  116. }
  117. resolve();
  118. });
  119. });
  120. })
  121. .then(() => {
  122. return new Promise((resolve, reject) => {
  123. this.$http.get('/zoniot-water/systemSetting/selectSystem').then(({ status, data, msg }) => {
  124. if (0 === status && data) {
  125. if (data.mapSuspensionDisplay) {
  126. _self.mapSuspensionDisplay = data.mapSuspensionDisplay;
  127. }
  128. if (data.mapDataRefresh) {
  129. _self.mapDataRefresh = data.mapDataRefresh * 1000 * 60;
  130. }
  131. }
  132. resolve();
  133. });
  134. });
  135. })
  136. .then(() => {
  137. // if (this.scenetype) {
  138. return new Promise((resolve, reject) => {
  139. this.$http.get('/zoniot-water/mapSetting/selectMap', { sceneTypeName: '测试' }).then(({ status, data, msg }) => {
  140. if (0 === status && data) {
  141. _self.setcenterpoint = data.pointX + ',' + data.pointY;
  142. _self.getzoom = data.mapLevel;
  143. }
  144. resolve();
  145. });
  146. });
  147. // } else {
  148. // return new Promise((resolve, reject) => {
  149. // resolve();
  150. // });
  151. // }
  152. })
  153. .then(() => {
  154. // dictCode
  155. // 1 背景地图
  156. // 2 管网地图
  157. _self.allserviceType.map((v, i) => {
  158. _self.selectGislist.map((vv, ii) => {
  159. if (v.dictCode === vv.serviceType) {
  160. var hosts = window.location.host;
  161. let attrStr = 'extranetSetting';
  162. if (hosts.indexOf("0.0.0.") !== -1) {
  163. attrStr = 'intranetSetting'
  164. }
  165. switch (v.dictValue) {
  166. case '背景地图':
  167. _self.baseUrl = vv[attrStr];
  168. break;
  169. case '管网地图':
  170. _self.gwUrl = vv[attrStr];
  171. _self.gwPointUrl = this.gwUrl+'/0';
  172. _self.gwLineUrl = this.gwUrl+'/1';
  173. break;
  174. case '爆管分析':
  175. _self.burstUrl = vv[attrStr];
  176. break;
  177. case '连通性':
  178. _self.connectUrl = vv[attrStr];
  179. break;
  180. case '几何分析':
  181. _self.geometryServiceUrl = vv[attrStr];
  182. break;
  183. case '范围拆迁分析':
  184. _self.scopeOfDemolitionSetting = vv[attrStr];
  185. break;
  186. case '中心点':
  187. _self.setcenterpoint = this.setcenterpoint ? this.setcenterpoint : vv[attrStr];
  188. break;
  189. case '层级':
  190. _self.getzoom =_.isNumber(this.getzoom*1)&&this.getzoom*1!=0?this.getzoom: vv[attrStr];
  191. break;
  192. case '省市名称':
  193. _self.cityName = vv[attrStr];
  194. _self.$emit('getCityNamevalfn', this.cityName);
  195. break;
  196. case 'wkid':
  197. _self.wkidval = JSON.parse(vv[attrStr]);
  198. _self.$emit("getwkidfn",this.wkidval);
  199. break;
  200. case '偏移量':
  201. _self.getMoveXY = vv[attrStr];
  202. _self.$emit("getMoveXYfn",this.getMoveXY);
  203. break;
  204. case '概览背景地图':
  205. _self.overviewBaseUrl = vv[attrStr];
  206. break;
  207. case '概览地图默认层级':
  208. _self.overviewLevel = vv[attrStr];
  209. break;
  210. default:
  211. break;
  212. }
  213. }
  214. });
  215. });
  216. esriLoader.loadModules(_self.modules, options).then(_self.loading).then(() => {
  217. _self.geoService = new _self.gisConstructor.GeometryService(_self.geometryServiceUrl);
  218. });
  219. });
  220. },
  221. /**
  222. * @description: 加载地图
  223. * @param {*} args
  224. * @return {*} this.mapviewHandle()
  225. */
  226. loading(args) {
  227. for (let k in args) {
  228. let name = this.modules[k].split('/').pop();
  229. name = name.replace(name[0], name[0].toUpperCase());
  230. this.gisConstructor[name] = args[k];
  231. }
  232. // 切片地图 底图
  233. var currentPath = this.$route.path;
  234. var baseUrl = this.baseUrl;
  235. var currentPageLevel = '';
  236. if (currentPath.indexOf('Overview') !== -1 ) {
  237. baseUrl = this.overviewBaseUrl;
  238. currentPageLevel = this.overviewLevel;
  239. }
  240. currentPageLevel =_.isNumber(this.getzoom*1)?this.getzoom:currentPageLevel
  241. var mapTileLayer = '', gwLayer = '', initlayers = [];
  242. if (baseUrl) {
  243. mapTileLayer = new this.gisConstructor.TileLayer({
  244. url: baseUrl,
  245. id: 'baseLayer'
  246. });
  247. this.TileLayerAllSublayers = mapTileLayer.allSublayers._items
  248. initlayers.push(mapTileLayer)
  249. }
  250. // 管网地图
  251. if (this.gwUrl) {
  252. gwLayer = new this.gisConstructor.MapImageLayer({
  253. url: this.gwUrl,
  254. id: 'gwLayer'
  255. });
  256. initlayers.push(gwLayer)
  257. }
  258. // 创建地图
  259. this.map = new this.gisConstructor.Map({
  260. layers: initlayers
  261. });
  262. if (!this.wkidval) {
  263. this.$message.error('请在 系统管理-系统设置-GIS设置 中设置wkid');
  264. }
  265. // 新建中心点
  266. var pt = new this.gisConstructor.Point({
  267. x: this.setcenterpoint.split(',')[0],
  268. y: this.setcenterpoint.split(',')[1],
  269. spatialReference: this.wkidval
  270. });
  271. // currentPageLevel!==''?currentPageLevel:3
  272. // 创建view视图
  273. this.view = new this.gisConstructor.MapView({
  274. container: 'viewDiv',
  275. map: this.map,
  276. center: pt,
  277. zoom: currentPageLevel!==''?currentPageLevel:3
  278. });
  279. // this.graphicsLayer = new this.gisConstructor.GraphicsLayer({
  280. // id: 'linshiLayer',
  281. // name: '临时图层',
  282. // opacity: 1,
  283. // visible: true
  284. // });
  285. // this.map.add(this.graphicsLayer);
  286. this.mapinitHandle&&this.mapinitHandle()
  287. // 地图加载完成后
  288. this.view.when(()=>{
  289. this.mapviewHandle && this.mapviewHandle()
  290. })
  291. },
  292. creatPoint(paramX, paramY) {
  293. let x = paramX ? paramX : 0;
  294. let y = paramY ? paramY : 0;
  295. var newPoint = new this.gisConstructor.Point();
  296. newPoint.x = x;
  297. newPoint.y = y;
  298. newPoint.spatialReference = this.view.spatialReference;
  299. return newPoint
  300. },
  301. /**
  302. * @description: 查询管点信息
  303. * @param {*} wherestr 查询条件
  304. * @param {*} cb
  305. * @return {*}
  306. */
  307. queryPointFn(wherestr, cb) {
  308. let outFieldsarr = ['OBJECTID'];
  309. var queryTaskParam = new this.gisConstructor.Query();
  310. queryTaskParam.where = wherestr;
  311. queryTaskParam.outFields = outFieldsarr;
  312. // queryTaskParam.geometry = areaGeometry;
  313. queryTaskParam.returnGeometry = false;
  314. queryTaskParam.outSpatialReference = this.view.spatialReference;
  315. queryTaskParam.returnDistinctValues = false;
  316. queryTaskParam.spatialRelationship = 'esriSpatialRelIntersects';
  317. var queryTask = new this.gisConstructor.QueryTask(this.gwUrl + '/0');
  318. queryTask.executeForCount(queryTaskParam).then((rescount) => {
  319. cb && cb(rescount);
  320. });
  321. },
  322. /**
  323. * @description: 查询管线总长度
  324. * @param {*} cb
  325. * @return {*}
  326. */
  327. queryLineFn(cb) {
  328. var sumPopulation = {
  329. onStatisticField: 'LLENGTH', // service field for 2015 population
  330. outStatisticFieldName: 'LLENGTH_sum',
  331. statisticType: 'sum'
  332. };
  333. var queryTaskParam = new this.gisConstructor.Query();
  334. queryTaskParam.outStatistics = [sumPopulation];
  335. queryTaskParam.outSpatialReference = this.view.spatialReference;
  336. var queryTask = new this.gisConstructor.QueryTask(this.gwUrl + '/1');
  337. queryTask.execute(queryTaskParam).then((res) => {
  338. let lsum = res.features[0].attributes.LLENGTH_sum;
  339. lsum = Math.round(lsum) / 1000;
  340. cb(lsum);
  341. });
  342. },
  343. querLinebyYear(where,layernum,cb) {
  344. var sumPopulation = {
  345. onStatisticField: "MDATE", // service field for 2015 population
  346. outStatisticFieldName: 'MDATE_count',
  347. statisticType: 'count'
  348. };
  349. var queryTaskParam = new this.gisConstructor.Query();
  350. // queryTaskParam.groupByFieldsForStatistics = ['MDATE']
  351. queryTaskParam.where = where;
  352. queryTaskParam.outStatistics = [sumPopulation];
  353. queryTaskParam.returnGeometry = false
  354. queryTaskParam.outSpatialReference = this.view.spatialReference;
  355. var queryTask = new this.gisConstructor.QueryTask(this.gwUrl + layernum);
  356. queryTask.execute(queryTaskParam).then((res) => {
  357. let count = 0
  358. if(res.features[0]){
  359. count = res.features[0].attributes.MDATE_count
  360. }
  361. cb(count)
  362. });
  363. },
  364. queryPointbyType(where,cb) {
  365. var sumPopulation = {
  366. onStatisticField: 'MATERIAL', // service field for 2015 population
  367. outStatisticFieldName: 'MATERIAL_count',
  368. statisticType: 'count'
  369. };
  370. var queryTaskParam = new this.gisConstructor.Query();
  371. queryTaskParam.where = where;
  372. queryTaskParam.outStatistics = [sumPopulation];
  373. queryTaskParam.outSpatialReference = this.view.spatialReference;
  374. var queryTask = new this.gisConstructor.QueryTask(this.gwUrl + '/0');
  375. queryTask.execute(queryTaskParam).then((res) => {
  376. cb(res)
  377. });
  378. },
  379. /**
  380. * @description: 查询管线材质统计
  381. * @param {*} where
  382. * @param {*} fieldName
  383. * @param {*} returnGeometry
  384. * @param {*} queryurl
  385. * @param {*} cb
  386. * @return {*}
  387. */
  388. queryLineMeterialAndD_S(cb,where,geometry){
  389. var queryTaskParam = new this.gisConstructor.Query();
  390. queryTaskParam.where = where?where:'1=1';
  391. geometry?queryTaskParam.geometry = geometry:'';
  392. queryTaskParam.outFields = ['*']; //设置查询结果的返回字段
  393. queryTaskParam.returnGeometry = false;
  394. queryTaskParam.outSpatialReference = this.view.spatialReference;
  395. queryTaskParam.returnDistinctValues = true;
  396. queryTaskParam.spatialRelationship = 'esriSpatialRelIntersects';
  397. queryTaskParam.outStatistics = [{
  398. statisticType:'sum',
  399. onStatisticField:'LLENGTH',//// 统计的字段,长度
  400. outStatisticFieldName:'LLENGTH_sum'//// 输出的字段
  401. }
  402. ];
  403. //设置分组结果的字段,材质和管径进行分组
  404. queryTaskParam.groupByFieldsForStatistics=['MATERIAL','D_S']
  405. var queryTask = new this.gisConstructor.QueryTask(this.gwLineUrl);
  406. queryTask.execute(queryTaskParam).then(res=>{
  407. cb&&cb(res)
  408. })
  409. },
  410. queryPointMeterialAndSPEC(where,cb){
  411. var queryTaskParam = new this.gisConstructor.Query();
  412. queryTaskParam.where = where;
  413. queryTaskParam.outFields = ['*'];
  414. queryTaskParam.returnGeometry = false;
  415. queryTaskParam.outSpatialReference = this.view.spatialReference;
  416. queryTaskParam.returnDistinctValues = true;
  417. queryTaskParam.spatialRelationship = 'esriSpatialRelIntersects';
  418. queryTaskParam.outStatistics = [{
  419. statisticType:'count',
  420. onStatisticField:'SCODE',
  421. outStatisticFieldName:'SCODE_count'
  422. }
  423. ];
  424. queryTaskParam.groupByFieldsForStatistics=['MATERIAL','SPEC']
  425. var queryTask = new this.gisConstructor.QueryTask(this.gwPointUrl);
  426. queryTask.execute(queryTaskParam).then(res=>{
  427. cb&&cb(res)
  428. })
  429. },
  430. /**
  431. * @description: 根据字段查询所有的类型
  432. * @param {Array} fieldName
  433. * @param {String} queryurl
  434. * @param {Function} cb
  435. * @return {*}
  436. */
  437. queryLineSingleFieldValueArr(where,fieldName,geometry,returnGeometry,queryurl,cb){
  438. var queryTaskParam = new this.gisConstructor.Query();
  439. queryTaskParam.where = where;
  440. //查询出的字段,类似于select field from
  441. queryTaskParam.outFields = fieldName;
  442. if(geometry){
  443. queryTaskParam.geometry = geometry;
  444. }
  445. queryTaskParam.returnGeometry = returnGeometry;
  446. queryTaskParam.outSpatialReference = this.view.spatialReference;
  447. queryTaskParam.returnDistinctValues = !returnGeometry;
  448. queryTaskParam.spatialRelationship = 'esriSpatialRelIntersects';
  449. var queryTask = new this.gisConstructor.QueryTask(queryurl);
  450. queryTask.execute(queryTaskParam).then(res=>{
  451. cb&&cb(res)
  452. })
  453. },
  454. /**
  455. * 查询该图层下所有的id数(总条数)
  456. */
  457. queryAllObjectidsById(layerid,wherestr,cb) {
  458. var queryTaskParam = new this.gisConstructor.Query();
  459. queryTaskParam.where = wherestr;
  460. queryTaskParam.returnGeometry = false;
  461. queryTaskParam.returnIdsOnly = true;
  462. queryTaskParam.outSpatialReference = this.view.spatialReference;
  463. var queryTask = new this.gisConstructor.QueryTask(this.gwUrl + layerid);
  464. //an array of object IDs
  465. queryTask.executeForIds(queryTaskParam).then((res) => {
  466. let resdata = res?res:[]
  467. cb(resdata);
  468. });
  469. },
  470. queryAllObjectidsById2(layerid,wherestr,geometry,cb) {
  471. var queryTaskParam = new this.gisConstructor.Query();
  472. queryTaskParam.where = wherestr;
  473. queryTaskParam.returnGeometry = false;
  474. queryTaskParam.returnIdsOnly = true;
  475. geometry?queryTaskParam.geometry = geometry:'';
  476. queryTaskParam.outSpatialReference = this.view.spatialReference;
  477. var queryTask = new this.gisConstructor.QueryTask(this.gwUrl + layerid);
  478. queryTask.executeForIds(queryTaskParam).then((res) => {
  479. let resdata = res?res:[]
  480. cb(resdata);
  481. });
  482. },
  483. //querytask能进行属性的查询,也可以进行空间查询,但是他只能查询一个单独的图层
  484. queryGeometrybypageIDs(layerid,ids,cb){
  485. // debugger
  486. var queryTaskParam = new this.gisConstructor.Query();
  487. queryTaskParam.returnGeometry = true;
  488. queryTaskParam.outFields = ['*'];
  489. queryTaskParam.objectIds = ids;
  490. queryTaskParam.outSpatialReference = this.view.spatialReference;
  491. var queryTask = new this.gisConstructor.QueryTask(this.gwUrl + layerid);
  492. queryTask.execute(queryTaskParam).then((res) => {
  493. // console.dir(res.features[0].attributes);
  494. cb(res);
  495. }).catch(err=>{
  496. console.log(err);
  497. });
  498. },
  499. /**
  500. * disByFeaturelayer
  501. * disByFeaturelayerScence
  502. *
  503. * @description: GraphicsLayer图层 展示 设备、场景 图层
  504. * @param {*} arr 图层数据
  505. * @param {*} tablist 勾选的列表数据tab
  506. * @param {*} treename 勾选的列表数据tab
  507. * @param {*} typetag 展示类别 device: DEVICE,scence: SCENCE
  508. * @param {*} typeName 类型;水源、水厂、水质、流量、压力等
  509. * @param {*} propLayerID 图层id
  510. * @param {*} cb 回调函数
  511. * @return {*}
  512. */
  513. displayByGraphicsLayer(arr,tablist,treename, typetag, typeName, propLayerID,cb) {
  514. let ObjectIDval='',
  515. titleval = '',
  516. valueval = '',
  517. typeval = '',
  518. typeTipVal = '';
  519. var graphics = [];
  520. var graphicsArr = [];
  521. let checklist = [];
  522. checklist = treename?this.$refs[treename]?this.$refs[treename].getCheckedKeys():[]:[];
  523. let datalen = 0;
  524. datalen = treename?this.$refs[treename]?this.$refs[treename].data:0:0;
  525. for (let i = 0; i < arr.length; i++) {
  526. const item = arr[i];
  527. if(typetag==='SCENCE'){
  528. ObjectIDval=item.sceneId,
  529. titleval = item.sceneName,
  530. valueval = item.sceneState,
  531. typeval = item.sceneTypeName,
  532. typeTipVal = 'scence';
  533. }else{
  534. ObjectIDval=item.deviceId,
  535. titleval = item.deviceName,
  536. valueval = item.deviceState,
  537. typeval = typeName,
  538. typeTipVal = 'device';
  539. }
  540. let geometryPoint = new this.gisConstructor.Point({
  541. x: item.pointX?item.pointX:0,
  542. y: item.pointY?item.pointY:0,
  543. spatialReference: this.view.spatialReference
  544. });
  545. var visibleval = treename&&datalen?false:true;
  546. checklist.map(v=>{
  547. if(v===ObjectIDval){
  548. visibleval = true;
  549. }
  550. })
  551. graphics.push(new this.gisConstructor.Graphic({
  552. geometry: geometryPoint,
  553. attributes: {
  554. ObjectID: ObjectIDval,
  555. title:titleval,
  556. value:valueval,// 1报警 0正常 ,
  557. type:typeval,
  558. typeTip:typeTipVal,
  559. },
  560. symbol: {
  561. type: 'picture-marker',
  562. url: this.getMapImageIcon(typeval, valueval),
  563. width: '40px',
  564. height: '40px'
  565. },
  566. visible:visibleval
  567. }));
  568. if(item.monitorDataEntities.length>0){
  569. let itemlabelTexttitle = `${titleval} \n`;
  570. let itemlabelTextLeft = ``;
  571. let itemlabelTextRight = ``;
  572. graphicsArr.push(new this.gisConstructor.Graphic({
  573. geometry: geometryPoint,
  574. attributes: {
  575. scenceid:'bg'+ObjectIDval
  576. },
  577. symbol: {
  578. type: 'picture-marker',
  579. url: this.getEmergingBgicon(valueval),
  580. width: '139px',
  581. height: '93px',
  582. yoffset: 60,
  583. },
  584. visible:visibleval
  585. }));
  586. graphicsArr.push(new this.gisConstructor.Graphic({
  587. geometry: geometryPoint,
  588. attributes: {
  589. scenceid:'title'+ObjectIDval
  590. },
  591. symbol: {
  592. type: "text", // autocasts as new TextSymbol()
  593. color: [255,255,255,1],
  594. text: itemlabelTexttitle,
  595. horizontalAlignment :'left',
  596. xoffset: -32,
  597. yoffset: 77,
  598. font: {
  599. size: '12px',
  600. family: "Microsoft YaHei",
  601. weight: "bold"
  602. }
  603. },
  604. visible:visibleval
  605. }));
  606. item.monitorDataEntities.map((v,i)=>{
  607. let crutextleft = `${v.attributeName}${v.unit?'('+v.unit+')':''}\n`;
  608. let crutextright = v.alarmRange?`${v.dataValue?v.dataValue:'-'}(${v.alarmRange})\n`:`${v.dataValue?v.dataValue:'-'}\n`;
  609. // lengtharr.push(crutext.length);
  610. itemlabelTextLeft+=crutextleft;
  611. // itemlabelTextRight+=crutextright;
  612. graphicsArr.push(new this.gisConstructor.Graphic({
  613. geometry: geometryPoint,
  614. attributes: {
  615. scenceid:'left'+ObjectIDval
  616. },
  617. symbol: {
  618. type: "text", // autocasts as new TextSymbol()
  619. color: v.isAlarm?'#FD2D72':[255,255,255,1],//#FD2D72
  620. lineHeight:1.2,
  621. text: crutextright,
  622. horizontalAlignment :'right',
  623. xoffset: 44,
  624. yoffset: 50-(i*12),
  625. font: {
  626. size: '11px',
  627. family: "Microsoft YaHei",
  628. }
  629. },
  630. visible:visibleval
  631. }));
  632. })
  633. graphicsArr.push(new this.gisConstructor.Graphic({
  634. geometry: geometryPoint,
  635. attributes: {
  636. scenceid:'right'+ObjectIDval
  637. },
  638. symbol: {
  639. type: "text", // autocasts as new TextSymbol()
  640. color: [255,255,255,1],
  641. lineHeight:1.2,
  642. text: itemlabelTextLeft,
  643. horizontalAlignment :'left',
  644. xoffset: -45,
  645. yoffset: 50,
  646. font: {
  647. size: '11px',
  648. family: "Microsoft YaHei",
  649. }
  650. },
  651. visible:visibleval
  652. }));
  653. }
  654. }
  655. var treeNodeChecked = true;
  656. tablist.map((item) => {
  657. if (item.id === propLayerID) {
  658. treeNodeChecked = item.active;
  659. }
  660. if(item.data&&item.data.id===propLayerID){
  661. treeNodeChecked = item.checked;
  662. }
  663. });
  664. // 场景图层
  665. let iconfeatureLayer = new this.gisConstructor.GraphicsLayer({
  666. graphics: graphics,
  667. id:propLayerID,
  668. visible:treeNodeChecked
  669. });
  670. // 弹窗图层
  671. var defaultGraphicsLayer1 = new this.gisConstructor.GraphicsLayer({
  672. graphics: graphicsArr,
  673. id:propLayerID+'defaultGraphicsLayer1',
  674. visible:this.mapSuspensionDisplay&&treeNodeChecked
  675. });
  676. // this.map.add(defaultGraphicsLayer1);
  677. cb(iconfeatureLayer,defaultGraphicsLayer1)
  678. },
  679. /**
  680. * @description: Featurelayer图层 聚合图层 窨井、阀门、消防栓
  681. * @param {*} arr
  682. * @param {*} typeName
  683. * @param {*} featureLayerID
  684. * @return {*}
  685. */
  686. disByFeaturelayerPoint(arr, typeName, featureLayerID) {
  687. //根据图层id获取图层
  688. this.map.remove(this.map.findLayerById(String(featureLayerID)));
  689. var graphics = [];
  690. var fields = [
  691. {
  692. name: 'ObjectID',
  693. alias: 'ObjectID',
  694. type: 'oid' // 每个要素必须的字段,字段值必须唯一,当做是整数类型。。。
  695. },
  696. {
  697. name: 'title',
  698. alias: 'title',
  699. type: 'string' //字符串类型
  700. },
  701. {
  702. name: 'value', //是否报警
  703. alias: 'value',
  704. type: 'integer' //整数类型 //除了上面的三种类型,还有 double、date。。。
  705. }
  706. ];
  707. var graphicsArr = [];
  708. for (let i = 0; i < arr.length; i++) {
  709. var addFields = {};
  710. const item = arr[i];
  711. graphics.push({
  712. geometry: item.geometry,
  713. attributes: {
  714. ObjectID: item.attributes.OBJECTID,
  715. title: item.attributes.EXP_NO,
  716. value: 0 // 1报警 0正常 ,
  717. // ...addFields
  718. },
  719. visible: false
  720. });
  721. }
  722. // 设置点的样式
  723. //定义一个render对FeatureLayer自定义的数据进行渲染
  724. var renderer = {
  725. type: 'unique-value', // autocasts as new SimpleRenderer()
  726. field: 'value',
  727. uniqueValueInfos: [
  728. {
  729. value: 0,
  730. symbol: {
  731. type: 'picture-marker',
  732. url: this.getMapImageIcon(typeName, 0),
  733. // xoffset: 5,
  734. // yoffset: 20,
  735. width: '16px',
  736. height: '16px'
  737. }
  738. },
  739. {
  740. value: 10,
  741. symbol: {
  742. type: 'picture-marker',
  743. url: this.getMapImageIcon(typeName, 10),
  744. // xoffset: 5,
  745. // yoffset: 20,
  746. width: '16px',
  747. height: '16px'
  748. }
  749. }
  750. ]
  751. // symbol: {
  752. // type: 'simple-marker', // autocasts as new SimpleMarkerSymbol()
  753. // value: 10,
  754. // color: 'black',
  755. // outline: {
  756. // // autocasts as new SimpleLineSymbol()
  757. // width: 0.5,
  758. // color: 'white'
  759. // }
  760. // }
  761. };
  762. var featureLayer = new this.gisConstructor.FeatureLayer({
  763. source: graphics,
  764. fields: fields,
  765. objectIdField: 'ObjectID',
  766. renderer: renderer,
  767. id: featureLayerID,
  768. geometryType: 'point',
  769. featureReduction: {
  770. type: 'cluster',
  771. clusterRadius: 50,
  772. clusterMaxSize: 16,
  773. labelingInfo: [
  774. {
  775. deconflictionStrategy: 'none',
  776. labelExpressionInfo: {
  777. expression: "Text($feature.cluster_count, '#,###')"
  778. },
  779. symbol: {
  780. type: 'text',
  781. color: '#004a5d',
  782. yoffset: 5,
  783. font: {
  784. weight: 'bold',
  785. family: 'Noto Sans',
  786. size: '12px'
  787. }
  788. },
  789. labelPlacement: 'center-center'
  790. }
  791. ]
  792. }
  793. // objectIdField:
  794. });
  795. this.map.add(featureLayer);
  796. },
  797. MapPointerMoveFn(){
  798. //鼠标移动事件
  799. this.view.on(['pointer-move'], (event) => {
  800. //使用hittest获取要素的属性和位置信息,接收两个参数,一个是坐标点,另外一个是option,返回值是promise对象
  801. this.view.hitTest(event).then((response) => {
  802. if(this.hubiaoPopisshow ===true) {
  803. return
  804. }
  805. if (response.results.length) {
  806. response.results.map(responsev=>{
  807. var graphic = responsev.graphic;
  808. if (graphic && graphic.attributes && graphic.attributes.ObjectID && this.countArr.length === 0) {
  809. // 标记点的位置
  810. this.getx = response.screenPoint.x+10;
  811. this.gety = response.screenPoint.y+700>1080?480:response.screenPoint.y;
  812. this.countArr.push(graphic);
  813. clearInterval(this.timeName2);
  814. if(!this.isPointerMove)return
  815. if (graphic.layer.id.indexOf('F') === -1) {
  816. let layeritems = graphic.layer.graphics.items;
  817. if (layeritems.length > 0) {
  818. layeritems.map((itemgraphic) => {
  819. if (itemgraphic.attributes.ObjectID === graphic.attributes.ObjectID) {
  820. let newg = {
  821. attributes:itemgraphic.attributes,
  822. geometry:itemgraphic.geometry,
  823. symbol: {
  824. type: 'picture-marker',
  825. url: this.getMapImageIcon(itemgraphic.attributes.type, ('1'+itemgraphic.attributes.value)*1),
  826. width: '40px',
  827. height: '40px'
  828. }
  829. }
  830. this.view.graphics.add(newg)
  831. if (itemgraphic.attributes.typeTip === 'scence') {
  832. this.getMapParamBysceneId(graphic.attributes.ObjectID);
  833. this.timeName2 = setInterval(() => {
  834. this.getMapParamBysceneId(graphic.attributes.ObjectID);
  835. }, this.mapDataRefresh);
  836. } else if (itemgraphic.attributes.typeTip === 'device'){
  837. this.getMapParam(graphic.attributes.ObjectID);
  838. this.timeName2 = setInterval(() => {
  839. this.getMapParam(graphic.attributes.ObjectID);
  840. }, this.mapDataRefresh);
  841. }
  842. this.isPointerMove = false;
  843. setTimeout(()=>{
  844. this.isPointerMove = true;
  845. },500)
  846. }
  847. });
  848. }
  849. } else {
  850. this.querySinglePointFn('OBJECTID = ' + graphic.attributes.ObjectID, (res) => {
  851. this.pointAttributes = res.features[0].attributes;
  852. this.showPointInfo = true;
  853. });
  854. }
  855. }
  856. })
  857. } else {
  858. this.countArr = [];
  859. this.popisshow = false;
  860. this.popisshowScence = false;
  861. this.showPointInfo = false;
  862. this.view.graphics.removeAll();
  863. clearInterval(this.timeName2);
  864. }
  865. });
  866. });
  867. },
  868. MapClickFn(){
  869. this.view.on(['click'], (event) => {
  870. this.view.hitTest(event).then((response) => {
  871. if (response.results.length) {
  872. for (let k = 0; k < response.results.length; k++) {
  873. const responsev = response.results[k];
  874. var graphic = responsev.graphic;
  875. if (graphic && graphic.attributes&&graphic.layer ) {
  876. if(graphic.layer.id){
  877. if (graphic.layer.id.indexOf('F') === -1) {
  878. let layeritems = graphic.layer.graphics.items;
  879. if (layeritems.length > 0) {
  880. for (let index = 0; index < layeritems.length; index++) {
  881. const itemgraphic = layeritems[index];
  882. if (itemgraphic.attributes.ObjectID === graphic.attributes.ObjectID) {
  883. if (itemgraphic.attributes.typeTip === 'scence') {
  884. let typeName = itemgraphic.attributes.type;
  885. this.$store.commit('setJumpScenceid', graphic.attributes.ObjectID);
  886. if (typeName == '水源') {
  887. this.$router.push({ path: '/waterProcess' });
  888. } else if (typeName == '水厂') {
  889. this.$router.push({ path: '/waterPlanProcess' });
  890. } else if (typeName == '泵站') {
  891. this.$router.push({ path: '/waterSupplyProcess' });
  892. }
  893. return
  894. } else if (itemgraphic.attributes.typeTip === 'device') {
  895. if (itemgraphic.attributes.type) {
  896. this.$store.commit('setJumpNavType', itemgraphic.attributes.type);
  897. this.$router.push({ path: '/networkAssets' });
  898. }
  899. return
  900. } else if(itemgraphic.attributes.typeTip === 'hubiao') {
  901. this.hubiaoID = itemgraphic.attributes.ObjectID;
  902. this.hubiaoTitles = itemgraphic.attributes.title
  903. this.getHouseholdTableList()
  904. }
  905. }
  906. }
  907. }
  908. } else {
  909. this.querySinglePointFn('OBJECTID = ' + graphic.attributes.ObjectID, (res) => {
  910. var navtype = '';
  911. var scode = res.features[0].attributes.SCODE;
  912. if(scode.indexOf('井')!==-1){
  913. navtype = '窨井'
  914. }else if(scode.indexOf('阀')!==-1){
  915. navtype = '阀门'
  916. }else if(scode.indexOf('栓')!==-1){
  917. navtype = '消防栓'
  918. }
  919. this.$store.commit('setJumpNavType', navtype);
  920. this.$router.push({ path: '/networkAssets' });
  921. });
  922. }
  923. }
  924. }
  925. // })
  926. }
  927. } else {
  928. /* if(this.hubiaoPopisshow ===true) {
  929. return
  930. } */
  931. }
  932. });
  933. });
  934. },
  935. getHouseholdTableList() {
  936. this.hubiaoTitle = this.hubiaoTitles;
  937. this.mixins_query = {
  938. buildingId: this.hubiaoID,
  939. keywords:this.keywords
  940. };
  941. let pageset = {
  942. page: this.mixins_pageset.pageNum,
  943. size: this.mixins_pageset.pageSize
  944. };
  945. /* this.mixins_pageset = {
  946. page: this.mixins_pageset.pageNum,
  947. size: this.mixins_pageset.pageSize
  948. }; */
  949. let datas = Object.assign({}, pageset, this.mixins_query);
  950. this.$http.get('/equipmentStatistics/getDeviceListInformation',datas).then(({status,data,msg}) => {
  951. if(status===0&& data) {
  952. console.log(data);
  953. console.log(this.mixins_pageset.page);
  954. this.mixins_pageset.total = data.total*1;
  955. // this.mixins_pageset.pageSizes = [6];
  956. this.hubiaoPopisshow = true;
  957. this.hubiaoData = data;
  958. }else {
  959. this.$message.error(msg);
  960. }
  961. })
  962. },
  963. }
  964. }