一、Docker
1. mysql(mariadb10)目录: /volume1/@appstore/MariaDB10/usr/local/mariadb10/
2. docker中安装的容器目录:/volume1/@docker/btrfs/subvolumes
Traccar、Docker中一些重要目录笔记
Re: Traccar、Docker中一些重要目录笔记
二、Traccar
1、/traccar/src/main/java/org/traccar/geocoder 为调用各种地图的逆地址的解码函数目录。
2、/traccar/src/main/java/org/traccar/protocol 各种GPS设备通讯协议的解码器。
3、/traccar/traccar-web/web 客户端页面,其中“app.min.js”为编译压缩后的文件,也可通过“debug.html”文件调用未编译版。
4、/traccar/src/main/java/org/traccar/geofence 电子围栏
5、/traccar/src/main/java/org/traccar/model/Position.java 存取坐标数据
1、/traccar/src/main/java/org/traccar/geocoder 为调用各种地图的逆地址的解码函数目录。
2、/traccar/src/main/java/org/traccar/protocol 各种GPS设备通讯协议的解码器。
3、/traccar/traccar-web/web 客户端页面,其中“app.min.js”为编译压缩后的文件,也可通过“debug.html”文件调用未编译版。
4、/traccar/src/main/java/org/traccar/geofence 电子围栏
5、/traccar/src/main/java/org/traccar/model/Position.java 存取坐标数据
Re: Traccar、Docker中一些重要目录笔记
1、在服务器收到手机发过来的定位数据后,直接在OsmAndProtocolDecoder.java(OSM协议解码文件)中将WGS84坐标,转换为GCJ02、BD09坐标,存入数据库中。
Code: [全选] [Expand/Collapse]
- protected Object decode(Channel channel, SocketAddress remoteAddress, Object msg) throws Exception {
- FullHttpRequest request = (FullHttpRequest) msg;
- QueryStringDecoder decoder = new QueryStringDecoder(request.uri());
- Map<String, List<String>> params = decoder.parameters();
- if (params.isEmpty()) {
- decoder = new QueryStringDecoder(request.content().toString(StandardCharsets.US_ASCII), false);
- params = decoder.parameters();
- }
- Position position = new Position(getProtocolName());
- position.setValid(true);
- /* 坐标转换 WGS84 -> GCJ02 BD09*/
- Double tlat = Double.parseDouble(params.get("lat").get(0));
- Double tlon = Double.parseDouble(params.get("lon").get(0));
- double pos_gcj02[] = GpsCoordinateUtils.calWGS84toGCJ02(tlat, tlon);
- double pos_bd09[] = GpsCoordinateUtils.calWGS84toBD09(tlat, tlon);
- Network network = new Network();
- for (Map.Entry<String, List<String>> entry : params.entrySet()) {
- for (String value : entry.getValue()) {
- switch (entry.getKey()) {
- case "id":
- case "deviceid":
- DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, value);
- if (deviceSession == null) {
- sendResponse(channel, HttpResponseStatus.BAD_REQUEST);
- return null;
- }
- position.setDeviceId(deviceSession.getDeviceId());
- break;
- case "valid":
- position.setValid(Boolean.parseBoolean(value) || "1".equals(value));
- break;
- case "timestamp":
- try {
- long timestamp = Long.parseLong(value);
- if (timestamp < Integer.MAX_VALUE) {
- timestamp *= 1000;
- }
- position.setTime(new Date(timestamp));
- } catch (NumberFormatException error) {
- if (value.contains("T")) {
- position.setTime(DateUtil.parseDate(value));
- } else {
- DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- position.setTime(dateFormat.parse(value));
- }
- }
- break;
- case "lat":
- position.setLatitude(Double.parseDouble(value)); // WGS84
- position.setLatitude_gcj02(pos_gcj02[0]); // GCJ02
- position.setLatitude_bd09(pos_bd09[0]); // BD09
- break;
- case "lon":
- position.setLongitude(Double.parseDouble(value)); // WGS84
- position.setLongitude_gcj02(pos_gcj02[1]); // GCJ02
- position.setLongitude_bd09(pos_bd09[1]); // BD09
- break;
- case "location":
- String[] location = value.split(","); // WGS84
- position.setLatitude(Double.parseDouble(location[0]));
- position.setLongitude(Double.parseDouble(location[1]));
- position.setLatitude_gcj02(pos_gcj02[0]); // GCJ02
- position.setLongitude_gcj02(pos_gcj02[1]); // GCJ02
- position.setLatitude_bd09(pos_bd09[0]); // BD09
- position.setLongitude_bd09(pos_bd09[1]); // BD09
- break;
- case "cell":
- String[] cell = value.split(",");
- if (cell.length > 4) {
- network.addCellTower(CellTower.from(
- Integer.parseInt(cell[0]), Integer.parseInt(cell[1]),
- Integer.parseInt(cell[2]), Integer.parseInt(cell[3]), Integer.parseInt(cell[4])));
- } else {
- network.addCellTower(CellTower.from(
- Integer.parseInt(cell[0]), Integer.parseInt(cell[1]),
- Integer.parseInt(cell[2]), Integer.parseInt(cell[3])));
- }
- break;
- case "wifi":
- String[] wifi = value.split(",");
- network.addWifiAccessPoint(WifiAccessPoint.from(
- wifi[0].replace('-', ':'), Integer.parseInt(wifi[1])));
- break;
- case "speed":
- position.setSpeed(convertSpeed(Double.parseDouble(value), "kn"));
- break;
- case "bearing":
- case "heading":
- position.setCourse(Double.parseDouble(value));
- break;
- case "altitude":
- position.setAltitude(Double.parseDouble(value));
- break;
- case "accuracy":
- position.setAccuracy(Double.parseDouble(value));
- break;
- case "hdop":
- position.set(Position.KEY_HDOP, Double.parseDouble(value));
- break;
- case "batt":
- position.set(Position.KEY_BATTERY_LEVEL, Double.parseDouble(value));
- break;
- case "driverUniqueId":
- position.set(Position.KEY_DRIVER_UNIQUE_ID, value);
- break;
- default:
- try {
- position.set(entry.getKey(), Double.parseDouble(value));
- } catch (NumberFormatException e) {
- switch (value) {
- case "true":
- position.set(entry.getKey(), true);
- break;
- case "false":
- position.set(entry.getKey(), false);
- break;
- default:
- position.set(entry.getKey(), value);
- break;
- }
- }
- break;
- }
- }
- }
- if (position.getFixTime() == null) {
- position.setTime(new Date());
- }
- if (network.getCellTowers() != null || network.getWifiAccessPoints() != null) {
- position.setNetwork(network);
- }
- if (position.getLatitude() == 0 && position.getLongitude() == 0) {
- getLastLocation(position, position.getDeviceTime());
- }
- if (position.getDeviceId() != 0) {
- sendResponse(channel, HttpResponseStatus.OK);
- return position;
- } else {
- sendResponse(channel, HttpResponseStatus.BAD_REQUEST);
- return null;
- }
- }
Re: Traccar、Docker中一些重要目录笔记
为数据库增加GCJ02 、BD09坐标的字段:changelog-4.8c.xml
Code: [全选] [Expand/Collapse]
- <?xml version="1.0" encoding="UTF-8"?>
- <databaseChangeLog
- xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
- http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"
- logicalFilePath="changelog-4.8c">
- <changeSet author="author" id="changelog-4.8c">
- <addColumn tableName="tc_positions">
- <column name="latitude_gcj02" type="DOUBLE" />
- </addColumn>
- <addColumn tableName="tc_positions">
- <column name="longitude_gcj02" type="DOUBLE" />
- </addColumn>
- <addColumn tableName="tc_positions">
- <column name="latitude_bd09" type="DOUBLE" />
- </addColumn>
- <addColumn tableName="tc_positions">
- <column name="longitude_bd09" type="DOUBLE" />
- </addColumn>
- </changeSet>
- </databaseChangeLog>