Spanish [SOLUCIONADO]mostar puntos cercanos en un mapa

mvera

Active Member
Licensed User
hola a todos.

tengo en una bd sqllite 2500 puntos geolocalizados(con latitud y longitud). Lo que necesito hacer es

"muestrame todos los puntos cercanos a mi , no se 20 metros aprox."

lo puedo hacer en mysql y me funciona perfecto , pero en sqllite no aplican las mismas funciones.

a alguien se le ocurre como hacerlo.

tengo las coordenadas, en la bd.
se mostrarlo en un mapa de google en nativo.

solo me falta la query que tome los cercanos.

gracias.
 

samperizal

Active Member
Licensed User
Saludos.

Mira si te puede servir esto

SELECT
marker.latitud AS lat,
marker.longitud AS lng,
bares.nombre,
bares.direccion,
(
6371 *
acos(
cos( radians($lat) )
*
cos( radians( lat ) )
*
cos( radians( lng ) - radians($lon) )
+
sin( radians($lat) )
*
sin( radians( lat ) )
)
) AS distancia
FROM
bares, marker
WHERE
marker.model = 'bares'
marker.foreing_key != $id
ORDER by
distancia ASC
LIMIT
10
 

bgsoft

Well-Known Member
Licensed User
Hola

Coge la latitud y longitud de donde estas (hay varios métodos) y con esto sabras la distancia en metros. Puedes crear un sub que le pases esos valores y te devuelva la distancia

B4X:
Dim Distancia As Double
Dim Location1, Location2 As Location

Location1.Initialize
Location2.Initialize
Location1.Latitude = LatitudBD  ' la que tienes en la Base de datos
Location1.Longitude = LongitudBD ' la que tienes en la Base de datos
Location2.Latitude = GPS_Latitud   ' el lugar donde estas
Location2.Longitude =  GPS_Longitud ' el lugar donde estas
Distancia = Location1.DistanceTo(Location2) ' la devuelve en metros

Por favor Samperizal, cuando escribas código, hazlo desde el icono "Insert..." (barra de arriba) y "Code", de esa forma el código se entiende mejor.

Saludos
 

mvera

Active Member
Licensed User
probe la query pero me dice msqllite

no such function: acos: SELECT

latitud AS lat,

longitud AS lng,

(

6371 *

acos(

cos( radians($lat) )

*

cos( radians( lat ) )

ahora voy a probar la otra tecnica
saludos
 

mvera

Active Member
Licensed User
la segunda forma me funciono , si bien funciona como esperaba tiene el inconveniente de ser mas lento que si fuera por query.

saludos y gracias.
 
Top