Aqui está o meu cenário:
A aplicação "A" produz pontos de latitude e longitude que correspondem à rota planejada. Dependendo da distância da rota, pode ter vários milhares de pontos. Conheço os tipos de dados Geography e Geometry, mesmo que tenham saído com o SQL 2008, ainda não vi ninguém usá-los e não tenho certeza de qual seria um bom cenário para usá-los. Além dos pontos que o App "A" gera, preciso armazenar os pontos do App "B" que correspondem à rota real. Depois de tudo armazenado, preciso encontrar desvios da rota planejada.
Isso pode ser um problema NP-Complete, http://en.wikipedia.org/wiki/NP-complete Compare com o problema do caixeiro viajante, http://en.wikipedia.org/wiki/Travelling_salesman_problem Não tenho certeza se for NP-Complete, pois meus textos da faculdade estão armazenados e já faz um tempo desde minhas aulas de complexidade.
Não quer dizer que não podemos simplesmente fazer algumas "matemáticas de desvio" simplistas usando tipos de dados espaciais do SQL Server começando com a abordagem de tabela sugerida por @kenwilsondba.
Uma abordagem mais completa (se não NP-Complete) procuraria onde a rota real voltou aos trilhos entre outras coisas.
No entanto, poderíamos fazer o seguinte utilizando os tipos de dados espaciais do SQL Server se tudo o que precisamos for um cálculo simplista de desvio, onde poderíamos simplesmente descartar destinos extras se a rota real for ultrapassada ou repetir o último ponto final real se a rota real for abaixo , e desconsidere todos os segmentos em que a rota voltou ao caminho certo e suponha que os IDs de parada sejam realmente sequenciais.
Observe que essa abordagem de cálculo também penaliza as rotas reais que se desviam apenas no início e nunca se desviam no restante da rota, e recompensa aqueles que permanecem na pista até os pontos finais.
Outra ressalva é que os campos no design da tabela abaixo são redundantes.
Os cálculos de distância são em metros por padrão.
Para encontrar a quantidade total de desvio em metros:
Para mostrar os segmentos de rota planejada, real e de desvio de uma só vez na guia "Resultados Espaciais" do SQL Server:
Recomendo o uso de duas tabelas. Tabela A para a rota planejada e Tabela B para a rota real. Depois de preencher ambas as tabelas, você pode unir as duas tabelas em algum tipo de identificador e usar o método STDistance para determinar os desvios. Existem também muitos outros métodos que acho que seriam úteis nessa situação.
Consulte http://technet.microsoft.com/en-us/library/cc280766.aspx