Un select que me puso a pensar

30/04/2010 - 18:27 por Julio Briceño | Informe spam
Alguna idea de cómo hacer este query eficiente:

Tengo una tabla de ubicaciones por coordenadas (millones de registros):

Longitud Latitud Ciudad
-66.901588 10.494901 Caracas
-74.00528 40.728007 Nueva York
-3.701019 40.425519 Madrid

Teniendo una localizacion

-34.602694,-58.372765 (Buenos aires Argentina)

Cómo consigo qué es lo más cerca que hay de esta localización? Es decir
Buenos aires está más cerca de Caracas, Nueva York o Madrid...?

:s

Gracias de antemano,

Preguntas similare

Leer las respuestas

#1 Gustavo Cantero
30/04/2010 - 19:15 | Informe spam
Julio:
Si utilizas SQL Server 2008 o SQL Server 2008 R2 podrías hacer algo así:

SELECT TOP 1 Ciudad
FROM Ubicaciones
ORDER BY
(geography::Point(-34.602694, -58.372765,
4326)).STDistance(geography::Point(Latitud, Longitud, 4326))

Aunque si tienes muchas ubicaciones cargadas puede demorar, por lo que te
recomiendo que en lugar de guardar coordenadas utilices el tipo de dato
"geography" y crees un índice espacial sobre este campo. La documentación
de este tipo de dato la puedes encontrar aquí:
http://msdn.microsoft.com/es-ar/lib...5266.aspx, y sobre los índices
espaciales acá:
http://msdn.microsoft.com/en-us/library/bb933790(v=SQL.100).aspx.
Espero que te sea de utilidad.
Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar

De: Julio Briceño [mailto:]
Expuesto a las: Viernes, 30 de Abril de 2010 01:27 p.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Un select que me puso a pensar
Asunto: Un select que me puso a pensar


Alguna idea de cómo hacer este query eficiente:

Tengo una tabla de ubicaciones por coordenadas (millones de registros):

Longitud Latitud Ciudad
-66.901588 10.494901 Caracas
-74.00528 40.728007 Nueva York
-3.701019 40.425519 Madrid

Teniendo una localizacion

-34.602694,-58.372765 (Buenos aires Argentina)

Cómo consigo qué es lo más cerca que hay de esta localización? Es
decir
Buenos aires está más cerca de Caracas, Nueva York o Madrid...?

:s

Gracias de antemano,
Respuesta Responder a este mensaje
#2 Julio Briceño
30/04/2010 - 22:00 | Informe spam
Interesante, gracias.

"Gustavo Cantero" wrote:

Julio:
Si utilizas SQL Server 2008 o SQL Server 2008 R2 podrías hacer algo así:

SELECT TOP 1 Ciudad
FROM Ubicaciones
ORDER BY
(geography::Point(-34.602694, -58.372765,
4326)).STDistance(geography::Point(Latitud, Longitud, 4326))

Aunque si tienes muchas ubicaciones cargadas puede demorar, por lo que te
recomiendo que en lugar de guardar coordenadas utilices el tipo de dato
"geography" y crees un índice espacial sobre este campo. La documentación
de este tipo de dato la puedes encontrar aquí:
http://msdn.microsoft.com/es-ar/lib...5266.aspx, y sobre los índices
espaciales acá:
http://msdn.microsoft.com/en-us/library/bb933790(v=SQL.100).aspx.
Espero que te sea de utilidad.
Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar

De: Julio Briceño [mailto:]
Expuesto a las: Viernes, 30 de Abril de 2010 01:27 p.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Un select que me puso a pensar
Asunto: Un select que me puso a pensar


Alguna idea de cómo hacer este query eficiente:

Tengo una tabla de ubicaciones por coordenadas (millones de registros):

Longitud Latitud Ciudad
-66.901588 10.494901 Caracas
-74.00528 40.728007 Nueva York
-3.701019 40.425519 Madrid

Teniendo una localizacion

-34.602694,-58.372765 (Buenos aires Argentina)

Cómo consigo qué es lo más cerca que hay de esta localización? Es
decir
Buenos aires está más cerca de Caracas, Nueva York o Madrid...?

:s

Gracias de antemano,






.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida