index.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. window.baseEnv = {}
  2. var libPresets, paletteTool
  3. document.ready = function (callback) {
  4. ///兼容FF,Google
  5. if (document.addEventListener) {
  6. document.addEventListener('DOMContentLoaded', function () {
  7. document.removeEventListener('DOMContentLoaded', arguments.callee, false);
  8. callback();
  9. }, false)
  10. }
  11. //兼容IE
  12. else if (document.attachEvent) {
  13. document.attachEvent('onreadystatechange', function () {
  14. if (document.readyState == "complete") {
  15. document.detachEvent("onreadystatechange", arguments.callee);
  16. callback();
  17. }
  18. })
  19. } else if (document.lastChild == document.body) {
  20. callback();
  21. }
  22. }
  23. document.ready(function () {
  24. console.log('ready=>')
  25. document.querySelector('#prepare').classList.add('hide')
  26. LibPresets.getInstance().bindFn().then(ret => {
  27. libPresets = ret
  28. init()
  29. // document.querySelector('#prepare').classList.add('hide')
  30. })
  31. })
  32. const demoData = [
  33. {"title": "吉林", "data": {"变电": [0, 2, 2], "电力": [0, 18, 4]}}, {
  34. "title": "四平东",
  35. "data": {"变电": [0, 0, 0], "电力": [0, 8, 0]}
  36. }, {"title": "延吉西", "data": {"变电": [0, 3, 0], "电力": [0, 18, 5]}}, {
  37. "title": "德惠西",
  38. "data": {"变电": [0, 0, 1], "电力": [0, 8, 0]}
  39. }, {"title": "电力维修队", "data": {"变电": [0, 0, 0], "电力": [0, 0, 0]}}, {
  40. "title": "铁岭西",
  41. "data": {"变电": [2, 0, 0], "电力": [0, 6, 2]}
  42. }, {"title": "长春", "data": {"变电": [0, 1, 1], "电力": [0, 23, 1]}}, {
  43. "title": "长白山",
  44. "data": {"变电": [0, 1, 0], "电力": [0, 5, 2]}
  45. }]
  46. async function init() {
  47. // mapbox threejs
  48. // run(demoData)
  49. let labelData
  50. window.addEventListener('message', (res) => {
  51. labelData = res.data.data
  52. })
  53. const ivl = setInterval(() => {
  54. if (labelData) {
  55. run(labelData)
  56. clearInterval(ivl)
  57. }
  58. }, 100)
  59. }
  60. function run(labelData) {
  61. setTimeout(() => {
  62. console.log('done')
  63. let Map = libPresets.Tools._ThreeMap.GetInstance()
  64. document.querySelector('#actions').style.display = 'block'
  65. document.querySelector('#gongqu').addEventListener('change',(evt) => {
  66. const checked = evt.target.checked
  67. console.log('checked',checked)
  68. Map.gongquGroup.visible = checked
  69. Map.labelGroup.traverse(label => {
  70. if(label.renderType === 0){
  71. label.visible = checked
  72. }
  73. })
  74. })
  75. document.querySelector('#biandian').addEventListener('change',(evt) => {
  76. const checked = evt.target.checked
  77. console.log('checked',checked)
  78. Map.biandianGroup.visible = checked
  79. Map.labelGroup.traverse(label => {
  80. if(label.renderType === 2){
  81. label.visible = checked
  82. }
  83. })
  84. })
  85. document.querySelector('#peidian').addEventListener('change',(evt) => {
  86. const checked = evt.target.checked
  87. console.log('checked',checked)
  88. Map.peidianGroup.visible = checked
  89. Map.labelGroup.traverse(label => {
  90. if(label.renderType === 1){
  91. label.visible = checked
  92. }
  93. })
  94. })
  95. Map.Bootstrap('#container', 'map').then(async () => {
  96. const data = await loopFreshData()
  97. Map.markerList = Object.values(data.points).map(point => {
  98. const position = data.lnglat[point.name]
  99. return {
  100. name: point.name,
  101. text: point.name,
  102. position: position,
  103. style: point.style,
  104. className: point.className,
  105. showRGB: point.showRGB,
  106. ident: point.ident,
  107. event: point.event
  108. }
  109. })
  110. // Map.LineData = data.lines.map(item => {
  111. // return item;
  112. // })
  113. if (Map.scene) {
  114. Map.initThreeCityMarkers();
  115. await Map.initThreeGeoJSON();
  116. // Map.initThreeUserSprites()
  117. data.lines.forEach(item => {
  118. let points = []
  119. let nameArr = []
  120. if (item.pathPoints) {
  121. item.pathPoints.forEach((pointName) => {
  122. if (data.lnglat[pointName]) {
  123. nameArr.push(pointName)
  124. points.push(data.lnglat[pointName])
  125. }
  126. })
  127. }
  128. if (points?.length > 0) {
  129. item.options = item.options || {}
  130. Map.initThreeTubeLayer(item.options.name || nameArr.join('-'), points, item.options)
  131. }
  132. })
  133. const objs = [
  134. Map.tubeGroup.getObjectByName('Line1'),
  135. Map.tubeGroup.getObjectByName('Line2'),
  136. Map.tubeGroup.getObjectByName('ShadowLine'),
  137. ...Map.flyLineGroup.children,
  138. ...Map.scene.getObjectByName('boundaryGroup').children
  139. ]
  140. const group = new Map.THREE.Group();
  141. group.name = 'jl_road_group'
  142. Map.tubeMirrorGroup.add(group)
  143. objs.forEach(obj => {
  144. const newObj = obj.clone();
  145. newObj.name = 'TubeMirror@' + obj.name || Math.random()
  146. if (newObj.layers) {
  147. // newObj.layers.enable(0)
  148. }
  149. if (obj.material) {
  150. newObj.material = obj.material.clone()
  151. newObj.material.opacity = 0.1
  152. newObj.material.transparent = true
  153. newObj.material.color.set('rgb(20, 207, 246)')
  154. newObj.material.depthTest = false;
  155. newObj.material.depthWrite = false;
  156. newObj.renderOrder = 10
  157. // newObj.material.depthTest = false;
  158. // newObj.material.depthWrite = false;
  159. // newObj.position.renderOrder = 10
  160. }
  161. if (['TubeMirror@ShadowLine', 'TubeMirror@Line1', 'TubeMirror@Line2'].includes(newObj.name)) {
  162. newObj.material.color.set('rgb(35,77,231)')
  163. newObj.material.opacity = 0.2
  164. newObj.position.z = Map.modelTopZ - 0.00002
  165. }
  166. if (['TubeMirror@DashLine1', 'TubeMirror@DashLine2', 'TubeMirror@DashLine3'].includes(newObj.name)) {
  167. newObj.material.color.set('rgb(20, 207, 246)')
  168. newObj.material.opacity = 0.1
  169. newObj.position.z = Map.modelTopZ
  170. }
  171. Map.tubeMirrorGroup.add(newObj)
  172. if (newObj.name.includes('TubeMirror@jl_bount_road')) {
  173. group.position.z = 0.00045
  174. group.add(newObj)
  175. newObj.material.color.set('rgb(0, 0, 0)')
  176. newObj.material.opacity = 0.10
  177. newObj.material.depthTest = false;
  178. newObj.material.depthWrite = false;
  179. newObj.renderOrder = 10
  180. // newObj.layers.enable(Map.bloomRenderLayer.currentLayerNum)
  181. }
  182. })
  183. Map.tubeMirrorGroup.getObjectByName('TubeMirror@ShadowLine').visible = true
  184. // Map.scene.getObjectByName('faceMeshMiddle_吉林省').material.opacity = 0.8
  185. // Map.tubeMirrorGroup.applyMatrix4(Map.flipMatrix());
  186. // Map.tubeMirrorGroup.position.z = Map.modelHigherZ - 0.0002
  187. Map.mirrorGroup.add(Map.scene.getObjectByName('faceMesh_吉林省').clone())
  188. Map.mirrorGroup.add(Map.scene.getObjectByName('faceMeshBottom_吉林省').clone())
  189. Map.mirrorGroup.add(Map.scene.getObjectByName('active_area_吉林省').clone())
  190. Map.mirrorGroup.add(Map.scene.getObjectByName('faceMesh_铁岭市').clone())
  191. Map.mirrorGroup.add(Map.scene.getObjectByName('faceMeshBottom_铁岭市').clone())
  192. Map.mirrorGroup.add(Map.scene.getObjectByName('active_area_铁岭市').clone())
  193. Map.mirrorGroup.add(Map.scene.getObjectByName('ShadowHiddenLine').clone())
  194. Map.mirrorGroup.traverse(obj => {
  195. if (obj.type === 'Group') {
  196. return;
  197. }
  198. if (obj.name) {
  199. obj.name = 'Mirror@' + obj.name
  200. }
  201. if (obj.material) {
  202. obj.material = obj.material.clone()
  203. }
  204. })
  205. // Map.mirrorGroup.add(Map.scene.getObjectByName('CityMarker_Group').clone())
  206. Map.mirrorGroup.applyMatrix4(Map.flipMatrix())
  207. Map.mirrorGroup.traverse(obj => {
  208. if (["Mirror@faceMeshBottom_吉林省", "Mirror@faceMeshBottom_铁岭市"].includes(obj.name)) {
  209. obj.material.opacity = 0.2
  210. obj.material.color.set('rgb(1, 15, 37)')
  211. obj.material.transparent = true
  212. }
  213. if (['Mirror@faceMesh_吉林省', 'Mirror@faceMesh_铁岭市'].includes(obj.name)) {
  214. obj.material.opacity = 0.2
  215. }
  216. if (['Mirror@ShadowHiddenLine'].includes(obj.name)) {
  217. obj.material.opacity = 0.2
  218. obj.material.transparent = true
  219. obj.position.z = Map.modelTopZ
  220. }
  221. })
  222. Map.mirrorGroup.getObjectByName('Mirror@active_area_吉林省').material.uniforms.opacity.value = 0.1
  223. Map.mirrorGroup.getObjectByName('Mirror@active_area_铁岭市').material.uniforms.opacity.value = 0.1
  224. }
  225. Map.renderSiteTag(labelData);
  226. // Map.initThreeFlyLineLayer();
  227. })
  228. }, 0)
  229. // setInterval((e) => {
  230. // loopFreshData(Map)
  231. // }, 5000)
  232. // let Map = libPresets.Tools._Earth.GetInstance()
  233. // Map.Bootstrap('container')
  234. // dxf.js
  235. // let dxfRender = libPresets.Tools._DxfRender.GetInstance()
  236. // dxfRender.fetchDxfFile()
  237. // let Map = libPresets.Tools._Earth.GetInstance()
  238. // Map.Bootstrap('container')
  239. }
  240. function loopFreshData() {
  241. return new Promise(re => {
  242. fetch('/gis/static/threeMap/set.json').then(res => res.json()).then(res => {
  243. re(res)
  244. })
  245. })
  246. // return new Promise((re, je) => {
  247. // const base = {
  248. // "url": "dashboard/api/ics/dcMaps",
  249. // "type": "POST",
  250. // "datasourceId": 139,
  251. // "body": {},
  252. // "urlParam": {},
  253. // "header": {}
  254. // }
  255. // fetch('http://localhost:900/insight/api/v1/http-request', {
  256. // method: 'post',
  257. // body: JSON.stringify(base),
  258. // headers: {
  259. // 'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiIzOWE1M2I3ZDIwYzA1N2YxZTk5OWY1YTBlMWE5NmI5OTE4ZDA4IiwidWlkIjoxMDE2NDAsIm9yZ0lkIjo4OCwidXNlckNvZGUiOiJ6aGFuZ3lzMzYiLCJpYXQiOjE2NTEwNTAzMTh9.Qx0aPpQs5eZ9ZfrpP8efCYpObevUfBHDBmJG8tQlAXDU-7dvC9HcFTMeAj0sFX7iNEv2rx6wzbeM5jTbi1JsCg',
  260. // 'Content-Type': 'application/json'
  261. // }
  262. // }).then(res => res.json())
  263. // .then(function (res) {
  264. // if (res && res.data.code === 200) {
  265. // re(res.data.data)
  266. // } else {
  267. // je(false)
  268. // }
  269. //
  270. // })
  271. // })
  272. }
  273. function xhrFetch(store, marker, storeKey, url, cb) {
  274. // console.log('xhrFetch=>', marker, storeKey, url)
  275. return new Promise(async (r, j) => {
  276. let ret = await store.Load(storeKey)
  277. if (ret) {
  278. window.baseEnv[storeKey] = ret
  279. r(ret)
  280. } else {
  281. $.ajax({
  282. type: 'get',
  283. url: url,
  284. data: {},
  285. dataType: 'json',
  286. async: true,
  287. xhr: function () {
  288. var xhr = new window.XMLHttpRequest();
  289. // Handle progress
  290. //Upload progress
  291. xhr.addEventListener("progress", function (evt) {
  292. if (evt.lengthComputable) {
  293. var percentComplete = evt.loaded / evt.total;
  294. if (cb) {
  295. cb(marker, percentComplete)
  296. }
  297. }
  298. }, false);
  299. return xhr;
  300. },
  301. cache: false,
  302. error: function (xhr, ajaxOptions, thrownError) {
  303. j(xhr.responseText);
  304. },
  305. beforeSend: function () {
  306. },
  307. success: function (json) {
  308. },
  309. complete: async function (res) {
  310. // console.log('complete')
  311. window.baseEnv[storeKey] = res.responseJSON
  312. if (storeKey === 'export') {
  313. await libPresets.Tools._Localforage.GetInstance().Import(res.responseJSON, store.store, importProgressCb, false)
  314. }
  315. await store.Save(storeKey, res.responseJSON)
  316. // await store.Save(storeKey, true)
  317. r(res.responseJSON)
  318. }
  319. })
  320. }
  321. })
  322. }
  323. async function clearAllCache() {
  324. try {
  325. let result = await libPresets.Tools._Localforage.GetInstance().Bootstrap().store.clear()
  326. alert('清空成功')
  327. } catch (e) {
  328. alert('清空失败')
  329. }
  330. }
  331. async function removeListener() {
  332. }
  333. async function bindListener() {
  334. }