map-data.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. // import JMap from 'JMap'
  2. // import JMapQuery from 'JMapQuery'
  3. export default {
  4. data() {
  5. return {
  6. map: null,
  7. mapPolList: [],
  8. colorList: [
  9. ['#99e', "#F33"],
  10. ['#ee6', "#c38"],
  11. ['#c38', "#F33"],
  12. ['#6E7', '#F33'],
  13. ['#6A7', "#F33"],
  14. ['#EF7', "#F33"],
  15. ['#AF7', "#F33"],
  16. ['#BAC', "#F33"],
  17. ['#BEF', "#F33"],
  18. ['#BBB', "#F33"],
  19. ['#EFA', "#F33"],
  20. ['#FE6', "#F33"],
  21. ['#7F6', "#F33"],
  22. ['#7dc', "#F33"],
  23. ],
  24. colorIndList: [-1, 7, 21, 26, 31, 37, 46, 52, 57, 66, 68, 71, 74, 100],
  25. oldPopup: null
  26. }
  27. },
  28. computed: {
  29. mapWidth: function() {
  30. //这里的this指向的是当前的vue实例
  31. return this.$refs.mapF.$el.offsetWidth / 2 + 'px'
  32. },
  33. mapHeight: function() {
  34. //这里的this指向的是当前的vue实例
  35. return this.$refs.mapF.$el.offsetHeight / 2 - 40 + 'px'
  36. }
  37. },
  38. mounted() {
  39. window.vue = this;
  40. window.jMap = null;
  41. window.jmapQuery = null;
  42. },
  43. methods: {
  44. async initMap() {
  45. window.vue = this;
  46. window.jMap = null;
  47. window.jmapQuery = null;
  48. window.jMap = new JMap();
  49. var map_params = {
  50. camera: {
  51. x: 121.4175597,
  52. y: 31.1192480,
  53. radius: 18000.0,
  54. offset: { heading: -4, pitch: -70, range: 0 }
  55. },
  56. map_complete_callback: () => {
  57. window.jmapQuery = new JMapQuery(window.jMap);
  58. // ToDo...
  59. },
  60. map_left_click_callback: (obj, type, movement) => {
  61. },
  62. map_right_click_callback: (obj) => {
  63. },
  64. };
  65. let res = await this.$axios.get("/atlas/encrypt")
  66. // 加载地图
  67. window.jMap.createMap("mapF", res.data, window.location.origin, map_params, {});
  68. // 地图样式
  69. window.jMap.switchBaseLayer('light')
  70. // 增加街镇边界
  71. let options = {
  72. click: (val) => {
  73. console.log(val)
  74. },
  75. isZoom: false,
  76. style: {
  77. outline: true,
  78. outlineColor: 'red',
  79. // material:'rgb(0,0,0)',
  80. // perPostionHeight: false,
  81. height: 5,
  82. width: 5,
  83. label: {
  84. show: true,
  85. text: '',
  86. font: '16px Helvetica',
  87. fillColor: 'blue',
  88. pixelOffset: [0, -20],
  89. backgroundColor: 'rgb(0,0,0)',
  90. showBackground: false
  91. }
  92. },
  93. // where:"name != '江川路街道'"
  94. }
  95. window.jMap.addLayer('mh_dyn_district', [1], options)
  96. // 街镇标题
  97. var qp = new JMapQueryParam({
  98. queryMapService: 'mh_dyn_district',
  99. queryMapLayers: [1],
  100. outFields: ['code', 'name', 'center_x', 'center_y'],
  101. callBack: (res) => {
  102. res.features.forEach(async val => {
  103. await window.jMap.FlagInfo.show({
  104. id: val.attributes.code,
  105. position: { x: Number(val.attributes.center_x), y: Number(val.attributes.center_y), z: 0 },
  106. element: `<div class='ysc-dynamic-layer ys-css3-box' onclick="vue.clickFlag(${val.attributes.code})"><div class='biaozhu'>${val.attributes.name} ${val.attributes.code}</div></div>`
  107. }, { isZoom: false, offset: [0, 0] })
  108. });
  109. }
  110. })
  111. new JMapQuery(window.jMap).execQuery(qp)
  112. },
  113. clickFlag(val) {
  114. console.log(val)
  115. },
  116. randomColor() {
  117. var color = "#";
  118. //for循环中,如果后面仅有一条语句,{}可省略不写
  119. //随机生成6位0-15之间的数字,再用toString(16)将数字转成16进制
  120. for (var i = 0; i < 6; i++) color += parseInt(Math.random() * 16).toString(16);
  121. return color;
  122. },
  123. deleteMarker(lnglats) {
  124. this.map.remove(lnglats);
  125. },
  126. // 创建标点和点击事件
  127. addMarker(lnglats, type) {
  128. let icon = ''
  129. let target = lnglats.map((val, ind) => {
  130. if (type === 'water') {
  131. icon = val.waterAdministrative === '单位' ? 'http://120.55.70.156/image/unitWater.png' : val.waterAdministrative === '市政' ? 'http://120.55.70.156/image/szWater.png' : val.waterAdministrative === '社区' || val.waterAdministrative === '居民' ? 'http://120.55.70.156/image/sqWater.png' : ''
  132. }
  133. let marker = {
  134. id: ind + 1,
  135. attributes: val.waterAdministrative,
  136. attrbutes: val,
  137. position: { x: val.gisX, y: val.gisY, z: 0 },
  138. // image: { url: icon,width:29.5,height:48.5 },
  139. };
  140. return marker
  141. })
  142. console.log(target)
  143. window.jMap.Locate.pointLocate(target, {
  144. isZoom: false,
  145. scaleByDistance: { minScaling: 0, maxScaling: 1, minDistance: 1000, maxDistance: 30000 },
  146. click: (val) => {
  147. this.elementInfo(val, type)
  148. }
  149. })
  150. },
  151. // 无经纬度创建标点和点击事件
  152. addMarkerAddress(lnglats) {
  153. let target = lnglats.map((val, ind) => {
  154. if (!val.addressId) {
  155. let addressInfo = window.jMap.queryMphInfo(val.address)[val.address][0]
  156. return {
  157. ...val,
  158. addressId: addressInfo.address_id, // 地址id
  159. province: addressInfo.province, // 市
  160. district: addressInfo.district, // 区
  161. sub_district: addressInfo.sub_district, // 街镇
  162. streetname: addressInfo.streetname, // 路
  163. address: addressInfo.address, // 户
  164. committee: addressInfo.committee, // 居委会
  165. }
  166. }
  167. })
  168. target = target.reduce((item, next) => {
  169. !item.some(val => val.addressId === next.addressId) && item.push(next)
  170. return item
  171. }, []);
  172. console.log(target)
  173. console.log(Math.floor(target.length / 100))
  174. for (let item = 0; item < Math.floor(target.length / 100); item++) {
  175. console.log(item)
  176. console.log(target.slice(item * 100, (item + 1) * 100).map(val => val.addressId).join())
  177. setTimeout(() => {
  178. window.jMap.locateMph(
  179. target.slice(item * 100, (item + 1) * 100).map(val => val.addressId).join(), {
  180. isZoom: false,
  181. scaleByDistance: { minScaling: 0, maxScaling: 1, minDistance: 1000, maxDistance: 30000 },
  182. click: (value) => {
  183. this.elementInfo(value, 'fire')
  184. }
  185. }
  186. )
  187. }, 0)
  188. }
  189. },
  190. leftBtnClick() {
  191. this.leftBtn = !this.leftBtn;
  192. },
  193. rightBtnClick() {
  194. this.rightBtn = !this.rightBtn
  195. },
  196. elementInfo(value, type) {
  197. let element = ''
  198. if (type === 'water') {
  199. element = `<div class="ysc-dynamic-layer ys-css3-box" onclick="vue.removePopup">
  200. <div class="tableTooltip mapTab">
  201. <div class="tableTitle">
  202. <div>${value.attrbutes.type}</div>
  203. </div>
  204. <el-row class="tableContent">
  205. <div class="max">水源位置:${value.attrbutes.address}</div>
  206. <div>电话:${value.attrbutes.phone}</div>
  207. <div class="max">支队名称:${value.attrbutes.detachmentName}</div>
  208. <div>管辖机构:${value.attrbutes.jurisdictionalAgency}</div>
  209. <div>水源类型:${value.attrbutes.type}</div>
  210. <div>取水形式:${value.attrbutes.getWaterType}</div>
  211. <div>水源性质:${value.attrbutes.waterAdministrative}</div>
  212. <div>状态:${value.attrbutes.status == 1 ?'可用':'不可用'}</div>
  213. <div>供水单位:${value.attrbutes.waterUnit}</div>
  214. </el-row>
  215. </div>
  216. </div>`
  217. } else if (type === 'fire') {
  218. element = `<div class="ysc-dynamic-layer ys-css3-box" onclick="vue.removePopup">
  219. <div class="tableTooltip mapTab">
  220. <div class="tableTitle">
  221. <div>${'单位及执法情况'}</div>
  222. </div>
  223. <el-row class="tableContent">
  224. <div>单位地址:${'XX路135弄'}</div>
  225. <div>法人:${'张三'}</div>
  226. <div>管理人:${'李四'}</div>
  227. <div>历史检查次数:<a>${'6次'}</a></div>
  228. <div class="divTitle">行政许可记录</div>
  229. <div>审核时间:${'2021-06-26'}</div>
  230. <div>验收时间:${'2021-06-26'}</div>
  231. <div>安检时间:${'2021-06-26'}</div>
  232. <div>历史隐患数:${'2处'}</div>
  233. <div class="divTitle">历史处罚情况</div>
  234. <div>历史火灾数:${'2'}</div>
  235. <div>单位自主管理情况:<a>点击查看</a></div>
  236. </el-row>
  237. </div>
  238. </div>`
  239. }
  240. this.addMarkerInfo(element, value)
  241. console.log(element)
  242. },
  243. // 标点点击弹窗
  244. addMarkerInfo(element, value, isBtn = false) {
  245. console.log(element, value)
  246. // window.jMap.Popup && window.jMap.Popup.hide([this.oldPopup && this.oldPopup.id]);
  247. if (this.oldPopup && value.id === this.oldPopup.id) {
  248. window.jMap.Popup.hide();
  249. return this.oldPopup = null
  250. }
  251. // console.log(value)
  252. window.jMap.Popup.show({
  253. id: value.id,
  254. // position: value.wgs84position, //使用自定义窗体
  255. position: { x: Number(value.wgs84position.x), y: Number(value.wgs84position.y), z: Number(value.wgs84position.z) }, //使用自定义窗体
  256. element: element,
  257. }, { isZoom: false, offset: [0, -40] });
  258. if (!isBtn) {
  259. window.jMap.goTo({
  260. x: Number(value.wgs84position.x),
  261. y: Number(value.wgs84position.y),
  262. radius: 1000
  263. }, {
  264. duration: 3,
  265. offset: {
  266. heading: -4,
  267. pitch: -70,
  268. range: 0
  269. }
  270. })
  271. window.jMap.Buffer.generate({
  272. geometry: [{ position: [{ x: Number(value.wgs84position.x), y: Number(value.wgs84position.y) }], type: 'point' }],
  273. distance: 1000
  274. }, {
  275. callBack: (el) => {
  276. console.log(el)
  277. for (const i in el) {
  278. var target = {
  279. id: i,
  280. position: CoordUtil.arrayToJson(el[i].rings[0])
  281. }
  282. }
  283. window.jMap.Locate.regionLocate(target, {
  284. style: {
  285. color: 'rgba(235, 98, 98, .1)',
  286. transparency: .3
  287. }
  288. })
  289. },
  290. })
  291. }
  292. this.oldPopup = value
  293. },
  294. removePopup(e) {
  295. console.log(e)
  296. },
  297. }
  298. }