博客 城市訪問量統計並且通過Echarts展示

博客 城市訪問量統計並且通過Echarts+百度地圖展示


本篇講解一下 如何在Vue 中使用 Echarts + 百度地圖 統計 博客訪問量 並且通過QQWry 解析 ip 地址 利用Echarts 展示出來


效果圖如下:

博客 城市訪問量統計並且通過Echarts展示


1.純真Ip地址庫 QQWry

這是我在github上找的 java版本的 解析 qqwry的

1.1 maven 引入 qqwry

<code>         ​       

<

dependency

>

<

groupId

>

com.github.jarod

groupId

>

       

<

artifactId

>

qqwry-java

artifactId

>

<

version

>

0.7.0

version

>

       

dependency

>

/<code>


引入後可以看到 該jar 包其實內部已經引入了 qqwry.dat 庫了

博客 城市訪問量統計並且通過Echarts展示


使用教程:

<code>QQWry qqwry = new QQWry(); // 

load

qqwry.dat

from

classpath QQWry qqwry =

new

QQWry(Paths.get(

"path/to/qqwry.dat"

)); //

load

qqwry.dat

from

java.nio.file.Path​

byte

[]

data

= Files.readAllBytes(Paths.get(

"path/to/qqwry.dat"

)); QQWry qqwry = new QQWry(data); //

create

QQWry

with

provided

data

String

myIP =

"127.0.0.1"

;IPZone ipzone = qqwry.findIP(myIP); System.out.printf("%s, %s", ipzone.getMainInfo(), ipzone.getSubInfo()); // 江蘇省無錫市, 電信 /<code>


1.2 QQWryUtils

用於提供 一個靜態的 QQWry 加載 qqwry.dat ,並且提供根據ip 獲取 IpZone

<code> 

public

class

QQWryUtils

{

private

static

QQWry qqWry;

static

{

try

{ qqWry =

new

QQWry(); }

catch

(IOException e) { e.printStackTrace(); } }

public

static

void

main

(String[] args)

throws IOException

{ QQWry qqWry =

new

QQWry(); IPZone ipZone = qqWry.findIP(

"58.214.17.66"

); System.out.

printf

(

"%s, %s"

, ipZone.getMainInfo(), ipZone.getSubInfo()); }

public

static

IPZone

getIpZoneByIp

(String ip)

{

return

qqWry.findIP(ip); } }/<code>


2.提供攔截器解析Ip並放入隊列

給SpringMVC 提供一個攔截器,在攔截器中 用於獲取當前的請求ip 並且通過 QQWryUtils 解析該ip ,封裝成IpAccessInfo 對象 存入 linkedBlockingQueue 隊列中去,這裡只是簡單處理下

<code> 4j

public

class

AccessRecordInterceptor

extends

HandlerInterceptorAdapter

{

public

boolean

preHandle

(HttpServletRequest request, HttpServletResponse response, Object handler)

throws

Exception

{ String ip = IpUtil.getIpAddress(request); log.info(

"【請求者 ip : {} 】"

, ip); IPZone ipZone = QQWryUtils.getIpZoneByIp(ip); log.info(

"【解析到 城市: {}】"

, ipZone.getMainInfo()); IpAccessInfo ipAccessInfo =

new

IpAccessInfo(); ipAccessInfo.setCity(ipZone.getMainInfo()); ipAccessInfo.setIp(ip); ipAccessInfo.setOperators(ipZone.getSubInfo());

try

{ IpQueue.linkedBlockingQueue.add(ipAccessInfo); }

catch

(IllegalStateException e) { log.warn(

"隊列已滿 "

); }

return

true

; } }/<code>


IpAccessInfo 我這裡入庫ip 信息

<code>

@Data

@Entity

@EntityListeners

(AuditingEntityListener.class) public class IpAccessInfo {

@Id

@GeneratedValue

(strategy = GenerationType.IDENTITY) private Long id;

private

String

ip

;

private

String

city

;

private

String

operators

; }/<code>


3.提供線程消費隊列,並且根據城市記錄訪問量

這裡提供 線程消費 隊列 並且使用redis的自增 記錄每個城市的訪問量,並且使用SpringBoot的 CommandLineRunner 接口,在項目啟動的時候 加載初始數據


<code> 
 
 (value = 

1

) 4j

public

class

IpQueue

implements

CommandLineRunner

{

public

static

final

LinkedBlockingQueue linkedBlockingQueue =

new

LinkedBlockingQueue(

10000

);

private

ThreadPoolTaskExecutor threadPoolTaskExecutor;

private

IpAccessInfoRepository ipAccessInfoRepository;

private

IpAccessCountRepository ipAccessCountRepository;

private

StringRedisTemplate redisTemplate;

public

void

run

(String... args)

throws

Exception

{ ipAccessCountRepository.findAll().forEach(ipAccessCount -> {

if

(!redisTemplate.hasKey(ipAccessCount.getCity())) { redisTemplate.opsForValue().set(ipAccessCount.getCity(), String.valueOf(ipAccessCount.getCount())); }

else

{ log.info(

"【存在: {} 】"

, ipAccessCount.getCity()); } }); log.info(

"【服務啟動 -------------- 監聽 隊列 IpQueue 】"

); IpAccessThread ipAccessThread =

new

IpAccessThread(linkedBlockingQueue, ipAccessInfoRepository, redisTemplate); threadPoolTaskExecutor.submit(ipAccessThread); }

static

class

IpAccessThread

implements

Runnable

{

private

LinkedBlockingQueue linkedBlockingQueue;

private

IpAccessInfoRepository ipAccessInfoRepository;

private

RedisTemplate redisTemplate;

public

IpAccessThread

(LinkedBlockingQueue linkedBlockingQueue, IpAccessInfoRepository ipAccessInfoRepository, RedisTemplate redisTemplate)

{

this

.linkedBlockingQueue = linkedBlockingQueue;

this

.ipAccessInfoRepository = ipAccessInfoRepository;

this

.redisTemplate = redisTemplate; }

public

void

run

()

{

while

(

true

) {

try

{ System.out.println(

"開始獲取 : "

); IpAccessInfo accessInfo = linkedBlockingQueue.take(); System.out.println(

"監聽到 : "

+ accessInfo);

if

(accessInfo.getCity().contains(

"省"

) && accessInfo.getCity().contains(

"市"

)) { String city = accessInfo.getCity(); city = city.substring(city.indexOf(

"省"

) +

1

, city.indexOf(

"市"

));

if

(redisTemplate.hasKey(city)) { redisTemplate.opsForValue().increment(city); } }

else

{ log.error(

"【異常 地理位置 {} 】"

, accessInfo.getCity()); } ipAccessInfoRepository.save(accessInfo); }

catch

(InterruptedException e) { e.printStackTrace(); } } } } }/<code>


4. Echarts + 百度地圖

由於本博客前端是用Vue 編寫的,所以下面的引入就是在Vue下引入的方式


4.1 在public/index.html中添加以下代碼

ak密鑰: 就是百度地圖AK密鑰,需要自己去百度地圖申請,或者網上找可用的ak

53oVIOgmSIejwV7EfphPgTynOZbIiVYu 網上找的可用的密鑰

<code>

<

script

type

=

"text/javascript"

src

=

"http://api.map.baidu.com/api?v=2.0&ak=你的密鑰"

>

script

>

/<code>


4.2 在vue.config.js中添加配置

主要是 externals 部分

<code>  

configureWebpack

: {

name

: name,

resolve

: {

alias

: {

'@'

: resolve(

'src'

) } },

externals

: {

'BMap'

:

'BMap'

,

'BMap_Symbol_SHAPE_POINT'

:

'BMap_Symbol_SHAPE_POINT'

} },/<code>


4.3 最後在vue main.js 文件中引入

<code>

import

BMap

from

'BMap require('

echarts/extension/bmap/bmap

')

/<code>


4.4 編寫展示Echarts+百度地圖的組件

可以參考echarts 網站https://echarts.apache.org/zh/index.html

需要注意 我這裡是從後臺拿的數據 ,是通過上面攔截器解析ip 後 記錄每個城市對應的訪問量存入 redis中的。

注意如果需要擴展其他城市,可以找到城市的經緯度,然後擴展 geoCoordMap 就行了。。

<code>

id="myChart"

style="width:100%;height:

1050px">

import

{

ipAccess

}

from

"@/api/charts/ip_access_api"

;

export

default

{

name:

"IpContent"

,

components:

{},

data()

{

return

{

chartData:

[

{

name:

"海門"

,

value:

9

},

{

name:

"鄂爾多斯"

,

value:

12

},

{

name:

"招遠"

,

value:

12

},

{

name:

"舟山"

,

value:

12

},

{

name:

"齊齊哈爾"

,

value:

14

},

{

name:

"鹽城"

,

value:

15

},

{

name:

"赤峰"

,

value:

16

},

{

name:

"青島"

,

value:

18

},

{

name:

"乳山"

,

value:

18

},

{

name:

"金昌"

,

value:

19

},

{

name:

"泉州"

,

value:

21

},

{

name:

"萊西"

,

value:

21

},

{

name:

"日照"

,

value:

21

},

{

name:

"膠南"

,

value:

22

},

{

name:

"南通"

,

value:

23

},

{

name:

"拉薩"

,

value:

24

},

{

name:

"雲浮"

,

value:

24

},

{

name:

"梅州"

,

value:

25

},

{

name:

"文登"

,

value:

25

},

{

name:

"上海"

,

value:

25

},

{

name:

"攀枝花"

,

value:

25

},

{

name:

"威海"

,

value:

25

},

{

name:

"承德"

,

value:

25

},

{

name:

"廈門"

,

value:

26

},

{

name:

"汕尾"

,

value:

26

},

{

name:

"潮州"

,

value:

26

},

{

name:

"丹東"

,

value:

27

},

{

name:

"太倉"

,

value:

27

},

{

name:

"曲靖"

,

value:

27

},

{

name:

"煙臺"

,

value:

28

},

{

name:

"福州"

,

value:

29

},

{

name:

"瓦房店"

,

value:

30

},

{

name:

"即墨"

,

value:

30

},

{

name:

"撫順"

,

value:

31

},

{

name:

"玉溪"

,

value:

31

},

{

name:

"張家口"

,

value:

31

},

{

name:

"陽泉"

,

value:

31

},

{

name:

"萊州"

,

value:

32

},

{

name:

"湖州"

,

value:

32

},

{

name:

"汕頭"

,

value:

32

},

{

name:

"崑山"

,

value:

33

},

{

name:

"寧波"

,

value:

33

},

{

name:

"湛江"

,

value:

33

},

{

name:

"揭陽"

,

value:

34

},

{

name:

"榮成"

,

value:

34

},

{

name:

"連雲港"

,

value:

35

},

{

name:

"葫蘆島"

,

value:

35

},

{

name:

"常熟"

,

value:

36

},

{

name:

"東莞"

,

value:

36

},

{

name:

"河源"

,

value:

36

},

{

name:

"淮安"

,

value:

36

},

{

name:

"泰州"

,

value:

36

},

{

name:

"南寧"

,

value:

37

},

{

name:

"營口"

,

value:

37

},

{

name:

"惠州"

,

value:

37

},

{

name:

"江陰"

,

value:

37

},

{

name:

"蓬萊"

,

value:

37

},

{

name:

"韶關"

,

value:

38

},

{

name:

"嘉峪關"

,

value:

38

},

{

name:

"廣州"

,

value:

38

},

{

name:

"延安"

,

value:

38

},

{

name:

"太原"

,

value:

39

},

{

name:

"清遠"

,

value:

39

},

{

name:

"中山"

,

value:

39

},

{

name:

"昆明"

,

value:

39

},

{

name:

"壽光"

,

value:

40

},

{

name:

"盤錦"

,

value:

40

},

{

name:

"長治"

,

value:

41

},

{

name:

"深圳"

,

value:

41

},

{

name:

"珠海"

,

value:

42

},

{

name:

"宿遷"

,

value:

43

},

{

name:

"咸陽"

,

value:

43

},

{

name:

"銅川"

,

value:

44

},

{

name:

"平度"

,

value:

44

},

{

name:

"佛山"

,

value:

44

},

{

name:

"海口"

,

value:

44

},

{

name:

"江門"

,

value:

45

},

{

name:

"章丘"

,

value:

45

},

{

name:

"肇慶"

,

value:

46

},

{

name:

"大連"

,

value:

47

},

{

name:

"臨汾"

,

value:

47

},

{

name:

"吳江"

,

value:

47

},

{

name:

"石嘴山"

,

value:

49

},

{

name:

"瀋陽"

,

value:

50

},

{

name:

"蘇州"

,

value:

50

},

{

name:

"茂名"

,

value:

50

},

{

name:

"嘉興"

,

value:

51

},

{

name:

"長春"

,

value:

51

},

{

name:

"膠州"

,

value:

52

},

{

name:

"銀川"

,

value:

52

},

{

name:

"張家港"

,

value:

52

},

{

name:

"三門峽"

,

value:

53

},

{

name:

"錦州"

,

value:

54

},

{

name:

"南昌"

,

value:

54

},

{

name:

"柳州"

,

value:

54

},

{

name:

"三亞"

,

value:

54

},

{

name:

"自貢"

,

value:

56

},

{

name:

"吉林"

,

value:

56

},

{

name:

"陽江"

,

value:

57

},

{

name:

"瀘州"

,

value:

57

},

{

name:

"西寧"

,

value:

57

},

{

name:

"宜賓"

,

value:

58

},

{

name:

"呼和浩特"

,

value:

58

},

{

name:

"成都"

,

value:

58

},

{

name:

"大同"

,

value:

58

},

{

name:

"鎮江"

,

value:

59

},

{

name:

"桂林"

,

value:

59

},

{

name:

"張家界"

,

value:

59

},

{

name:

"宜興"

,

value:

59

},

{

name:

"北海"

,

value:

60

},

{

name:

"西安"

,

value:

61

},

{

name:

"金壇"

,

value:

62

},

{

name:

"東營"

,

value:

62

},

{

name:

"牡丹江"

,

value:

63

},

{

name:

"遵義"

,

value:

63

},

{

name:

"紹興"

,

value:

63

},

{

name:

"揚州"

,

value:

64

},

{

name:

"常州"

,

value:

64

},

{

name:

"濰坊"

,

value:

65

},

{

name:

"重慶"

,

value:

66

},

{

name:

"台州"

,

value:

67

},

{

name:

"南京"

,

value:

67

},

{

name:

"濱州"

,

value:

70

},

{

name:

"貴陽"

,

value:

71

},

{

name:

"無錫"

,

value:

71

},

{

name:

"本溪"

,

value:

71

},

{

name:

"克拉瑪依"

,

value:

72

},

{

name:

"渭南"

,

value:

72

},

{

name:

"馬鞍山"

,

value:

72

},

{

name:

"寶雞"

,

value:

72

},

{

name:

"焦作"

,

value:

75

},

{

name:

"句容"

,

value:

75

},

{

name:

"北京"

,

value:

79

},

{

name:

"徐州"

,

value:

79

},

{

name:

"衡水"

,

value:

80

},

{

name:

"包頭"

,

value:

80

},

{

name:

"綿陽"

,

value:

80

},

{

name:

"烏魯木齊"

,

value:

84

},

{

name:

"棗莊"

,

value:

84

},

{

name:

"杭州"

,

value:

84

},

{

name:

"淄博"

,

value:

85

},

{

name:

"鞍山"

,

value:

86

},

{

name:

"溧陽"

,

value:

86

},

{

name:

"庫爾勒"

,

value:

86

},

{

name:

"安陽"

,

value:

90

},

{

name:

"開封"

,

value:

90

},

{

name:

"濟南"

,

value:

92

},

{

name:

"德陽"

,

value:

93

},

{

name:

"溫州"

,

value:

95

},

{

name:

"九江"

,

value:

96

},

{

name:

"邯鄲"

,

value:

98

},

{

name:

"臨安"

,

value:

99

},

{

name:

"蘭州"

,

value:

99

},

{

name:

"滄州"

,

value:

100

},

{

name:

"臨沂"

,

value:

103

},

{

name:

"南充"

,

value:

104

},

{

name:

"天津"

,

value:

105

},

{

name:

"富陽"

,

value:

106

},

{

name:

"泰安"

,

value:

112

},

{

name:

"諸暨"

,

value:

112

},

{

name:

"鄭州"

,

value:

113

},

{

name:

"哈爾濱"

,

value:

114

},

{

name:

"聊城"

,

value:

116

},

{

name:

"蕪湖"

,

value:

117

},

{

name:

"唐山"

,

value:

119

},

{

name:

"平頂山"

,

value:

119

},

{

name:

"邢臺"

,

value:

119

},

{

name:

"德州"

,

value:

120

},

{

name:

"濟寧"

,

value:

120

},

{

name:

"荊州"

,

value:

127

},

{

name:

"宜昌"

,

value:

130

},

{

name:

"義烏"

,

value:

132

},

{

name:

"麗水"

,

value:

133

},

{

name:

"洛陽"

,

value:

134

},

{

name:

"秦皇島"

,

value:

136

},

{

name:

"株洲"

,

value:

143

},

{

name:

"石家莊"

,

value:

147

},

{

name:

"萊蕪"

,

value:

148

},

{

name:

"常德"

,

value:

152

},

{

name:

"保定"

,

value:

153

},

{

name:

"湘潭"

,

value:

154

},

{

name:

"金華"

,

value:

157

},

{

name:

"岳陽"

,

value:

169

},

{

name:

"長沙"

,

value:

175

},

{

name:

"衢州"

,

value:

177

},

{

name:

"廊坊"

,

value:

193

},

{

name:

"菏澤"

,

value:

1941

},

{

name:

"合肥"

,

value:

2291

},

{

name:

"武漢"

,

value:

2731

},

{

name:

"大慶"

,

value:

2791

},

],

geoCoordMap:

{

海門:

[121.15,

31.89

],

鄂爾多斯:

[109.781327,

39.608266

],

招遠:

[120.38,

37.35

],

舟山:

[122.207216,

29.985295

],

齊齊哈爾:

[123.97,

47.33

],

鹽城:

[120.13,

33.38

],

赤峰:

[118.87,

42.28

],

青島:

[120.33,

36.07

],

乳山:

[121.52,

36.89

],

金昌:

[102.188043,

38.520089

],

泉州:

[118.58,

24.93

],

萊西:

[120.53,

36.86

],

日照:

[119.46,

35.42

],

膠南:

[119.97,

35.88

],

南通:

[121.05,

32.08

],

拉薩:

[91.11,

29.97

],

雲浮:

[112.02,

22.93

],

梅州:

[116.1,

24.55

],

文登:

[122.05,

37.2

],

上海:

[121.48,

31.22

],

攀枝花:

[101.718637,

26.582347

],

威海:

[122.1,

37.5

],

承德:

[117.93,

40.97

],

廈門:

[118.1,

24.46

],

汕尾:

[115.375279,

22.786211

],

潮州:

[116.63,

23.68

],

丹東:

[124.37,

40.13

],

太倉:

[121.1,

31.45

],

曲靖:

[103.79,

25.51

],

煙臺:

[121.39,

37.52

],

福州:

[119.3,

26.08

],

瓦房店:

[121.979603,

39.627114

],

即墨:

[120.45,

36.38

],

撫順:

[123.97,

41.97

],

玉溪:

[102.52,

24.35

],

張家口:

[114.87,

40.82

],

陽泉:

[113.57,

37.85

],

萊州:

[119.942327,

37.177017

],

湖州:

[120.1,

30.86

],

汕頭:

[116.69,

23.39

],

崑山:

[120.95,

31.39

],

寧波:

[121.56,

29.86

],

湛江:

[110.359377,

21.270708

],

揭陽:

[116.35,

23.55

],

榮成:

[122.41,

37.16

],

連雲港:

[119.16,

34.59

],

葫蘆島:

[120.836932,

40.711052

],

常熟:

[120.74,

31.64

],

東莞:

[113.75,

23.04

],

河源:

[114.68,

23.73

],

淮安:

[119.15,

33.5

],

泰州:

[119.9,

32.49

],

南寧:

[108.33,

22.84

],

營口:

[122.18,

40.65

],

惠州:

[114.4,

23.09

],

江陰:

[120.26,

31.91

],

蓬萊:

[120.75,

37.8

],

韶關:

[113.62,

24.84

],

嘉峪關:

[98.289152,

39.77313

],

廣州:

[113.23,

23.16

],

延安:

[109.47,

36.6

],

太原:

[112.53,

37.87

],

清遠:

[113.01,

23.7

],

中山:

[113.38,

22.52

],

昆明:

[102.73,

25.04

],

壽光:

[118.73,

36.86

],

盤錦:

[122.070714,

41.119997

],

長治:

[113.08,

36.18

],

深圳:

[114.07,

22.62

],

珠海:

[113.52,

22.3

],

宿遷:

[118.3,

33.96

],

咸陽:

[108.72,

34.36

],

銅川:

[109.11,

35.09

],

平度:

[119.97,

36.77

],

佛山:

[113.11,

23.05

],

海口:

[110.35,

20.02

],

江門:

[113.06,

22.61

],

章丘:

[117.53,

36.72

],

肇慶:

[112.44,

23.05

],

大連:

[121.62,

38.92

],

臨汾:

[111.5,

36.08

],

吳江:

[120.63,

31.16

],

石嘴山:

[106.39,

39.04

],

瀋陽:

[123.38,

41.8

],

蘇州:

[120.62,

31.32

],

茂名:

[110.88,

21.68

],

嘉興:

[120.76,

30.77

],

長春:

[125.35,

43.88

],

膠州:

[120.03336,

36.264622

],

銀川:

[106.27,

38.47

],

張家港:

[120.555821,

31.875428

],

三門峽:

[111.19,

34.76

],

錦州:

[121.15,

41.13

],

南昌:

[115.89,

28.68

],

柳州:

[109.4,

24.33

],

三亞:

[109.511909,

18.252847

],

自貢:

[104.778442,

29.33903

],

吉林:

[126.57,

43.87

],

陽江:

[111.95,

21.85

],

瀘州:

[105.39,

28.91

],

西寧:

[101.74,

36.56

],

宜賓:

[104.56,

29.77

],

呼和浩特:

[111.65,

40.82

],

成都:

[104.06,

30.67

],

大同:

[113.3,

40.12

],

鎮江:

[119.44,

32.2

],

桂林:

[110.28,

25.29

],

張家界:

[110.479191,

29.117096

],

宜興:

[119.82,

31.36

],

北海:

[109.12,

21.49

],

西安:

[108.95,

34.27

],

金壇:

[119.56,

31.74

],

東營:

[118.49,

37.46

],

牡丹江:

[129.58,

44.6

],

遵義:

[106.9,

27.7

],

紹興:

[120.58,

30.01

],

揚州:

[119.42,

32.39

],

常州:

[119.95,

31.79

],

濰坊:

[119.1,

36.62

],

重慶:

[106.54,

29.59

],

台州:

[121.420757,

28.656386

],

南京:

[118.78,

32.04

],

濱州:

[118.03,

37.36

],

貴陽:

[106.71,

26.57

],

無錫:

[120.29,

31.59

],

本溪:

[123.73,

41.3

],

克拉瑪依:

[84.77,

45.59

],

渭南:

[109.5,

34.52

],

馬鞍山:

[118.48,

31.56

],

寶雞:

[107.15,

34.38

],

焦作:

[113.21,

35.24

],

句容:

[119.16,

31.95

],

北京:

[116.46,

39.92

],

徐州:

[117.2,

34.26

],

衡水:

[115.72,

37.72

],

包頭:

[110,

40.58

],

綿陽:

[104.73,

31.48

],

烏魯木齊:

[87.68,

43.77

],

棗莊:

[117.57,

34.86

],

杭州:

[120.19,

30.26

],

淄博:

[118.05,

36.78

],

鞍山:

[122.85,

41.12

],

溧陽:

[119.48,

31.43

],

庫爾勒:

[86.06,

41.68

],

安陽:

[114.35,

36.1

],

開封:

[114.35,

34.79

],

濟南:

[117,

36.65

],

德陽:

[104.37,

31.13

],

溫州:

[120.65,

28.01

],

九江:

[115.97,

29.71

],

邯鄲:

[114.47,

36.6

],

臨安:

[119.72,

30.23

],

蘭州:

[103.73,

36.03

],

滄州:

[116.83,

38.33

],

臨沂:

[118.35,

35.05

],

南充:

[106.110698,

30.837793

],

天津:

[117.2,

39.13

],

富陽:

[119.95,

30.07

],

泰安:

[117.13,

36.18

],

諸暨:

[120.23,

29.71

],

鄭州:

[113.65,

34.76

],

哈爾濱:

[126.63,

45.75

],

聊城:

[115.97,

36.45

],

蕪湖:

[118.38,

31.33

],

唐山:

[118.02,

39.63

],

平頂山:

[113.29,

33.75

],

邢臺:

[114.48,

37.05

],

德州:

[116.29,

37.45

],

濟寧:

[116.59,

35.38

],

荊州:

[112.239741,

30.335165

],

宜昌:

[111.3,

30.7

],

義烏:

[120.06,

29.32

],

麗水:

[119.92,

28.45

],

洛陽:

[112.44,

34.7

],

秦皇島:

[119.57,

39.95

],

株洲:

[113.16,

27.83

],

石家莊:

[114.48,

38.03

],

萊蕪:

[117.67,

36.19

],

常德:

[111.69,

29.05

],

保定:

[115.48,

38.85

],

湘潭:

[112.91,

27.87

],

金華:

[119.64,

29.12

],

岳陽:

[113.09,

29.37

],

長沙:

[113,

28.21

],

衢州:

[118.88,

28.97

],

廊坊:

[116.7,

39.53

],

菏澤:

[115.480656,

35.23375

],

合肥:

[117.27,

31.86

],

武漢:

[114.31,

30.52

],

大慶:

[125.03,

46.58

],

},

};

},

methods:

{

drawLine()

{

var

data

=

this.chartData;

var

geoCoordMap

=

this.geoCoordMap;

//

基於準備好的dom,初始化echarts實例

let

myChart

=

this.$echarts.init(document.getElementById("myChart"));

var

convertData

=

function

(data)

{

var

res

=

[];

for

(var

i

=

0

;

i

<

data.length;

i++)

{

var

geoCoord

=

geoCoordMap[data[i].name];

if

(geoCoord)

{

res.push({

name:

data[i].name,

value:

geoCoord.concat(data[i].value),

});

}

}

return

res;

};

function

renderItem(params,

api)

{

var

coords

=

[

//

[116.7,39.53],

//

[103.73,36.03],

//

[112.91,27.87],

//

[120.65,28.01],

//

[119.57,39.95]

];

var

points

=

[];

for

(var

i

=

0

;

i

<

coords.length;

i++)

{

points.push(api.coord(coords[i]));

}

var

color

=

api.visual("color");

return

{

//

type:

"polygon"

,

//

shape:

{

//

points:

myChart.graphic.clipPointsByRect(points,

{

//

x:

params.coordSys.x,

//

y:

params.coordSys.y,

//

width:

params.coordSys.width,

//

height:

params.coordSys.height,

//

}),

//

},

//

style:

api.style({

//

fill:

color,

//

stroke:

myChart.color.lift(color),

//

}),

};

}

//

繪製圖表

myChart.setOption({

backgroundColor:

"transparent"

,

title:

{

text:

"全國主要城市訪問量"

,

subtext:

"訪問統計"

,

sublink:

"http://www.pm25.in"

,

left:

"center"

,

textStyle:

{

color:

"#fff"

,

},

},

tooltip:

{

trigger:

"item"

,

},

bmap:

{

center:

[107.114129,

37.550339

],

zoom:

5

,

roam:

true

,

mapStyle:

{

styleJson:

[

{

featureType:

"water"

,

elementType:

"all"

,

stylers:

{

color:

"#044161"

,

},

},

{

featureType:

"land"

,

elementType:

"all"

,

stylers:

{

color:

"#004981"

,

},

},

{

featureType:

"boundary"

,

elementType:

"geometry"

,

stylers:

{

color:

"#064f85"

,

},

},

{

featureType:

"railway"

,

elementType:

"all"

,

stylers:

{

visibility:

"off"

,

},

},

{

featureType:

"highway"

,

elementType:

"geometry"

,

stylers:

{

color:

"#004981"

,

},

},

{

featureType:

"highway"

,

elementType:

"geometry.fill"

,

stylers:

{

color:

"#005b96"

,

lightness:

1

,

},

},

{

featureType:

"highway"

,

elementType:

"labels"

,

stylers:

{

visibility:

"off"

,

},

},

{

featureType:

"arterial"

,

elementType:

"geometry"

,

stylers:

{

color:

"#004981"

,

},

},

{

featureType:

"arterial"

,

elementType:

"geometry.fill"

,

stylers:

{

color:

"#00508b"

,

},

},

{

featureType:

"poi"

,

elementType:

"all"

,

stylers:

{

visibility:

"off"

,

},

},

{

featureType:

"green"

,

elementType:

"all"

,

stylers:

{

color:

"#056197"

,

visibility:

"off"

,

},

},

{

featureType:

"subway"

,

elementType:

"all"

,

stylers:

{

visibility:

"off"

,

},

},

{

featureType:

"manmade"

,

elementType:

"all"

,

stylers:

{

visibility:

"off"

,

},

},

{

featureType:

"local"

,

elementType:

"all"

,

stylers:

{

visibility:

"off"

,

},

},

{

featureType:

"arterial"

,

elementType:

"labels"

,

stylers:

{

visibility:

"off"

,

},

},

{

featureType:

"boundary"

,

elementType:

"geometry.fill"

,

stylers:

{

color:

"#029fd4"

,

},

},

{

featureType:

"building"

,

elementType:

"all"

,

stylers:

{

color:

"#1a5787"

,

},

},

{

featureType:

"label"

,

elementType:

"all"

,

stylers:

{

visibility:

"off"

,

},

},

],

},

},

series:

[

{

name:

"訪問統計"

,

type:

"scatter"

,

coordinateSystem:

"bmap"

,

data:

convertData(data),

encode:

{

value:

2

,

},

symbolSize:

function

(val)

{

//

var

value

=

val[2];

//

var

l

=

0

;

//

while

(value

>=

1

)

{

//

value

=

value

/

10

;

//

l++;

//

}

//

var

j

=

Math.pow(10,

l

-

2

);

//

console.log(l);

//

console.log(j);

return

val[2]

/

100

;

//

return

val[2];

},

label:

{

formatter:

"{b}"

,

position:

"right"

,

},

itemStyle:

{

color:

"#ddb926"

,

},

emphasis:

{

label:

{

show:

true

,

},

},

},

{

name:

"Top 5"

,

type:

"effectScatter"

,

coordinateSystem:

"bmap"

,

data:

convertData(

data

.sort(function

(a,

b)

{

return

b.value

-

a.value;

})

.slice(0,

6

)

),

encode:

{

value:

2

,

},

symbolSize:

function

(val)

{

return

val[2]

/

100

;

},

showEffectOn:

"emphasis"

,

rippleEffect:

{

brushType:

"stroke"

,

},

hoverAnimation:

true

,

label:

{

formatter:

"{b}"

,

position:

"right"

,

show:

true

,

},

itemStyle:

{

color:

"#f4e925"

,

shadowBlur:

10

,

shadowColor:

"#333"

,

},

zlevel:

1

,

},

{

type:

"custom"

,

coordinateSystem:

"bmap"

,

//

renderItem:

renderItem,

itemStyle:

{

opacity:

0.5

,

},

animation:

false

,

silent:

true

,

data:

[0],

z:

-10

,

},

],

});

myChart.on("finished",

()

=>

{

//

從echarts對象中獲取bmap對象

var

bmap

=

myChart.getModel().getComponent("bmap").getBMap();

console.log(20180925104046,

bmap.getZoom());

//

設置最小縮放值

bmap.setMinZoom(5);

//

//

設置最大縮放值

bmap.setMaxZoom(5);

//

縮放結束後的事件

bmap.addEventListener("zoomend",

function

()

{

//

打印出當前縮放值

console.log(20180925104046,

bmap.getZoom());

});

});

},

init()

{

ipAccess().then((response)

=>

{

console.log(response);

this.chartData

=

[];

this.chartData

=

response.data;

this.drawLine();

});

},

},

mounted()

{

//1.查詢後臺數據

this.init();

},

};

/<code>


總結

本篇主要記錄一下 關於如何統計網站訪問量,並且利用Echarts + 百度地圖 友好的展示出來

1.提供攔截器 攔截Ip 請求,獲取到 對應的 城市 我這裡使用 純真qqwry,網上也有其他方法。。

2.解析後 可以根據 key = 城市 存入redis中,利用redis 的 自增操作來 統計城市的 訪問量,或者也可以通過Map 等去統計,然後刷入到存儲中 。。 方式很多

3.利用echarts+百度地圖案例,暫時統計的數據,可以參考echarts官網


歡迎訪問 我的博客網站 https://www.askajohnny.com


分享到:


相關文章: