Tenho um arquivo kml que descreve quatro polígonos (o arquivo kml é chamado de "core.kml", e coloquei uma cópia neste link ). Gostaria de escolher pontos aleatórios dentro da área definida pelos polígonos. Idealmente, gostaria de escolher pontos uniformemente em toda a área, então escolher mais pontos dos polígonos maiores do que dos pequenos, em proporção à sua área. Peguei emprestado o código da resposta 1 aqui , que funciona perfeitamente com o polígono da Carolina do Norte (pelo menos quando o atualizo inserindo nc <- st_geometry(nc)
). Mas com meus polígonos, a st_sample
etapa sempre dá este erro:
st_as_s2(): descartando a coordenada Z e/ou M Erro em wk_handle.wk_wkb(wkb, s2_geography_writer(oriented = oriented, :
O loop 0 não é válido: A aresta 15 cruza a aresta 19
Eu tentei inserir sf_use_s2(FALSE)
, mas ainda recebo o mesmo erro. O plot
comando funciona, e os polígonos parecem como esperado. Meu código:
core<-st_read("core.kml")
core<-st_geometry(core)
sf_use_s2(FALSE)
core.points<-st_sample(core,5)
plot(core)
Se você quiser garantir que haja pontos em cada polígono, talvez você queira tentar algo como
Observe que (1) não corrigimos problemas com
core
. Dê uma olhada nos avisos. Esta pode ser uma boa discussão para começar sua pesquisa; ilhas são difíceis; (2) o número total de pontos não é aleatório, pois o definimos como25
. O número de pontos por polígono, portanto, não é aleatório randônico: ele é25
multiplicado pela área relativa de cada polígono, ou seja, ponderado.