Tenemos la mejor respuesta que encontramos en internet. Nosotros deseamos que te resulte de mucha utilidad y si deseas compartir cualquier detalle que nos pueda ayudar a mejorar hazlo con libertad.
Solución:
¿Cómo puedo usar la longitud y la latitud para almacenar la ubicación dentro de una columna de geografía? (porque se supone que es solo un punto geográfico, no dos, ¿verdad? ¿No uno para la longitud y otro para la latitud?)
Puedes usar geography::STPointFromText
/ geography::Point
para almacenar la longitud y la latitud en un tipo de datos geográficos.
SELECT geography::STPointFromText('POINT(' + CAST([Longitude] AS VARCHAR(20)) + ' ' + CAST([Latitude] AS VARCHAR(20)) + ')', 4326)
o
SELECT geography::Point(Latitude, Longitude , 4326)
Link de referencia:
Actualizar la columna Geografía en la tabla
Ahora que tengo los puntos geográficos, ¿cómo puedo seleccionar todas las filas dentro de una distancia específica (en mi caso, 2 km)?
Puedes usar STDistance
como esto.
DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('POINT(-122.35900 47.65129)', 4326);
SET @h = geography::STGeomFromText('POINT(-122.34720 47.65100)', 4326);
SELECT @g.STDistance(@h);
Link de referencia:
¿Distancia entre dos puntos usando el tipo de datos Geografía en sqlserver 2008?
Insertar Consulta
DECLARE @GeoTable TABLE
(
id int identity(1,1),
location geography
)
--Using geography::STGeomFromText
INSERT INTO @GeoTable
SELECT geography::STGeomFromText('POINT(-122.35900 47.65129)', 4326)
--Using geography::Point
INSERT INTO @GeoTable
SELECT geography::Point(47.65100,-122.34720, 4326);
Obtener consulta de distancia
DECLARE @DistanceFromPoint geography
SET @DistanceFromPoint = geography::STGeomFromText('POINT(-122.34150 47.65234)', 4326);
SELECT id,location.Lat Lat,location.Long Long,location.STDistance(@DistanceFromPoint) Distance
FROM @GeoTable;
Te mostramos las comentarios y valoraciones de los usuarios
Recuerda comunicar esta sección si te fue útil.