index.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <template>
  2. <div class="flex">
  3. <div class="left">
  4. <a-form
  5. :model="form"
  6. name="basic"
  7. :label-col="{ span: 8 }"
  8. :wrapper-col="{ span: 16 }"
  9. autocomplete="off"
  10. >
  11. <a-form-item label="alpha" name="beta">
  12. <a-input-number
  13. v-model:value="form.geo3D.light.main.alpha"
  14. :min="0"
  15. :max="360"
  16. @change="chartReLoad"
  17. />
  18. </a-form-item>
  19. <a-form-item label="beta" name="beta">
  20. <a-input-number
  21. v-model:value="form.geo3D.light.main.beta"
  22. :min="0"
  23. :max="360"
  24. @change="chartReLoad"
  25. />
  26. </a-form-item>
  27. <a-form-item label="intensity" name="beta">
  28. <a-input-number
  29. v-model:value="form.geo3D.light.main.intensity"
  30. :min="0"
  31. :max="360"
  32. @change="chartReLoad"
  33. />
  34. </a-form-item>
  35. <a-form-item label="color" name="beta">
  36. <a-input
  37. v-model:value="form.geo3D.itemStyle.color"
  38. type="color"
  39. @change="chartReLoad"
  40. />
  41. </a-form-item>
  42. <a-form-item label="metalness" name="beta">
  43. <a-input-number
  44. v-model:value="form.geo3D.realisticMaterial.metalness"
  45. @change="chartReLoad"
  46. />
  47. </a-form-item>
  48. <!-- <a-form-item
  49. label="Password"
  50. name="password"
  51. :rules="[{ required: true, message: 'Please input your password!' }]"
  52. >
  53. <a-input-password v-model:value="form.password" />
  54. </a-form-item> -->
  55. </a-form>
  56. </div>
  57. <div class="map" id="mapEchart" style="width: 75%; height: 100vh"></div>
  58. </div>
  59. </template>
  60. <script lang="ts" setup>
  61. // 引入工具
  62. import geoJson from "@/assets/json/辽宁省v3_full.json"; //该文件路径改成自己项目中的文件路径即可
  63. import * as echarts from "echarts";
  64. import "echarts-gl"; //3D地图插件
  65. import { onMounted, reactive, ref } from "vue";
  66. import img149 from "@/assets/img/about/149.png";
  67. import wenli from "@/assets/img/about/wenli5.jpg";
  68. var imageDom = document.createElement("img");
  69. imageDom.src = img149;
  70. // 定义echarts方法
  71. var myChart;
  72. let option = {
  73. tooltip: {
  74. show: true,
  75. },
  76. //热力图配置项
  77. visualMap: [
  78. {
  79. type: "continuous",
  80. text: ["xxx"],
  81. calculable: true,
  82. max: 250,
  83. inPange: {
  84. color: ["#87aa66", "#eba438", "#d94d4c"],
  85. },
  86. },
  87. ],
  88. //3D地图配置项
  89. geo3D: {
  90. map: "zhejiang",
  91. roam: true,
  92. instancing: true,
  93. geo3DIndex: 0,
  94. boxWidth: 400,
  95. boxHeight: 10,
  96. regionHeight: 6,
  97. colorMaterial: {},
  98. groundPlane: {
  99. show: true,
  100. color: "#ff4400",
  101. realisticMaterial: {
  102. detailTexture: "",
  103. },
  104. },
  105. itemStyle: {
  106. color: "rgb(0,160,255)",
  107. opacity: 1,
  108. borderWidth: 4,
  109. borderColor: "#fff",
  110. },
  111. viewControl: {
  112. //projection:'orthographic',
  113. autoRotate: false,
  114. autoRotateAfterStill: 3,
  115. maxDistance: 800,
  116. distance: 500,
  117. minAlpha: 5, // 上下旋转的最小 alpha 值。即视角能旋转到达最上面的角度。[ default: 5 ]
  118. maxAlpha: 90, // 上下旋转的最大 alpha 值。即视角能旋转到达最下面的角度。[ default: 90 ]
  119. minBeta: -360, // 左右旋转的最小 beta 值。即视角能旋转到达最左的角度。[ default: -80 ]
  120. maxBeta: 360, // 左右旋转的最大 beta 值。即视角能旋转到达最右的角度。[ default: 80 ]
  121. animation: true, // 是否开启动画。[ default: true ]
  122. animationDurationUpdate: 1000, // 过渡动画的时长。[ default: 1000 ]
  123. animationEasingUpdate: "cubicInOut", // 过渡动画的缓动效果。[ default: cubicInOut ]
  124. },
  125. emphasis: {
  126. disabled: true, //是否可以被选中
  127. label: {
  128. //移入时的高亮文本
  129. show: false,
  130. color: "#333", //显示字体颜色变淡
  131. fontSize: 18, //显示字体变大
  132. },
  133. itemStyle: {
  134. color: "#fff", //显示移入的区块变粉色
  135. },
  136. },
  137. label: {
  138. show: false,
  139. color: "#111", //地图初始化区域字体颜色
  140. fontSize: 14,
  141. lineHeight: 16,
  142. },
  143. shading: "realistic",
  144. realisticMaterial: {
  145. detailTexture: wenli,
  146. metalness: 0,
  147. textureOffset:0.05,
  148. metalnessAdjust:0,
  149. },
  150. lambertMaterial: {
  151. detailTexture: wenli,
  152. metalness: 0,
  153. metalnessAdjust: 0,
  154. },
  155. light: {
  156. //光照阴影
  157. main: {
  158. // color: "#fff", //光照颜色
  159. intensity: 3, //光照强度
  160. shadowQuality: "high", //阴影亮度
  161. shadow: true, //是否显示阴影
  162. //shadowQuality: "medium", //阴影质量 ultra //阴影亮度
  163. alpha: 45, //上下
  164. beta: 10, //左右
  165. },
  166. ambient: {
  167. intensity: 0,
  168. },
  169. ambientCubemap: {
  170. specularIntensity: 0,
  171. },
  172. },
  173. },
  174. series: [
  175. //3D柱状图配置项
  176. {
  177. name: "xxx",
  178. type: "scatter3D",
  179. // show: true,
  180. symbol: "pin",
  181. distance: 10,
  182. itemStyle:{
  183. opacity:1
  184. },
  185. coordinateSystem: "geo3D",
  186. zlevel: 99,
  187. opacity: 1,
  188. symbolSize: 40,
  189. label: {
  190. },
  191. //自定义的data数组 value中数组的含义:[杭州的经度or纬度,要展示的3d柱状图数值大小]
  192. data: [
  193. { name: "大连", value: [120.515835, 40.558131, 100] },
  194. { name: "温州", value: [122.420392, 41.197939, 100] },
  195. ],
  196. },
  197. ],
  198. };
  199. const chartMap = () => {
  200. // 重点:不要遗漏这句代码!!
  201. echarts.registerMap("zhejiang", geoJson);
  202. // 图表配置项
  203. myChart.setOption(option);
  204. //让可视化地图跟随浏览器大小缩放
  205. window.addEventListener("resize", () => {
  206. myChart.resize();
  207. });
  208. };
  209. const chartReLoad = () => {
  210. console.log(option);
  211. myChart.setOption(option);
  212. };
  213. const form = reactive(option);
  214. onMounted(() => {
  215. myChart = echarts.init(document.getElementById("mapEchart"));
  216. // 挂载echart
  217. chartMap();
  218. });
  219. </script>
  220. <style lang="less" scoped>
  221. .map {
  222. background-color: #ffffff;
  223. }
  224. .left {
  225. width: 25%;
  226. background-color: lightgreen;
  227. height: 100vh;
  228. }
  229. </style>