создание мультиполигона из списка длинных лат в sf пакете r - PullRequest
0 голосов
/ 25 августа 2018

У меня есть два списка, содержащих длинные латы, как показано ниже

> typeof(sec1)
[1] "list"
> sec1
         lon      lat
1   10.77996 76.51189
2   10.78049 76.51223
3   10.78101 76.51257
4   10.78154 76.51290
5   10.78206 76.51324
6   10.78259 76.51358
7   10.78271 76.51357

> typeof(sec2)
[1] "list"
> sec2
         lon      lat
1   10.77224 76.65794
2   10.77090 76.65812
3   10.76956 76.65830
4   10.76821 76.65848
5   10.76687 76.65866
6   10.76552 76.65884
7   10.76559 76.65886
8   10.76566 76.65889
9   10.76574 76.65892

Я хочу создать многогранную геометрию, используя пакет sf в R.

согласно документации, которую мне нужно передатьсписок списка числовой матрицы в функцию st_multipolygon ... но, похоже, нет возможности преобразования crs

моя попытка ниже

> a<-st_multipolygon(list(sec1,sec2))
Error in vapply(y, ncol, 0L) : values must be length 1,
 but FUN(X[[1]]) result is length 0

не удалась ..

iзнаю, что я делаю фундаментальную ошибку .. может кто-нибудь помочь, пожалуйста

спасибо

1 Ответ

0 голосов
/ 16 июля 2019

Это было почти то, что я хотел сделать, поэтому я взял эти списки и немного поработал над ними.Получившиеся полигоны были не самыми лучшими (несколько точек, должно быть, были исключены из первоначального вопроса), но мне удалось с этой тактикой:

sec1 <- list( rbind(c(10.77996, 76.51189), c(10.78049,76.51223), c(10.78101,76.51257), c(10.78154,76.51290), c(10.78206,76.51324), c(10.78259,76.51358), c(10.78271,76.51357), c(10.77996, 76.51189)) )</p> <p>sec2 <- list( rbind(c(10.77224,76.65794), c(10.77090,76.65812), c(10.76956,76.65830), c(10.76821,76.65848), c(10.76687,76.65866), c(10.76552,76.65884), c(10.76559,76.65886), c(10.76566,76.65889), c(10.76574,76.65892), c(10.77224,76.65794)) )</p> <p>a <- st_multipolygon(list(sec1,sec2))</p> <p>plot(a)

dput (сек1)

list(structure(c(10.77996, 10.78049, 10.78101, 10.78154, 10.78206, 10.78259, 10.78271, 10.77996, 76.51189, 76.51223, 76.51257, 76.5129, 76.51324, 76.51358, 76.51357, 76.51189), .Dim = c(8L, 2L)))

dput (сек2)

list(structure(c(10.77224, 10.7709, 10.76956, 10.76821, 10.76687, 10.76552, 10.76559, 10.76566, 10.76574, 10.77224, 76.65794, 76.65812, 76.6583, 76.65848, 76.65866, 76.65884, 76.65886, 76.65889, 76.65892, 76.65794), .Dim = c(10L, 2L)))

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