Только градусы и минуты в базе данных

v.kireytsev3 years ago

Добрый день!
Произвели пару месяцев назад переезд MySQL базы данных и сейчас только обнаружили что в интерфейсе отображаются верные координаты, а в отчетах о маршруте (и в самой базе) сохраняются только градусы и минуты.
Версия 4.12

Код create базы такой:

CREATE TABLE `tc_positions` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`protocol` VARCHAR(128) NULL DEFAULT NULL,
	`deviceid` INT(11) NOT NULL,
	`servertime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	`devicetime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
	`fixtime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
	`valid` BIT(1) NOT NULL,
	`latitude` DOUBLE(22,0) NOT NULL,
	`longitude` DOUBLE(22,0) NOT NULL,
	`altitude` FLOAT(12,0) NOT NULL,
	`speed` FLOAT(12,0) NOT NULL,
	`course` FLOAT(12,0) NOT NULL,
	`address` VARCHAR(512) NULL DEFAULT NULL,
	`attributes` VARCHAR(4000) NULL DEFAULT NULL,
	`accuracy` DOUBLE(22,0) NOT NULL DEFAULT '0',
	`network` VARCHAR(4000) NULL DEFAULT NULL,
	PRIMARY KEY (`id`),
	INDEX `position_deviceid_fixtime` (`deviceid`, `fixtime`) USING BTREE,
	CONSTRAINT `fk_positions_deviceid` FOREIGN KEY (`deviceid`) REFERENCES `tc_devices` (`id`) ON UPDATE NO ACTION ON DELETE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=6327597
;

Может ли быть дело в том, что для хранения координат неверно выбран тип данных double? Или знак десятичного разделителя может быть неверно выбран?
Что можно попробовать сделать, чтобы координаты сохранялись полностью?

Anton Tananaev3 years ago

Не понял. Что не сохраняется? Примеры приведите пожалуйста.

v.kireytsev3 years ago

Нашел уже причину.

    `latitude` DOUBLE(22,0) NOT NULL,
    `longitude` DOUBLE(22,0) NOT NULL,

вот это 22,0 означает что 0 знаков после десятичного разделителя БД будет сохранять. Изменил на 22,14 координаты стали сохранятся полностью, с десятичной частью.

v.kireytsev3 years ago

Подскажите какие там должны быть значения по установочному скрипту traccar?

Anton Tananaev3 years ago

Почему не хотите что Traccar вам таблицы создал автоматически?

v.kireytsev3 years ago

БД переносил другой сотрудник и чтоб сохранить историю перемещений использовал бекап в sql файл наверное. И он как-то неправильно развернулся наверное на разных версиях движка.

Anton Tananaev3 years ago

Я бы посоветовал создать базу автоматически а потом скопировать уже только данные а не всю схему.