【发布时间】:2020-03-02 08:27:22
【问题描述】:
我正在使用 sf 库函数 st_linestring 将矩阵转换为线串。当我在矩阵上使用此函数时,它会将值四舍五入为 7 位。无论有多少位数,我都需要最多 6 位小数的重要性。例如数字 109.319272 四舍五入为 109.319300。
这是两个矩阵:
> testFt
[,1] [,2] [,3]
[1,] 353367.5 1228429 0.000000
[2,] 353363.2 1228428 4.332678
[3,] 353359.3 1228433 10.712694
[4,] 353356.0 1228438 16.029563
[5,] 353358.1 1228451 29.364214
[6,] 353366.3 1228469 49.616436
[7,] 353383.1 1228461 68.395384
[8,] 353382.9 1228443 86.336387
[9,] 353374.4 1228429 102.443063
[10,] 353367.5 1228429 109.319272
> st_coordinates(helperTest)
X Y M L1
[1,] 353367.5 1228429 0.000000 1
[2,] 353363.2 1228428 4.332678 1
[3,] 353359.3 1228433 10.712690 1
[4,] 353356.0 1228438 16.029560 1
[5,] 353358.1 1228451 29.364210 1
[6,] 353366.3 1228469 49.616440 1
[7,] 353383.1 1228461 68.395380 1
[8,] 353382.9 1228443 86.336390 1
[9,] 353374.4 1228429 102.443100 1
[10,] 353367.5 1228429 109.319300 1
第一个矩阵具有正确的精度。第二个矩阵是使用 st_linestring 将第一个矩阵转换为线串的结果。然后,我将线串转换为 sf 对象,以便使用 st_coordinates 轻松显示矩阵,但是,如果您只是打印线串,您可以看到第三列中的值是四舍五入的。有没有办法设置 st_linestring 的精度,这样我的值就会像第一个矩阵一样有 6 位小数?
【问题讨论】:
-
我无法复制这个。创建 XYM 线串并通过
st_coordinates转换回来的测试对我来说不会失去任何精度。从testFt到helperTest的代码是什么? -
@Spacedman 您可以看到使用 st_linestring 简单地将 testFt 转换为线串导致精度损失。
testFt <- st_linestring(testFt, dim = "XYM")然后简单地调用testFt将打印出线串并且可以看到精度损失。LINESTRING M (353367.5 1228429 0, 353363.2 1228428 4.332678, 353359.3 1228433 10.71269, 353356 1228438 16.02956, 353358.1 1228451 29.36421, 353366.3 1228469 49.61644, 353383.1 1228461 68.39538, 353382.9 1228443 86.33639, 353374.4 1228429 102.4431, 353367.5 1228429 109.3193)