Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
marcio150972
Creator
Creator

Calculo distância percorrida entre Clientes

Boa tarde,

Estou tentando resolver uma situação e gostaria de saber se alguém já passou por isso ou algo semelhante.

Preciso mostrar em uma tabela a distância percorrida entre os Clientes, isso seria uma monitoração dos representantes comerciais, na verdade eu teria 2 situações:

1) Distância planejada: No caso eu tenho uma tabela aonde e lançada a rota dos representantes que ele deve visitar por data conforme segue abaixo exemplo, preciso calcular a distancia entre eles, no caso inicio 0 m ate cliente 1 200 m, do cliente 1 ate cliente 2 tem 500 m, do cliente 2 ate o 3 1000 m e assim por diante.

des_clientedta_rotanro_latitudenro_longitudeDistancia Planejada
Clientes 12014-12-15        -23,5561577-46,6585063200 m
Clientes 22014-12-15        -23,5603345-46,6534898500 m
Clientes 32014-12-15        -23,45354-46,60179371000 m
Clientes 42014-12-15        -23,4943821-46,64605750
Clientes 52014-12-15        -23,5433046-46,6544670

2) Distância percorrida: no caso eu tenho uma tabela aonde é lançada pontos de captura de GPS, eu teria que fazer algo parecido com a situação de cima, mas pegando os pontos aonde ele foi percorrendo, pois assim teremos o cruzamento entre rota planejada e realmente percorrida para ver se o representante não esta saindo muito da rota dele. eu teria que somar a leitura do primeiro ponto ate a chegada ao cliente e depois entre clientes, fora esses campos eu tenho o identificador do usuário e do cliente e no campo des_obs eu tenho o registro de chegada no Cliente, entao teria que pegar a distância ponto 0 ate VEND - SUPERMERCADO 1 300 m, do VEND - SUPERMERCADO 1 ate VEND - SUPERMERCADO 3 800 m,e  assim por diante

exemplo:

dta_eventodta_gpsvlr_latvlr_londes_obs
2014-12-15 08:38:562014-12-15 10:38:55-23,4554-46,6028Leitura GPS
2014-12-15 08:41:502014-12-15 10:39:15-23,4557-46,6023VEND - SUPERMERCADO 1
2014-12-15 08:43:232014-12-15 10:39:15-23,4557-46,6023Leitura GPS
2014-12-15 08:50:002014-12-15 10:50:00-23,4556-46,6016Leitura GPS
2014-12-15 08:55:012014-12-15 10:55:00-23,4643-46,6045VEND - SUPERMERCADO 2
2014-12-15 09:00:262014-12-15 11:00:25-23,4737-46,6139Leitura GPS
2014-12-15 09:05:302014-12-15 11:05:29-23,4784-46,6213Leitura GPS
2014-12-15 09:10:342014-12-15 11:10:34-23,483-46,6353VEND - SUPERMERCADO 3
2014-12-15 09:15:352014-12-15 11:15:35-23,4916-46,6496Leitura GPS
2014-12-15 09:21:152014-12-15 11:21:15-23,4946-46,6461Leitura GPS

No documento tenho que apresentar da seguinte forma:


Agradeço se puderem ajudar com dicas e sugestões.

Labels (1)
1 Solution

Accepted Solutions
julianacampag
Creator
Creator

Olá Márcio,

não sei se te ajuda, mas esses tempos precisei fazer cálculos de distância... a distância geodésica entre dois pontos (linha reta), pode ser calculada no próprio Qlikview. A fórmula que eu usei foi a seguinte:

6372.795477598 * acos((sin(Latitude_Vendedor) * sin(Latitude_Cliente)) + (cos(Latitude_Vendedor) * cos(Latitude_Cliente) * cos(Longitude_Cliente - Longitude_Vendedor)))

Espero que ajude.

View solution in original post

16 Replies
cesaraccardi
Specialist
Specialist

Ola Marcio,

Voce esta usando qual base de dados? Eu pergunto isso porque se for SQL Server e dependendo da versao existe um tipo de dados especial 'geography' que tem varias funcoes envolvendo coordernadas geograficas.

Abracos,

Cesar

marcio150972
Creator
Creator
Author

Tudo bem Cesar!!

Muito obrigado pelo auxílio.

A versão é

Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

nicolett_yuri

Teoricamente a solução deve se conectar em algum sistema de georeferencia e calcular a distância entre dois pontos?

cesaraccardi
Specialist
Specialist

Sem problemas Marcio,

Otimo, entao se possivel eu te aconselho a calcular as distancias na base de dados. Isso pode ser feito utilizando uma trigger 'on insert/update' por exemplo, o codigo abaixo e' um exemplo de uso do recurso do SQL Server:

DECLARE @myPoint geography;
SET @myPoint = geography::STGeomFromText('POINT(28.8801844444445 41.0299561111109)',4326);
SELECT TOP 8 id,
@myPoint.STDistance(geom.ToString()) as dist
FROM MY_DB
ORDER BY dist

Se caso nao for possivel ai tera que calcular no QlikView mesmo.

marcio150972
Creator
Creator
Author

Olá Yuri, tudo bem!

Pois é, estou com dúvidas quanto a isso, pois eu gostaria de fazer direto no Qlik, como tenho os campos de latitude e longitude passaria esses valores, mas fico pensando em como pegar o calculo entre clientes ou entre os pontos que coleto do GPS.

Hoje já tenho um campo calculado que pega a distância aonde foi feito o pedido de venda ou justificativa de não venda, mas esse calculo é simples porque pego as latitudes de rota e de visita, vou colocar a abaixo e assim monitoramos se ele realmente esta no cliente ou de casa ou longe, só que agora para fechar essa monitoração, preciso saber o que esta programado e o que realmente ele percorreu, não sei se fui bem claro.

LOAD

  [%Chave GPSxRotas],

  (6371*ACOS(COS(PI()*(90-[Latitude visitação])/180)*COS((90-[Latitude Rotas])*PI()/180)+

  SIN((90-[Latitude visitação])*PI()/180)*

  SIN((90-[Latitude Rotas])*PI()/180)*COS(([Longitude Rotas]-[Longitude visitação])*PI()/180))) * 1000 as Distância

resident [Gps tmp];

marcio150972
Creator
Creator
Author

Cesar,

Vou testar a tua sugestão, vou ver bem como funciona isso no SQL Server.

Assim que testar coloco aqui, muito obrigado por enquanto meu amigo.

julianacampag
Creator
Creator

Olá Márcio,

não sei se te ajuda, mas esses tempos precisei fazer cálculos de distância... a distância geodésica entre dois pontos (linha reta), pode ser calculada no próprio Qlikview. A fórmula que eu usei foi a seguinte:

6372.795477598 * acos((sin(Latitude_Vendedor) * sin(Latitude_Cliente)) + (cos(Latitude_Vendedor) * cos(Latitude_Cliente) * cos(Longitude_Cliente - Longitude_Vendedor)))

Espero que ajude.

marcio150972
Creator
Creator
Author

Olá Juliana,

Muito obrigado pela ajuda, vou testar essa também, assim que obtiver o retorno coloco aqui.

valeu!