Есть ли способ добавить значения M к объекту sf без потери точности? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь добавить 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 без округления значений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...