Ordenar pela Latitude e Longitude

7 respostas
andre_guitar7

Pessoal, bom dia.

Tenho uma lista de locais no banco de dados, contendo em cada registro a longitude e latitude.

Para ordenar os registros que estão mais perto de uma longitude e latitude específica de um cliente de um celular por exemplo, carrego todos os registros e um a um faço o calculo no código java, ordenando pelo mais perto:

public static double calcularDistancia(double latitudeInicial, double longitudeInicial, double latitudeFinal, double longitudeFinal) 
	{
		int raioTerra = 6371;
		double PI = Math.PI;
		int valorMetade = 90;

		double v1 = Math.cos(PI * (valorMetade - latitudeFinal) / 180);
		double v2 = Math.cos((valorMetade - latitudeInicial) * PI / 180);
		double v3 = Math.sin((valorMetade - latitudeFinal) * PI / 180);
		double v4 = Math.sin((valorMetade - latitudeInicial) * PI / 180);
		double v5 = Math.cos((longitudeInicial - longitudeFinal) * PI / 180);

		return (raioTerra * Math.acos((v1 * v2) + (v3 * v4 * v5)));
	}
Será que consigo ordenar os registros na consulta JPA somente utilizando as cordenadas de longitude e latitude?

7 Respostas

surfzera

Cara, com a biblioteca do Google Maps você não consegue já ter todas as informações que precisa ?

andre_guitar7

O problema é que tenho uma lista de latitudes e longitudes cadastradas no banco de dados. Preciso ordená-las.

andre_guitar7

Se for pensar, latitude e longitude são dois números. Não seria somente ordenar?

Mas como ordenar baseando-se na latitude e longitude do cliente?

andre_guitar7

Algo parecido, mas sem uma solução em JPQL.

http://stackoverflow.com/questions/2064977/jpql-to-get-nearest-records-by-latitude-and-longitude

andre_guitar7

Isso deu certo no SQL

SELECT *, SQRT(POW((69.1 * (registro.latitude - -25.428356)) , 2 ) + POW((53 * (registro.longitude - -49.273252)), 2)) AS distance FROM registro ORDER BY distance ASC LIMIT 5
O problema é passar isso pro JPQL.

andre_guitar7

JPQL não tem a função POW

MiltonBastos

Qual é o banco de dados?

Como não sei qual é o banco, não tenho certezxa se o POW seria equivalente à função POWER (do Oracle), que serve pra calcular exponenciação.

Não conheço absolutamente nada de JPQL, mas vc não consegue calcular exponenciação no JPQL ou então em alguma outra camada do teu código?

Criado 19 de outubro de 2012
Ultima resposta 20 de out. de 2012
Respostas 7
Participantes 3