Mais

Aproximando coordenadas de GPS para um ponto de n locais esperados


Estou tentando encontrar as coordenadas do meu ponto de atenção (ponto X, marcado em azul). Usei o dispositivo GPS do meu carro para coletar as coordenadas de onde estacionei meu veículo cada vez que visitei o ponto x. Então, depois de fazer esse exercício por 16 dias, consegui obter 16 conjuntos de coordenadas, espalhadas em torno do meu ponto de atenção.

Depois de traçar essas coordenadas no mapa, observei o seguinte: Duas ou três vezes em dez vezes, meu dispositivo GPS forneceu um conjunto errado de coordenadas que acabou sendo silencioso longe do ponto X. Também devido ao tráfego, ocasionalmente estou incapaz de estacionar perto do ponto x e, portanto, também neste caso, as coordenadas obtidas estão longe do ponto X.

Problema: a partir dos 16 conjuntos de coordenadas obtidos, que processo devo usar para me limitar a um conjunto de coordenadas que está próximo ao meu ponto de atenção (ponto X)?


Uma maneira de abordar este problema interessante é vê-lo como um estimador robusto do centro de uma distribuição de pontos bivariada. Uma solução (bem conhecida) é descasque os cascos convexos até não sobrar nada. O centróide do último casco não vazio localiza o centro.

(Isso está relacionado ao bagplot. Para obter mais informações, pesquise na Web por "casco convexo descascando valores discrepantes multivariados".)

O resultado para os 16 pontos ilustrados é mostrado como o triângulo central neste mapa. Os três polígonos circundantes mostram os cascos convexos sucessivos. Os cinco pontos periféricos (30% do total!) Foram removidos nas duas primeiras etapas.


O exemplo foi calculado emR. O próprio algoritmo é implementado no bloco do meio, "peeling convexo". Ele usa o embutidochullrotina, que retorna os índices de pontos no casco. Esses pontos são removidos por meio da expressão de indexação negativaxy [casco,]. Isso é repetido até que os últimos pontos sejam removidos. Na última etapa, o centróide é calculado pela média das coordenadas.

Observe que em muitos casos projetar os dados nem mesmo é necessário: os cascos convexos não mudarão a menos que as características originais abranjam o antimeridiano (+/- 180 graus de longitude), qualquer pólo, ou sejam tão extensos que a curvatura dos segmentos entre eles faça a diferença. (Mesmo assim, a curvatura será de pouca preocupação, porque o peeling ainda convergirá para um ponto central.)

# # Projete os dados. # dy <- c (8,7,5,10,7,17,19,19,19,21,22,22,22,24,24,26,26) dx <- c (66,67,66,89 , 89,79,78,76,75,81,78,77,75,80,77,83) lat <- (28.702 + dy / 1e5) / 180 * pi lon <- (77,103 + dx / 1e5) / 180 * pi y <- dy x <- cos (média (lat)) * dx # # Peeling convexo. # xy <- cbind (x, y) while (TRUE) {hull <- chull (xy) if (length (hull)