2011-07-26 10 views
6

Tengo una base de datos incrustada en mi aplicación que tiene toda la latitud y longitud de algunos puntos interesados ​​y necesito saber mi distancia desde estos puntos (obtener mi posición usando GPS). Mi problema es: acabo de descubrir que SQLite no puede calcular la distancia utilizando la consulta que tengo porque no calcula las funciones de trigonometría (SIN, COS ...). Estaba tratando de evitar el cálculo de estas distancias programáticamente utilizando esta consulta:IPhone - Distancia de SQLite por latitud y longitud

NSLog(@"SELECT ((ACOS(SIN(%@ * PI()/180) * SIN(lat * PI()/180) + COS(%@ * PI()/180) * COS(lat * PI()/180) * COS((%@ – lon) * PI()/180)) * 180/PI()) * 60 * 1.1515) AS `distance` FROM `members` HAVING `distance`<=’1000′ ORDER BY `distance`", Latitude,Latitude, Longitude); 

¿Alguien tiene una solución?

¡Recuerdos!

Respuesta

9

hacerlo en Objective C.

este tipo tenía el mismo problema: http://www.thismuchiknow.co.uk/?p=71

+0

Grande. ¡Muchas gracias! – Claudio

+3

El vinculado a la respuesta es realmente muy bueno. Definición de una función c llamada desde sqlite para calcular la distancia. Es rápido y funciona. Lo único que podría hacer es refinar su búsqueda usando una declaración BETWEEN. Estoy usando esto: SELECCIONAR * FROM Ubicaciones DONDE lat ENTRE% f AND% f AND lon ENTRE% fY% f ORDER BY distancia (lat, lon,% f,% f) LIMIT 25 –

+0

@KennyWinker Proporcione% f value –

0

Sí, se puede hacer una consulta sencilla basada en un rectángulo alrededor de la ubicación, a continuación, utilizar la fórmula para calcular la haversine distancia exacta

La ventaja de esto es que puede usar índices en la tabla de SQLite.

Más acerca de la fórmula haversine: http://en.wikipedia.org/wiki/Haversine_formula

+0

¿Tiene algún enlace con un ejemplo? – Claudio

Cuestiones relacionadas