Я пытаюсь добавить M-значения в объект sf, но я не могу найти способ сделать это без потери точности для M-значений. Я не могу найти способ прямого добавления M-значений к объекту sf, поэтому я редактирую по одному объекту за раз и добавляю координаты с вновь добавленными m-значениями обратно в исходный объект sf. Однако, используя этот метод, я теряю точность на М-значениях. Вот мой код:
for(i in 1:nrow(sfDataObject))
{
tempFeature <- st_coordinates(sfDataObject[i,])
tempSfObject <- sfDataObject[i,]
tempSfObject <- as.data.frame(tempSfObject)
tempFeature <- addM(tempFeature)
tempFeature <- st_linestring(tempFeature, dim = "XYM")
tempSfObject$geometry <- st_as_text(tempFeature)
tempSfObject <- st_as_sf(tempSfObject, wkt = "geometry", crs = st_crs(sfDataObject))
sfDataObject[i,] <- tempSfObject
}
Вот результат добавления M-значений в объект sf с моими данными:
## coordinates of 2nd feature after adding m-values with addM() and converting to a linestring
> st_coordinates(testFeature)
X Y M L1
[1,] 353367.5 1228429 0.000000 1
[2,] 353363.2 1228428 4.332678 1
[3,] 353359.3 1228433 10.712694 1
[4,] 353356.0 1228438 16.029563 1
[5,] 353358.1 1228451 29.364214 1
[6,] 353366.3 1228469 49.616436 1
[7,] 353383.1 1228461 68.395384 1
[8,] 353382.9 1228443 86.336387 1
[9,] 353374.4 1228429 102.443063 1
[10,] 353367.5 1228429 109.319272 1
## coordinates of the 2nd feature of the sfDataObject after adding m-values back in
## M values are rounded
> st_coordinates(sfDataObject[2,])
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
Моя addM()
функция просто принимает набориз (x, y) координат и добавляет m-значения, основанные на этих координатах. Это значения, которые я хочу добавить к каждой функции в исходном sfDataObject
, но они округляются. Я думаю, что это может быть функция st_as_text()
, потому что когда я сравниваю значения до и после преобразования объекта в линейную строку, округление не происходит, поэтому я знаю, что это не так. Кто-нибудь знает, как я могу добавить значения M к объекту sf без округления значений?