Skip to content

Commit ef0eafc

Browse files
committed
Use amap instead of OSM
1 parent c37638b commit ef0eafc

File tree

8 files changed

+120
-18
lines changed

8 files changed

+120
-18
lines changed

grafana/Dockerfile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ ENV GF_ANALYTICS_REPORTING_ENABLED=false \
1717
DATABASE_PORT=5432 \
1818
DATABASE_SSL_MODE=disable
1919

20+
USER root
21+
RUN apk update && apk add --no-cache postgresql-client git
22+
23+
## Add Teslamate-CustomGrafanaDashboards
24+
#RUN git clone https://github.com/hipudding/Teslamate-CustomGrafanaDashboards.git && \
25+
# chown -R grafana Teslamate-CustomGrafanaDashboards && \
26+
# mv Teslamate-CustomGrafanaDashboards/customdashboards.yml /etc/grafana/provisioning/dashboards/customdashboards.yml && \
27+
# mv Teslamate-CustomGrafanaDashboards/dashboards /TeslamateCustomDashboards && \
28+
# rm -rf Teslamate-CustomGrafanaDashboards
29+
2030
USER grafana
2131

2232
COPY logo.svg /usr/share/grafana/public/img/grafana_icon.svg
@@ -28,5 +38,9 @@ COPY dashboards.yml /etc/grafana/provisioning/dashboards/
2838
COPY dashboards/internal/*.json /dashboards_internal/
2939
COPY dashboards/reports/*.json /dashboards_reports/
3040
COPY dashboards/*.json /dashboards/
41+
COPY proc.sql /proc.sql
42+
COPY run_init_sql.sh /run_init_sql.sh
43+
44+
ENTRYPOINT ["bash", "/run_init_sql.sh"]
3145

3246
EXPOSE 3000

grafana/dashboards/charging-stats.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,10 +1225,12 @@
12251225
"maxDataPoints": 1,
12261226
"options": {
12271227
"basemap": {
1228-
"config": {},
1228+
"config": {
1229+
"url": "https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"
1230+
},
12291231
"name": "Layer 0",
12301232
"tooltip": true,
1231-
"type": "osm-standard"
1233+
"type": "xyz"
12321234
},
12331235
"controls": {
12341236
"mouseWheelZoom": true,
@@ -1311,7 +1313,7 @@
13111313
"editorMode": "code",
13121314
"format": "table",
13131315
"rawQuery": true,
1314-
"rawSql": "WITH charge_data AS (\r\nSELECT COALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city)) AS loc_nm\r\n, AVG(position.latitude) AS latitude\r\n, AVG(position.longitude) AS longitude\r\n, sum(charge.charge_energy_added) AS chg_total\r\n, count(*) as charges\r\nFROM charging_processes charge\r\nLEFT JOIN addresses address ON charge.address_id = address.id\r\nLEFT JOIN positions position ON charge.position_id = position.id\r\nLEFT JOIN geofences geofence ON charge.geofence_id = geofence.id\r\nWHERE $__timeFilter(charge.start_date) \r\nAND charge.car_id = $car_id\r\nGROUP BY COALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city))\r\n) \r\nSELECT loc_nm\r\n\t,latitude\r\n\t,longitude\r\n\t,chg_total\r\n\t,chg_total * 1.0 / (SELECT sum(chg_total) FROM charge_data) * 100 AS pct\r\n\t,charges\r\nFROM charge_data",
1316+
"rawSql": "WITH converted_positions AS (\n\tSELECT\n\t\tcharge.id AS charge_id,\n\t\tCOALESCE(\n\t\t\tgeofence.name,\n\t\t\tCONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city)\n\t\t) AS loc_nm,\n\t\t(wgs84_to_gcj02(position.latitude, position.longitude)).gcjLat AS gcj_latitude,\n\t\t(wgs84_to_gcj02(position.latitude, position.longitude)).gcjLon AS gcj_longitude,\n\t\tcharge.charge_energy_added\n\tFROM\n\t\tcharging_processes charge\n\tLEFT JOIN addresses address ON charge.address_id = address.id\n\tLEFT JOIN positions position ON charge.position_id = position.id\n\tLEFT JOIN geofences geofence ON charge.geofence_id = geofence.id\n\tWHERE\n\t\t$__timeFilter(charge.start_date)\n\t\tAND charge.car_id = $car_id\n),\ncharge_data AS (\n\tSELECT\n\t\tloc_nm,\n\t\tAVG(gcj_latitude) AS latitude,\n\t\tAVG(gcj_longitude) AS longitude,\n\t\tSUM(charge_energy_added) AS chg_total,\n\t\tCOUNT(*) AS charges\n\tFROM\n\t\tconverted_positions\n\tGROUP BY\n\t\tloc_nm\n)\nSELECT\n\tloc_nm,\n\tlatitude,\n\tlongitude,\n\tchg_total,\n\tchg_total * 1.0 / (SELECT SUM(chg_total) FROM charge_data) * 100 AS pct,\n\tcharges\nFROM\n\tcharge_data;",
13151317
"refId": "A",
13161318
"sql": {
13171319
"columns": [

grafana/dashboards/internal/charge-details.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -785,9 +785,11 @@
785785
"maxDataPoints": 500,
786786
"options": {
787787
"basemap": {
788-
"config": {},
788+
"config": {
789+
"url":"https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"
790+
},
789791
"name": "Layer 0",
790-
"type": "osm-standard"
792+
"type": "xyz"
791793
},
792794
"controls": {
793795
"mouseWheelZoom": true,
@@ -869,7 +871,7 @@
869871
"editorMode": "code",
870872
"format": "time_series",
871873
"rawQuery": true,
872-
"rawSql": "SELECT\n\t$__time(date),\n\tunnest(ARRAY[latitude, latitude]) AS latitude,\n\tunnest(ARRAY[longitude, longitude]) AS longitude\nFROM\n\tcharging_processes c\n\tJOIN positions p ON c.position_id = p.id\nWHERE\n\t$__timeFilter(date)\n\tAND c.car_id = $car_id;",
874+
"rawSql": "SELECT\n\t$__time(date),\n\tunnest(ARRAY[(wgs84_to_gcj02(p.latitude, p.longitude)).gcjLat, (wgs84_to_gcj02(p.latitude, p.longitude)).gcjLat]) AS latitude,\n\tunnest(ARRAY[(wgs84_to_gcj02(p.latitude, p.longitude)).gcjLon, (wgs84_to_gcj02(p.latitude, p.longitude)).gcjLon]) AS longitude\nFROM\n\tcharging_processes c\n\tJOIN positions p ON c.position_id = p.id\nWHERE\n\t$__timeFilter(date)\n\tAND c.car_id = $car_id;",
873875
"refId": "A",
874876
"sql": {
875877
"columns": [
@@ -1750,4 +1752,4 @@
17501752
"title": "Charge Details",
17511753
"uid": "BHhxFeZRz",
17521754
"version": 1
1753-
}
1755+
}

grafana/dashboards/internal/drive-details.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -535,9 +535,11 @@
535535
"maxDataPoints": 50000,
536536
"options": {
537537
"basemap": {
538-
"config": {},
538+
"config": {
539+
"url":"https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"
540+
},
539541
"name": "Layer 0",
540-
"type": "osm-standard"
542+
"type": "xyz"
541543
},
542544
"controls": {
543545
"mouseWheelZoom": true,
@@ -659,7 +661,7 @@
659661
"editorMode": "code",
660662
"format": "time_series",
661663
"rawQuery": true,
662-
"rawSql": "SELECT\n $__time(date),\n latitude,\n longitude\nFROM positions\nWHERE \n car_id = $car_id AND \n $__timeFilter(date)\nORDER BY \n date ASC",
664+
"rawSql": "SELECT\n\t$__time(date),\n\t(wgs84_to_gcj02(latitude, longitude)).gcjLat AS latitude,\n\t(wgs84_to_gcj02(latitude, longitude)).gcjLon AS longitude\nFROM\n\tpositions\nWHERE\n\tcar_id = $car_id AND \n\t$__timeFilter(date)\nORDER BY \n\tdate ASC;",
663665
"refId": "A",
664666
"sql": {
665667
"columns": [

grafana/dashboards/trip.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,10 @@
9999
"maxDataPoints": 500,
100100
"options": {
101101
"basemap": {
102-
"config": {},
102+
"config": {
103+
"url":"https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"},
103104
"name": "Layer 0",
104-
"type": "osm-standard"
105+
"type": "xyz"
105106
},
106107
"controls": {
107108
"mouseWheelZoom": true,
@@ -218,7 +219,7 @@
218219
"editorMode": "code",
219220
"format": "time_series",
220221
"rawQuery": true,
221-
"rawSql": "SELECT\n\t$__timeGroup(date, '5s') AS time,\n\tavg(latitude) AS latitude,\n\tavg(longitude) AS longitude\nFROM\n\tpositions\nWHERE\n car_id = $car_id AND\n\t$__timeFilter(date)\nGROUP BY\n\t1\nORDER BY\n\t1 ASC",
222+
"rawSql": "WITH converted_positions AS (\n\tSELECT\n\t\t$__timeGroup(date, '5s') AS time,\n\t\t(wgs84_to_gcj02(latitude, longitude)).gcjLat AS gcj_latitude,\n\t\t(wgs84_to_gcj02(latitude, longitude)).gcjLon AS gcj_longitude\n\tFROM\n\t\tpositions\n\tWHERE\n\t\tcar_id = $car_id AND\n\t\t$__timeFilter(date)\n)\nSELECT\n\ttime,\n\tavg(gcj_latitude) AS latitude,\n\tavg(gcj_longitude) AS longitude\nFROM\n\tconverted_positions\nGROUP BY\n\ttime\nORDER BY\n\ttime ASC;",
222223
"refId": "A",
223224
"sql": {
224225
"columns": [
@@ -2683,4 +2684,4 @@
26832684
"title": "Trip",
26842685
"uid": "FkUpJpQZk",
26852686
"version": 1
2686-
}
2687+
}

grafana/dashboards/visited.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,11 @@
9191
"maxDataPoints": 10000000,
9292
"options": {
9393
"basemap": {
94-
"config": {},
94+
"config": {
95+
"url": "https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"
96+
},
9597
"name": "Layer 0",
96-
"type": "osm-standard"
98+
"type": "xyz"
9799
},
98100
"controls": {
99101
"mouseWheelZoom": true,
@@ -215,7 +217,7 @@
215217
"editorMode": "code",
216218
"format": "table",
217219
"rawQuery": true,
218-
"rawSql": "SELECT\n date_trunc('minute', timezone('UTC', date), '$__timezone') as time,\n avg(latitude) as latitude,\n avg(longitude) as longitude\nFROM\n positions\nWHERE\n car_id = $car_id AND $__timeFilter(date) and ideal_battery_range_km is not null\nGROUP BY 1\nORDER BY 1",
220+
"rawSql": "WITH converted_positions AS (\n\tSELECT\n\t\tdate_trunc('minute', timezone('UTC', date), '$__timezone') as time,\n\t\t(wgs84_to_gcj02(latitude, longitude)).gcjLat AS latitude,\n\t\t(wgs84_to_gcj02(latitude, longitude)).gcjLon AS longitude\n\tFROM\n\t\tpositions\n\tWHERE\n\t\tcar_id = $car_id AND $__timeFilter(date) and ideal_battery_range_km is not null\n)\nSELECT\n\ttime,\n\tavg(latitude) as latitude,\n\tavg(longitude) as longitude\nFROM\n\tconverted_positions\nGROUP BY\n\ttime\nORDER BY\n\ttime;",
219221
"refId": "Positions",
220222
"sql": {
221223
"columns": [
@@ -608,4 +610,4 @@
608610
"title": "Visited",
609611
"uid": "RG_DxSmgk",
610612
"version": 1
611-
}
613+
}

grafana/proc.sql

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
CREATE OR REPLACE FUNCTION transformLat(x DOUBLE PRECISION, y DOUBLE PRECISION)
2+
RETURNS DOUBLE PRECISION AS '
3+
DECLARE
4+
ret DOUBLE PRECISION;
5+
BEGIN
6+
ret := -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x));
7+
ret := ret + (20.0 * sin(6.0 * x * pi()) + 20.0 * sin(2.0 * x * pi())) * 2.0 / 3.0;
8+
ret := ret + (20.0 * sin(y * pi()) + 40.0 * sin(y / 3.0 * pi())) * 2.0 / 3.0;
9+
ret := ret + (160.0 * sin(y / 12.0 * pi()) + 320 * sin(y * pi() / 30.0)) * 2.0 / 3.0;
10+
RETURN ret;
11+
END;
12+
' LANGUAGE plpgsql;
13+
14+
CREATE OR REPLACE FUNCTION transformLon(x DOUBLE PRECISION, y DOUBLE PRECISION)
15+
RETURNS DOUBLE PRECISION AS '
16+
DECLARE
17+
ret DOUBLE PRECISION;
18+
BEGIN
19+
ret := 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x));
20+
ret := ret + (20.0 * sin(6.0 * x * pi()) + 20.0 * sin(2.0 * x * pi())) * 2.0 / 3.0;
21+
ret := ret + (20.0 * sin(x * pi()) + 40.0 * sin(x / 3.0 * pi())) * 2.0 / 3.0;
22+
ret := ret + (150.0 * sin(x / 12.0 * pi()) + 300.0 * sin(x / 30.0 * pi())) * 2.0 / 3.0;
23+
RETURN ret;
24+
END;
25+
' LANGUAGE plpgsql;
26+
27+
CREATE OR REPLACE FUNCTION delta(lat DOUBLE PRECISION, lon DOUBLE PRECISION)
28+
RETURNS TABLE (dLat DOUBLE PRECISION, dLon DOUBLE PRECISION) AS '
29+
DECLARE
30+
a CONSTANT DOUBLE PRECISION := 6378245.0;
31+
ee CONSTANT DOUBLE PRECISION := 0.00669342162296594323;
32+
radLat DOUBLE PRECISION;
33+
magic DOUBLE PRECISION;
34+
sqrtMagic DOUBLE PRECISION;
35+
BEGIN
36+
radLat := lat / 180.0 * pi();
37+
magic := sin(radLat);
38+
magic := 1 - ee * magic * magic;
39+
sqrtMagic := sqrt(magic);
40+
41+
dLat := transformLat(lon - 105.0, lat - 35.0);
42+
dLon := transformLon(lon - 105.0, lat - 35.0);
43+
44+
dLat := (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi());
45+
dLon := (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi());
46+
47+
RETURN QUERY SELECT dLat, dLon;
48+
END;
49+
' LANGUAGE plpgsql;
50+
51+
CREATE OR REPLACE FUNCTION wgs84_to_gcj02(wgsLat DOUBLE PRECISION, wgsLon DOUBLE PRECISION)
52+
RETURNS TABLE (gcjLat DOUBLE PRECISION, gcjLon DOUBLE PRECISION) AS '
53+
DECLARE
54+
dLat DOUBLE PRECISION;
55+
dLon DOUBLE PRECISION;
56+
BEGIN
57+
IF wgsLat < 0 OR wgsLat > 60.0 OR wgsLon < 72.004 OR wgsLon > 137.8347 THEN
58+
RETURN QUERY SELECT wgsLat, wgsLon;
59+
ELSE
60+
SELECT delta.dLat, delta.dLon INTO dLat, dLon FROM delta(wgsLat, wgsLon);
61+
SELECT wgsLat + dLat, wgsLon + dLon INTO gcjLat, gcjLon;
62+
RETURN QUERY SELECT gcjLat, gcjLon;
63+
END IF;
64+
END;
65+
' LANGUAGE plpgsql;
66+

grafana/run_init_sql.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/bash
2+
3+
# Wait PostgreSQL service
4+
until pg_isready -h "$DATABASE_HOST" -p "$DATABASE_PORT" -U "$DATABASE_USER"; do
5+
echo "Waiting for PostgreSQL to start..."
6+
sleep 2
7+
done
8+
9+
# Run sql
10+
PGPASSWORD=$DATABASE_PASS psql -h "$DATABASE_HOST" -U "$DATABASE_USER" -d "teslamate" -f /proc.sql
11+
12+
# Run Grafana
13+
/run.sh

0 commit comments

Comments
 (0)