Encuentre el lat largo más cercano a un lat largo de entrada (SQL Server 2008)

12

Tengo una nube de puntos en mi base de datos (espacial de SQL Server 2008). Eso es alrededor de 6 millones de registros. Hay 3 columnas: id, valor, geom. ¿Cuál es la forma óptima de obtener el 'valor' en la entrada lat largo?

Soy nuevo en las consultas espaciales en SQL Server 2008. ¿Alguien puede publicar un ejemplo simple de encontrar el punto en la columna geom, que coincida o esté más cerca del lat de entrada?

Shaunak
fuente
¿Has creado un índice espacial ?
Kirk Kuykendall
Lo intenté. Pero hay 6 millones de registros y la creación de índices falla con diferentes razones. Estoy tratando de crear una tabla en blanco, agregar un índice espacial en geom y luego agregar datos. ¿Eso funciona?
Shaunak
¿Qué errores tienes? Un índice puede ralentizar mucho la carga, para esas filas creo que agregar un índice después de la carga sería mucho más rápido. El rendimiento dependerá en gran medida del índice, por lo que vale la pena hacerlo bien.
Kirk Kuykendall

Respuestas:

4

Esto utiliza Geografía, no Geometría (si los datos son Lat / Lng, sus datos deben ser Tipo de geografía, no Geometría)

"El tipo de datos de geografía de SQL Server almacena datos elipsoidales (tierra redonda), como las coordenadas de latitud y longitud del GPS".

Para seleccionar los 5 registros más cercanos desde un punto lat / lng (-122.0 37.0) que puede usar.

SELECT   TOP 5
         geography::STGeomFromText('POINT(-122.0 37.0)', 4326).STDistance(p) 
FROM     markers
WHERE    geography::STGeomFromText('POINT(-122.0 37.0)', 4326).STDistance(p) < 25
ORDER BY geography::STGeomFromText('POINT(-122.0 37.0)', 4326).STDistance(p);
Mapperz
fuente
¿Qué es p? lo siento, soy un nuevo bie por eso preguntando
Shax
DECLARE @p geography
Andrew Hill