Hola amigos de la #nerdytud
Buscando alguna solución para obtener puntos o marcadores que se encuentran a una determinada distancia en un mapa, me he dado cuenta que hay infinitas posibilidades de conseguir los mismos resultados en diferentres lenguajes de programación. En alguna de estas soluciones podía obtener la distancia entre puntos, u obtener latitud y longitud a x metros. Pero investigando aún un poco más y gracias Marcelo Calderón, he dado con diversos ejemplos en SQL, que a partir de varios de ellos, armé la siguiente solución.
Crear tabla
DROP TABLE IF EXISTS dummy
CREATE TABLE dummy (
id int IDENTITY (1,1) NOT NULL,
name nvarchar(50) NULL,
marker geography NULL
)
Popular tabla
INSERT INTO dummy (name, marker)
VALUES ('maker 01', geography::Point(-34.61141025695043, -58.420492128751235, 4326))
INSERT INTO dummy (name, marker)
VALUES ('maker 02', geography::Point(-34.61105263787088, -58.41770799579351, 4326))
INSERT INTO dummy (name, marker)
VALUES ('maker 03', geography::Point(-34.61056918741179, -58.41460467998047, 4326))
Generar consulta
declare @zeroPoint geography = geography::Point(-34.61024688552542, -58.42534424484099, 4326);
declare @distance int = 1000;
select
name,
marker.Lat as lat,
marker.Long as lng
@zeroPoint.STDistance(marker) as meters
from dummy
where @zeroPoint.STDistance(marker) <= @distance