国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

惠州做網(wǎng)站公司哪家好競價推廣價格

惠州做網(wǎng)站公司哪家好,競價推廣價格,網(wǎng)站建設(shè)流程xbceo,百度網(wǎng)站URL提交入口目錄 前言 一、后臺數(shù)據(jù)服務(wù)設(shè)計 1、數(shù)據(jù)庫查詢 2、模型層對象設(shè)計 3、業(yè)務(wù)層和控制層設(shè)計 二、Echarts前端配置 1、地圖的展示 2、次數(shù)排名統(tǒng)計 三、最終結(jié)果展示 1、地圖展示 2、圖表展示 總結(jié) 前言 在之前的博客中基于SpringBoot和PotsGIS的各省地震震發(fā)可視化分…

目錄

前言

一、后臺數(shù)據(jù)服務(wù)設(shè)計

1、數(shù)據(jù)庫查詢

2、模型層對象設(shè)計?

3、業(yè)務(wù)層和控制層設(shè)計

二、Echarts前端配置

1、地圖的展示

2、次數(shù)排名統(tǒng)計

三、最終結(jié)果展示

1、地圖展示

2、圖表展示

總結(jié)


前言

????????在之前的博客中基于SpringBoot和PotsGIS的各省地震震發(fā)可視化分析,在這篇博客中采用二維地圖的展現(xiàn)形式對全國各省的地震震發(fā)情況進行了綜合展示。博客發(fā)布之后,有小伙伴找到博主說,對于Leaflet等地圖可視化框架不熟悉,能不能使用echarts進行替代方案開發(fā)。同時在地圖分析的同時,能否加上一些統(tǒng)計圖表,讓數(shù)據(jù)更加直觀。在此基礎(chǔ)上,就有了本文編寫的初衷。

????????本文主要面向?qū)τ贚eaflet等gis可視化框架不熟悉的朋友,在不使用gis可視化框架的同時進行地圖應(yīng)用的開發(fā)。本文將重點講解如何使用SpringBoot進行后端接口的開發(fā),基于后端java語言,直接構(gòu)造前端echarts圖表展示需要的數(shù)據(jù)。文章的最后,我們會輸出一個使用Echarts開發(fā)的全國各省地震震發(fā)情況統(tǒng)計圖、全國地震次數(shù)排名前10名和倒數(shù)10名(相對安全)的省份以及完整的統(tǒng)計數(shù)據(jù)列表。雖然在之前的博客中也對echarts組件進行了一些介紹,溫故而知新,這里不僅回顧了一些地圖開發(fā)的基礎(chǔ)知識,同時結(jié)合地震各省份分布統(tǒng)計的需求場景更加有助朋友們理解。

一、后臺數(shù)據(jù)服務(wù)設(shè)計

????????后臺數(shù)據(jù)主要用于為前端提供數(shù)據(jù)來源,將各省份的地震震發(fā)數(shù)據(jù)從數(shù)據(jù)庫中查詢出來,然后以json的形式為前端提供。閑言少敘,下面直接進行正式的代碼編寫?;A(chǔ)采用的技術(shù)框架都是熟悉的框架,在之前的博客中也對開發(fā)框架進行了介紹,不再贅述。

1、數(shù)據(jù)庫查詢

????????為了能實現(xiàn)全國各個省份數(shù)據(jù)和地震信息進行關(guān)聯(lián)查詢,同時根據(jù)省份編碼進行分組查詢。這里涉及的表有兩張。第一張是biz_province(全國省份行政區(qū)劃信息表),另一張表是我們之前采集的biz_earthquake_info(地震信息表)。通過空間計算,將地震信息表中的位置和省份表進行包含計算,將地震信息包含在省份面中納入所屬省份口徑。

圖 1 省份信息表

圖2 地震信息表

?????????我們使用一下語句進行空間計算和分組統(tǒng)計計算:

select p.code data_id,max(p.name) data_name,count(1) data_value  from biz_province p,biz_earthquake_info t where st_contains(p.geom, ST_GeomFromText(format('point(%s %s)',t.eq_lng,t.eq_lat),4326))group by p.code order by data_value desc;

????????將以上的sql語句在數(shù)據(jù)庫中執(zhí)行以后可以得到一下結(jié)果:

2、模型層對象設(shè)計?

????????模型層對象主要包括統(tǒng)計的視圖對象即VO,還有業(yè)務(wù)層對象,比如數(shù)據(jù)訪問層對象和業(yè)務(wù)對象。數(shù)據(jù)訪問層對象將數(shù)據(jù)庫中查詢的結(jié)果寫入到視圖對象中。首先來看一下視圖對象的定義,為了方便在echarts中進行展示,我們將展示的值分成統(tǒng)計指標、唯一id、統(tǒng)計指標值。對應(yīng)的視圖對象如下,這個類其實是通用的,一般的統(tǒng)計值都可以用這個視圖對象來接收值:

package com.yelang.project.extend.earthquake.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class EarthQuakeProvinceStatVO implements Serializable{private static final long serialVersionUID = 5394617081879927259L;private String dataId;private String dataName;private BigDecimal dataValue;
}

????????定義好了視圖對象之后,我們還需要將數(shù)據(jù)庫的sql語句在代碼中執(zhí)行,在數(shù)據(jù)訪問層中執(zhí)行以下代碼完成數(shù)據(jù)訪問。從性能的角度考慮,我們可以把這個查詢結(jié)果進行緩存,在下一次數(shù)據(jù)展示的時候可以提高訪問速度,這里為了減少不必要的代碼,咱不提供實現(xiàn)。

static final String FIND_EARTH_QUAKE_LIST = "<script>"+ "select p.code data_id,max(p.name) data_name,count(1) data_value  from biz_province p,biz_earthquake_info t where "+ " st_contains(p.geom, ST_GeomFromText(format('point(%s %s)',t.eq_lng,t.eq_lat),4326)) "+ " group by p.code order by data_value desc "+ "</script>";/*** 全國各省地震震發(fā)統(tǒng)計* @return*/@Select(FIND_EARTH_QUAKE_LIST)List<EarthQuakeProvinceStatVO> findEarthQuakeStatList();

3、業(yè)務(wù)層和控制層設(shè)計

????????相對而言,這里將重點介紹業(yè)務(wù)層的設(shè)計。我們將在后臺采用com.github.abel533.echarts組件直接生成前端所需要的echarts數(shù)據(jù)。兩個省份地震次數(shù)排名柱狀統(tǒng)計圖幾乎是一致的。在這里將生成圖表數(shù)據(jù)的方法統(tǒng)一封裝出來,根據(jù)不同的數(shù)據(jù)源傳入來生成。關(guān)鍵代碼如下:

public String convert2ProvinceLine(List<EarthQuakeProvinceStatVO> dataList) {String result = "";GsonOption option = new GsonOption();option.title().text("各省地震震發(fā)次數(shù)統(tǒng)計圖(單位:次)");option.tooltip().trigger(Trigger.axis);option.legend("地震次數(shù)");option.legend().y(Y.bottom).padding(0);option.toolbox().show(true).feature(new MagicType(Magic.line, Magic.bar).show(true), Tool.saveAsImage);option.calculable(true);List<String> provinces = new ArrayList<String>();List<Integer> eqCounts = new ArrayList<Integer>();for (EarthQuakeProvinceStatVO vo : dataList) {provinces.add(vo.getDataName());eqCounts.add(vo.getDataValue().intValue());}CategoryAxis categoreAxis = new CategoryAxis();categoreAxis.data(provinces.toArray()).axisLabel().interval(0).rotate(20);option.xAxis(categoreAxis);option.yAxis(new ValueAxis());Bar bar = new Bar("地震次數(shù)");bar.data(eqCounts.toArray());bar.markPoint().data(new PointData().type(MarkType.max).name("最大值"), new PointData().type(MarkType.min).name("最小值"));bar.markLine().data(new PointData().type(MarkType.average).name("平均值"));option.series(bar);result = option.toString();return result;}

????????兩個生成前top10,和倒數(shù)top10的ehcarts數(shù)據(jù)方法如下:

@Override
public String buildProvinceLineMaxTop10(List<EarthQuakeProvinceStatVO> dataList) {List<EarthQuakeProvinceStatVO> top10  = new ArrayList<EarthQuakeProvinceStatVO>(10);for(int i =0;i<10;i++) {top10.add(dataList.get(i));}return convert2ProvinceLine(top10);
}@Override
public String buildProvinceLineMinTop10(List<EarthQuakeProvinceStatVO> dataList) {List<EarthQuakeProvinceStatVO> top10  = new ArrayList<EarthQuakeProvinceStatVO>(10);for(int i = dataList.size() - 1;i> dataList.size() - 11;i--) {top10.add(dataList.get(i));}return convert2ProvinceLine(top10);
}

二、Echarts前端配置

????????完事具備,只欠東風。在后端將相應(yīng)的數(shù)據(jù)和接口都準備妥當之后,我們來進行前端的界面開發(fā)。對echarts進行初始化。在地圖開發(fā)過程當中有一些需要注意的地方,一定需要注意。

1、地圖的展示

????????地圖的展示,這里采用echarts的map組件,因為在組件采用的時候已經(jīng)默認注冊了china這個圖源。因此我們可以直接使用,而無需再次注入。首先需要定義map的掛載組件。

<div id="tab-1" class="tab-pane active"><div class="panel-body"><div class="row"><div class="col-sm-12"><div class="ibox float-e-margins"><div class="ibox-content"><div style="height:600px" id="echarts-map-chart"></div></div></div></div></div></div></div>

????????地圖的展示元素設(shè)置好之后,需要采用javascript的方式對數(shù)據(jù)進行設(shè)置。下面是關(guān)鍵代碼:

mapChart = echarts.init(document.getElementById("echarts-map-chart"));mapoption = {title : {text: '全國各省地震次數(shù)統(tǒng)計',subtext: '數(shù)源來源中國國家地震局,單位:次',x:'left'},tooltip : {trigger: 'item'},legend: {orient: 'vertical',x:'right',y:'center',data:['地震次數(shù)']},dataRange: {min: 0,max: 2300,x: 'left',y: 'bottom',text:['高','低'],           // 文本,默認為數(shù)值文本calculable : true},toolbox: {show: true,orient : 'vertical',x: 'right',y: 'bottom',feature : {mark : {show: true},dataView : {show: true, readOnly: false},restore : {show: true},saveAsImage : {show: true}}},roamController: {show: true,x: 'right',mapTypeControl: {'china': true}},series : [{name: '地震次數(shù)',type: 'map',mapType: 'china',roam: false,zoom:1.2,//視覺比例大小,1.2即為原有大小的1.2倍itemStyle:{normal:{label:{show:true}},emphasis:{label:{show:true}}},data:[]}]};initProvinceMap();//地圖初始化

????????下面是地圖初始化的核心邏輯,這里采用ajax的方式進行數(shù)據(jù)加載,先給出核心代碼:

function initProvinceMap(){$.ajax({url: ctx + "eq/province/echartslist",data: {},dataType : "json",success: function(serverdata){if(serverdata != ""){var serverJsonData = serverdata.data;var jsonData = new Array();for(var i=0;i<serverJsonData.length;i++){var pname = serverJsonData[i].dataName;if(pname.indexOf("黑龍江") != -1 || pname.indexOf("內(nèi)蒙古") != -1){pname = pname.substring(0,3);}else{pname = pname.substring(0,2);}jsonData.push({name: pname,value: serverJsonData[i].dataValue});}mapoption.series[0].data=jsonData;mapChart.setOption(mapoption,true);$(window).resize(mapChart.resize);charts.push(mapChart);}},error:function(data){parent.layer.alert('系統(tǒng)發(fā)生錯誤!', {icon: 5});}});}

????????這里需要注意地方是,echarts中的各省份名稱是不太準確的,比如新疆維吾爾族自治區(qū),湖南省,北京市等等。省級行政區(qū)域名稱只取了前兩位,而黑龍江和內(nèi)蒙古則是取了前3位。這里采用的方式是采用前端數(shù)據(jù)構(gòu)造的方法,將后端的數(shù)據(jù)按照echarts的規(guī)范來準換。因此在上述代碼中,對于黑龍江等省份截取前3位。其它省份或者直轄市自治區(qū)采用截取前2位的方式。

2、次數(shù)排名統(tǒng)計

????????次數(shù)排名統(tǒng)計,我們設(shè)計了兩個柱狀統(tǒng)計圖,分別從次數(shù)最多和最少分別取前10進行數(shù)據(jù)展示。為了完整顯示全國各省份的主要信息,我們也提供完整的數(shù)據(jù)表格清單。柱狀統(tǒng)計圖的關(guān)鍵代碼如下:

provinceLineChart = echarts.init(document.getElementById("echarts-province-chart"));
minprovinceChart = echarts.init(document.getElementById("echarts-minprovince-chart"));
$(window).resize(provinceLineChart.resize);
$(window).resize(minprovinceChart.resize);
charts.push(provinceLineChart);
charts.push(minprovinceChart);
initProvinceChart();

????????同樣圖表的數(shù)據(jù)初始化采用ajax的方式調(diào)用,關(guān)鍵代碼如下:

function initProvinceChart(){$.ajax({type: "POST",url: ctx + "eq/province/echarts/provinceline",data: {},dataType : "json",success: function(serverdata){if(serverdata != ""){var serverJsonData = eval('('+serverdata.maxdata+')');provinceLineChart.setOption(serverJsonData,true);$(window).resize(provinceLineChart.resize);var minData = eval('('+serverdata.mindata+')');minprovinceChart.setOption(minData,true);$(window).resize(minprovinceChart.resize);}},error:function(data){parent.layer.alert('系統(tǒng)發(fā)生錯誤!', {icon: 5});}});}

三、最終結(jié)果展示

????????經(jīng)過前后端功能的設(shè)計和開發(fā),在完成上述代碼的開發(fā)之后,我們來看一下實際的效果。看看全國各省的地震震發(fā)情況究竟是怎么樣的。

1、地圖展示

????????通過echarts圖表可以很清楚的看到,在我國的西北和西南,地震的震發(fā)次數(shù)是非常多,地殼活動也是非常的活躍,新疆維吾爾族自治區(qū),從次數(shù)來看一騎絕塵,新疆的地震次數(shù)還是非常多的(從公開數(shù)據(jù)來看)都變成紅色的。 具體的數(shù)據(jù)可以使用鼠標懸浮到對應(yīng)省份上會懸浮提示地震的次數(shù),如下圖所示:

2、圖表展示

????????圖表展示將根據(jù)地震的震發(fā)次數(shù),將次數(shù)最多的top10和最少的top10進行展示。方便大家對全國的相關(guān)數(shù)據(jù)有一個直觀的掌握。首先來看一下地震次數(shù)最多的前10名是哪幾個省份。

?????????地震次數(shù)最多的前10名依次是:新疆維吾爾自治區(qū)、四川省、西藏自治區(qū)、云南省、青海省、河北省、臺灣省、內(nèi)蒙古自治區(qū)、遼寧省。看完次數(shù)最多前10的,再來看安全系數(shù)最高的那幾個省。

????????按照次數(shù)分別是上海市、海南省、江西省、湖南省、福建省、天津市、北京市、河南省、山東省、江蘇省。 其它沒有進入統(tǒng)計圖的省份具體次數(shù)如下:

總結(jié)

????????以上就是本文的主要內(nèi)容,本文主要面向?qū)τ贚eaflet等gis可視化框架不熟悉的朋友,在不使用gis可視化框架的同時進行地圖應(yīng)用的開發(fā)。本文將重點講解如何使用SpringBoot進行后端接口的開發(fā),基于后端java語言,直接構(gòu)造前端echarts圖表展示需要的數(shù)據(jù)。文章的最后,我們會輸出一個使用Echarts開發(fā)的全國各省地震震發(fā)情況統(tǒng)計圖、全國地震次數(shù)排名前10名和倒數(shù)10名(相對安全)的省份以及完整的統(tǒng)計數(shù)據(jù)列表。行文倉促,難免有諸多不足之處,歡迎朋友們在評論區(qū)批評指正,萬分感謝。

http://m.aloenet.com.cn/news/30894.html

相關(guān)文章:

  • 小程序 微網(wǎng)站南寧網(wǎng)站關(guān)鍵詞推廣
  • 做網(wǎng)站的圖片Pc端和手機端的區(qū)別青島愛城市網(wǎng)app官方網(wǎng)站
  • 官方網(wǎng)站如何做外貿(mào)seo推廣招聘
  • 網(wǎng)上訂酒店 網(wǎng)站開發(fā)百度知道客服電話
  • 軟件開發(fā)工具有哪些基本功能搜索引擎優(yōu)化師工資
  • 怎樣用php做網(wǎng)站北京seo地址
  • 網(wǎng)站空間租用多少錢南寧網(wǎng)
  • 哪個網(wǎng)站做的系統(tǒng)好成功的網(wǎng)絡(luò)營銷案例有哪些
  • 做購物網(wǎng)站哪家公司好廣告推廣軟文案例
  • 上海網(wǎng)站設(shè)計專業(yè)團隊知乎推廣合作
  • 路橋網(wǎng)站制作制作網(wǎng)頁教程
  • 鎮(zhèn)江網(wǎng)站關(guān)鍵字優(yōu)化公司百度地圖在線查詢
  • 網(wǎng)站工程師培訓學校網(wǎng)站是怎么做的
  • 網(wǎng)站建設(shè)學多久中鐵建設(shè)集團有限公司
  • 合肥網(wǎng)站建站推廣瀏覽廣告賺錢的平臺
  • 珠海網(wǎng)站設(shè)計全球十大搜索引擎排名及網(wǎng)址
  • 商城網(wǎng)站源代碼關(guān)鍵詞包括哪些內(nèi)容
  • 建網(wǎng)站公司聯(lián)系方式關(guān)鍵洞察力
  • ps網(wǎng)站制作教程汕頭seo代理商
  • 漯河市萬金鎮(zhèn)網(wǎng)站建設(shè)高端品牌網(wǎng)站建設(shè)
  • 書店網(wǎng)站建設(shè)游戲優(yōu)化大師官方下載
  • 怎么建立網(wǎng)站網(wǎng)址百度網(wǎng)站認證
  • 西安網(wǎng)站建設(shè)有那些公司好建立網(wǎng)站的基本流程
  • 做網(wǎng)站前景搜索引擎排名機制
  • 貴州網(wǎng)站建設(shè)關(guān)鍵詞代發(fā)排名首頁
  • 濟南集團網(wǎng)站建設(shè)方案做公司網(wǎng)站的公司
  • 做照片相冊最好的網(wǎng)站自己如何注冊一個網(wǎng)站
  • 武漢做商城網(wǎng)站seo排名關(guān)鍵詞點擊
  • 湖北省稅務(wù)局網(wǎng)站建設(shè)方sem和seo哪個工作好
  • 網(wǎng)站建設(shè)怎樣回答客戶問題優(yōu)化怎么做