Home Backend Development PHP Tutorial How to draw a dynamically updated map of China in a front-end project

How to draw a dynamically updated map of China in a front-end project

Dec 20, 2017 pm 01:21 PM
project

Today I will teach you a cool code, a sparkling map of China. You only need to use vue+vuex+axios+echarts to dynamically update this map. Let's take a look.

1. Generate project and install plug-in

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# 安装vue-cli

npm install vue-cli -g

# 初始化项目

vue init webpack china-map

# 切到目录下

cd china-map

# 安装项目依赖

npm install

# 安装 vuex

npm install vuex --save

# 安装 axios

npm install axios --save

# 安装 ECharts

npm install echarts --save

Copy after login

2. Project structure

1

2

3

4

5

6

7

8

├── index.html

├── main.js

├── components

│  └── index.vue

└── store

  ├── index.js     # 组装模块及导出store的文件

  └── modules

    └── ChinaMap.js  # 中国地图Vuex模块

Copy after login

3. Introduce China map and draw basic charts

1. Press The demand is to introduce Echarts charts and components related to China maps.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// 主模块

let echarts = require('echarts/lib/echarts')

// 散点图

require('echarts/lib/chart/scatter')

// 散点图放大

require('echarts/lib/chart/effectScatter')

// 地图

require('echarts/lib/chart/map')

// 图例

require('echarts/lib/component/legend')

// 提示框

require('echarts/lib/component/tooltip')

// 地图geo

require('echarts/lib/component/geo')

Copy after login

2. Introducing the China map JS file will automatically register the map; you can also introduce the json file through axios, and you need to manually register echarts.registerMap('china', chinaJson.data).

1

2

// 中国地图JS文件

require('echarts/map/js/china')

Copy after login

3. Prepare a DOM container with fixed width and height and initialize an echarts instance in mounted.

DOM container

1

2

3

<template>

 <div id="china-map"></div>

</template>

Copy after login

Initialize echarts instance

1

let chinaMap = echarts.init(document.getElementById(&#39;china-map&#39;))

Copy after login

4. Set the initialized blank map. You need to set many echarts parameters here. Please refer to the ECharts configuration item manual.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

chinaMap.setOption({

  backgroundColor: &#39;#272D3A&#39;,

  // 标题

  title: {

   text: &#39;中国地图闪闪发光&#39;,

   left: &#39;center&#39;,

   textStyle: {

    color: &#39;#fff&#39;

   }

  },

  // 地图上圆点的提示

  tooltip: {

   trigger: &#39;item&#39;,

   formatter: function (params) {

    return params.name + &#39; : &#39; + params.value[2]

   }

  },

  // 图例按钮 点击可选择哪些不显示

  legend: {

   orient: &#39;vertical&#39;,

   left: &#39;left&#39;,

   top: &#39;bottom&#39;,

   data: [&#39;地区热度&#39;, &#39;top5&#39;],

   textStyle: {

    color: &#39;#fff&#39;

   }

  },

  // 地理坐标系组件

  geo: {

   map: &#39;china&#39;,

   label: {

    // true会显示城市名

    emphasis: {

     show: false

    }

   },

   itemStyle: {

    // 地图背景色

    normal: {

     areaColor: &#39;#465471&#39;,

     borderColor: &#39;#282F3C&#39;

    },

    // 悬浮时

    emphasis: {

     areaColor: &#39;#8796B4&#39;

    }

   }

  },

  // 系列列表

  series: [

   {

    name: &#39;地区热度&#39;,

    // 表的类型 这里是散点

    type: &#39;scatter&#39;,

    // 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件

    coordinateSystem: &#39;geo&#39;,

    data: [],

    // 标记的大小

    symbolSize: 12,

    // 鼠标悬浮的时候在圆点上显示数值

    label: {

     normal: {

      show: false

     },

     emphasis: {

      show: false

     }

    },

    itemStyle: {

     normal: {

      color: &#39;#ddb926&#39;

     },

     // 鼠标悬浮的时候圆点样式变化

     emphasis: {

      borderColor: &#39;#fff&#39;,

      borderWidth: 1

     }

    }

   },

   {

    name: &#39;top5&#39;,

    // 表的类型 这里是散点

    type: &#39;effectScatter&#39;,

    // 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件

    coordinateSystem: &#39;geo&#39;,

    data: [],

    // 标记的大小

    symbolSize: 12,

    showEffectOn: &#39;render&#39;,

    rippleEffect: {

     brushType: &#39;stroke&#39;

    },

    hoverAnimation: true,

    label: {

     normal: {

      show: false

     }

    },

    itemStyle: {

     normal: {

      color: &#39;#f4e925&#39;,

      shadowBlur: 10,

      shadowColor: &#39;#333&#39;

     }

    },

    zlevel: 1

   }

  ]

 })

Copy after login


4. Configure Vuex management and distribution data

1.Introduce vuex and axios into ChinaMap.js.

1

import axios from &#39;axios&#39;

Copy after login

2. Set the necessary variables.

1

2

3

4

5

6

7

8

const state = {

 geoCoordMap: {&#39;香港特别行政区&#39;: [114.08, 22.2], &#39;澳门特别行政区&#39;: [113.33, 22.13], &#39;台北&#39;: [121.5, 25.03]/*等等*/},

 // 发光的城市

 showCityNumber: 5,

 showCount: 0,

 // 是否需要loading

 isLoading: true

}

Copy after login

3. Grab background data and update the map in actions.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

const actions = {

 fetchHeatChinaRealData ({state, commit}, chartsObj) {

  axios.get(&#39;static/data/heatChinaRealData.json&#39;)

   .then(

    (res) => {

     let data = res.data

     let paleData = ((state, data) => {

      let arr = []

      let len = data.length

      while (len--) {

       let geoCoord = state.geoCoordMap[data[len].name]

       if (geoCoord) {

        arr.push({

         name: data[len].name,

         value: geoCoord.concat(data[len].value)

        })

       }

      }

      return arr

     })(state, data)

     let lightData = paleData.sort((a, b) => {

      return b.value - a.value

     }).slice(0, state.showCityNumber)

     chartsObj.setOption({

      series: [

       {

        name: &#39;地区热度&#39;,

        data: paleData

       },

       {

        name: &#39;top5&#39;,

        data: lightData

       }

      ]

     })

    }

   )

 }

}

Copy after login


At this time npm run dev can already see the flashing yellow dots on the map of China.

If you want to change it to display dynamically, you can add under mounted in index.vue:

1

2

3

4

5

6

chinaMap.showLoading(showLoadingDefault)

this.$store.commit(&#39;openLoading&#39;)

this.$store.dispatch(&#39;fetchHeatChinaRealData&#39;, chinaMap)

setInterval(() => {

  this.$store.dispatch(&#39;fetchHeatChinaRealData&#39;, chinaMap)

}, 1000)

Copy after login


In actions in ChinaMap.js Modification of fetchHeatChinaRealData in mutations:

1

2

3

4

5

6

7

let lightData = paleData.sort((a, b) => {

  return b.value - a.value

}).slice(0 + state.showCount, state.showCityNumber + state.showCount)

if (state.isLoading) {

  chartsObj.hideLoading()

  commit(&#39;closeLoading&#39;)

}

Copy after login


5. Others

1. Don’t forget to introduce Vuex in main.js.

1

2

3

4

5

6

7

8

9

10

11

import Vue from &#39;vue&#39;

import Index from &#39;./components/index.vue&#39;

import store from &#39;./store/index&#39;

let ChinaMap = new Vue({

 el: &#39;#app&#39;,

 store,

 template: &#39;<Index/>&#39;,

 components: {Index}

})

  

Vue.use(ChinaMap)

Copy after login

I believe you have mastered the methods after reading these cases. For more exciting information, please pay attention to other related articles on the php Chinese website!

Related reading:

Detailed code examples of how to implement stack data structure and bracket matching algorithm in php

The most popular in php Simple string matching algorithm, php matching algorithm_PHP tutorial

The simplest string matching algorithm tutorial in php


The above is the detailed content of How to draw a dynamically updated map of China in a front-end project. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Share an easy way to package PyCharm projects Share an easy way to package PyCharm projects Dec 30, 2023 am 09:34 AM

Share the simple and easy-to-understand PyCharm project packaging method. With the popularity of Python, more and more developers use PyCharm as the main tool for Python development. PyCharm is a powerful integrated development environment that provides many convenient functions to help us improve development efficiency. One of the important functions is project packaging. This article will introduce how to package projects in PyCharm in a simple and easy-to-understand way, and provide specific code examples. Why package projects? Developed in Python

Can AI conquer Fermat's last theorem? Mathematician gave up 5 years of his career to turn 100 pages of proof into code Can AI conquer Fermat's last theorem? Mathematician gave up 5 years of his career to turn 100 pages of proof into code Apr 09, 2024 pm 03:20 PM

Fermat's last theorem, about to be conquered by AI? And the most meaningful part of the whole thing is that Fermat’s Last Theorem, which AI is about to solve, is precisely to prove that AI is useless. Once upon a time, mathematics belonged to the realm of pure human intelligence; now, this territory is being deciphered and trampled by advanced algorithms. Image Fermat's Last Theorem is a "notorious" puzzle that has puzzled mathematicians for centuries. It was proven in 1993, and now mathematicians have a big plan: to recreate the proof using computers. They hope that any logical errors in this version of the proof can be checked by a computer. Project address: https://github.com/riccardobrasca/flt

A closer look at PyCharm: a quick way to delete projects A closer look at PyCharm: a quick way to delete projects Feb 26, 2024 pm 04:21 PM

Title: Learn more about PyCharm: An efficient way to delete projects. In recent years, Python, as a powerful and flexible programming language, has been favored by more and more developers. In the development of Python projects, it is crucial to choose an efficient integrated development environment. As a powerful integrated development environment, PyCharm provides Python developers with many convenient functions and tools, including deleting project directories quickly and efficiently. The following will focus on how to use delete in PyCharm

PyCharm Practical Tips: Convert Project to Executable EXE File PyCharm Practical Tips: Convert Project to Executable EXE File Feb 23, 2024 am 09:33 AM

PyCharm is a powerful Python integrated development environment that provides a wealth of development tools and environment configurations, allowing developers to write and debug code more efficiently. In the process of using PyCharm for Python project development, sometimes we need to package the project into an executable EXE file to run on a computer that does not have a Python environment installed. This article will introduce how to use PyCharm to convert a project into an executable EXE file, and give specific code examples. head

How to Make a Shopping List in the iOS 17 Reminders App on iPhone How to Make a Shopping List in the iOS 17 Reminders App on iPhone Sep 21, 2023 pm 06:41 PM

How to Make a GroceryList on iPhone in iOS17 Creating a GroceryList in the Reminders app is very simple. You just add a list and populate it with your items. The app automatically sorts your items into categories, and you can even work with your partner or flat partner to make a list of what you need to buy from the store. Here are the full steps to do this: Step 1: Turn on iCloud Reminders As strange as it sounds, Apple says you need to enable reminders from iCloud to create a GroceryList on iOS17. Here are the steps for it: Go to the Settings app on your iPhone and tap [your name]. Next, select i

What to do if there is an error when starting the react project What to do if there is an error when starting the react project Dec 27, 2022 am 10:36 AM

Solution to the error when starting the react project: 1. Enter the project folder, start the project and view the error message; 2. Execute the "npm install" or "npm install react-scripts" command; 3. Execute "npm install @ant-design/ pro-field --save" command.

Based on the open source ChatGPT Web UI project, quickly build your own ChatGPT site Based on the open source ChatGPT Web UI project, quickly build your own ChatGPT site Apr 15, 2023 pm 07:43 PM

As a technology blogger, Fengfeng prefers all kinds of tossing. I have previously introduced ChatGPT to connect to WeChat, DingTalk and Knowledge Planet (if you haven’t seen it, you can read the previous article). Recently, when I looked at open source projects , discovered a ChatGPTWebUI project. Thinking that I have never connected ChatGPT to WebUI before, it is really good to have this open source project to use. Here are the practical installation steps to share with everyone. The installation official provides many installation methods on Github’s project documentation, including manual installation, docker deployment, and remote deployment. It’s amazing that when choosing a deployment method, I thought about simplicity at first.

Basic tutorial: Create a Maven project using IDEA Basic tutorial: Create a Maven project using IDEA Feb 19, 2024 pm 04:43 PM

IDEA (IntelliJIDEA) is a powerful integrated development environment that can help developers develop various Java applications quickly and efficiently. In Java project development, using Maven as a project management tool can help us better manage dependent libraries, build projects, etc. This article will detail the basic steps on how to create a Maven project in IDEA, while providing specific code examples. Step 1: Open IDEA and create a new project Open IntelliJIDEA

See all articles