С некоторыми тестовыми данными я не могу воспроизвести это.
Сделать матрицу 3x10:
> testFt = matrix(runif(30),ncol=3)
> testFt
[,1] [,2] [,3]
[1,] 0.89427444 0.9614064 0.03305242
[2,] 0.64785749 0.2379120 0.76285818
[3,] 0.18872965 0.3535477 0.19718624
[4,] 0.21516340 0.4436407 0.36707556
[5,] 0.85731714 0.4872524 0.46147387
[6,] 0.98970232 0.6678123 0.76021971
[7,] 0.16932569 0.1547750 0.16983325
[8,] 0.18255042 0.7313963 0.60732292
[9,] 0.03580905 0.4369531 0.32653902
[10,] 0.21047936 0.4164918 0.40285367
Преобразовать в LINESTRING:
> testFtPts = st_linestring(testFt, dim="XYM")
> testFtPts
LINESTRING M (0.8942744 0.9614064 0.03305242, 0.6478575 0.237912 0.7628582, 0.1887296 0.3535477 0.1971862, 0.2151634 0.4436407 0.3670756, 0.8573171 0.4872524 0.4614739, 0.9897023 0.6678123 0.7602197, 0.1693257 0.154775 0.1698332, 0.1825504 0.7313963 0.6073229, 0.03580905 0.4369531 0.326539, 0.2104794 0.4164918 0.4028537)
Любая очевидная потеря вТочность достигается за счет усечения дисплея, а не фактического округления значения. Если я преобразую в координаты:
> testFtPtsCoord = st_coordinates(testFtPts)
> testFtPtsCoord
X Y M L1
[1,] 0.89427444 0.9614064 0.03305242 1
[2,] 0.64785749 0.2379120 0.76285818 1
[3,] 0.18872965 0.3535477 0.19718624 1
[4,] 0.21516340 0.4436407 0.36707556 1
[5,] 0.85731714 0.4872524 0.46147387 1
[6,] 0.98970232 0.6678123 0.76021971 1
[7,] 0.16932569 0.1547750 0.16983325 1
[8,] 0.18255042 0.7313963 0.60732292 1
[9,] 0.03580905 0.4369531 0.32653902 1
[10,] 0.21047936 0.4164918 0.40285367 1
Все значения идентичны:
> all(testFt == testFtPtsCoord[,1:3])
[1] TRUE
Я даже пробовал это с числами в том же приблизительном диапазоне, что и ваши данные:
> set.seed(99)
> testFt = cbind(runif(10,353300,353400),runif(10,1228400, 1228500), runif(10, 0, 100))
> testFt
[,1] [,2] [,3]
[1,] 353358.5 1228455 22.7903474
[2,] 353311.4 1228451 8.0524150
[3,] 353368.4 1228419 82.1618422
[4,] 353399.3 1228464 59.1113977
[5,] 353353.5 1228469 77.3389019
[6,] 353396.7 1228464 35.0085977
[7,] 353367.1 1228436 0.6061323
[8,] 353329.5 1228410 81.4506223
[9,] 353335.8 1228410 0.1179229
[10,] 353317.5 1228418 20.0690183
> testFtPts = st_linestring(testFt, dim="XYM")
> testFtPtsCoord = st_coordinates(testFtPts)
> all(testFt == testFtPtsCoord[,1:3])
[1] TRUE
>
Предполагая, что именно так вы переходите от матрицы к строкам и снова к матрице, я не могу воспроизвести какие-либо потери в точности.