Skip to content

Commit

Permalink
Use amap instead of OSM
Browse files Browse the repository at this point in the history
  • Loading branch information
hipudding committed Nov 2, 2024
1 parent 83f9de2 commit 87934ff
Show file tree
Hide file tree
Showing 8 changed files with 112 additions and 19 deletions.
7 changes: 7 additions & 0 deletions grafana/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ ENV GF_ANALYTICS_REPORTING_ENABLED=false \
DATABASE_PORT=5432 \
DATABASE_SSL_MODE=disable

USER root
RUN apk update && apk add --no-cache postgresql-client

USER grafana

COPY logo.svg /usr/share/grafana/public/img/grafana_icon.svg
Expand All @@ -26,5 +29,9 @@ COPY dashboards.yml /etc/grafana/provisioning/dashboards/
COPY dashboards/internal/*.json /dashboards_internal/
COPY dashboards/reports/*.json /dashboards_reports/
COPY dashboards/*.json /dashboards/
COPY proc.sql /proc.sql
COPY run_init_sql.sh /run_init_sql.sh

ENTRYPOINT ["bash", "/run_init_sql.sh"]

EXPOSE 3000
8 changes: 5 additions & 3 deletions grafana/dashboards/charging-stats.json
Original file line number Diff line number Diff line change
Expand Up @@ -1396,10 +1396,12 @@
"maxDataPoints": 1,
"options": {
"basemap": {
"config": {},
"config": {
"url": "https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"
},
"name": "Layer 0",
"tooltip": true,
"type": "osm-standard"
"type": "xyz"
},
"controls": {
"mouseWheelZoom": true,
Expand Down Expand Up @@ -1484,7 +1486,7 @@
"group": [],
"metricColumn": "none",
"rawQuery": true,
"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",
"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;",
"refId": "A",
"select": [
[
Expand Down
10 changes: 6 additions & 4 deletions grafana/dashboards/internal/charge-details.json
Original file line number Diff line number Diff line change
Expand Up @@ -883,9 +883,11 @@
"maxDataPoints": 500,
"options": {
"basemap": {
"config": {},
"config": {
"url":"https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"
},
"name": "Layer 0",
"type": "osm-standard"
"type": "xyz"
},
"controls": {
"mouseWheelZoom": true,
Expand Down Expand Up @@ -970,7 +972,7 @@
"group": [],
"metricColumn": "none",
"rawQuery": true,
"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;",
"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;",
"refId": "A",
"select": [
[
Expand Down Expand Up @@ -2074,4 +2076,4 @@
"uid": "BHhxFeZRz",
"version": 3,
"weekStart": ""
}
}
10 changes: 6 additions & 4 deletions grafana/dashboards/internal/drive-details.json
Original file line number Diff line number Diff line change
Expand Up @@ -604,9 +604,11 @@
"maxDataPoints": 50000,
"options": {
"basemap": {
"config": {},
"config": {
"url":"https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"
},
"name": "Layer 0",
"type": "osm-standard"
"type": "xyz"
},
"controls": {
"mouseWheelZoom": true,
Expand Down Expand Up @@ -697,7 +699,7 @@
"hide": false,
"metricColumn": "none",
"rawQuery": true,
"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",
"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;",
"refId": "A",
"select": [
[
Expand Down Expand Up @@ -2773,4 +2775,4 @@
"uid": "zm7wN6Zgz",
"version": 6,
"weekStart": ""
}
}
9 changes: 5 additions & 4 deletions grafana/dashboards/trip.json
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,10 @@
"maxDataPoints": 500,
"options": {
"basemap": {
"config": {},
"config": {
"url":"https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"},
"name": "Layer 0",
"type": "osm-standard"
"type": "xyz"
},
"controls": {
"mouseWheelZoom": true,
Expand Down Expand Up @@ -242,7 +243,7 @@
"group": [],
"metricColumn": "none",
"rawQuery": true,
"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",
"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;",
"refId": "A",
"select": [
[
Expand Down Expand Up @@ -2878,4 +2879,4 @@
"uid": "FkUpJpQZk",
"version": 2,
"weekStart": ""
}
}
8 changes: 4 additions & 4 deletions grafana/dashboards/visited.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,10 @@
"options": {
"basemap": {
"config": {
"server": "streets"
"url": "https://webrd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"
},
"name": "Layer 0",
"type": "esri-xyz"
"type": "xyz"
},
"controls": {
"mouseWheelZoom": true,
Expand Down Expand Up @@ -213,7 +213,7 @@
"format": "table",
"hide": false,
"rawQuery": true,
"rawSql": "SELECT\n date_trunc('minute', date) 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",
"rawSql": "WITH converted_positions AS (\n\tSELECT\n\t\tdate_trunc('minute', date) 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;",
"refId": "Positions",
"sql": {
"columns": [
Expand Down Expand Up @@ -768,4 +768,4 @@
"uid": "RG_DxSmgk",
"version": 5,
"weekStart": ""
}
}
66 changes: 66 additions & 0 deletions grafana/proc.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
CREATE OR REPLACE FUNCTION transformLat(x DOUBLE PRECISION, y DOUBLE PRECISION)
RETURNS DOUBLE PRECISION AS '
DECLARE
ret DOUBLE PRECISION;
BEGIN
ret := -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x));
ret := ret + (20.0 * sin(6.0 * x * pi()) + 20.0 * sin(2.0 * x * pi())) * 2.0 / 3.0;
ret := ret + (20.0 * sin(y * pi()) + 40.0 * sin(y / 3.0 * pi())) * 2.0 / 3.0;
ret := ret + (160.0 * sin(y / 12.0 * pi()) + 320 * sin(y * pi() / 30.0)) * 2.0 / 3.0;
RETURN ret;
END;
' LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION transformLon(x DOUBLE PRECISION, y DOUBLE PRECISION)
RETURNS DOUBLE PRECISION AS '
DECLARE
ret DOUBLE PRECISION;
BEGIN
ret := 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x));
ret := ret + (20.0 * sin(6.0 * x * pi()) + 20.0 * sin(2.0 * x * pi())) * 2.0 / 3.0;
ret := ret + (20.0 * sin(x * pi()) + 40.0 * sin(x / 3.0 * pi())) * 2.0 / 3.0;
ret := ret + (150.0 * sin(x / 12.0 * pi()) + 300.0 * sin(x / 30.0 * pi())) * 2.0 / 3.0;
RETURN ret;
END;
' LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION delta(lat DOUBLE PRECISION, lon DOUBLE PRECISION)
RETURNS TABLE (dLat DOUBLE PRECISION, dLon DOUBLE PRECISION) AS '
DECLARE
a CONSTANT DOUBLE PRECISION := 6378245.0;
ee CONSTANT DOUBLE PRECISION := 0.00669342162296594323;
radLat DOUBLE PRECISION;
magic DOUBLE PRECISION;
sqrtMagic DOUBLE PRECISION;
BEGIN
radLat := lat / 180.0 * pi();
magic := sin(radLat);
magic := 1 - ee * magic * magic;
sqrtMagic := sqrt(magic);
dLat := transformLat(lon - 105.0, lat - 35.0);
dLon := transformLon(lon - 105.0, lat - 35.0);
dLat := (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi());
dLon := (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi());
RETURN QUERY SELECT dLat, dLon;
END;
' LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION wgs84_to_gcj02(wgsLat DOUBLE PRECISION, wgsLon DOUBLE PRECISION)
RETURNS TABLE (gcjLat DOUBLE PRECISION, gcjLon DOUBLE PRECISION) AS '
DECLARE
dLat DOUBLE PRECISION;
dLon DOUBLE PRECISION;
BEGIN
IF wgsLat < 0 OR wgsLat > 60.0 OR wgsLon < 72.004 OR wgsLon > 137.8347 THEN
RETURN QUERY SELECT wgsLat, wgsLon;
ELSE
SELECT delta.dLat, delta.dLon INTO dLat, dLon FROM delta(wgsLat, wgsLon);
SELECT wgsLat + dLat, wgsLon + dLon INTO gcjLat, gcjLon;
RETURN QUERY SELECT gcjLat, gcjLon;
END IF;
END;
' LANGUAGE plpgsql;

13 changes: 13 additions & 0 deletions grafana/run_init_sql.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

# 等待PostgreSQL服务启动
until pg_isready -h "$DATABASE_HOST" -p "$DATABASE_PORT" -U "$DATABASE_USER"; do
echo "Waiting for PostgreSQL to start..."
sleep 2
done

# 执行初始化SQL脚本
PGPASSWORD=$DATABASE_PASS psql -h "$DATABASE_HOST" -U "$DATABASE_USER" -d "teslamate" -f /proc.sql

# 启动Grafana
/run.sh

0 comments on commit 87934ff

Please sign in to comment.