DataCenter.vue 88 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558
  1. <template>
  2. <div class="page">
  3. <div class="menus">
  4. <div
  5. v-for="item in menusData"
  6. :key="item.name"
  7. :class="item.bagC == isComponent ? 'selected' : ''"
  8. class="items"
  9. @click="ComponentChange(item)"
  10. >
  11. <div class="icon" :class="item.bagC">
  12. <i class="iconfont" :class="item.icon" />
  13. </div>
  14. <p class="text">{{ item.name }}</p>
  15. </div>
  16. </div>
  17. <transition name="fade">
  18. <div class="page-left" v-show="leftBoxClose">
  19. <div class="condition">
  20. <div class="panel flex-1">
  21. <Cascader
  22. :data="xzqOptions"
  23. v-model="query.xzqdm"
  24. change-on-select
  25. :clearable="false"
  26. @on-change="cascaderChange"
  27. />
  28. </div>
  29. <!-- <div class="panel flex-1" style="margin-left: 20px">
  30. <el-input v-model="input" placeholder="输入关键词进行搜索" style="width: 90%" class="base"/>
  31. <i class="iconfont yh-sousuo"/>
  32. </div>-->
  33. </div>
  34. <div v-show="isComponent === 'zyml'" class="contents">
  35. <div class="title">
  36. <div
  37. style="
  38. width: 6px;
  39. height: 20px;
  40. background: #5988ff;
  41. border-radius: 1px 1px 1px 1px;
  42. margin-right: 8px;
  43. "
  44. />
  45. <p>{{ nameComp }}</p>
  46. </div>
  47. <vl-tool-bar class="data-c" height="0" :radius="0">
  48. <vl-layer-tree :enabled-layers="enabledLayersConfig" />
  49. </vl-tool-bar>
  50. </div>
  51. <div v-show="isComponent === 'sxsb'" class="contents">
  52. <div class="title">
  53. <div
  54. style="
  55. width: 6px;
  56. height: 20px;
  57. background: #5988ff;
  58. border-radius: 1px 1px 1px 1px;
  59. margin-right: 8px;
  60. "
  61. />
  62. <p>{{ nameComp }}</p>
  63. </div>
  64. <div class="sxsb btn-groups">
  65. <div
  66. v-for="item in zycxBtnData"
  67. :key="item.value"
  68. class="btn"
  69. :class="zycx == item.value ? 'selected' : ''"
  70. @click="
  71. () => {
  72. zycx = item.value;
  73. zycxData.show = false;
  74. drawShapeJson = null; //清除图形
  75. zycxData.query.layersName = []; //清除空间查询条件
  76. zycxData.query.layerName = '';
  77. zycxData.query.layerFieldName = '';
  78. zycxData.query.fieldValue = ''; //清除属性查询条件
  79. zycxData.table = [];
  80. zycxData.tables = [];
  81. }
  82. "
  83. >
  84. {{ item.name }}
  85. </div>
  86. </div>
  87. <div v-if="zycx == 'sx'" class="sxsb_contents">
  88. <div class="panels">
  89. <span>业务图层:</span>
  90. <el-select
  91. placeholder="请选择"
  92. class="select"
  93. v-model="zycxData.query.layerName"
  94. clearable
  95. @change="handleSxChange"
  96. >
  97. <el-option
  98. v-for="item in zycxData.query.layersData"
  99. :key="item.value"
  100. :value="item.value"
  101. :label="item.name"
  102. />
  103. </el-select>
  104. </div>
  105. <div class="panels">
  106. <span>查询字段:</span>
  107. <el-select
  108. placeholder="请选择"
  109. class="select"
  110. v-model="zycxData.query.layerFieldName"
  111. clearable
  112. >
  113. <el-option
  114. v-for="item in zycxData.query.layerFieldData[
  115. zycxData.query.layerName
  116. ]"
  117. :key="item.name"
  118. :value="item.name"
  119. :label="item.aliasname"
  120. />
  121. </el-select>
  122. </div>
  123. <div class="panels">
  124. <span>属性值:</span>
  125. <el-input
  126. v-model="zycxData.query.fieldValue"
  127. placeholder="请输入..."
  128. class="select"
  129. clearable
  130. />
  131. </div>
  132. <div class="serach" @click="sxsbSearch()">查询</div>
  133. </div>
  134. <div v-if="zycx == 'kj'" class="sxsb_contents">
  135. <div class="panels">
  136. <span>业务图层:</span>
  137. <el-select
  138. placeholder="请选择"
  139. class="select"
  140. v-model="zycxData.query.layersName"
  141. multiple
  142. @change="
  143. (v) => {
  144. zycxData.query.layersData.filter((item) => {
  145. if (v === item.value) {
  146. zycxData.query.currLayerConfig = item;
  147. }
  148. });
  149. }
  150. "
  151. clearable
  152. >
  153. <el-option
  154. v-for="item in zycxData.query.layersData"
  155. :key="item.value"
  156. :value="item.value"
  157. :label="item.name"
  158. />
  159. </el-select>
  160. </div>
  161. <div class="panels">
  162. <span>绘制范围:</span>
  163. <div class="conditions">
  164. <div>
  165. <div class="panel" @click="createBoxEvent">
  166. <img src="@/assets/images/datacenter/zbx.png" />
  167. </div>
  168. <div class="panel" @click="drawInteractionEvent()">
  169. <img src="@/assets/images/datacenter/dbx.png" />
  170. </div>
  171. <div
  172. class="panel"
  173. @click="cleanLayer()"
  174. style="cursor: pointer"
  175. >
  176. 清除
  177. </div>
  178. </div>
  179. <div class="panel_serach" @click="openCoordinate">
  180. <i class="iconfont yh-daoru" />
  181. 导入
  182. </div>
  183. </div>
  184. </div>
  185. <div class="panels">
  186. <span>缓冲距离:</span>
  187. <el-input
  188. placeholder="请输入内容"
  189. v-model="zycxData.query.distance"
  190. class="select"
  191. >
  192. <template slot="append">米</template>
  193. </el-input>
  194. </div>
  195. <div class="serach" @click="sxsbSearch()">查询</div>
  196. </div>
  197. <div v-if="zycxData.show" class="tableList">
  198. <div class="title">
  199. <p style="font-family: AlibabaPuHuiTiM; font-size: 14px">
  200. 查询结果
  201. </p>
  202. <i
  203. class="iconfont yh-fanhui"
  204. @click="
  205. () => {
  206. zycxData.show = false;
  207. }
  208. "
  209. title="返回上一级"
  210. />
  211. </div>
  212. <div v-if="zycx == 'sx'" class="tables">
  213. <div
  214. class="item"
  215. v-for="(item, index) in zycxData.table"
  216. :key="index"
  217. :class="zycxData.tableId == index ? 'selected' : ''"
  218. @click="sxsbTableSerach(index, item)"
  219. >
  220. <div class="xh">
  221. <div>
  222. {{ index + 1 }}
  223. </div>
  224. </div>
  225. <div class="title">
  226. <p class="name">
  227. {{ item.dk_mc || item.xmmc || item.xm_mc }}
  228. </p>
  229. <p>
  230. <span class="span_wh">批准文号:</span>
  231. <span class="span_wh_v">{{ item.dk_bh || item.pzwh }}</span>
  232. </p>
  233. </div>
  234. <i class="iconfont yh-dingwei" />
  235. </div>
  236. </div>
  237. <div v-if="zycx == 'sx'" style="position: absolute; bottom: 0px">
  238. <Page
  239. :total="zycxData.total"
  240. show-total
  241. @on-change="
  242. (page) => {
  243. zycxData.page = page;
  244. sxsbSearch();
  245. }
  246. "
  247. />
  248. </div>
  249. <div v-if="zycx == 'kj'" class="tables">
  250. <div v-for="(item, index) in zycxData.tables" :key="index">
  251. <p>
  252. <el-tag
  253. type="warning"
  254. style="font-size: 16px; font-weight: bold"
  255. >{{ item.name }}</el-tag
  256. >
  257. </p>
  258. <div
  259. class="item"
  260. v-for="(item1, index1) in item.data"
  261. :key="index1"
  262. :class="
  263. zycxData.tableId == index1 + item.name ? 'selected' : ''
  264. "
  265. @click="sxsbTableSerach(index1 + item.name, item1)"
  266. >
  267. <div class="xh">
  268. <div>
  269. {{ index1 + 1 }}
  270. </div>
  271. </div>
  272. <div class="title">
  273. <p class="name">
  274. {{ item1.dk_mc || item1.xmmc || item1.xm_mc }}
  275. </p>
  276. <p>
  277. <span class="span_wh">批准文号:</span>
  278. <span class="span_wh_v">{{
  279. item1.dk_bh || item1.pzwh
  280. }}</span>
  281. </p>
  282. </div>
  283. <i class="iconfont yh-dingwei" />
  284. </div>
  285. </div>
  286. </div>
  287. </div>
  288. </div>
  289. <div v-show="isComponent === 'kjfx'" class="contents">
  290. <div class="title">
  291. <div
  292. style="
  293. width: 6px;
  294. height: 20px;
  295. background: #5988ff;
  296. border-radius: 1px 1px 1px 1px;
  297. margin-right: 8px;
  298. "
  299. />
  300. <p class="flex-1">{{ nameComp }}</p>
  301. <i
  302. v-show="kjfxData.fxType != -1"
  303. class="iconfont yh-fanhui"
  304. @click="
  305. () => {
  306. kjfxData.fxType = -1;
  307. }
  308. "
  309. title="返回"
  310. />
  311. </div>
  312. <div class="sxsb_contents">
  313. <div class="panel_box">
  314. <div @click="drawInteractionEvent()">
  315. <i class="iconfont yh-huizhi" style="color: #5b89ff" />
  316. 绘制
  317. </div>
  318. <div @click="openCoordinate">
  319. <i class="iconfont yh-daoru" style="color: #f0a123" />
  320. 导入
  321. </div>
  322. <div @click="sqFeatrue">
  323. <i class="iconfont yh-shiqu" style="color: #1abfbf" />
  324. 拾取
  325. </div>
  326. <div @click="cleanLayer()">
  327. <i class="iconfont yh-qingchu" style="color: #e7891a" />
  328. 清除
  329. </div>
  330. </div>
  331. <div class="panels">
  332. <span>缓冲距离:</span>
  333. <el-input
  334. placeholder="请输入内容"
  335. v-model="input2"
  336. class="select"
  337. disabled
  338. >
  339. <template slot="append">米</template>
  340. </el-input>
  341. </div>
  342. <div class="panels">
  343. <span>分析类型:</span>
  344. <el-select
  345. v-model="kjfxData.analysisType"
  346. placeholder="请选择"
  347. class="select"
  348. >
  349. <el-option value="报部" label="报部" />
  350. <el-option value="报省" label="报省" />
  351. </el-select>
  352. </div>
  353. <div class="btn-groups" style="flex-flow: column; margin-top: 0px">
  354. <div
  355. class="btn"
  356. style="margin-bottom: 10px"
  357. v-for="(item, index) in kjfxData.data"
  358. @click="
  359. () => {
  360. kjfxData.fxType = index;
  361. // if(item.value=='yf'){openYfkAnalyies()}else{kjfxData.yfkData.show=false}
  362. // if(item.value=='dz'){openDzAnalyies()}
  363. }
  364. "
  365. :class="{ selected: kjfxData.fxType == index }"
  366. :key="item.value"
  367. >
  368. {{ item.name }}分析
  369. </div>
  370. </div>
  371. </div>
  372. <!-- <div v-if="kjfxData.fxType == 0" class="kjfx_contents">
  373. <gh-a-xz-analysis
  374. :kjxx="kjfxData.data[kjfxData.fxType]"
  375. :analysisType="kjfxData.analysisType"
  376. />
  377. </div>
  378. <div v-if="kjfxData.fxType == 1" class="kjfx_contents">
  379. <gh-a-xz-analysis
  380. :kjxx="kjfxData.data[kjfxData.fxType]"
  381. analysisType=""
  382. />
  383. </div> -->
  384. <div v-if="kjfxData.fxType == 0" class="kjfx_yfk_contents">
  385. <yfk-analysis />
  386. </div>
  387. <div v-if="kjfxData.fxType == 1" class="kjfx_yfk_contents">
  388. <dz-analysis />
  389. </div>
  390. </div>
  391. </div>
  392. </transition>
  393. <vl-map
  394. class-name="base-map flex-2"
  395. :map.sync="map"
  396. projection="EPSG:4490"
  397. @loaded="mapLoaded"
  398. >
  399. <!-- 图层配置 -->
  400. <vl-config-layers
  401. ref="configLayer"
  402. :layers-config="layersConfig"
  403. :visible-layer-ids="visibleLayerIds"
  404. @loaded="configLayerLoaded"
  405. />
  406. <!-- 工具栏 -->
  407. <vl-tool-bar :height="32" :radius="4">
  408. <vl-tool-bar-item
  409. no-padding
  410. style="width: 32px"
  411. @click="resetMapView"
  412. title="还原"
  413. >
  414. <svg
  415. t="1639635589124"
  416. class="icon"
  417. viewBox="0 0 1024 1024"
  418. version="1.1"
  419. xmlns="http://www.w3.org/2000/svg"
  420. p-id="6660"
  421. width="21"
  422. height="21"
  423. >
  424. <path
  425. d="M512 1024A512 512 0 1 1 512 0a512 512 0 0 1 0 1024z m325.248-631.936c0 1.152-11.84 13.44 0 13.44 0 6.72 14.464 9.6 15.424 18.432 0.768 6.592-11.2 14.976 11.328 17.664 3.072 6.784 25.984 9.216 29.44 2.048-14.528 0 0.256-11.264-8.064-11.264 0-3.712-4.736-3.712-5.376-7.808 1.792-0.704 11.648 0.32 16 0-0.704-4.16-10.624-7.04-10.624-10.624-3.648 0-12.8 5.44-12.16-0.448 0.64-6.528-2.368-3.648-7.872-8-1.536 0-7.744-7.552-5.376-9.216 6.208 0 5.76 0.832 13.376-0.768 1.152 0 18.368-2.816 10.688-2.816-8.96-4.8-2.56-10.88-20.928-7.936-9.856 1.536-14.72 6.912-25.856 7.296z m38.784 380.544a445.248 445.248 0 0 0 82.24-298.048 49.536 49.536 0 0 1-16.768-2.368c-14.592 0-26.944-13.888-41.6-9.536 0.256-0.64 0-0.96-0.64-0.64 1.152-3.648-11.008-24.96-16.192-15.552-1.408 2.56 4.288 11.712 6.656 13.312 0 1.92 1.28 6.336 2.944 7.936 4.224 4.16-0.96 5.504 0 8.128 5.376 0 4.544-1.024 5.824-8.768 0.64 0.512 0.576 0.704 1.472 0.704a9.92 9.92 0 0 0 1.28 8.064c5.44 8.32-1.216 0.512 0.896 6.592 7.424 0 14.592-4.096 18.24-13.184 2.816 2.112-0.576 5.184 2.176 6.592 2.432 2.816 4.8 4.16 3.2 7.552-1.024 2.24 6.208 6.656 4.8-1.728 8 2.304 6.656 12.16 0.768 16.064 0 3.84-3.648 4.16-3.648 9.152 0 3.2-2.368 8.832-5.12 9.792 0 1.92-21.76 11.392-20.48 15.36-3.776 0-17.152 3.84-19.648 8.768-2.688 0-13.632 3.84-14.592 5.76-13.568 0-11.008-16-17.536-16 0.576-2.688-1.28-3.84-2.88-6.528 4.16 0-13.12-32.256-13.12-37.248-2.624-1.28-6.08-10.56-6.592-13.888-3.584-2.368-7.296-10.176-8.768-14.592a53.248 53.248 0 0 1-13.888-18.24c5.248 0.576 13.12 1.6 13.12-5.12-3.52 0-4.032-4.352-0.64-4.352-1.152-4.48 2.304-7.68 3.072-11.2 0.896-4.224 2.688-10.752 2.688-15.808-5.056 0-6.208 0.832-10.24 2.176 0 2.944-8.896-0.704-10.24-0.704-1.92-3.84-15.68 4.992-19.648-2.944-6.272-5.76-4.608-10.112-6.592-18.176-1.024-4.096-6.592-4.288-9.92-4.992-9.6-1.856-2.688 11.392-3.2 14.4 5.824 0-3.648 7.296-3.648 10.944-9.856-2.112-6.592-13.12-12.416-16-1.664-2.944-0.256-5.12-4.352-5.12 0-3.968 2.112-11.008-2.24-12.416 0-1.92-8.192-2.688-9.472-5.12-5.184 0-17.344-19.84-21.056-13.184-2.368 4.288 1.92 5.376 2.816 8.768 7.552-1.472 6.784 12.544 16.064 10.944 0 1.984 0.256 3.968 0.704 5.888 6.848-1.6 6.08 5.12 9.536 5.12-2.56 3.328-10.432-5.312-8.32 1.92 1.28 4.224 0.64 7.808-4.864 11.904 0-4.48-0.32-16.768-5.12-16.768-3.2-6.464-12.736-4.928-16.768-10.944-3.264 0-4.544-10.24-10.24-10.944-1.024 1.472-4.992 2.88-6.528 2.88-3.072 6.208-20.416 0.64-20.416 1.472-3.84 8.576-7.232 17.344-10.24 26.24-1.088 6.592-6.4 6.72-7.936 12.928-0.768 3.072-19.84 1.6-19.84 3.904-8.128-2.752-15.296-8.512-15.296-17.472-0.64 0 1.536-22.976 2.944-26.304 1.664 0.448 1.984 1.024 2.944 2.88 5.056-1.792 16.768 1.28 16.768-4.352 4.864 0.128 6.4 2.112 4.352 5.824 4.544 0.896 12.416 2.048 12.416-4.352-2.624 0-2.944-0.256-2.944-2.944 8.768-9.088-6.528-17.28-6.528-21.888-3.072-1.024-9.408-7.744-4.928-5.248 3.84 2.112 17.664 6.464 12.16-2.752a1.152 1.152 0 0 0 0.768-0.768c1.536 1.152 8.064 7.872 8.064 1.472 1.792 0 8.704-4.352 2.88-4.352 0.576-3.264 0.448-6.016 0.768-8.064 9.216 4.992 4.032-3.392 8.768-6.528 0 6.016 4.992-2.944 8-2.944 3.584-5.376 11.84-1.216 13.824-7.296-4.48-1.472-3.584-12.672-3.584-16.768 5.312 0.896 11.328-7.296 12.16-1.664 0.32 2.112 0.576 8.128 1.664 8.96 7.936 4.16 5.888-2.432 5.888-6.592-2.688 0-6.208-9.344-6.592-13.888-2.176 0.32-5.76 1.28-6.592 2.944-8 0-13.376-2.944-19.712-2.944-0.448-0.96-8.064-9.536-7.296-9.536-4.416-7.68 4.48-5.376 5.888-5.76 0-7.232 30.08-5.952 31.36-17.536-9.856 0 10.24-16.832 10.24-16.768 6.656-5.76 10.24-10.688 18.56-11.328 3.584-0.256 42.752-11.072 42.752-6.208 3.84 0.128 28.48 0.064 28.48 2.944 3.904 0 12.608 4.352 15.424 2.816 4.8-2.624 24.704 5.76 24.704 12.48-9.344 0-22.208 2.176-34.304 2.176 0 2.752 1.28 0.32 0 2.944 4.16 0 11.648 10.88 10.944 14.592 5.888 0.128 8.32-4.352 12.352-4.352 0 4.992 5.824 5.824 7.296 0-4.48 0-2.24-6.592-1.472-6.592 3.072-5.568 9.6 0.384 12.224-6.848a447.104 447.104 0 0 0-647.872-39.04c0.64 1.536 7.936-3.456 9.216-3.776 0 4.608-1.024 4.864 0.768 10.24 0.832 0 5.12 7.104 5.12 10.24 3.904-0.32 9.6-2.88 10.88 2.176a23.808 23.808 0 0 1-5.76-0.768c1.344 11.328-4.992 4.416-10.24 4.416 0-0.704-16-7.168-9.536 3.648 1.728 0 0.832 2.688 5.632 4.288 5.696 1.92 11.84 3.008 17.728 3.84 4.8 0.832 7.616-0.832 11.712-0.832 0-0.64 9.984-5.12 2.88-5.12 1.024-3.968-0.768-4.992-5.12-5.056 0.384-4.288 10.496-1.472 14.656-1.472 3.136-5.312 0.064-4.736 2.816-9.6 3.392-5.888 7.36-0.768 9.6-6.464 3.2 1.28 6.208 3.072 7.232 7.296 2.624 2.176 16.064 22.08 16.064 8 4.8 1.664 7.232 10.624 7.296 15.36 8.768-1.28 9.536-7.808 9.536-14.592 1.984 0-0.768-3.328-0.768-4.416 3.2-1.216 7.296 3.136 7.296-1.472 1.408 0 1.472 1.408 1.472 2.944 4.544 0.896 7.424-0.512 10.24 0.448 1.92 0.704 0.896 10.624 0 14.144-1.088 4.48-9.536 4.544-9.536 6.592-9.6 7.168 11.328 10.88 14.656 15.36a38.208 38.208 0 0 1-9.536-1.472c-4.736 0-16.192 4.992-20.416 1.408 5.888 0 7.872-7.04 8.768-13.824a10.496 10.496 0 0 0-13.376 6.72c-2.56 8.96-8.448-0.384-11.456 5.696-1.152 0.384-11.648 5.248-11.648 3.648-11.84 1.664-8.768 11.712-8.768 22.592 4.672 2.816 14.272 10.88 13.824 15.36 10.688 1.856 14.528 2.944 24.128 4.352 0.768 1.6 3.904 3.008 5.824 3.648 0 6.272 5.76 5.12 10.944 5.12 0-8 9.28 6.656 10.24 9.472-1.28 0 2.176 8.192 2.88 11.008-1.408-0.576-1.92 0-1.408 1.408 4.608 1.728 11.904 1.28 13.12-3.648-4.48 0-2.944-5.12-2.944-8.064-4.608-3.008-3.84-8.896 0.768-10.176 0 4.16 15.04-2.56 6.528-5.824 2.112-4.672 3.456-11.84 0.128-15.872-2.176-2.56-4.864 0-5.952-3.84 5.76-1.472 1.536-12.416 1.472-17.536 1.792-0.64 6.528 1.216 6.528 0 5.632 0 14.976 7.168 18.24-1.472 9.408 4.288 1.92 8.32 11.712 5.12 0 2.304 11.008 13.184 12.416 13.184 0 0.448-0.256 3.584 2.176 3.584 0 2.368-1.472-1.344-1.472 2.944 1.408 0.128 8.768 1.472 8.768-1.472 4.736 0 8.064-5.76 8.064-10.24 2.944-1.92 8.064 16.064 11.648 16.064 2.56 4.096 10.944 10.048 10.944 13.888 1.792 1.792 3.648 1.28 3.648 6.592 2.24 0 6.592-8.768 6.592-0.704 2.048 0 8.064 4.416 8.768 8-5.248 0-0.256 5.12-2.944 5.12 0 4.992-11.264 1.024-13.824 0.64-3.52 15.744-24.576 4.48-37.312 8.576-6.72 2.112-19.648 16.96-20.416 24.32 8.192 0.128 11.712-7.04 19.008-9.472 5.888 0 7.04-3.648 12.416-5.12 0 1.472 1.472 0.704 1.472 2.176-10.432 0-4.096 6.784-1.088 11.648 2.944 4.736 6.272 6.4 10.56 6.592-1.088 3.328-6.528 0.64-6.528 4.416-1.984 0.64-5.888 2.112-6.656 3.648-11.712 1.28-5.952 0.512-5.12-2.304 0.384 1.024 4.608 0.064 4.48 0.128-0.768-3.52-1.792-3.072-0.768-5.12-6.4 0-9.472 2.944-14.592 2.944-0.896 1.728-5.312 5.76-7.296 5.76-1.472 4.544-4.864 12.8-8.768 15.36 0-1.152-10.432 6.592-9.536 6.592-2.304 3.712-4.8 3.584-5.824 9.472a50.368 50.368 0 0 0-3.648 11.648c-4.48 3.072-6.208 15.36-13.824 15.36-4.736 9.408-13.12 8.128-13.12 20.48 2.816 2.944 3.904 15.808 4.8 19.968 1.088 5.184 2.816 10.496-4.096 10.688-0.448-0.832-5.248-8.064-4.352-8.064a45.888 45.888 0 0 0-5.888-15.68c-2.88-4.032-8.192 0.64-12.416-1.088-1.792-3.584-13.888-4.416-18.24-4.416 0.704 2.688 2.688 3.584 2.944 6.592-3.584 1.472-5.632 3.072-9.344 2.56-6.4-0.896-5.568-5.824-12.544-5.12a21.12 21.12 0 0 0-19.008 21.504c-1.216 0-1.216 21.888 0 21.888 0 6.208 5.12 10.688 5.12 15.36 4.928 0 10.496 10.88 15.36 10.88 0.512 3.904-2.432 4.48 5.76 4.48 0-0.448 4.544-2.88 5.12-5.888-5.696-1.408 0-8.768 3.648-10.24 0 5.248 7.296-1.728 7.296-2.176l8.064-2.88c0-5.888 5.504 0.576 1.472 2.88-3.968 0-3.648 6.592-5.824 6.592-0.96 4.672-2.816 8.768-3.904 13.312-1.408 5.632 3.2 6.208 1.664 11.52 5.824 1.024 11.648 0 17.536 0a5.504 5.504 0 0 0-0.704-2.944c8.448 0 0.704 16 5.76 16 0 6.144 3.008 10.88 3.008 14.72 3.84 2.56 6.272 6.08 5.12 10.88 4.8 0.64 15.296 1.92 15.296-4.352 7.36 0 7.872 5.056 7.296 10.24 14.72 0 5.504-14.656 11.648-14.656 0.64-2.368 1.6-2.816 3.008-1.28 3.008 1.664 5.312-3.008 7.68-4.48a19.904 19.904 0 0 1 3.904-2.048c2.112 1.28 2.24 0.896 3.2 2.304a21.76 21.76 0 0 0 11.456-4.736c5.248 0.704 3.52 11.968 13.376 12.672 3.968 0.32 13.12 1.408 16.512-0.96 0.832-0.576 3.968 1.92 4.352 3.072 3.2 0 2.944 2.88 4.416 2.816 0.32 0.64 0.768 0.832 1.472 0.704 0.384 1.28 3.008 1.6 4.352 5.12 0 3.136 6.592 3.712 6.592 5.76 4.672 2.432-1.6 3.072 5.568 5.248 4.032 1.28 7.68 3.2 11.968 3.52 1.28-5.12 5.76 0.768 8 0.768 1.152 2.368 1.728 0.576 2.88 2.944 6.784 5.632 2.304 3.456 5.12 9.472 3.2 2.112 4.224 9.6 5.12 13.824-2.56 0-0.768 10.048-0.768 10.944-3.136 0 8.064 6.08 8.064-1.408 4.608 0.768 7.68 5.76 10.944 5.76-1.92 4.48 5.12 7.744 5.12 0.832 6.912 0.64 5.12 11.072 4.416 14.592 5.76 0 6.4-4.032 12.288-3.84 3.392 0 6.848 2.56 8.128-1.28 6.4 1.984 12.288 5.568 17.088 10.304 9.408 8.32 10.88 29.824 1.152 37.12 0 1.344-10.624 13.12-10.88 13.12 0 1.472-0.384 16-0.832 16 0 2.944-2.24 19.072-4.352 19.072 0 8.192-5.376 9.728-7.296 17.472-4.416 3.328-16.448 8.768-18.24 12.416-3.456 0-6.016 2.944-9.472 2.944-0.512 1.024-8 8-6.592 8-0.576 5.184 0.384 17.344-2.432 20.8-1.92 2.24-4.544 1.984-3.392 5.504-4.096 0 0.256 2.88-6.208 2.88-4.096 0-11.328 5.888-11.52 10.752-0.32 6.08-1.92 10.432-7.104 14.08 0 2.048-9.472 2.688-9.472 8 0.896 0 0 9.92 0 11.008-2.816-0.128-9.792 2.752-10.944 5.12-9.6 0-8.384 0.896-14.592 5.12 0 1.28-0.896 5.76-2.176 5.76 0 7.424-5.248 0.704-9.536 4.416 1.664 0 3.84 7.296 2.944 7.296 0 6.4-3.968 6.976-8 11.712-1.92 1.28-3.776 6.528-5.12 6.528 0 4.352-2.176 8.32-2.176 12.416 0.896 0 0 1.92 0.64 3.648 2.112-0.64 2.112-2.944 3.008-2.944 0-3.648 5.76 2.176 2.176 2.176-3.072 4.544-6.272 4.672-8.064 11.008-5.184 0-9.984 13.12-5.12 13.12a12.8 12.8 0 0 0 2.496 7.168 447.36 447.36 0 0 1-35.584-11.456c-0.448-12.8-0.192-48.96 4.608-48.96 0-2.24 1.92-11.712 3.648-11.712 0-5.76 0.768-12.8 0-19.712-2.176-4.352 2.88-9.92 4.48-16.768 8.32-4.224 2.368-46.72 8.704-46.72 0-21.248 4.736-33.6 1.408-53.312 1.664 0-9.6-11.904-9.472-11.648-10.688 0-18.24-17.28-18.24-24.768-1.024-3.392-3.648-8.32-3.648-12.48 2.496 0-15.36-26.112-15.36-25.536-9.344-5.184 0.64-12.544 1.536-21.12-8.192-2.752 0.064-24.832 3.648-24.832a6.912 6.912 0 0 1 4.352-5.888c1.856 7.296 10.304-3.584 3.648-3.584 0-4.864-0.512-15.168 0-17.536 0-7.424-6.592-22.016-11.648-6.592-5.504-2.688-19.264-2.24-20.48-10.944 0.896-4.288-7.808-13.056-10.88-14.592 2.816-7.488-14.848-17.536-21.248-17.536 0-1.6-3.328-0.832-4.352-2.88-6.464 0-8-8.768-15.36-8.768-8.448 0-16.96-5.888-24.768-5.888-2.624-5.184-14.72-3.2-17.536-8.704-6.336 0-8.832-12.096-8.96-16.576-0.256-5.376-4.608-24.32-12.16-24.32 0-4.608-10.496-12.416-13.184-12.416 0-0.832-4.224-10.24-5.824-10.24 0-3.136-11.072-17.344-12.864-11.136-1.152 4.032 8.512 9.408 8.512 14.08 1.728 0 9.28 14.336 10.816 16.832 16.384 27.904-12.288 8.832-12.288-2.944-3.712-1.856-9.536-15.872-9.536-19.712a62.08 62.08 0 0 1-8-15.36c0-8.896-4.864-13.12-14.592-13.12a288 288 0 0 0-8.768-12.416c0-3.648-6.592-14.976-10.24-16.768 0-7.552-3.84-16.96-2.112-24.832 0-13.888-0.256-31.232-13.184-41.6l-0.128-0.256A443.84 443.84 0 0 0 64 512c0 247.04 200.96 448 448 448 147.2 0 278.016-71.36 359.744-181.376-19.392 4.224-12.672-46.592-9.728-55.36 2.944 2.176 5.12 6.272 7.296 0-5.248-1.088-3.968-2.88-2.176-7.296 3.52 2.176 13.888 5.76 13.888-2.176-8.448 0 1.408-13.952 1.408-5.12 7.424 0 2.688-9.28 5.824-12.416 0 3.712 1.92 14.528 4.416 15.36 5.76 5.248-4.416 7.04-4.416 10.88-2.56 1.28-2.176 6.528-2.176 8.064h-3.648c-0.384 7.232-3.648 15.296-3.648 21.12-3.52 0-2.176 13.184-2.752 20.928z m-107.904-403.84c3.392 1.28 2.816 2.56 2.112 8.384 4.48 0.384 31.808-2.368 31.808-7.232 0.96 0 5.696 16.64 5.696 2.368 3.84 0 5.76 15.36 14.784 10.88 0 3.136 15.168-10.88 7.04-10.88 0.512-21.76-10.56-18.112-14.08-30.208-3.648 0-4.928-4.8-9.856-4.8-3.2-1.92-5.76-0.64-7.68 3.84-7.488 4.992-2.88-6.336-8.576-6.336 0.192-12.48-2.624-15.872-10.624-14.528-4.672 17.792-11.712 28.48-10.624 48.448v0.064zM574.08 252.352c0 3.52 5.12 3.264-1.664 5.952a46.208 46.208 0 0 1-19.2 3.456c-2.496 0-20.928 2.048-20.928 0.64-6.848 0-12.224-2.112-20.352-2.688 0-1.92 11.52-7.36 1.088-7.36 0 0 12.224-3.392 13.888-3.392 0 1.344-2.368 0.768 1.088 1.344 0.576 1.28-0.192 4.736 0 4.736 0 1.6 16.448-1.92 18.816-2.112 12.928-1.152 16.448-6.528 16.448 2.112 7.168 1.664 5.632-1.152 10.816-2.688z m7.168 31.424c0-7.616-3.392-7.04-5.12-15.36-2.24-12.224 12.544 0.896 17.216-12.48 10.88 0 1.408 6.208-1.024 6.208 1.856 0.576-0.32 5.568-0.32 7.232 9.984-0.128 10.24-4.864 17.408-6.208-1.536 6.912-11.52 8.32-1.728 14.208 5.248 3.2 10.56 6.848 8.448 11.584 12.8 0 14.72 9.472 12.16 20.672 7.04 0 6.656 0.256 6.656-5.184 6.912 1.472 6.4 6.208 0 6.208-6.4 9.664-23.04 9.28-34.88 9.28-0.064-7.552-1.984-8-10.944-5.888-12.288 2.88-2.752-7.488-2.56-12.672 1.408 0 27.904 0.896 12.16-3.136-0.832-11.072-4.096-14.464-17.472-14.464z m51.392 46.016c-3.584-3.648-0.128-5.568 0.704-9.408-6.656-1.728 6.784-3.712 7.36-5.376-2.176 0-3.776-2.304-2.88-4.288 0.96-2.304 2.624 2.752 4.928 1.6 2.688-0.32 8.064-4.352 5.312 3.52-2.752 7.936-5.376 13.76-15.36 13.952h-0.064z m3.648-10.944c1.216 0.832 1.664 0 1.152-2.56h6.144c0 6.4-6.144 11.392-7.296 2.56z m-192 68.736c5.056-0.384 7.296-1.856 7.296-7.296-4.672 3.072-6.208 2.176-7.296 7.296z m261.12-7.36c5.312 1.344-0.64 4.288-1.728 7.424-2.56-2.112-1.792-2.816-3.392-6.08 4.032 1.344 5.76 0.896 5.12-1.28v-0.064z m0-1.472c3.072 0 3.968 12.352-4.544 10.048 0-3.008-2.304-8.704 2.304-8.704 1.28 4.8 2.24 2.816 2.24-1.28v-0.064z m4.928 1.536c-3.84 2.24-2.048 4.544-7.168 2.368-2.24-0.896-4.608-4.992-5.632 0.256 6.528 0.832 12.8 11.648 12.8-2.624z m156.544 210.368c1.088 0.064 8-0.064 8-1.216 6.336 0 14.848-0.768 21.056-2.56 0 8.32-7.872 13.056-6.528 21.44-5.248 0-2.944 4.8-2.944 6.464-3.392 1.92-3.84 5.312-7.936 7.168 0 3.776-9.408 9.984-12.16 13.248-3.2 3.584-12.608 9.856-13.888 14.464 0.384-1.088-17.28 16.512-13.12 16.512 0 3.264-4.928 29.248 1.472 29.248 0 2.304 5.44 24.064 2.112 24.064 0 7.04-4.992 11.264-4.992 16.832-2.496 1.536-6.08 2.368-7.296 4.608-4.48 0-6.592 8.448-8.704 8.448 0 9.024-2.88 15.744-2.88 25.984 0.768 0-5.824 14.656-5.824 15.616-5.312 3.2-18.816 14.784-18.816 20.8l-10.88 13.632c-2.816 0-24.704 3.712-24.704 5.248-4.672 0-16.64 3.328-19.584-0.64 0-4.16-2.56-9.344-2.88-14.976-2.24 0-2.56-8.448-5.12-8.448 0-1.792-13.76-26.688-11.52-26.688a39.232 39.232 0 0 0-2.944-11.008c0-8.96-7.232-16.448-7.232-24.704-2.176 0-6.528-18.24-4.352-18.24 0-9.536 3.712-15.808 5.248-26.368 1.728-11.648-0.832-18.752-3.072-26.944-1.28 0-5.376-6.208-5.76-7.808-5.888-3.456-8-10.368-8-16.896 3.84-3.84 5.312-18.56 4.352-23.424-7.296-3.136-10.24-1.92-18.112-1.92-4.736-8.448-36.096-3.2-45.056-3.2 0 4.544-21.824-0.96-23.872-4.608-5.376 0-16-10.24-16-14.976-5.76-3.456-15.168-20.864-15.168-26.624-5.056-2.304-3.52-11.072-0.768-11.072 0.704-2.432-1.728-10.112-2.944-13.76-0.832-2.752 2.944-5.76 2.944-8.96 0-9.088 0.256-13.248 5.888-22.912 1.792-3.072 4.032-5.888 5.76-9.728 3.008-6.784 3.84-0.32 7.936-6.4 3.904-1.728 6.208-7.552 10.24-10.368 1.664-2.112 1.728-3.008 0-4.608a36.48 36.48 0 0 0 4.992-12.288c5.632-7.04 1.664-3.84 7.296-3.264 2.048-2.048 5.376-7.168 8.64-7.168 1.408-2.56 4.992-3.904 8-3.904 0 3.84 11.84-1.28 13.056-1.28 2.048-3.648 15.04-7.808 18.112-7.808 0-4.48 25.664 1.28 29.76 0.64v-1.92c5.44 1.152 15.488 20.928 14.528 25.344 4.16 0 8.064-0.64 10.88 0 0 4.224 8.768 5.248 12.8 5.376 5.568 0.256 21.952-0.448 21.952-7.36 4.288 0 8.128 2.688 7.296 7.168 4.864 0.448 33.92 0.96 31.872 6.464 4.224 0 5.312 6.528 9.408 6.528-0.832 4.48 5.12 16.256 9.472 16.256 0 3.904 2.688 11.136 6.528 13.632 2.048 5.568 8.832 17.408 15.232 20.8-2.752 4.608 4.096 8.448 5.76 13.056-0.384 0 1.472 6.784 3.648 7.744 0 4.672 10.816 23.424 16.64 23.424 0.448 2.304-5.504 3.392 2.176 3.84zM318.784 509.44l-2.048-1.088c-2.368 10.304 6.912 8.448 6.912 2.176-2.048 1.6-3.904 4.288-4.864-1.088z m59.264-4.928c8.448 0.896 9.216 6.784 16.128 6.784 1.28 2.24 8.576 7.424 1.536 8.128-5.376 0.512-12.16-2.368-14.336-6.848-3.392 0-10.048-2.944-12.096-6.08 3.328 0.192 6.656 1.536 8.768-1.984z m11.968 3.392c2.176 0.576 7.168 5.376 7.424 7.424-7.36-0.832-7.68-0.64-15.488-0.64-1.088 2.112-10.176 1.728-11.392-0.704 3.328 0 5.952 1.344 9.408 0 0-1.856-1.536-3.328-2.688-5.376 3.648 0 7.808 2.816 12.8 2.688 0-3.136-1.408 0.64 0-3.392h-0.064z m-8.96 0.448c-2.688 9.088 3.072 7.168 6.592 7.168 0.256-3.968-1.92-6.4-6.592-7.168z m-0.704 7.296c0.64-5.824 6.016-12.416 7.296-1.28-2.368 0.512-4.928 0.896-7.296 1.28z m0.64-7.296c-2.56 11.584 2.688 5.952 6.656 5.952 0-4.16-3.584-5.952-6.656-5.952z m-0.64 0c3.072 0 7.296 1.728 7.296 4.864-3.008 0-4.288 1.536-7.296 2.432v-7.296z m0 71.296c6.08 0 5.888-0.32 7.296-5.44a112.384 112.384 0 0 0-5.504-1.92l-1.792 7.36z m448 127.168c9.6 2.112 7.68 0.256 5.76-6.464-4.48 2.368-5.76 1.792-5.76 6.464z"
  426. p-id="6661"
  427. />
  428. </svg>
  429. </vl-tool-bar-item>
  430. <vl-tool-bar-item
  431. no-padding
  432. style="width: 32px"
  433. @click="sqFeatrue"
  434. title="属性识别"
  435. >
  436. <i class="iconfont yh-sxsb" style="font-size: 26px" />
  437. </vl-tool-bar-item>
  438. <vl-tool-bar-item
  439. no-padding
  440. style="width: 26px"
  441. @click="openCoordinate"
  442. title="坐标导入"
  443. >
  444. <i class="iconfont yh-daoru" style="font-size: 22px" />
  445. </vl-tool-bar-item>
  446. <vl-tool-bar-item
  447. no-padding
  448. style="width: 32px"
  449. @click="cleanLayer"
  450. title="清除"
  451. >
  452. <i class="iconfont yh-qingchu" style="font-size: 26px" />
  453. </vl-tool-bar-item>
  454. <vl-tool-bar-item
  455. no-padding
  456. style="width: 26px"
  457. @click="cleanLayer"
  458. title="地图量算"
  459. >
  460. <vl-tool-box :height="26" />
  461. </vl-tool-bar-item>
  462. </vl-tool-bar>
  463. <!-- 图例 -->
  464. <vl-legend
  465. v-show="legendShow"
  466. :size="40"
  467. :legend-fill="0.4"
  468. :enabled-layers="enabledLayersConfig"
  469. :default-expand="true"
  470. @closeLayer="closeLayer"
  471. />
  472. <!-- 闪烁 -->
  473. <vl-feature-flicker
  474. :feature="feature"
  475. new-layer
  476. :duration="2400"
  477. :interval="100"
  478. :padding-bottom="paddingBottom"
  479. />
  480. <!-- 详情 -->
  481. <vl-feature-overlay
  482. v-show="overlayShow"
  483. :feature="feature"
  484. :use-centroid="false"
  485. no-styled
  486. >
  487. <template slot-scope="{ props }">
  488. <div class="feature-overlay">
  489. <p
  490. class="title text-ellipsis title-opt"
  491. title="featureOverlayData.layerName"
  492. >
  493. 123
  494. </p>
  495. <div class="section5 section5-opt" style="padding: 0 4px">
  496. <table>
  497. <tr>
  498. <th>123</th>
  499. <td>123</td>
  500. </tr>
  501. </table>
  502. </div>
  503. </div>
  504. </template>
  505. </vl-feature-overlay>
  506. </vl-map>
  507. <!-- <div id="description" class="description" ref="description">这里是描述文字</div>-->
  508. <div v-show="sxsbData.show" class="oepnLayerFeature">
  509. <div class="contents">
  510. <div class="select_box">
  511. <Select
  512. v-model="layIndex"
  513. style="width: 200px"
  514. @on-change="selectChange"
  515. >
  516. <Option
  517. v-for="(item, index) in sxsbData.layerData"
  518. :value="index"
  519. :key="index"
  520. >{{ item.layerName }}</Option
  521. >
  522. </Select>
  523. <p class="desc">
  524. 已识别<span>{{ sxsbData.layerData.length }}</span
  525. >个图层
  526. </p>
  527. </div>
  528. <table v-if="sxsbData.layerData.length > 0 && layIndex >= 0">
  529. <tr
  530. v-for="(item, index) in sxsbData.layerData[layIndex]
  531. .featureOverlayTable"
  532. :key="index"
  533. >
  534. <th>{{ item.name }}</th>
  535. <td>{{ item.value }}</td>
  536. </tr>
  537. </table>
  538. </div>
  539. </div>
  540. <el-dialog
  541. title="导入坐标文件"
  542. :visible.sync="coordinateDialogShow"
  543. custom-class="dialogClass"
  544. width="30%"
  545. >
  546. <read-coordinates />
  547. <span slot="footer" class="dialog-footer"> </span>
  548. </el-dialog>
  549. <read-coordinates ref="read-coordinates" style="display: none" />
  550. <!-- <Spin fix v-show="spin" :show="spinShow">分析中...</Spin>-->
  551. <Spin fix v-show="spin">
  552. <Icon type="ios-loading" size="18" class="demo-spin-icon-load"></Icon>
  553. <div>分析中</div>
  554. </Spin>
  555. </div>
  556. </template>
  557. <script>
  558. import "ol/ol.css";
  559. import VlMap from "@/components/ol/VlMap";
  560. import { getMapLayerConfig } from "@/components/ol/_utils/map-layer-utils";
  561. import { VlConfigLayers, VlLayerTree } from "@/components/ol/VlConfigLayers";
  562. import { VlToolBar, VlToolBarItem } from "@/components/ol/VlToolBar";
  563. import {
  564. VlFeatureFlicker,
  565. VlFeatureOverlay,
  566. } from "@/components/ol/VlFeatureTool";
  567. import VlLegend from "@/components/ol/VlLegend";
  568. import { arcgisQuery } from "@/utils/arcgis-map-server-query";
  569. import VlToolBox from "@/components/ol/VlToolBox";
  570. import { getSrid } from "@/utils/arcgis-utils";
  571. import TABLE_COMP_MAPPING from "@/components/common/mapping";
  572. import { GeoJSON } from "ol/format";
  573. import { Vector as VectorSource } from "ol/source";
  574. import { Vector as VectorLayer } from "ol/layer";
  575. import { Fill, Stroke, Style, Icon, Text } from "ol/style";
  576. import { convertRingsToGeoJSON } from "@/utils/ArcGISGeoJSONConvertTool.js";
  577. import MapUtils from "@/utils/MapUtils";
  578. import Draw from "ol/interaction/Draw";
  579. import { Overlay } from "ol";
  580. import { fromLonLat } from "ol/proj";
  581. import readCoordinates from "./DataCenter/ReadCoordinates";
  582. import GhAXzAnalysis from "./DataCenter/GhAXzAnalysis";
  583. import YfkAnalysis from "./DataCenter/YfkAnalysis";
  584. import dzAnalysis from "./DataCenter/dzAnalysis";
  585. // import fields from '@/assets/json/fields.json'
  586. import ZoomSlider from "ol/control/ZoomSlider";
  587. import FullScreen from "ol/control/FullScreen";
  588. import { Polygon, Point, LineString } from "ol/geom";
  589. import { saveAs } from "file-saver";
  590. import { jsPDF } from "jspdf";
  591. import OlExtPrintDialog from "ol-ext/control/PrintDialog";
  592. import CanvasTitle from "ol-ext/control/CanvasTitle";
  593. import Legend from "ol-ext/legend/Legend";
  594. import LegendCtrl from "ol-ext/control/Legend";
  595. import CanvasAttribution from "ol-ext/control/CanvasAttribution";
  596. import control from "ol/control";
  597. import CanvasScaleLine from "ol-ext/control/CanvasScaleLine";
  598. export default {
  599. name: "DataCenter",
  600. data() {
  601. return {
  602. regionCode: JSON.parse(window.sessionStorage.getItem("yzt-user"))
  603. .userInfo,
  604. fields: window.ApplicationConfig.mapFieldConfig,
  605. spin: false,
  606. view: {
  607. viewWidth: 0,
  608. viewHeight: 0,
  609. },
  610. isComponent: "zyml",
  611. nameComp: "资源目录",
  612. leftBoxClose: true,
  613. menusData: [
  614. { name: "资源目录", bagC: "zyml", icon: "yh-ziyuanmulu" },
  615. { name: "资源查询", bagC: "sxsb", icon: "yh-xinxichaxun" },
  616. { name: "空间分析", bagC: "kjfx", icon: "yh-kongjianfenxi" },
  617. ],
  618. query: {
  619. xzqdm: [],
  620. },
  621. xzqOptions: [],
  622. titleBtns: [
  623. { name: "基础分类", value: "jc", className: "jc_b" },
  624. { name: "专题分类", value: "zt", className: "zt_b" },
  625. ],
  626. tcName: "jc",
  627. map: undefined,
  628. layerFeatureKey: undefined,
  629. viewInfo: {
  630. x: 120,
  631. y: 30,
  632. center: [0, 0],
  633. zoom: 0,
  634. extent: [0, 0, 0, 0],
  635. scale: 1,
  636. },
  637. fullScreen: false,
  638. layersConfig: getMapLayerConfig(), // getMapLayerConfig 获取的是 config.js 配置的克隆
  639. enabledLayersConfig: [], // 启用的图层配置,来源于 vl-config-layers 的loaded事件回调
  640. feature: undefined, // 闪烁和气泡的 特征
  641. visibleLayerId: "",
  642. drawShapeJson: null,
  643. draw: null,
  644. polygonLayer: null,
  645. mapEvent: {
  646. singleclick: null,
  647. moveend: null,
  648. },
  649. kjfxData: {
  650. analysisType: "报省",
  651. data: [
  652. // { name: "土地利用规划", value: "gh" },
  653. // { name: "土地利用现状", value: "xz" },
  654. // { name: "区域一键", value: "yj" },
  655. { name: "压覆矿", value: "yf" },
  656. { name: "地灾", value: "dz" },
  657. ],
  658. fxType: -1,
  659. },
  660. zycxBtnData: [
  661. { name: "属性查询", value: "sx" },
  662. { name: "空间查询", value: "kj" },
  663. ],
  664. zycx: "sx",
  665. featureOverlayData: {
  666. show: false,
  667. layerName: "",
  668. featureOverlayTable: [
  669. { name: "地块名称", value: "名称1" },
  670. { name: "地块名称", value: "名称1" },
  671. ],
  672. },
  673. layIndex: 0,
  674. sxsbData: {
  675. show: false,
  676. layerData: [],
  677. },
  678. layerGeometryMap: {},
  679. zycxData: {
  680. show: false,
  681. tableId: 0,
  682. total: 0,
  683. page: 1,
  684. table: [],
  685. tables: [],
  686. query: {
  687. distance: 0,
  688. layerName: "",
  689. layersName: [],
  690. currLayerConfig: {},
  691. layersData: [
  692. { name: "供地地块", value: "st_gddk" },
  693. { name: "农转用地块", value: "st_nzydk" },
  694. { name: "批而未供", value: "pewg" },
  695. ],
  696. layerFieldName: "",
  697. layerFieldData: {
  698. st_gddk: [
  699. { field: "地块名称", value: "dk_mc" },
  700. { field: "地块编号", value: "dk_bh" },
  701. ],
  702. nzydk: [
  703. { field: "项目名称", value: "xmmc" },
  704. { field: "批准文号", value: "pzwh" },
  705. ],
  706. pewg: [
  707. { field: "项目名称", value: "xmmc" },
  708. { field: "批准文号", value: "pzwh" },
  709. ],
  710. },
  711. fieldValue: "",
  712. },
  713. },
  714. coordinateDialogShow: false,
  715. sketch: undefined,
  716. helpTooltip: undefined,
  717. measureTooltip: undefined,
  718. continuePolygonMsg: "单击以继续绘制多边形",
  719. continueLineMsg: "单击以继续绘制线条",
  720. printInfo: {
  721. exportMapTitle: "专题图",
  722. },
  723. selectValue: null,
  724. };
  725. },
  726. mounted() {
  727. this.initStaticData();
  728. this.initQuery();
  729. this.getMapSources();
  730. },
  731. components: {
  732. VlFeatureOverlay,
  733. VlToolBox,
  734. VlLegend,
  735. VlLayerTree,
  736. VlFeatureFlicker,
  737. VlToolBarItem,
  738. VlToolBar,
  739. VlConfigLayers,
  740. VlMap,
  741. readCoordinates,
  742. GhAXzAnalysis,
  743. YfkAnalysis,
  744. dzAnalysis,
  745. },
  746. props: {
  747. visibleLayerIds: {
  748. type: Array,
  749. default: () => [""],
  750. },
  751. fixed: {
  752. type: Number,
  753. default: -1,
  754. },
  755. legendShow: {
  756. type: Boolean,
  757. default: true,
  758. },
  759. overlayShow: {
  760. type: Boolean,
  761. default: false,
  762. },
  763. paddingBottom: {
  764. type: Number,
  765. default: 0,
  766. },
  767. },
  768. watch: {
  769. visibleLayerIds: {
  770. deep: true,
  771. immediate: true,
  772. handler: function () {
  773. this.feature = undefined;
  774. this.visibleLayerId =
  775. this.visibleLayerIds[this.visibleLayerIds.length - 1];
  776. },
  777. },
  778. query: {
  779. deep: true,
  780. immediate: true,
  781. handler: function () {},
  782. },
  783. },
  784. methods: {
  785. openDzAnalyies() {
  786. let printBtn = document.querySelector(".ol-print button");
  787. printBtn.click();
  788. },
  789. //地图打印(报告分析)
  790. printMap() {
  791. const printControl = new OlExtPrintDialog({
  792. lang: "zh",
  793. pdf: true,
  794. openWindow: false,
  795. quality: 1,
  796. title: "打印地图",
  797. });
  798. printControl.setSize("A4");
  799. this.map.addControl(printControl);
  800. this.map.addControl(new CanvasAttribution({ canvas: true }));
  801. this.map.addControl(
  802. new CanvasTitle({
  803. title: this.printInfo.exportMapTitle,
  804. visible: false,
  805. style: new Style({
  806. text: new Text({
  807. font: '50px"Lucida Grande",Verdana,Geneva,Lucida,Arial,Helvetica,sans-serif',
  808. fill: new Fill({
  809. color: `#333`,
  810. crossOrigin: "anonymous", // Enable print
  811. }),
  812. }),
  813. }),
  814. })
  815. );
  816. //this.createDesc();
  817. // Add a legend to the print
  818. var legend = new Legend({
  819. title: "可利用资源",
  820. margin: 5,
  821. items: [
  822. {
  823. title: "产业用地",
  824. typeGeom: "Polygon",
  825. style: new Style({
  826. stroke: new Stroke({
  827. width: 2,
  828. color: "red",
  829. crossOrigin: "anonymous", // Enable print
  830. }),
  831. fill: new Fill({
  832. color: `#FECC68`,
  833. crossOrigin: "anonymous", // Enable print
  834. }),
  835. }),
  836. },
  837. {
  838. title: "商业用地",
  839. typeGeom: "Polygon",
  840. style: new Style({
  841. stroke: new Stroke({
  842. width: 2,
  843. color: "red",
  844. crossOrigin: "anonymous", // Enable print
  845. }),
  846. fill: new Fill({
  847. color: `#00B5FA`,
  848. crossOrigin: "anonymous", // Enable print
  849. }),
  850. }),
  851. },
  852. {
  853. title: "居住用地",
  854. typeGeom: "Polygon",
  855. style: new Style({
  856. stroke: new Stroke({
  857. width: 2,
  858. color: "red",
  859. crossOrigin: "anonymous", // Enable print
  860. }),
  861. fill: new Fill({
  862. color: `#1EB289`,
  863. crossOrigin: "anonymous", // Enable print
  864. }),
  865. }),
  866. },
  867. ],
  868. });
  869. var legendCtrl = new LegendCtrl({ legend: legend });
  870. printControl.on(["print", "error"], function (e) {
  871. document
  872. .querySelector(".ol-control-title")
  873. .setAttribute("display", "none");
  874. document.querySelector(".description").setAttribute("display", "none");
  875. document.querySelector(".zbz").setAttribute("display", "none");
  876. if (e.image) {
  877. if (e.pdf) {
  878. // 导出PDF
  879. const pdf = new jsPDF({
  880. orientation: e.print.orientation,
  881. unit: e.print.unit,
  882. format: e.print.size,
  883. });
  884. pdf.addImage(
  885. e.image,
  886. "JPEG",
  887. e.print.position[0],
  888. e.print.position[0],
  889. e.print.imageWidth,
  890. e.print.imageHeight
  891. );
  892. pdf.save(e.print.legend ? "legend.pdf" : "map.pdf");
  893. } else {
  894. // 导出图片
  895. e.canvas.toBlob(
  896. function (blob) {
  897. const name =
  898. (e.print.legend ? "legend." : "map.") +
  899. e.imageType.replace("image/", "");
  900. saveAs(blob, name);
  901. },
  902. e.imageType,
  903. e.quality
  904. );
  905. }
  906. } else {
  907. console.warn("No canvas to export");
  908. }
  909. });
  910. printControl.on(["show"], function (e) {
  911. //打开小标题
  912. var element = document.querySelector(".ol-control-title");
  913. element.setAttribute(
  914. "style",
  915. "visibility:none;background-color:#fff;height:46px;line-height: 46px;font-size:28px;font-weight:bold;color:#333;text-align:center"
  916. );
  917. //隐藏大标题
  918. var overlayTitle = document.querySelector(".ol-fixedoverlay");
  919. overlayTitle.setAttribute("style", "display:none");
  920. //在大标题下添加同级元素description
  921. var newDiv = document.createElement("div");
  922. newDiv.setAttribute("class", "description");
  923. element.parentElement.appendChild(newDiv);
  924. //添加指北针
  925. var newDiv = document.createElement("img");
  926. newDiv.setAttribute("class", "zbz");
  927. newDiv.setAttribute("src", require("@/assets/images/zbz.png"));
  928. newDiv.setAttribute(
  929. "style",
  930. "width: 48px;position: absolute;right: 0;top: 60px;right:50px"
  931. );
  932. element.parentElement.appendChild(newDiv);
  933. });
  934. //隐藏地图打印按钮(绑定到地灾分析按钮上)
  935. document.querySelector(".ol-print").setAttribute("style", "display:none");
  936. //绑定关闭弹框事件
  937. var closeIcon = document.querySelector(".ol-closebox");
  938. closeIcon.addEventListener("click", function (e) {
  939. document
  940. .querySelector(".ol-control-title")
  941. .setAttribute("style", "display:none");
  942. document
  943. .querySelector(".description")
  944. .setAttribute("style", "display:none");
  945. document.querySelector(".zbz").setAttribute("style", "display:none");
  946. });
  947. },
  948. //加载静态资源
  949. initStaticData() {
  950. if (this.fields != null) {
  951. this.zycxData.query.layersData = this.fields.layersData.filter(
  952. (item) => {
  953. return item.isAnal;
  954. }
  955. );
  956. this.zycxData.query.layerFieldData = this.fields.layerFieldData;
  957. this.zycxData.query.currLayerConfig = this.fields.layersData.filter(
  958. (item) => {
  959. return item.isAnal;
  960. }
  961. )[0];
  962. }
  963. },
  964. //打开导入坐标文件弹框
  965. openCoordinate() {
  966. this.coordinateDialogShow = true;
  967. },
  968. selectChange(index) {
  969. const layer = this.sxsbData.layerData[index];
  970. console.log("layer");
  971. console.log(layer);
  972. console.log(this.layerGeometryMap);
  973. if (!layer || !layer.layerName || !this.layerGeometryMap) {
  974. return;
  975. }
  976. console.log("layername:" + layer.layerName);
  977. this.feature = this.layerGeometryMap[layer.layerName];
  978. },
  979. //数据详情加定位查询(详情数据绑定)
  980. sxsbTableSerach(index, item) {
  981. this.zycxData.tableId = index;
  982. let currLayerConfig = this.zycxData.query.layersData.filter((i) => {
  983. return i.serverId == item.layerId;
  984. })[0]; //获取图层配置
  985. let fieldConfig =
  986. this.zycxData.query.layerFieldData[currLayerConfig.value]; //获取当前图层的属性配置
  987. this.featureOverlayData.layerName = currLayerConfig.name;
  988. this.featureOverlayData.show = true;
  989. //判断图层是否开启
  990. let layerConfing = this.getLayerConfigById(currLayerConfig.serverId);
  991. if (!layerConfing.visible) {
  992. this.openLayer(currLayerConfig.serverId);
  993. }
  994. this.locationGlobal(layerConfing.id, "objectid =" + item.objectid);
  995. let layerField = fieldConfig; //读取需要展示的属性字段
  996. this.featureOverlayData.featureOverlayTable = [];
  997. layerField.map((i) => {
  998. this.featureOverlayData.featureOverlayTable.push({
  999. name: i.aliasname,
  1000. value: item[i.name],
  1001. });
  1002. });
  1003. },
  1004. //属性和空间查询
  1005. sxsbSearch() {
  1006. if (this.zycx == "sx") {
  1007. this.closeAllLayersExceptBaseLayers(this.zycxData.query.layerName);
  1008. let params = new FormData();
  1009. if (this.validateField_sxquery()) return;
  1010. params.append("tableName", this.zycxData.query.layerName);
  1011. params.append("fieldName", this.zycxData.query.layerFieldName);
  1012. params.append("fieldValue", this.zycxData.query.fieldValue);
  1013. params.append("type", "sx");
  1014. params.append("page", this.zycxData.page);
  1015. params.append("size", 10);
  1016. //加载等待
  1017. let loading = this.$loading({
  1018. lock: true,
  1019. text: "",
  1020. spinner: "el-icon-loading",
  1021. background: "rgba(0, 0, 0, 0.7)",
  1022. });
  1023. let _this = this;
  1024. this.$ajax
  1025. .post("/api/data/center/getFiledList", params, this, true)
  1026. .then((res) => {
  1027. loading.close();
  1028. _this.zycxData.table = [];
  1029. _this.zycxData.total = 0;
  1030. const { success, data } = res;
  1031. if (success && data.total > 0) {
  1032. let row = data.rows;
  1033. let layername = "",
  1034. name = "";
  1035. _this.zycxData.query.layersData.map((item) => {
  1036. if (this.zycxData.query.layerName === item.value) {
  1037. name = item.serverId;
  1038. layername = item.name;
  1039. }
  1040. });
  1041. //_this.zycxData.table = data.rows;
  1042. row = row.filter((i) => {
  1043. i.layerId = name;
  1044. return i;
  1045. });
  1046. _this.zycxData.table = row;
  1047. _this.zycxData.total = data.total;
  1048. _this.zycxData.show = true;
  1049. } else {
  1050. this.$message.warning("暂无结果");
  1051. }
  1052. });
  1053. } else {
  1054. this.closeAllLayersExceptBaseLayers(this.zycxData.query.layersName);
  1055. let params = new FormData();
  1056. if (this.validataField_kj_sx_sxquery()) return;
  1057. params.append("tableName", this.zycxData.query.layersName.join(","));
  1058. params.append("shapes", JSON.stringify(this.drawShapeJson));
  1059. params.append("type", "kj");
  1060. params.append("page", this.zycxData.page);
  1061. params.append("size", 100);
  1062. let _this = this;
  1063. this.$ajax
  1064. .post("/api/data/center/getFiledList", params, this, true)
  1065. .then((res) => {
  1066. // loading.close();
  1067. const { success, data } = res;
  1068. if (success) {
  1069. _this.zycxData.tables = [];
  1070. Object.keys(data).forEach(function (key) {
  1071. if (data[key].total < 1) return;
  1072. let row = data[key].rows;
  1073. let name = "";
  1074. let layername = "";
  1075. _this.zycxData.query.layersData.map((item) => {
  1076. if (key === item.value) {
  1077. name = item.serverId;
  1078. layername = item.name;
  1079. }
  1080. });
  1081. row = row.filter((i) => {
  1082. i.layerId = name;
  1083. //i.layName = layername;
  1084. return i;
  1085. });
  1086. _this.zycxData.tables.push({
  1087. name: layername,
  1088. data: row,
  1089. });
  1090. });
  1091. if (_this.zycxData.tables.length > 0) {
  1092. _this.zycxData.show = true;
  1093. } else {
  1094. this.$message.warning("暂无结果");
  1095. }
  1096. }
  1097. });
  1098. }
  1099. },
  1100. //查询字段非空校验
  1101. validateField_sxquery() {
  1102. if (
  1103. this.zycxData.query.layerName == "" ||
  1104. this.zycxData.query.layerName == undefined
  1105. ) {
  1106. this.$message.warning("请选择业务图层");
  1107. return true;
  1108. }
  1109. if (
  1110. this.zycxData.query.layerFieldName == "" ||
  1111. this.zycxData.query.layerFieldName == undefined
  1112. ) {
  1113. this.$message.warning("请选择查询字段");
  1114. return true;
  1115. }
  1116. if (
  1117. this.zycxData.query.fieldValue == "" ||
  1118. this.zycxData.query.fieldValue == undefined
  1119. ) {
  1120. this.$message.warning("请输入属性值");
  1121. return true;
  1122. }
  1123. },
  1124. validataField_kj_sx_sxquery() {
  1125. if (this.zycxData.query.layersName.length == 0) {
  1126. this.$message.warning("请至少选择一个业务图层");
  1127. return true;
  1128. } else if (
  1129. this.drawShapeJson == "" ||
  1130. this.drawShapeJson == null ||
  1131. this.drawShapeJson == undefined
  1132. ) {
  1133. this.$message.warning("请绘制分析范围");
  1134. return true;
  1135. }
  1136. },
  1137. //二级菜单切换事件
  1138. ComponentChange(item) {
  1139. this.isComponent = item.bagC;
  1140. this.nameComp = item.name;
  1141. this.view.viewWidth = 570;
  1142. this.leftBoxClose = true;
  1143. if (this.draw != null) {
  1144. this.map.removeInteraction(this.draw);
  1145. this.draw = null;
  1146. }
  1147. },
  1148. mapLoaded(map) {
  1149. let _this = this;
  1150. if (map) {
  1151. this.map = map;
  1152. window.map = map;
  1153. } else {
  1154. map = this.map;
  1155. }
  1156. // 图斑拾取黑名单
  1157. this.mapEvent.singleclick = function (e) {
  1158. _this.feature = undefined;
  1159. _this.visibleLayerIds = [];
  1160. _this.visibleLayerId = "";
  1161. _this.readVisibleLayer();
  1162. _this.pickServerFeature(e);
  1163. };
  1164. this.printMap();
  1165. //图形拖动事件
  1166. this.mapEvent.moveend = function (e) {
  1167. const view = map.getView(); // 获取当前地图的缩放级别
  1168. console.log(
  1169. `范围:${view.calculateExtent()}`,
  1170. `缩放级别:${view.getZoom()}`,
  1171. `中心点:${view.getCenter()}`
  1172. );
  1173. };
  1174. // 创建缩放控件
  1175. var zoomControl = new ZoomSlider();
  1176. var fullScreen = new FullScreen();
  1177. // 将控件添加到地图中
  1178. //map.addControl(zoomControl);
  1179. //map.addControl(fullScreen);
  1180. map.on("moveend", this.mapEvent.moveend);
  1181. //this.createDesc();
  1182. // 根据用户定位行政区
  1183. let code = null;
  1184. let id = "yhzq2024";
  1185. let layers = 0;
  1186. if (this.query.xzqdm.length > 0) {
  1187. code = this.query.xzqdm[this.query.xzqdm.length - 1];
  1188. } else {
  1189. code = this.regionCode["regionCode"];
  1190. }
  1191. if (code.length === 6) {
  1192. layers = 0;
  1193. } else if (code.length === 9) {
  1194. layers = 1;
  1195. } else {
  1196. layers = 2;
  1197. }
  1198. let where = "1=1 and XZQDM ='" + code + "'";
  1199. this.locationMaskFeatureWhere(id, where, layers);
  1200. //this.printMap();
  1201. },
  1202. handleSxChange(v) {
  1203. this.zycxData.query.layersData.filter((item) => {
  1204. if (v === item.value) {
  1205. this.zycxData.query.currLayerConfig = item;
  1206. }
  1207. });
  1208. this.zycxData.query.layerFieldName = "";
  1209. },
  1210. mapReLoaded() {
  1211. let map = null;
  1212. if (map) {
  1213. this.map = map;
  1214. window.map = map;
  1215. } else {
  1216. map = this.map;
  1217. }
  1218. // 根据用户定位行政区
  1219. let code = null;
  1220. let id = "yhzq2024";
  1221. let layers = 0;
  1222. if (this.query.xzqdm.length > 0) {
  1223. code = this.query.xzqdm[this.query.xzqdm.length - 1];
  1224. } else {
  1225. code = this.regionCode["regionCode"];
  1226. }
  1227. if (code.length === 6) {
  1228. layers = 0;
  1229. } else if (code.length === 9) {
  1230. layers = 1;
  1231. } else {
  1232. layers = 2;
  1233. }
  1234. let where = "1=1 and XZQDM ='" + code + "'";
  1235. this.locationMaskFeatureWhere(id, where, layers);
  1236. },
  1237. resetMapView() {
  1238. this.query.xzqdm = [this.regionCode["regionCode"]];
  1239. this.mapReLoaded();
  1240. },
  1241. configLayerLoaded(enabledLayersConfig) {
  1242. this.enabledLayersConfig = enabledLayersConfig;
  1243. },
  1244. //开启属性识别功能
  1245. sqFeatrue() {
  1246. this.CursorPointer();
  1247. this.map.on("singleclick", this.mapEvent.singleclick);
  1248. },
  1249. /**
  1250. * 拾取点击图层属性
  1251. * @param e
  1252. * @returns {Promise<void>}
  1253. */
  1254. async pickServerFeature(e, layerId) {
  1255. this.layerGeometryMap = {};
  1256. // 带上图层显示参数,只拾取显示的图斑
  1257. let where = "1=1";
  1258. const [x, y] = e.coordinate;
  1259. const param = {
  1260. where,
  1261. f: "json",
  1262. inSR: getSrid(this.map),
  1263. outFields: "*",
  1264. returnGeometry: "true",
  1265. geometry: JSON.stringify({ x, y }),
  1266. geometryType: "esriGeometryPoint",
  1267. };
  1268. console.log("this.visibleLayerIds:");
  1269. console.log(this.visibleLayerIds);
  1270. this.sxsbData.layerData = [];
  1271. this.sxsbData.show = false;
  1272. for (const item of this.visibleLayerIds) {
  1273. let feature = null;
  1274. if (item == "") return;
  1275. const layerConfig = this.$refs.configLayer.getLayerConfigById(item);
  1276. if (layerConfig.serverType == "dynamic") {
  1277. feature = await arcgisQuery(
  1278. `${layerConfig.url}/0/query`,
  1279. param,
  1280. true
  1281. ).then(({ features }) => {
  1282. return features[0];
  1283. });
  1284. }
  1285. if (feature != null) {
  1286. // this.feature = feature;
  1287. this.bindingFeatureValues(item, feature);
  1288. // break;
  1289. }
  1290. }
  1291. if (this.sxsbData.layerData.length) {
  1292. const layer = this.sxsbData.layerData[0];
  1293. if (!layer) {
  1294. return;
  1295. }
  1296. const layerName = layer.layerName;
  1297. if (!layerName) {
  1298. return;
  1299. }
  1300. this.feature = this.layerGeometryMap[layerName];
  1301. }
  1302. },
  1303. bindingFeatureValues(id, feature) {
  1304. let layer = {};
  1305. if (!feature) return;
  1306. let layerId = null;
  1307. if (id) {
  1308. layerId = id;
  1309. } else {
  1310. layerId = this.visibleLayerId;
  1311. }
  1312. const layerConfig = this.$refs.configLayer.getLayerConfigById(layerId);
  1313. layer.layerName = layerConfig.name;
  1314. layer.featureOverlayTable = [];
  1315. const values = feature.values_;
  1316. //读取配置文件信息
  1317. let layerData = this.fields.layersData.filter((item) => {
  1318. return layerId == item.serverId;
  1319. });
  1320. if (layerData.length > 0) {
  1321. let fieldsData = this.fields.layerFieldData[layerData[0].value];
  1322. fieldsData.map((item) => {
  1323. layer.featureOverlayTable.push({
  1324. name: item.aliasname,
  1325. value: values[item.name],
  1326. });
  1327. });
  1328. } else {
  1329. Object.keys(values).forEach((i) => {
  1330. if (
  1331. i === "geometry" ||
  1332. i === "objectid" ||
  1333. i === "st_area(shape)" ||
  1334. i === "st_length(shape)"
  1335. )
  1336. return;
  1337. layer.featureOverlayTable.push({
  1338. name: i,
  1339. value: values[i],
  1340. });
  1341. });
  1342. }
  1343. this.layIndex = 0;
  1344. this.sxsbData.show = true;
  1345. this.sxsbData.layerData.push(layer);
  1346. this.layerGeometryMap[layer.layerName] = feature;
  1347. },
  1348. readVisibleLayer(children) {
  1349. if (children) {
  1350. children.filter((item) => {
  1351. if (item.url && item.visible) {
  1352. this.visibleLayerId = item.id;
  1353. this.visibleLayerIds.push(item.id);
  1354. }
  1355. if (item.children) {
  1356. this.readVisibleLayer(item.children);
  1357. }
  1358. });
  1359. } else {
  1360. this.enabledLayersConfig.filter((item) => {
  1361. if (item.url && item.visible) {
  1362. this.visibleLayerId = item.id;
  1363. this.visibleLayerIds.push(item.id);
  1364. }
  1365. if (item.children) {
  1366. this.readVisibleLayer(item.children);
  1367. }
  1368. });
  1369. }
  1370. },
  1371. async locationFeature(
  1372. bsm,
  1373. layerId,
  1374. { feature = undefined, row = undefined } = {}
  1375. ) {
  1376. this.layerFeatureKey = TABLE_COMP_MAPPING[layerId].layerField;
  1377. layerId ||= this.visibleLayerId;
  1378. const layerById = this.$refs.configLayer.getLayerConfigById(layerId);
  1379. if (!layerById) {
  1380. console.error(`no layer id`);
  1381. return;
  1382. }
  1383. if (bsm) {
  1384. if (!feature) {
  1385. const where = `${this.layerFeatureKey} = '${bsm}'`;
  1386. await arcgisQuery(
  1387. `${layerById.url}/0/query`,
  1388. {
  1389. outSR: getSrid(this.map),
  1390. where,
  1391. },
  1392. true
  1393. ).then(({ features }) => {
  1394. feature = features[0];
  1395. });
  1396. }
  1397. if (row) {
  1398. feature && feature.setProperties({ ...row });
  1399. } else {
  1400. // 后台请求详情
  1401. const par = {
  1402. ...TABLE_COMP_MAPPING[layerById.id],
  1403. value: bsm,
  1404. };
  1405. }
  1406. }
  1407. // const geometry = feature.getGeometry()
  1408. // const wkt = WkxGeometry.parseGeoJSON(
  1409. // new GeoJSON().writeGeometryObject(geometry)
  1410. // ).toWkt()
  1411. // feature.set('wkt', wkt)
  1412. this.feature = feature;
  1413. },
  1414. async locationMaskFeatureWhere(layerId, where, layers) {
  1415. const layerById = this.$refs.configLayer.getLayerConfigById(layerId);
  1416. if (!layerById) {
  1417. console.error(`no layer id`);
  1418. return;
  1419. }
  1420. this.spinShow = true;
  1421. await arcgisQuery(
  1422. `${layerById.url}/${layers}/query`,
  1423. {
  1424. outSR: getSrid(this.map),
  1425. where,
  1426. },
  1427. false
  1428. ).then((resp) => {
  1429. const { features } = resp;
  1430. const json = { type: "FeatureCollection", features: [] };
  1431. if (features.length == 0) return;
  1432. json.features.push(convertRingsToGeoJSON(features[0].geometry.rings));
  1433. MapUtils.drawMapByJson(
  1434. this.map,
  1435. json,
  1436. "rgba(228, 239 ,255,0.2)",
  1437. "#e4185f"
  1438. );
  1439. });
  1440. this.spinShow = false;
  1441. },
  1442. getLayerConfigById(layerId) {
  1443. return this.$refs.configLayer.getLayerConfigById(layerId);
  1444. },
  1445. //定位图斑
  1446. async locationGlobal(layerId, where) {
  1447. if (!this.$refs.configLayer) return;
  1448. const layerById = this.$refs.configLayer.getLayerConfigById(layerId);
  1449. if (!layerById) {
  1450. console.error(`no layer id`);
  1451. return;
  1452. }
  1453. await arcgisQuery(
  1454. `${layerById.url}/0/query`,
  1455. {
  1456. outSR: getSrid(this.map),
  1457. where,
  1458. },
  1459. true
  1460. ).then(({ features }) => {
  1461. if (features.length > 0) {
  1462. let f = features[0];
  1463. f.values_.featuresArr = features;
  1464. this.feature = f;
  1465. }
  1466. });
  1467. },
  1468. async locationByGeoJson(layerId) {
  1469. if (!this.$refs.configLayer) return;
  1470. const layerById = this.$refs.configLayer.getLayerConfigById(layerId);
  1471. if (!layerById) {
  1472. console.error(`no layer id`);
  1473. return;
  1474. }
  1475. const param = {
  1476. where: "1=1",
  1477. f: "json",
  1478. inSR: getSrid(this.map),
  1479. outFields: "*",
  1480. returnGeometry: "true",
  1481. geometry: `{"rings" : ${JSON.stringify(
  1482. this.drawShapeJson
  1483. )},"spatialReference" : {"wkid" : 4490}}`,
  1484. geometryType: "esriGeometryPolygon",
  1485. spatialRel: "esriSpatialRelIntersects",
  1486. };
  1487. await arcgisQuery(`${layerById.url}/0/query`, param, true).then(
  1488. ({ features }) => {
  1489. if (features.length > 0) {
  1490. let f = features[0];
  1491. f.values_.featuresArr = features;
  1492. //this.feature = f;
  1493. }
  1494. }
  1495. );
  1496. },
  1497. async drawByGeoJson(json) {
  1498. if (this.polygonLayer != null) {
  1499. this.polygonLayer.getSource().clear();
  1500. this.polygonLayer = null;
  1501. }
  1502. if (!json) {
  1503. return;
  1504. }
  1505. //使用GeoJSON构建source
  1506. const source = new VectorSource({
  1507. features: new GeoJSON().readFeatures(json),
  1508. });
  1509. this.polygonLayer = new VectorLayer({
  1510. source: source,
  1511. style: new Style({
  1512. fill: new Fill({
  1513. color: "rgba(252,97,133,0.2)",
  1514. }),
  1515. stroke: new Stroke({
  1516. color: "rgb(252,97,133)",
  1517. width: 2,
  1518. lineDash: [4, 4],
  1519. }),
  1520. }),
  1521. zIndex: 99,
  1522. });
  1523. this.map.addLayer(this.polygonLayer);
  1524. this.map.getView().fit(source.getExtent(), {
  1525. duration: 500,
  1526. maxZoom: 17,
  1527. });
  1528. },
  1529. closeAllLayersExceptBaseLayers(layerName) {
  1530. if(!layerName){
  1531. return;
  1532. }
  1533. let layerGroup = [];
  1534. if (!Array.isArray(layerName)) {
  1535. layerGroup.push(layerName);
  1536. } else {
  1537. layerGroup = layerName;
  1538. }
  1539. let dict = this.zycxData.query.layersData;
  1540. if(!dict || !layerGroup.length){
  1541. return;
  1542. }
  1543. let newLayerGroup = layerGroup.map((val) => {
  1544. let find = dict.find((item) => item.value == val);
  1545. if (find) {
  1546. return find.serverId;
  1547. }
  1548. return null;
  1549. });
  1550. this.enabledLayersConfig[1].children.forEach((it) => {
  1551. if (!newLayerGroup.includes(it["id"])) {
  1552. it.visible = false;
  1553. } else {
  1554. if (!it.visible) {
  1555. it.visible = true;
  1556. }
  1557. }
  1558. });
  1559. },
  1560. /**
  1561. * 关闭配置图层 隐藏
  1562. * @param id
  1563. */
  1564. closeLayer(id) {
  1565. this.enabledLayersConfig[1].children.forEach((it) => {
  1566. if (it["id"] === id) {
  1567. //it.visible = !it.visible
  1568. it.visible = false;
  1569. }
  1570. });
  1571. },
  1572. /**
  1573. * 打开图层 隐藏
  1574. * @param id
  1575. */
  1576. openLayer(id) {
  1577. this.enabledLayersConfig[1].children.forEach((it) => {
  1578. if (it["id"] === id) {
  1579. it.visible = true;
  1580. }
  1581. });
  1582. },
  1583. //清除绘制的矢量图层
  1584. cleanLayer() {
  1585. this.feature = undefined; //清除定位图斑
  1586. this.map.un("singleclick", this.mapEvent.singleclick); //移除图斑拾取事件
  1587. this.polygonLayer ? this.polygonLayer.getSource().clear() : null;
  1588. this.closeDrawInteraction(); //移除多边形绘制
  1589. this.featureOverlayData.show = false;
  1590. this.sxsbData.show = false;
  1591. this.drawShapeJson = null;
  1592. this.CursorDefault();
  1593. },
  1594. initQuery() {
  1595. let code = this.regionCode["regionCode"];
  1596. let name = this.regionCode["regionName"];
  1597. this.xzqOptions.push({
  1598. value: code,
  1599. label: name,
  1600. children: [],
  1601. });
  1602. let params = {
  1603. code: code,
  1604. type: "q",
  1605. };
  1606. this.$ajax.get("/api/area/tree", params, this).then((res) => {
  1607. let { data, success } = res;
  1608. if (data) {
  1609. this.xzqOptions[0].children = data.map((item) => {
  1610. return {
  1611. value: item.regionCode,
  1612. label: item.regionName,
  1613. children: item.children ? this.getCzQuery(item.children) : [],
  1614. };
  1615. });
  1616. this.query.xzqdm = code;
  1617. }
  1618. });
  1619. },
  1620. getCzQuery(children) {
  1621. let queryData = [];
  1622. queryData = children.map((item) => {
  1623. return { value: item.regionCode, label: item.regionName };
  1624. });
  1625. return queryData;
  1626. },
  1627. //行政区切换查询范围线
  1628. cascaderChange(value, selectedData) {
  1629. this.query.xzqdm = value;
  1630. this.mapReLoaded();
  1631. },
  1632. // 函数:获取地图上所有图层使用的数据源
  1633. getMapSources() {
  1634. const layers = this.map.getLayers().getArray();
  1635. const sources = layers.map((layer) => {
  1636. let layerName = layer.get("name");
  1637. });
  1638. return sources;
  1639. },
  1640. /**
  1641. * 框选绘制分析
  1642. */
  1643. pointerMoveHandler(evt) {
  1644. const { sketch, continuePolygonMsg, continueLineMsg, helpTooltip } = this;
  1645. if (evt.dragging) {
  1646. return;
  1647. }
  1648. /** @type {string} */
  1649. let helpMsg = "点击开始绘图";
  1650. if (sketch) {
  1651. const geom = sketch.getGeometry();
  1652. if (geom instanceof Polygon) {
  1653. helpMsg = continuePolygonMsg;
  1654. } else if (geom instanceof LineString) {
  1655. helpMsg = continueLineMsg;
  1656. }
  1657. }
  1658. const element = helpTooltip.getElement();
  1659. element.innerHTML = helpMsg;
  1660. element.classList.remove("hidden");
  1661. helpTooltip.setPosition(evt.coordinate);
  1662. },
  1663. /**
  1664. * 绘制多边形分析
  1665. */
  1666. // 创建一个矩形
  1667. createBox(coordinates, geometry) {
  1668. if (!geometry) {
  1669. geometry = new Polygon([]);
  1670. }
  1671. const start = coordinates[0];
  1672. const end = coordinates[1];
  1673. geometry.setCoordinates([
  1674. [
  1675. [start[0], start[1]],
  1676. [end[0], start[1]],
  1677. [end[0], end[1]],
  1678. [start[0], end[1]],
  1679. [start[0], start[1]],
  1680. ],
  1681. ]);
  1682. return geometry;
  1683. },
  1684. createBoxEvent() {
  1685. let _this = this;
  1686. //this.map.set('drawing', true)
  1687. //this.map.on('pointermove', this.pointerMoveHandler)
  1688. let sourse = this.careateInteractionLayer();
  1689. // 绘制交互
  1690. if (this.draw != null) {
  1691. this.map.removeInteraction(this.draw);
  1692. this.draw = null;
  1693. }
  1694. this.draw = new Draw({
  1695. source: sourse,
  1696. type: "Circle",
  1697. geometryFunction: this.createBox,
  1698. });
  1699. this.map.addInteraction(this.draw);
  1700. this.draw.on("drawend", function (event) {
  1701. //this.map.removeInteraction(this.draw);
  1702. _this.closeDrawInteraction();
  1703. //_this.map.un('pointermove', this.pointerMoveHandler);
  1704. var feature = event.feature;
  1705. var geometry = feature.getGeometry();
  1706. const extent = geometry.getExtent();
  1707. // 进行分析
  1708. _this.polygonLayer.getSource().addFeature(feature);
  1709. _this.CursorDefault();
  1710. const geoJSONFormat = new GeoJSON();
  1711. const intersectedFeatures = _this.polygonLayer
  1712. .getSource()
  1713. .getFeatures(); //存在复核图斑
  1714. _this.drawShapeJson = _this.$refs["read-coordinates"].shpConvert(
  1715. geoJSONFormat.writeFeaturesObject(intersectedFeatures),
  1716. "CGCS2000_3_Degree_GK_Zone_40",
  1717. "4528"
  1718. );
  1719. });
  1720. },
  1721. //创建绘制矢量图层
  1722. careateInteractionLayer() {
  1723. let sourse = null;
  1724. if (this.polygonLayer == null) {
  1725. sourse = new VectorSource();
  1726. this.polygonLayer = new VectorLayer({
  1727. source: sourse,
  1728. style: new Style({
  1729. fill: new Fill({
  1730. color: "rgba(252,97,133,0.2)",
  1731. }),
  1732. stroke: new Stroke({
  1733. color: "rgb(252,97,133)",
  1734. width: 3,
  1735. lineDash: [4, 4],
  1736. }),
  1737. }),
  1738. zIndex: 99,
  1739. });
  1740. this.map.addLayer(this.polygonLayer);
  1741. } else {
  1742. sourse = this.polygonLayer.getSource();
  1743. }
  1744. return sourse;
  1745. },
  1746. //开启绘制
  1747. drawInteractionEvent() {
  1748. let _this = this;
  1749. this.CursorCrosshair();
  1750. let sourse = this.careateInteractionLayer();
  1751. // 绘制交互
  1752. if (this.draw != null) {
  1753. this.map.removeInteraction(this.draw);
  1754. this.draw = null;
  1755. }
  1756. const style = new Style({
  1757. fill: new Fill({
  1758. color: "rgba(0,0,0,0)",
  1759. }),
  1760. stroke: new Stroke({
  1761. color: "rgb(252,97,133)",
  1762. width: 3,
  1763. lineDash: [4, 4],
  1764. }),
  1765. });
  1766. this.draw = new Draw({
  1767. source: sourse,
  1768. type: "Polygon", // 绘制多边形
  1769. style: null,
  1770. zIndex: 99,
  1771. });
  1772. this.map.addInteraction(this.draw);
  1773. this.draw.on("drawend", (event) => {
  1774. this.closeDrawInteraction();
  1775. var feature = event.feature;
  1776. var geometry = feature.getGeometry();
  1777. const extent = geometry.getExtent();
  1778. if (this.zycxData.query.distance > 0) {
  1779. _this.polygonLayer.getSource().getFeature().clear();
  1780. }
  1781. // 进行分析
  1782. _this.polygonLayer.getSource().addFeature(feature);
  1783. _this.CursorDefault();
  1784. const geoJSONFormat = new GeoJSON();
  1785. const intersectedFeatures = this.polygonLayer.getSource().getFeatures(); //存在复核图斑
  1786. _this.drawShapeJson = _this.$refs["read-coordinates"].shpConvert(
  1787. geoJSONFormat.writeFeaturesObject(intersectedFeatures),
  1788. "CGCS2000_3_Degree_GK_Zone_40",
  1789. "4528"
  1790. );
  1791. });
  1792. },
  1793. //关闭绘制
  1794. closeDrawInteraction() {
  1795. this.map.removeInteraction(this.draw);
  1796. },
  1797. CursorDefault() {
  1798. this.map.getTargetElement().style.cursor = "default";
  1799. },
  1800. CursorHelp() {
  1801. this.map.getTargetElement().style.cursor = "help";
  1802. },
  1803. CursorCopy() {
  1804. this.map.getTargetElement().style.cursor = "copy";
  1805. },
  1806. CursorPointer() {
  1807. this.map.getTargetElement().style.cursor = "pointer";
  1808. },
  1809. CursorPan() {
  1810. this.map.getTargetElement().style.cursor = "-webkit-grab";
  1811. },
  1812. CursorMove() {
  1813. this.map.getTargetElement().style.cursor = "move";
  1814. },
  1815. CursorCrosshair() {
  1816. this.map.getTargetElement().style.cursor = "crosshair";
  1817. },
  1818. },
  1819. };
  1820. </script>
  1821. <style scoped lang="scss">
  1822. .demo-spin-icon-load {
  1823. animation: ani-demo-spin 1s linear infinite;
  1824. }
  1825. .ol-ext-dialog {
  1826. z-index: 9999 !important;
  1827. }
  1828. .page {
  1829. display: flex;
  1830. .menus {
  1831. z-index: 2;
  1832. width: 90px;
  1833. height: 100%;
  1834. background: #e5f0ff;
  1835. box-shadow: 1px 0px 2px 0px rgba(101, 98, 98, 0.15);
  1836. border-radius: 0px 0px 0px 0px;
  1837. .items {
  1838. display: flex;
  1839. align-items: center;
  1840. justify-content: center;
  1841. flex-direction: column;
  1842. width: 100%;
  1843. height: 90px;
  1844. cursor: pointer;
  1845. .icon {
  1846. width: 42px;
  1847. height: 42px;
  1848. border-radius: 6px 6px 6px 6px;
  1849. display: flex;
  1850. justify-content: center;
  1851. align-items: center;
  1852. i {
  1853. color: #fff;
  1854. font-size: 24px;
  1855. }
  1856. }
  1857. .zyml {
  1858. background: #30aeef;
  1859. }
  1860. .sxsb {
  1861. background: #f0a123;
  1862. }
  1863. .kjfx {
  1864. background: #35d173;
  1865. }
  1866. .text {
  1867. margin-top: 6px;
  1868. font-family: AlibabaPuHuiTiM;
  1869. font-size: 16px;
  1870. color: #585757;
  1871. line-height: 20px;
  1872. text-align: center;
  1873. font-style: normal;
  1874. }
  1875. &.selected {
  1876. background: #f3fbff;
  1877. .text {
  1878. font-family: Alibaba PuHuiTi-Bold;
  1879. color: #172339;
  1880. }
  1881. }
  1882. }
  1883. }
  1884. .page-left {
  1885. z-index: 1;
  1886. height: 100%;
  1887. width: 480px;
  1888. background: #ededed;
  1889. //border-right: 1px solid #d3e3fd;
  1890. padding: 20px 10px 0px 10px;
  1891. .condition {
  1892. display: flex;
  1893. justify-content: space-around;
  1894. .panel {
  1895. background: #ffffff;
  1896. border-radius: 4px 4px 4px 4px;
  1897. display: inline-block;
  1898. height: 42px;
  1899. padding: 0px 12px;
  1900. border: 1px solid #d6d6d6;
  1901. img {
  1902. position: relative;
  1903. top: 5px;
  1904. width: 20px;
  1905. }
  1906. .iconfont {
  1907. color: #91969b;
  1908. }
  1909. }
  1910. }
  1911. .contents {
  1912. position: relative;
  1913. height: calc(100% - 60px);
  1914. margin-top: 8px;
  1915. background: #ffffff;
  1916. border-radius: 4px 4px 4px 4px;
  1917. padding: 20px;
  1918. .btn-groups {
  1919. height: 38px;
  1920. background: linear-gradient(to bottom, #e9f6ff, #ffffff);
  1921. display: flex;
  1922. margin-top: 15px;
  1923. .btn {
  1924. flex: 1;
  1925. font-family: Alibaba PuHuiTiR;
  1926. font-weight: normal;
  1927. font-size: 16px;
  1928. color: #446ae7;
  1929. text-align: center;
  1930. font-style: normal;
  1931. height: 100%;
  1932. line-height: 38px;
  1933. cursor: pointer;
  1934. background: #e9f0ff;
  1935. &.selected {
  1936. color: #fff;
  1937. background: #5988ff;
  1938. }
  1939. }
  1940. }
  1941. .sxsb_contents {
  1942. height: calc(100% - 60px);
  1943. position: relative;
  1944. .panels {
  1945. display: flex;
  1946. justify-content: flex-end;
  1947. align-items: center;
  1948. margin: 10px 10px;
  1949. font-family: AlibabaPuHuiTiM;
  1950. color: #404a5b;
  1951. font-size: 14px;
  1952. .select {
  1953. width: 80%;
  1954. margin-left: 8px;
  1955. z-index: 0;
  1956. }
  1957. .conditions {
  1958. width: 80%;
  1959. margin-left: 8px;
  1960. display: flex;
  1961. justify-content: space-between;
  1962. > div {
  1963. display: flex;
  1964. }
  1965. div.panel {
  1966. width: 36px;
  1967. height: 36px;
  1968. background: #ffffff;
  1969. border-radius: 4px 4px 4px 4px;
  1970. border: 1px solid #ccd1dc;
  1971. display: flex;
  1972. justify-content: center;
  1973. align-items: center;
  1974. margin-right: 8px;
  1975. color: #446ae7;
  1976. }
  1977. div.panel_serach {
  1978. background: #e8f0ff;
  1979. border-radius: 5px 5px 5px 5px;
  1980. border: 1px solid #c2d8ff;
  1981. width: 85px;
  1982. height: 36px;
  1983. display: flex;
  1984. justify-content: center;
  1985. align-items: center;
  1986. cursor: pointer;
  1987. i {
  1988. color: #f0a123;
  1989. }
  1990. }
  1991. }
  1992. }
  1993. .serach {
  1994. background: #5988ff;
  1995. border-radius: 5px 5px 5px 5px;
  1996. height: 40px;
  1997. line-height: 40px;
  1998. color: #fff;
  1999. font-size: 18px;
  2000. font-family: AlibabaPuHuiTiM;
  2001. text-align: center;
  2002. position: absolute;
  2003. width: calc(100% - 20px);
  2004. margin: 0px 10px;
  2005. bottom: 30px;
  2006. cursor: pointer;
  2007. }
  2008. .panel_box {
  2009. display: flex;
  2010. justify-content: space-between;
  2011. > div {
  2012. width: 100px;
  2013. height: 42px;
  2014. background: #e8f0ff;
  2015. border-radius: 5px 5px 5px 5px;
  2016. border: 1px solid #c2d8ff;
  2017. font-family: AlibabaPuHuiTiM;
  2018. font-weight: normal;
  2019. font-size: 15px;
  2020. color: #333333;
  2021. display: flex;
  2022. justify-content: center;
  2023. align-items: center;
  2024. .iconfont {
  2025. margin-right: 2px;
  2026. font-size: 18px;
  2027. }
  2028. }
  2029. }
  2030. > div {
  2031. margin: 15px 0px;
  2032. }
  2033. }
  2034. .tableList {
  2035. height: calc(100% - 60px);
  2036. position: absolute;
  2037. width: 100%;
  2038. background: #fff;
  2039. top: 50px;
  2040. padding: 20px;
  2041. left: 0px;
  2042. .title {
  2043. display: flex;
  2044. justify-content: space-between;
  2045. height: 36px;
  2046. p {
  2047. font-family: Alibaba PuHuiTiM;
  2048. font-weight: normal;
  2049. font-size: 14px;
  2050. color: #5b5f63;
  2051. }
  2052. }
  2053. .tables {
  2054. height: calc(100% - 60px);
  2055. overflow-y: auto;
  2056. .item {
  2057. padding: 20px;
  2058. height: 90px;
  2059. background: #f1f7fb;
  2060. margin: 10px 0px;
  2061. flex-direction: row;
  2062. display: flex;
  2063. align-items: baseline;
  2064. justify-content: space-between;
  2065. cursor: pointer;
  2066. .title {
  2067. display: flex;
  2068. height: 28px;
  2069. display: flex;
  2070. flex-direction: column;
  2071. align-items: flex-start;
  2072. flex: 12;
  2073. .name {
  2074. font-family: AlibabaPuHuiTiM;
  2075. color: #172339;
  2076. font-size: 15px;
  2077. }
  2078. .span_wh {
  2079. font-family: AlibabaPuHuiTiR;
  2080. font-weight: normal;
  2081. font-size: 14px;
  2082. }
  2083. .span_wh_v {
  2084. font-family: AlibabaPuHuiTiR;
  2085. font-weight: normal;
  2086. font-size: 14px;
  2087. }
  2088. }
  2089. .xh {
  2090. flex: 1;
  2091. div {
  2092. background: linear-gradient(to right, #5988ff, #44cae7);
  2093. width: 20px;
  2094. height: 20px;
  2095. text-align: center;
  2096. border-radius: 50%;
  2097. color: #fff;
  2098. font-weight: bold;
  2099. line-height: 20px;
  2100. }
  2101. }
  2102. .iconfont {
  2103. flex: 1;
  2104. color: #f08523;
  2105. font-size: 24px;
  2106. }
  2107. &.selected {
  2108. background: #e3eeff;
  2109. .title .name {
  2110. color: #3764d6;
  2111. }
  2112. }
  2113. }
  2114. }
  2115. }
  2116. .kjfx_contents {
  2117. height: calc(100% - 60px);
  2118. width: 100%;
  2119. position: absolute;
  2120. top: 60px;
  2121. left: 0px;
  2122. background: #fff;
  2123. overflow-y: auto;
  2124. }
  2125. .kjfx_yfk_contents {
  2126. height: calc(100% - 120px);
  2127. width: 100%;
  2128. position: absolute;
  2129. top: 120px;
  2130. left: 0px;
  2131. background: #fff;
  2132. overflow-y: auto;
  2133. }
  2134. }
  2135. .title {
  2136. display: flex;
  2137. justify-content: flex-start;
  2138. align-items: center;
  2139. font-family: AlibabaPuHuiTiM;
  2140. font-weight: normal;
  2141. font-size: 18px;
  2142. color: #16191d;
  2143. i {
  2144. font-size: 18px;
  2145. cursor: pointer;
  2146. color: #807d7d;
  2147. }
  2148. .el-tag {
  2149. color: #fff;
  2150. font-family: AlibabaPuHuiTiM;
  2151. font-weight: 500;
  2152. font-size: 12px;
  2153. margin-left: 6px;
  2154. }
  2155. }
  2156. }
  2157. .base-map {
  2158. //@import "~@/components/ol/theme-dark.scss";
  2159. position: absolute;
  2160. top: 65px;
  2161. left: 570px;
  2162. width: calc(100% - 570px);
  2163. height: calc(100% - 65px);
  2164. overflow: hidden;
  2165. background: url("~@/assets/ol/map-bg.png") round;
  2166. border-radius: 5px;
  2167. // z-index: -1;
  2168. $mask-bgc: radial-gradient(
  2169. closest-side at 50%,
  2170. rgba(4, 18, 41, 0) 0,
  2171. rgba(0, 15, 51, 0.2)
  2172. );
  2173. .space-map-mask {
  2174. position: absolute;
  2175. top: 0;
  2176. left: 0;
  2177. z-index: 0;
  2178. width: 100%;
  2179. height: 100%;
  2180. background-image: $mask-bgc;
  2181. pointer-events: none;
  2182. }
  2183. ::v-deep .vl-tool-bar {
  2184. top: 15px;
  2185. right: 15px;
  2186. .vl-tool-bar-item {
  2187. & + .vl-tool-bar-item {
  2188. margin-left: 0px !important;
  2189. margin-top: 0px !important;
  2190. }
  2191. }
  2192. .vl-layer-tree {
  2193. position: absolute;
  2194. left: 0px !important;
  2195. }
  2196. }
  2197. .map-view-info {
  2198. position: absolute;
  2199. bottom: 10px;
  2200. left: 15px;
  2201. width: 350px;
  2202. height: 32px;
  2203. background: rgba(56, 150, 236, 0.64);
  2204. box-shadow: 0 0 20px 1px #012357;
  2205. font-size: 14px;
  2206. font-family: Microsoft YaHei;
  2207. font-weight: 400;
  2208. color: #ffffff;
  2209. line-height: 32px;
  2210. text-indent: 1em;
  2211. }
  2212. $bgc: rgba(255, 255, 255, 0.9);
  2213. &::v-deep {
  2214. .vl-tool-bar {
  2215. .vl-tool-bar-item {
  2216. background-color: $bgc;
  2217. margin-bottom: 8px;
  2218. }
  2219. }
  2220. .vl-legend {
  2221. left: 0px;
  2222. bottom: 0px;
  2223. .legend-btn {
  2224. //background: $bgc;
  2225. }
  2226. .legend-panel {
  2227. background: $bgc;
  2228. .legend-title {
  2229. background-color: rgba(35, 144, 238, 0.9);
  2230. }
  2231. }
  2232. }
  2233. .vl-layer-tree {
  2234. .layer-dropdown {
  2235. background-color: $bgc;
  2236. }
  2237. }
  2238. .vl-tool-box {
  2239. .tool-box-title {
  2240. svg {
  2241. width: 22px;
  2242. height: 22px;
  2243. }
  2244. }
  2245. }
  2246. }
  2247. .feature-overlay {
  2248. z-index: 999;
  2249. width: 331px;
  2250. color: white;
  2251. z-index: 999;
  2252. .title {
  2253. font-size: 18px;
  2254. line-height: 30px;
  2255. background: linear-gradient(270deg, #47c4fa 0%, #2390ee 100%);
  2256. &.title-opt {
  2257. height: 38px;
  2258. background: linear-gradient(
  2259. 270deg,
  2260. rgba(71, 196, 250, 0.8) 0%,
  2261. rgba(35, 144, 238, 0.8) 100%
  2262. );
  2263. }
  2264. padding: 5px 55px 5px 16px;
  2265. margin: 0 4px;
  2266. font-weight: normal;
  2267. position: relative;
  2268. > span {
  2269. position: absolute;
  2270. top: 6px;
  2271. right: 5px;
  2272. color: #6fffc0;
  2273. }
  2274. .subtitle {
  2275. font-weight: normal;
  2276. cursor: pointer;
  2277. float: right;
  2278. &.selected {
  2279. font-weight: bold;
  2280. }
  2281. }
  2282. .detail {
  2283. font-size: 16px;
  2284. color: #22f3e2;
  2285. cursor: pointer;
  2286. margin-left: 5px;
  2287. }
  2288. }
  2289. .section5 {
  2290. height: 176px;
  2291. background: url(~@/assets/ol/map-overlay-white.png) 100% 100%;
  2292. &.section5-opt {
  2293. opacity: 0.8;
  2294. }
  2295. .name {
  2296. font-weight: 600;
  2297. padding: 10px 0;
  2298. font-size: 17px;
  2299. color: #000;
  2300. line-height: 22px;
  2301. cursor: default;
  2302. .detail {
  2303. cursor: pointer;
  2304. margin-left: 5px;
  2305. background: #00b9d6;
  2306. border-radius: 3px;
  2307. font-size: 15px;
  2308. color: #ffffff;
  2309. padding: 0 8px;
  2310. }
  2311. }
  2312. }
  2313. }
  2314. .ivu-spin-fix {
  2315. z-index: 0 !important;
  2316. background-color: unset;
  2317. color: white;
  2318. background-image: $mask-bgc;
  2319. }
  2320. }
  2321. .description {
  2322. position: absolute;
  2323. background-color: white;
  2324. padding: 10px;
  2325. border: 1px solid #ccc;
  2326. border-radius: 5px;
  2327. color: red;
  2328. z-index: 2;
  2329. }
  2330. ::v-deep {
  2331. .base {
  2332. &.el-select {
  2333. .el-input__inner {
  2334. height: 40px;
  2335. border-color: transparent !important;
  2336. font-size: 15px;
  2337. color: #333333;
  2338. }
  2339. }
  2340. &.el-input {
  2341. .el-input__inner {
  2342. border: none !important;
  2343. }
  2344. }
  2345. }
  2346. .dialogClass {
  2347. border-radius: 12px 12px 12px 12px;
  2348. .el-dialog__header {
  2349. border-radius: 12px 12px 12px 12px;
  2350. background: linear-gradient(180deg, #deebff 0%, #ffffff 100%);
  2351. font-family: AlibabaPuHuiTiM;
  2352. font-weight: normal;
  2353. font-size: 17px;
  2354. color: #181b1f;
  2355. }
  2356. .el-dialog__headerbtn .el-dialog__close {
  2357. color: #333;
  2358. font-weight: bold;
  2359. font-size: 20px;
  2360. }
  2361. }
  2362. .ivu-cascader {
  2363. .ivu-select-dropdown {
  2364. z-index: 999;
  2365. }
  2366. .ivu-cascader-rel {
  2367. .ivu-input {
  2368. height: 40px;
  2369. border-color: transparent;
  2370. }
  2371. }
  2372. }
  2373. .el-tabs__content {
  2374. .title {
  2375. height: 48px;
  2376. line-height: 48px;
  2377. font-weight: bold;
  2378. font-size: 16px;
  2379. color: #333;
  2380. }
  2381. table {
  2382. width: 100%;
  2383. font-size: 15px;
  2384. line-height: 15px;
  2385. border-collapse: collapse; /* 合并表格边框 */
  2386. td,
  2387. th {
  2388. padding: 2px 0;
  2389. border: 1px solid #dfe7f0; /* 设置表格边框样式和颜色 */
  2390. text-align: center;
  2391. height: 32px;
  2392. font-family: "Alibaba PuHuiTiR";
  2393. font-weight: normal;
  2394. font-size: 14px;
  2395. color: #3c4859;
  2396. }
  2397. th {
  2398. padding-right: 0.5em;
  2399. word-break: keep-all;
  2400. font-weight: normal;
  2401. color: #000;
  2402. width: 25%;
  2403. background: rgba(237, 246, 255, 1);
  2404. }
  2405. td {
  2406. min-width: 3em;
  2407. color: #000;
  2408. width: 25%;
  2409. padding: 10px;
  2410. }
  2411. td + th {
  2412. padding-left: 0.5em;
  2413. }
  2414. }
  2415. }
  2416. }
  2417. ::v-deep .data-c {
  2418. position: relative !important;
  2419. left: 0px;
  2420. .vl-layer-tree .layer-dropdown {
  2421. left: 0px;
  2422. right: revert;
  2423. border-radius: 0px;
  2424. background: none;
  2425. box-shadow: none;
  2426. }
  2427. }
  2428. .oepnLayerFeature {
  2429. position: absolute;
  2430. right: 60px;
  2431. top: 80px;
  2432. width: 400px;
  2433. height: 600px;
  2434. z-index: 9999;
  2435. background: rgb(255, 255, 255);
  2436. border-radius: 4px;
  2437. .title {
  2438. width: 100%;
  2439. height: 38px;
  2440. font-family: "Alibaba PuHuiTi-Bold";
  2441. font-weight: 500;
  2442. font-size: 16px;
  2443. color: #1f2f47;
  2444. line-height: 19px;
  2445. text-align: center;
  2446. padding: 0px 10px;
  2447. display: flex;
  2448. align-items: center;
  2449. justify-content: space-between;
  2450. }
  2451. .contents {
  2452. width: 100%;
  2453. height: calc(100% - 38px);
  2454. overflow-y: auto;
  2455. padding: 10px 10px;
  2456. > .select_box {
  2457. display: flex;
  2458. align-items: center;
  2459. justify-content: space-between;
  2460. > .desc {
  2461. font-family: AlibabaPuHuiTiM;
  2462. font-size: 14px;
  2463. display: flex;
  2464. align-items: center;
  2465. > span {
  2466. display: inline-block;
  2467. margin: 0px 5px;
  2468. // font-size: 22px;
  2469. }
  2470. }
  2471. }
  2472. table {
  2473. width: 100%;
  2474. font-size: 15px;
  2475. line-height: 15px;
  2476. border-collapse: collapse; /* 合并表格边框 */
  2477. border-radius: 8px 8px 8px 8px;
  2478. font-family: AlibabaPuHuiTiM;
  2479. font-size: 14px;
  2480. margin-top: 15px;
  2481. td,
  2482. th {
  2483. padding: 2px 0;
  2484. border: 1px solid #d6d6d6; /* 设置表格边框样式和颜色 */
  2485. border-radius: 8px 8px 8px 8px;
  2486. text-align: center;
  2487. height: 32px;
  2488. }
  2489. th {
  2490. padding-right: 0.5em;
  2491. word-break: keep-all;
  2492. font-weight: normal;
  2493. color: #000;
  2494. width: 40%;
  2495. background: #f4f6f8;
  2496. }
  2497. td {
  2498. min-width: 3em;
  2499. color: #000;
  2500. width: 60%;
  2501. padding: 5px 10px;
  2502. }
  2503. td + th {
  2504. padding-left: 0.5em;
  2505. }
  2506. }
  2507. }
  2508. }
  2509. }
  2510. </style>