init commit
This commit is contained in:
commit
1b1ee673bb
BIN
LineChart.exe
Normal file
BIN
LineChart.exe
Normal file
Binary file not shown.
340
LineChart.go
Normal file
340
LineChart.go
Normal file
@ -0,0 +1,340 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"text/template"
|
||||
"time"
|
||||
|
||||
"github.com/go-echarts/go-echarts/v2/charts"
|
||||
"github.com/go-echarts/go-echarts/v2/opts"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
ini "gopkg.in/ini.v1"
|
||||
)
|
||||
|
||||
var verb bool = false
|
||||
var file string = ""
|
||||
var cfg *ini.File
|
||||
|
||||
type DataSet struct {
|
||||
Alias string
|
||||
Item string
|
||||
Result string
|
||||
UpdateTime string
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.BoolVar(&verb, "v", false, "Show Verbose Debug Messages")
|
||||
flag.StringVar(&file, "f", "", "Config File Path")
|
||||
flag.Parse()
|
||||
|
||||
log.SetOutput(os.Stdout)
|
||||
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds)
|
||||
|
||||
if file == "" {
|
||||
file = strings.TrimSuffix(os.Args[0], ".exe") + ".ini"
|
||||
}
|
||||
|
||||
var err error
|
||||
cfg, err = ini.Load(file)
|
||||
if err != nil {
|
||||
log.Printf("[ERR] %v\r\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
addr := cfg.Section("HTTP").Key("ListenIP").String()
|
||||
port := cfg.Section("HTTP").Key("ListenPort").String()
|
||||
http.HandleFunc("/", handleIndex)
|
||||
http.HandleFunc("/echart/", eChart)
|
||||
http.Handle("/assets/", http.StripPrefix("/assets/", http.FileServer(http.Dir("./assets"))))
|
||||
http.ListenAndServe(addr+":"+port, nil)
|
||||
}
|
||||
|
||||
func handleIndex(w http.ResponseWriter, r *http.Request) {
|
||||
if r.RequestURI == "/favicon.ico" {
|
||||
return
|
||||
}
|
||||
log.Printf("[MSG] Received Request: %s, %s\r\n", r.RemoteAddr, r.RequestURI)
|
||||
defer r.Body.Close()
|
||||
|
||||
type Data struct {
|
||||
Title string
|
||||
Host string
|
||||
}
|
||||
data := Data{
|
||||
Title: cfg.Section("HTTP").Key("Title").String(),
|
||||
Host: cfg.Section("HTTP").Key("Host").String(),
|
||||
}
|
||||
tpl, err := template.ParseFiles("root.html")
|
||||
if err != nil {
|
||||
log.Printf("[ERR] %v\r\n", err)
|
||||
return
|
||||
}
|
||||
err = tpl.Execute(w, data)
|
||||
if err != nil {
|
||||
log.Printf("[ERR] %v\r\n", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func eChart(w http.ResponseWriter, r *http.Request) {
|
||||
if r.RequestURI == "/favicon.ico" {
|
||||
return
|
||||
}
|
||||
log.Printf("[MSG] Received Request: %s, %s\r\n", r.RemoteAddr, r.RequestURI)
|
||||
defer r.Body.Close()
|
||||
|
||||
if err := r.ParseForm(); err != nil {
|
||||
log.Printf("[ERR] %v\r\n", err)
|
||||
}
|
||||
|
||||
type Params struct {
|
||||
Range string ""
|
||||
Alias string ""
|
||||
Class string ""
|
||||
Scope string ""
|
||||
}
|
||||
var params Params
|
||||
params.Range = r.Form.Get("range")
|
||||
params.Scope = r.Form.Get("scope")
|
||||
params.Alias = r.Form.Get("alias")
|
||||
params.Class = r.Form.Get("class")
|
||||
log.Printf("[MSG] Request Params: %#v\r\n", params)
|
||||
|
||||
timeAxis := make([]string, 0)
|
||||
endTime := time.Now()
|
||||
beginTime := endTime.AddDate(0, 0, -7)
|
||||
bt := beginTime
|
||||
for i := 1; i <= 60*24*7; i++ {
|
||||
bt = bt.Add(time.Minute)
|
||||
timeAxis = append(timeAxis, bt.Format("01-02 15:04"))
|
||||
}
|
||||
|
||||
// Parsing Config - Database
|
||||
cfg.Reload()
|
||||
dbHost := cfg.Section("Database").Key("Host").MustString("127.0.0.1")
|
||||
dbPort := cfg.Section("Database").Key("Port").MustString("3306")
|
||||
dbSchema := cfg.Section("Database").Key("Database").MustString("monitoring")
|
||||
dbTable := cfg.Section("Database").Key("Table").MustString("server")
|
||||
dbColumns := cfg.Section("Database").Key("Columns").MustString("alias,item,result,update_time")
|
||||
dbUsername := cfg.Section("Database").Key("Username").String()
|
||||
dbPassword := cfg.Section("Database").Key("Password").String()
|
||||
|
||||
if dbUsername == "" || dbPassword == "" {
|
||||
log.Println("[ERR] Invalid Database Configuration.")
|
||||
return
|
||||
}
|
||||
|
||||
qry := fmt.Sprintf(
|
||||
"SELECT %s FROM %s WHERE alias='%s' AND item='%s' AND update_stmp>=%d ORDER BY seqid ASC;",
|
||||
dbColumns,
|
||||
dbTable,
|
||||
params.Alias,
|
||||
params.Class,
|
||||
beginTime.Unix(),
|
||||
)
|
||||
log.Printf("[MSG] Query SQL: \r\n%s\r\n", qry)
|
||||
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", dbUsername, dbPassword, dbHost, dbPort, dbSchema)
|
||||
conn, err := sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
log.Printf("[ERR] %v\r\n", err)
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
if err := conn.Ping(); err != nil {
|
||||
log.Printf("[ERR] %v\r\n", err)
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
rows, err := conn.Query(qry)
|
||||
if err != nil {
|
||||
log.Printf("[ERR] %v\r\n", err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
log.Println("[MSG] Query Successed.")
|
||||
|
||||
baseData := make(map[string]string, 0)
|
||||
for rows.Next() {
|
||||
var data DataSet
|
||||
err := rows.Scan(&data.Alias, &data.Item, &data.Result, &data.UpdateTime)
|
||||
if err != nil {
|
||||
log.Printf("[ERR] %v\r\n", err)
|
||||
return
|
||||
}
|
||||
baseData[data.UpdateTime] = data.Result
|
||||
}
|
||||
log.Printf("[MSG] Total Scanned: %d\r\n", len(baseData))
|
||||
|
||||
var dots []opts.LineData = make([]opts.LineData, 0)
|
||||
for _, t := range timeAxis {
|
||||
tmp, ok := baseData[t]
|
||||
if ok {
|
||||
dots = append(dots, opts.LineData{Value: tmp})
|
||||
} else {
|
||||
dots = append(dots, opts.LineData{Value: "null"})
|
||||
}
|
||||
}
|
||||
log.Println("[MSG] Finished Sort Metadata.")
|
||||
|
||||
// Parsing Config - Chart Titles
|
||||
chartTitle := cfg.Section("Chart").Key("Title").String()
|
||||
chartSubtitle := cfg.Section("Chart").Key("Subtitle").String()
|
||||
chartSeries := cfg.Section("Chart").Key("Series").String()
|
||||
assetsURL := cfg.Section("Chart").Key("AssetsURL").String()
|
||||
|
||||
var xPercent float32 = 75
|
||||
if params.Range == "all" {
|
||||
xPercent = 0
|
||||
}
|
||||
if params.Range == "half" {
|
||||
xPercent = 50
|
||||
}
|
||||
if params.Range == "quarter" {
|
||||
xPercent = 75
|
||||
}
|
||||
if params.Range == "octant" {
|
||||
xPercent = 87.5
|
||||
}
|
||||
if params.Alias != "" {
|
||||
chartSubtitle = params.Alias
|
||||
}
|
||||
if params.Class != "" {
|
||||
chartTitle = params.Class
|
||||
}
|
||||
|
||||
chart := charts.NewLine()
|
||||
// lang := make([]string, 0)
|
||||
// lang = append(lang, "data view")
|
||||
// lang = append(lang, "turn off")
|
||||
// lang = append(lang, "refresh")
|
||||
|
||||
chart.SetGlobalOptions(
|
||||
charts.WithTitleOpts(
|
||||
opts.Title{
|
||||
Left: "center",
|
||||
Top: "0",
|
||||
Title: chartTitle,
|
||||
TitleStyle: &opts.TextStyle{
|
||||
Color: "#000000",
|
||||
FontSize: 18,
|
||||
FontFamily: "Calibri",
|
||||
},
|
||||
Subtitle: chartSubtitle,
|
||||
SubtitleStyle: &opts.TextStyle{
|
||||
Color: "#222222",
|
||||
FontSize: 16,
|
||||
FontFamily: "Calibri",
|
||||
},
|
||||
},
|
||||
),
|
||||
charts.WithInitializationOpts(
|
||||
opts.Initialization{
|
||||
PageTitle: "eChart",
|
||||
BackgroundColor: "#FFFFFF",
|
||||
Width: "800px",
|
||||
Height: "600px",
|
||||
AssetsHost: assetsURL,
|
||||
},
|
||||
),
|
||||
charts.WithDataZoomOpts(
|
||||
opts.DataZoom{
|
||||
Type: "inside",
|
||||
Start: xPercent,
|
||||
End: 100,
|
||||
},
|
||||
),
|
||||
charts.WithXAxisOpts(
|
||||
opts.XAxis{
|
||||
Min: "dataMin",
|
||||
Max: "dataMax",
|
||||
AxisLabel: &opts.AxisLabel{
|
||||
ShowMinLabel: true,
|
||||
ShowMaxLabel: true,
|
||||
Rotate: 45,
|
||||
FontSize: "14",
|
||||
FontWeight: "600",
|
||||
FontFamily: "Calibri",
|
||||
LineHeight: "200",
|
||||
},
|
||||
},
|
||||
),
|
||||
charts.WithTooltipOpts(
|
||||
opts.Tooltip{
|
||||
Show: true,
|
||||
Trigger: "axis",
|
||||
},
|
||||
),
|
||||
charts.WithToolboxOpts(
|
||||
opts.Toolbox{
|
||||
Show: true,
|
||||
Feature: &opts.ToolBoxFeature{
|
||||
SaveAsImage: &opts.ToolBoxFeatureSaveAsImage{
|
||||
Show: true,
|
||||
Type: "png",
|
||||
},
|
||||
DataView: &opts.ToolBoxFeatureDataView{
|
||||
Show: true,
|
||||
},
|
||||
Restore: &opts.ToolBoxFeatureRestore{
|
||||
Show: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
),
|
||||
// charts.WithLegendOpts(
|
||||
// opts.Legend{
|
||||
// Show: true,
|
||||
// },
|
||||
// ),
|
||||
)
|
||||
|
||||
chart.SetXAxis(timeAxis).AddSeries(chartSeries, dots).
|
||||
SetSeriesOptions(
|
||||
charts.WithLineChartOpts(
|
||||
opts.LineChart{
|
||||
ConnectNulls: true,
|
||||
},
|
||||
),
|
||||
charts.WithMarkPointNameTypeItemOpts(
|
||||
opts.MarkPointNameTypeItem{
|
||||
Name: "Max",
|
||||
Type: "max",
|
||||
},
|
||||
opts.MarkPointNameTypeItem{
|
||||
Name: "Min",
|
||||
Type: "min",
|
||||
},
|
||||
),
|
||||
charts.WithMarkPointStyleOpts(
|
||||
opts.MarkPointStyle{
|
||||
SymbolSize: 50,
|
||||
Label: &opts.Label{
|
||||
Show: true,
|
||||
Position: "inside",
|
||||
},
|
||||
},
|
||||
),
|
||||
charts.WithMarkLineNameTypeItemOpts(
|
||||
opts.MarkLineNameTypeItem{
|
||||
Name: "Avrg",
|
||||
Type: "average",
|
||||
},
|
||||
),
|
||||
// charts.WithLabelOpts(
|
||||
// opts.Label{
|
||||
// Show: true,
|
||||
// Position: "top",
|
||||
// },
|
||||
// ),
|
||||
)
|
||||
chart.Render(w)
|
||||
}
|
18
LineChart.ini
Normal file
18
LineChart.ini
Normal file
@ -0,0 +1,18 @@
|
||||
[HTTP]
|
||||
ListenIP=0.0.0.0
|
||||
ListenPort=8081
|
||||
|
||||
[Chart]
|
||||
AssetsURL=http://127.0.0.1:8081/assets/
|
||||
Title=PXE Loading
|
||||
Subtitle=DA1/DA2
|
||||
Series=Value
|
||||
|
||||
[Database]
|
||||
Host=192.168.3.31
|
||||
Port=3306
|
||||
Username=root
|
||||
Password=1qaz@WSX
|
||||
Database=monitoring
|
||||
Table=server
|
||||
Columns=alias,item,result,DATE_FORMAT(update_time, '%m-%d %H:%i')
|
1
assets/bulma.min.css
vendored
Normal file
1
assets/bulma.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
assets/echarts-gl.min.js
vendored
Normal file
1
assets/echarts-gl.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
assets/echarts-liquidfill.min.js
vendored
Normal file
5
assets/echarts-liquidfill.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
8
assets/echarts-wordcloud.min.js
vendored
Normal file
8
assets/echarts-wordcloud.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
21
assets/echarts.min.js
vendored
Normal file
21
assets/echarts.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_an1_qing4.js
Normal file
2
assets/maps/an1_hui1_an1_qing4.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_bang4_bu4.js
Normal file
2
assets/maps/an1_hui1_bang4_bu4.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_bo2_zhou1.js
Normal file
2
assets/maps/an1_hui1_bo2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_chi2_zhou1.js
Normal file
2
assets/maps/an1_hui1_chi2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_chu2_zhou1.js
Normal file
2
assets/maps/an1_hui1_chu2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_fu4_yang2.js
Normal file
2
assets/maps/an1_hui1_fu4_yang2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_he2_fei2.js
Normal file
2
assets/maps/an1_hui1_he2_fei2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_huai2_bei3.js
Normal file
2
assets/maps/an1_hui1_huai2_bei3.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_huai2_nan2.js
Normal file
2
assets/maps/an1_hui1_huai2_nan2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_huang2_shan1.js
Normal file
2
assets/maps/an1_hui1_huang2_shan1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_liu4_an1.js
Normal file
2
assets/maps/an1_hui1_liu4_an1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_ma3_an1_shan1.js
Normal file
2
assets/maps/an1_hui1_ma3_an1_shan1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_su4_zhou1.js
Normal file
2
assets/maps/an1_hui1_su4_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_tong2_ling2.js
Normal file
2
assets/maps/an1_hui1_tong2_ling2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_wu2_hu2.js
Normal file
2
assets/maps/an1_hui1_wu2_hu2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/an1_hui1_xuan1_cheng2.js
Normal file
2
assets/maps/an1_hui1_xuan1_cheng2.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/maps/anhui.js
Normal file
1
assets/maps/anhui.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/aomen.js
Normal file
2
assets/maps/aomen.js
Normal file
@ -0,0 +1,2 @@
|
||||
!function(e,o){"function"==typeof define&&define.amd?define(["exports","echarts"],o):"object"==typeof exports&&"string"!=typeof exports.nodeName?o(exports,require("echarts")):o({},e.echarts)}(this,function(e,o){var t=function(e){"undefined"!=typeof console&&console&&console.error&&console.error(e)}
|
||||
return o?o.registerMap?void o.registerMap("澳门",{type:"FeatureCollection",features:[{id:"820001",type:"Feature",geometry:{type:"MultiPolygon",coordinates:[["@@LADC^umZ@DONWE@DALBBF@H@DFBBTC"],["@@P@LC@AGM@OECMBABBTCD@DDH"]],encodeOffsets:[[[116285,22746]],[[116303,22746]]]},properties:{cp:[113.552965,22.207882],name:"花地玛堂区",childNum:2}},{id:"820002",type:"Feature",geometry:{type:"Polygon",coordinates:["@@MK@CA@AAGDEB@NVFJG"],encodeOffsets:[[116281,22734]]},properties:{cp:[113.549052,22.199175],name:"花王堂区",childNum:1}},{id:"820003",type:"Feature",geometry:{type:"Polygon",coordinates:["@@EGOB@DNLHE@C"],encodeOffsets:[[116285,22729]]},properties:{cp:[113.550252,22.193791],name:"望德堂区",childNum:1}},{id:"820004",type:"Feature",geometry:{type:"Polygon",coordinates:["@@YMVAN@BFCBBDAFHDBBFDHIJJEFDPCHHlYJQ"],encodeOffsets:[[116313,22707]]},properties:{cp:[113.55374,22.188119],name:"大堂区",childNum:1}},{id:"820005",type:"Feature",geometry:{type:"Polygon",coordinates:["@@JICGAECACGEBAAEDBFNXB@"],encodeOffsets:[[116266,22728]]},properties:{cp:[113.54167,22.187778],name:"风顺堂区",childNum:1}},{id:"820006",type:"Feature",geometry:{type:"Polygon",coordinates:["@@ ZNWRquZCBCC@AEA@@ADCDCAACEAGBQ@INEL"],encodeOffsets:[[116265,22694]]},properties:{cp:[113.558783,22.154124],name:"嘉模堂区",childNum:1}},{id:"820007",type:"Feature",geometry:{type:"Polygon",coordinates:["@@MOIAIEI@@GE@AAUCBdCFIFR@HAFBBDDBDCBC@@FB@BDDDA\\M"],encodeOffsets:[[116316,22676]]},properties:{cp:[113.56925,22.136546],name:"路凼填海区",childNum:1}},{id:"820008",type:"Feature",geometry:{type:"Polygon",coordinates:["@@DKMMa_GC_COD@dVDBBF@@HJ@JFJBNPZK"],encodeOffsets:[[116329,22670]]},properties:{cp:[113.559954,22.124049],name:"圣方济各堂区",childNum:1}}],UTF8Encoding:!0}):void t("ECharts Map is not loaded"):void t("ECharts is not Loaded")})
|
2
assets/maps/beijing.js
Normal file
2
assets/maps/beijing.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/maps/china.js
Normal file
1
assets/maps/china.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/chongqing.js
Normal file
3
assets/maps/chongqing.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/maps/fu2_jian4_fu2_zhou1.js
Normal file
4
assets/maps/fu2_jian4_fu2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/fu2_jian4_fu3_tian2.js
Normal file
2
assets/maps/fu2_jian4_fu3_tian2.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/maps/fu2_jian4_long2_yan2.js
Normal file
4
assets/maps/fu2_jian4_long2_yan2.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/maps/fu2_jian4_nan2_ping2.js
Normal file
4
assets/maps/fu2_jian4_nan2_ping2.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/maps/fu2_jian4_ning2_de2.js
Normal file
4
assets/maps/fu2_jian4_ning2_de2.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/maps/fu2_jian4_quan2_zhou1.js
Normal file
4
assets/maps/fu2_jian4_quan2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
6
assets/maps/fu2_jian4_san1_ming2.js
Normal file
6
assets/maps/fu2_jian4_san1_ming2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/fu2_jian4_sha4_men2.js
Normal file
2
assets/maps/fu2_jian4_sha4_men2.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/maps/fu2_jian4_zhang1_zhou1.js
Normal file
4
assets/maps/fu2_jian4_zhang1_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/maps/fujian.js
Normal file
1
assets/maps/fujian.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/gan1_su4_bai2_yin2.js
Normal file
3
assets/maps/gan1_su4_bai2_yin2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/gan1_su4_ding4_xi1.js
Normal file
3
assets/maps/gan1_su4_ding4_xi1.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
assets/maps/gan1_su4_jia1_yu4_guan1.js
Normal file
2
assets/maps/gan1_su4_jia1_yu4_guan1.js
Normal file
@ -0,0 +1,2 @@
|
||||
!function(B,A){"function"==typeof define&&define.amd?define(["exports","echarts"],A):"object"==typeof exports&&"string"!=typeof exports.nodeName?A(exports,require("echarts")):A({},B.echarts)}(this,function(B,A){var D=function(B){"undefined"!=typeof console&&console&&console.error&&console.error(B)}
|
||||
return A?A.registerMap?void A.registerMap("嘉峪关",{type:"FeatureCollection",features:[{type:"Feature",id:"620200",properties:{name:"嘉峪关市",cp:[98.289419,39.772554],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@HEDADA@ABABA@@@C@C@G@@@ABA@A@C@@@@B@D@BB@A@@BA@I@A@AAAAAAACAAAEEAA@AC@AAA@@AA@AAEECCAAAAAA@AACAC@E@@@A@@AE@ACE@AAC@AAC@AAACEACAAEAGEAAAAABADCDCDAB@BA@C@AAEBC@CBA@@@CBA@IDG@@BGA@B@@A@A@@@AAA@AACA@@C@A@@@A@@@A@AB@@CBA@@BC@CBA@ABABCBEBEBABABA@EFEDABABCB@@A@@BADCBCBA@@BC@@@ABABA@ABABCAC@CAA@ODEBA@@BABAD@DAD@@ABKBCB@@CBC@A@A@A@AB@@@BBBB@@BBF@BBBDDBDBBAB@@A@A@C@CCC@CBWLIDGBM@M@MAI@OCIAECCAMMEGEECE@AAA@EAE@@@@G@wBS@c@ÁB@AemWSIIJGFCDAFQVCDCDAB@B@BCDCBEBEBEBC@K@A@C@EDC@ABEAC@C@KDSDGBA@GFCBO@[@C@AB@@DB^RBBFDHDDBBBTLB@DDJDBBBBHDB@NHBBHFB@RLJFJDDDLFPJBBJFHDLFDDDB@@BBBDBDFHBBFLDD@BBBBDBBBDDFBBDBBBHDJDFBDBB@BBBBFBFDFBJDHDBBB@BB@@@@GHADuxORCFMPAB@@@@@BBB@@@BFDDF@@@@B@BDFDJDBBHDDB@@B@@BBB@@BBDBBBHDB@B@DBBBB@DBDBF@@@DDDBFB@@B@@B@@@@AB@@C@AB@@A@@@A@@@@@ABA@ABC@A@CB@@A@ABA@A@CAEBA@@@@@@@@@@@@@A@A@A@@@A@@BA@@@A@A@@@@@A@ABA@A@BBD@BBDBB@@B@@@BC@@@@B@@@B@@BBDBB@B@B@B@B@B@B@@@BB@@@DBBB@@ABB@@B@@@BB@@A@@B@B@B@B@B@@B@@@@B@B@@BB@B@@B@B@DBB@DADBB@B@DBDBB@D@@@BA@@B@DBB@BD@BB@BBD@FBB@B@DA@@B@BB@@BAB@@@BBD@BBB@B@BB@@@@@BA@AB@@@BAB@B@B@B@BAD@@@@@B@@@BA@@B@@BB@BB@B@@B@B@BA@@BBBBDB@@@@B@D@BABAB@DABADADABCDCBAB@B@@@B@BDBDBD@JChINCDAJAFAPETCBAFAD@PCdILCFAZAL@ZAJ@XATAN@LAH@H@D@F@B@FAB@L@RApAPAD@B@D@DB@A@@@@AA@A@A@@@@@AB@@@B@FBJAD@F@B@B@@@@@B@@@B@@AD@BAF@BA@@F@JBJ@J@DBF@D@DAD@BBD@D@B@B@@@@B@@@B@@@@@@B@@@DADAF@BA@BF@BBB@BBDBD@HBDBDBBBBBB@@@BBB@BAFAB@@@D@D@FAB@B@@ADCBAB@HABABAB@BABAB@F@N@J@H@F@BBD@DDDBD@HFJDHBBBB@@B@B@D@@BBF@H@@AB@JGBADE@AFCHEDCDCD@@AD@@A@A@@CA@AA@@ABA@ABCBC@A@A@AAA@AA@@AACAC@A@A@A@ABC@A@EBA@@BC@@@CB@DAB@B@D@HAHA@@@AB@BAB@D@B@BAB@B@@A@@CICEACAA@@JI@@@@KIMKEEEEECIICA@@A@@A@AA@AAAAA@CA@@@@FC@@@A@@@AA@AAAABA@@@AB@BAB@@AB@@AAABABCBADE@A@@@C@@AAAAAAGECACAA@OA@ACA@@A@A@@@AA@AA@@@CAAACACAAA@@A@AAA@EACCA@@@A@EAAAOGE@ECA@CAAAA@UIMECAOEA@GCICUI@@KEEA@@A@@@AAYI@A@@@AA@CA@AA@@ABABG@@BA@ABG@CDABEBCBA@@FCDABADA@AB@DABAD@DCD@DAVGB@BAJE"],["@@HDFBHBB@@@B@@@CAAAAAAAA@@AAC@@ABID@@@@"]],encodeOffsets:[[[100760,40692]],[[100197,40667]]]}}],UTF8Encoding:!0}):void D("ECharts Map is not loaded"):void D("ECharts is not Loaded")})
|
2
assets/maps/gan1_su4_jin1_chang1.js
Normal file
2
assets/maps/gan1_su4_jin1_chang1.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/gan1_su4_jiu3_quan2.js
Normal file
3
assets/maps/gan1_su4_jiu3_quan2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/gan1_su4_lan2_zhou1.js
Normal file
3
assets/maps/gan1_su4_lan2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
assets/maps/gan1_su4_long3_nan2.js
Normal file
4
assets/maps/gan1_su4_long3_nan2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/gan1_su4_ping2_liang2.js
Normal file
3
assets/maps/gan1_su4_ping2_liang2.js
Normal file
File diff suppressed because one or more lines are too long
5
assets/maps/gan1_su4_qing4_yang2.js
Normal file
5
assets/maps/gan1_su4_qing4_yang2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/gan1_su4_tian1_shui3.js
Normal file
3
assets/maps/gan1_su4_tian1_shui3.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/gan1_su4_wu3_wei1.js
Normal file
2
assets/maps/gan1_su4_wu3_wei1.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/gan1_su4_zhang1_ye4.js
Normal file
3
assets/maps/gan1_su4_zhang1_ye4.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/maps/gansu.js
Normal file
1
assets/maps/gansu.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_chao2_zhou1.js
Normal file
2
assets/maps/guang3_dong1_chao2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_dong1_guan1.js
Normal file
2
assets/maps/guang3_dong1_dong1_guan1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_dong1_sha1_qun2_dao3.js
Normal file
2
assets/maps/guang3_dong1_dong1_sha1_qun2_dao3.js
Normal file
@ -0,0 +1,2 @@
|
||||
!function(e,o){"function"==typeof define&&define.amd?define(["exports","echarts"],o):"object"==typeof exports&&"string"!=typeof exports.nodeName?o(exports,require("echarts")):o({},e.echarts)}(this,function(e,o){var t=function(e){"undefined"!=typeof console&&console&&console.error&&console.error(e)}
|
||||
return o?o.registerMap?void o.registerMap("东沙群岛",{type:"FeatureCollection",features:[{type:"Feature",id:"442100",properties:{name:"东沙群岛",cp:[116.887613,20.617825],childNum:4},geometry:{type:"MultiPolygon",coordinates:[["@@N\\`ZrDVBrCf]\\mRmBqWY]OoFyZe^a\\SfA^"],["@@JVZNT@B@TSno\\cB_ES@AWCaAaR]dOfId"],["@@IBGBIBEBID@@AB@BB@@@BBA@BD@@DBDBB@B@B@DAFCFAD@B@DCB@B@@ADGBCA@E@"],["@@tJrHtC^BvGj[JK\\{R§CS]{Ycc_q]K{AuLUJSPCJBLFHNFKNlRtn`CMhQJ]BuDUCKCIBIHOFK@[AQAKDCJDHHBFFCN@HDF"]],encodeOffsets:[[[118726,21604]],[[118709,21486]],[[119538,21192]],[[119573,21271]]]}}],UTF8Encoding:!0}):void t("ECharts Map is not loaded"):void t("ECharts is not Loaded")})
|
2
assets/maps/guang3_dong1_fo2_shan1.js
Normal file
2
assets/maps/guang3_dong1_fo2_shan1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_guang3_zhou1.js
Normal file
2
assets/maps/guang3_dong1_guang3_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_he2_yuan2.js
Normal file
2
assets/maps/guang3_dong1_he2_yuan2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_dong1_hui4_zhou1.js
Normal file
3
assets/maps/guang3_dong1_hui4_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_dong1_jiang1_men2.js
Normal file
3
assets/maps/guang3_dong1_jiang1_men2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_jie1_yang2.js
Normal file
2
assets/maps/guang3_dong1_jie1_yang2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_dong1_mao4_ming2.js
Normal file
3
assets/maps/guang3_dong1_mao4_ming2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_mei2_zhou1.js
Normal file
2
assets/maps/guang3_dong1_mei2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_qing1_yuan3.js
Normal file
2
assets/maps/guang3_dong1_qing1_yuan3.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_shan4_tou2.js
Normal file
2
assets/maps/guang3_dong1_shan4_tou2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_shan4_wei3.js
Normal file
2
assets/maps/guang3_dong1_shan4_wei3.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_shao2_guan1.js
Normal file
2
assets/maps/guang3_dong1_shao2_guan1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_shen1_zhen4.js
Normal file
2
assets/maps/guang3_dong1_shen1_zhen4.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_yang2_jiang1.js
Normal file
2
assets/maps/guang3_dong1_yang2_jiang1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_yun2_fu2.js
Normal file
2
assets/maps/guang3_dong1_yun2_fu2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_dong1_zhan4_jiang1.js
Normal file
3
assets/maps/guang3_dong1_zhan4_jiang1.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_zhao4_qing4.js
Normal file
2
assets/maps/guang3_dong1_zhao4_qing4.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_dong1_zhong1_shan1.js
Normal file
2
assets/maps/guang3_dong1_zhong1_shan1.js
Normal file
@ -0,0 +1,2 @@
|
||||
!function(A,B){"function"==typeof define&&define.amd?define(["exports","echarts"],B):"object"==typeof exports&&"string"!=typeof exports.nodeName?B(exports,require("echarts")):B({},A.echarts)}(this,function(A,B){var C=function(A){"undefined"!=typeof console&&console&&console.error&&console.error(A)}
|
||||
return B?B.registerMap?void B.registerMap("中山",{type:"FeatureCollection",features:[{type:"Feature",id:"442000",properties:{name:"中山市",cp:[113.39277,22.517585],childNum:1},geometry:{type:"Polygon",coordinates:["@@FCDABABA@AC@GAEACAA@ICCACA@@EA@@A@ACEGEA@@KCCAICEAOE@@CCAAA@G@GBIBCFCDEFOTCDINEFA@A@CAAAA@ADAB@B@@A@EDAAC@ABCBA@SJMJCBCD@@EFCHCDCJCJABCJAFAFADKXITCLAFAF@@@B@@@J@RGLEJMLEH@@@@KN@@QVCDABKLGJEHCBSLAJCJCJAH@H@H@D@N@V@FELCFEH@@EHEL@FADCPEJADGJADKN@B@@@@GLADCFEJKLABMJABQTIHD\\CT@D@DADALADADCFCHABAFABA@@BADCBCDIL@BCJAB@B@@A@@@CD@@@@CDA@FDAD@@@@@D@@@B@B@@AB@@AD@BDHAB@@@@ADDN@DBHDFBF@@@@@@@@BBDAB@B@D@BB@@@H@FC@C@@ACJABC@ADD@@BBBB@D@ADABEFBBDB@@@@@@@@B@BABBBB@@@@BB@@@@BB@B@@B@@@@BB@BABDBAB@A@DDDABCB@@@BABAD@@ADABAB@B@B@B@BBD@D@DB@@D@@@AB@BAD@FFHBBDD@@@B@B@D@HJBHHHHBB@@DDDFBBBFDDDHHLDJBBBNFD@BDBDBB@JABAHEB@HIBEDEFEDCJBBD@@FFFH@@@@HFDBB@N@DAFAJAB@DBD@H@@@FBJBF@JDHB@@BB@@@BAB@@@BA@@B@B@@BB@BBB@@@BB@B@BBB@BBB@BB@@B@BB@@BB@@BBB@@BB@@@@@B@@BB@@@BBB@DB@@BBB@B@BBB@D@BBB@BBDHHHHCHGDAJEDCTK@@@@JEHC@AFCB@DANGJCLCFAL@F@H@DANADAfK@@EM@@@@AANKBA@@HELGBARMNIFABAJELGHELGNIVOAQEAC@C@@A@@@AHMJOFIDELQ@AFKDABCHKFG@AFFHEFFFCBBDEJGDAFCFAB@L@DAPIJELKfVuDKTAjATBoGk}ki][I@IBU@A@ODAAODABA@CAA@CAACCAABABC@AAAAAC@AA@CACBEFCDC@ECAACACAGAACBM@GCAC@CCECAE@CBEBCDCDC@@AEBEACAC@A@AD@BABA@EB@@AAA@@@A@EAA@@AAAA@A@CBC@@@AA@@@A@@CBEB@FADAAC@CBAB@DABABAAABCDABA@AACCAOGE@C@@BA@@@A@CBAAA@BA@A@@@@AA@@AAA@A@@@A@AA@@A@A@@B@@@AA@@BCCAACCBA@@B@DCDAAA@@@@BA@@BAB@@BBABBBCBA@@B@JIAAJIBC@@AADC@@@AB@@AB@BA@A@A@@BABABC@@DB@@CE@@B@@@BACADEDABCDB@BB@BBBAFG@@@ABABC@@@@@C@A@@@A@C@@@@@A@@AA@A@@@@@A@CGDAC@ACCEAA@A@A@AA@@C@AAA@A@A@A@@AA@A@@@AAABA@CACAA@CCC@@EBC@A"],encodeOffsets:[[116204,22767]]}}],UTF8Encoding:!0}):void C("ECharts Map is not loaded"):void C("ECharts is not Loaded")})
|
2
assets/maps/guang3_dong1_zhu1_hai3.js
Normal file
2
assets/maps/guang3_dong1_zhu1_hai3.js
Normal file
File diff suppressed because one or more lines are too long
5
assets/maps/guang3_xi1_bai3_se4.js
Normal file
5
assets/maps/guang3_xi1_bai3_se4.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_xi1_bei3_hai3.js
Normal file
2
assets/maps/guang3_xi1_bei3_hai3.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_xi1_chong2_zuo3.js
Normal file
3
assets/maps/guang3_xi1_chong2_zuo3.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/guang3_xi1_fang2_cheng2_gang3.js
Normal file
2
assets/maps/guang3_xi1_fang2_cheng2_gang3.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_xi1_gui4_gang3.js
Normal file
3
assets/maps/guang3_xi1_gui4_gang3.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/maps/guang3_xi1_gui4_lin2.js
Normal file
4
assets/maps/guang3_xi1_gui4_lin2.js
Normal file
File diff suppressed because one or more lines are too long
5
assets/maps/guang3_xi1_he2_chi2.js
Normal file
5
assets/maps/guang3_xi1_he2_chi2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_xi1_he4_zhou1.js
Normal file
3
assets/maps/guang3_xi1_he4_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_xi1_lai2_bin1.js
Normal file
3
assets/maps/guang3_xi1_lai2_bin1.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_xi1_liu3_zhou1.js
Normal file
3
assets/maps/guang3_xi1_liu3_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
5
assets/maps/guang3_xi1_nan2_ning2.js
Normal file
5
assets/maps/guang3_xi1_nan2_ning2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_xi1_qin1_zhou1.js
Normal file
3
assets/maps/guang3_xi1_qin1_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/guang3_xi1_wu2_zhou1.js
Normal file
3
assets/maps/guang3_xi1_wu2_zhou1.js
Normal file
File diff suppressed because one or more lines are too long
4
assets/maps/guang3_xi1_yu4_lin2.js
Normal file
4
assets/maps/guang3_xi1_yu4_lin2.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/maps/guangdong.js
Normal file
1
assets/maps/guangdong.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/maps/guangxi.js
Normal file
1
assets/maps/guangxi.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/gui4_zhou1_an1_shun4.js
Normal file
2
assets/maps/gui4_zhou1_an1_shun4.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/gui4_zhou1_bi4_jie2.js
Normal file
2
assets/maps/gui4_zhou1_bi4_jie2.js
Normal file
File diff suppressed because one or more lines are too long
3
assets/maps/gui4_zhou1_gui4_yang2.js
Normal file
3
assets/maps/gui4_zhou1_gui4_yang2.js
Normal file
File diff suppressed because one or more lines are too long
2
assets/maps/gui4_zhou1_liu4_pan2_shui3.js
Normal file
2
assets/maps/gui4_zhou1_liu4_pan2_shui3.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
assets/maps/gui4_zhou1_tong2_ren2.js
Normal file
2
assets/maps/gui4_zhou1_tong2_ren2.js
Normal file
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user