Use amap instead of OSM

This commit is contained in:
huafengchun
2024-06-18 22:23:59 +08:00
parent c37638b320
commit ef0eafc3bb
8 changed files with 120 additions and 18 deletions
+14
View File
@@ -17,6 +17,16 @@ ENV GF_ANALYTICS_REPORTING_ENABLED=false \
DATABASE_PORT=5432 \
DATABASE_SSL_MODE=disable
USER root
RUN apk update && apk add --no-cache postgresql-client git
## Add Teslamate-CustomGrafanaDashboards
#RUN git clone https://github.com/hipudding/Teslamate-CustomGrafanaDashboards.git && \
# chown -R grafana Teslamate-CustomGrafanaDashboards && \
# mv Teslamate-CustomGrafanaDashboards/customdashboards.yml /etc/grafana/provisioning/dashboards/customdashboards.yml && \
# mv Teslamate-CustomGrafanaDashboards/dashboards /TeslamateCustomDashboards && \
# rm -rf Teslamate-CustomGrafanaDashboards
USER grafana
COPY logo.svg /usr/share/grafana/public/img/grafana_icon.svg
@@ -28,5 +38,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
+5 -3
View File
@@ -1225,10 +1225,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,
@@ -1311,7 +1313,7 @@
"editorMode": "code",
"format": "table",
"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",
"sql": {
"columns": [
@@ -785,9 +785,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,
@@ -869,7 +871,7 @@
"editorMode": "code",
"format": "time_series",
"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",
"sql": {
"columns": [
@@ -1750,4 +1752,4 @@
"title": "Charge Details",
"uid": "BHhxFeZRz",
"version": 1
}
}
@@ -535,9 +535,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,
@@ -659,7 +661,7 @@
"editorMode": "code",
"format": "time_series",
"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",
"sql": {
"columns": [
+5 -4
View File
@@ -99,9 +99,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,
@@ -218,7 +219,7 @@
"editorMode": "code",
"format": "time_series",
"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",
"sql": {
"columns": [
@@ -2683,4 +2684,4 @@
"title": "Trip",
"uid": "FkUpJpQZk",
"version": 1
}
}
+6 -4
View File
@@ -91,9 +91,11 @@
"maxDataPoints": 10000000,
"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,
@@ -215,7 +217,7 @@
"editorMode": "code",
"format": "table",
"rawQuery": true,
"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",
"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;",
"refId": "Positions",
"sql": {
"columns": [
@@ -608,4 +610,4 @@
"title": "Visited",
"uid": "RG_DxSmgk",
"version": 1
}
}
+66
View File
@@ -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
View File
@@ -0,0 +1,13 @@
#!/bin/bash
# Wait PostgreSQL service
until pg_isready -h "$DATABASE_HOST" -p "$DATABASE_PORT" -U "$DATABASE_USER"; do
echo "Waiting for PostgreSQL to start..."
sleep 2
done
# Run sql
PGPASSWORD=$DATABASE_PASS psql -h "$DATABASE_HOST" -U "$DATABASE_USER" -d "teslamate" -f /proc.sql
# Run Grafana
/run.sh