Inicio > .NET CURSO 2008 > Convertir latitud / longitud al (Geography Point) SQL Server 2008

Convertir latitud / longitud al (Geography Point) SQL Server 2008


  Antes de SQL Server 2008, los lugares geográficos, como sucursales bancarias, locales de los restaurantes y los lugares del hogar, suelen ser almacenados como coordenadas de latitud y longitud en dos columnas separadas.  

Con la introducción de tipos de datos espaciales en SQL Server 2008, en particular el tipo de datos GEOGRAPHY ,esto ahora se puede almacenar como puntos en una sola columna almacena como un objeto de datos espaciales.  

Mostrare las diferentes formas de convertir la latitud y longitud de los lugares geográficos en un punto de la geografía.  

Digamos que tenemos una tabla de los famosos puntos de referencia geográfica internacional en los que almacenamos su latitud y longitud, y queremos aprovechar el nuevo tipo de dato.  

Creamos una base de datos de prueba y una tabla llamada Ubicaciones.  

USE Pruebas  

CREATE TABLE [dbo].[Ubicaciones] (
    [ID]                INT IDENTITY(1, 1),
    [Lugar]      VARCHAR(100),
    [Ciudad]          VARCHAR(50),
    [Latitude]          FLOAT,
    [Longitude]         FLOAT
)
GO  

INSERT INTO [dbo].[Ubicaciones] ( [Lugar], [Ciudad], [Latitude], [Longitude] )
VALUES ( ‘Statue of Liberty’, ‘New York, USA’, 40.689168,-74.044563 ),
       ( ‘Eiffel Tower’, ‘Paris, France’, 48.858454, 2.294694),
       ( ‘Leaning Tower of Pisa’, ‘Pisa, Italy’, 43.72294, 10.396604 ),
       ( ‘Great Pyramids of Giza’, ‘Cairo, Egypt’, 29.978989, 31.134632 ),
       ( ‘Sydney Opera House’, ‘Syndey, Australia’, -33.856651, 151.214967 ),
       ( ‘Taj Mahal’, ‘Agra, India’, 27.175047, 78.042042 ),
       ( ‘Colosseum’, ‘Rome, Italy’, 41.890178, 12.492378 )
GO  

Usando  geography::STPointFromText  

Lo primero que debes hacer es agregar la nueva columna en la que almacenará el punto de la geografía. Esto se puede hacer fácilmente por la instrucción ALTER TABLE y vamos a utilizar el tipo de datos GEOGRAPHY para la nueva columna.  

ALTER TABLE [dbo].[Ubicaciones]
ADD [GeoUbicacion] GEOGRAPHY
GO  

Para convertir la latitud y longitud para un punto geografíco, vamos a utilizar la función StPointFromText. El STPointFromText devuelve una instancia de la geografía de un Open Geospatial Consortium (OGC)  

UPDATE [dbo].[Ubicaciones]
SET [GeoUbicacion] = Geography::STPointFromText(‘POINT(‘ + CAST([Longitude] AS VARCHAR(20)) + ‘ ‘ + CAST([Latitude] AS VARCHAR(20)) + ‘)’, 4326)
GO
  

Como se puede ver en la instrucción UPDATE, la longitud se especifica antes de la latitud. La razón es porque en el Open Geospatial Consortium (OGC) representa el formato es (x, y). Las coordenadas geográficas son normalmente especificadas Latitud / Longitud, pero entre estos dos, el X es la longitud, mientras que la Y es la latitud.  

Se estará preguntando por qué la coordenada X es la longitud mientras que la coordenada Y es la Latitud. Piense en el ecuador de la Tierra como el eje X, mientras que el Meridiano de Greenwich es el eje Y. La longitud se define como la distancia desde el meridiano de Greenwich a lo largo del eje X (o del ecuador). Del mismo modo, la latitud se define como la distancia desde el ecuador a lo largo del eje Y.  

Uso de la geografía:: STGeomFromText  

Otra forma de crear un punto de la geografía es con el uso del método STGeomFromText OGC estática. Al igual que el método STPointFromText OGC estático, la STGeomFromText devuelve una instancia de la geografía de un Consorcio Geoespacial Abierto (OGC) Well-Known Text (WKT) la representación.  

UPDATE [dbo].[Ubicaciones]
SET [GeoUbicacion] = geography::STGeomFromText(‘POINT(‘ + CAST([Longitude] AS VARCHAR(20)) + ‘ ‘ + CAST([Latitude] AS VARCHAR(20)) + ‘)’, 4326)
GO 
 
A diferencia del método STPointFromText, que sólo acepta un punto, el STGeomFromText puede aceptar siete objetos de datos espaciales (punto, polígono, LINESTRING, multipunto, MULTIPOLYGON, MULTILINESTRING y GEOMETRYCOLLECTION). 

Usando geography::Point  

Sin embargo, otra manera de crear un punto de la geografía de datos espaciales es con el uso de geography::Point método extendido de geografía estático.
La geography::Point construye una instancia de la geografía que representa una instancia del punto valores (latitud y longitud) 

UPDATE [dbo].[Ubicaciones]
SET [GeoUbicacion] = Geography::Point([Latitude], [Longitude], 4326)
GO  

A diferencia de la STGeomFromText y STPointFromText , es que acepta como parámetro las coordenadas del punto en el Open Geospatial Consortium (OGC) conocida representación de texto. La  Point geography static methods acepta como parámetros las coordenadas de Latitud y Longitud del punto en ese orden.  

Usando geography::Parse  

UPDATE [dbo].[Ubicaciones]
SET [GeoUbicacion] = Geography::Parse(‘POINT(‘ + CAST([Longitude] AS VARCHAR(20)) + ‘ ‘ + CAST([Latitude] AS VARCHAR(20)) + ‘)’)
GO 

La única diferencia entre la geography::Parse y la geography::STGeomFromText es que en el método Parse, supone una referencia espacial ID (SRID) de 4326, que es el segundo parámetro de la geography::STGeomFromText. 

 Bajar Archivo .sql

Categorías:.NET CURSO 2008
  1. Salvador Vidal
    30 noviembre 2010 a las 11:15 am

    Hola, yo tengo datos de geometria, tengo datos de una poblacion en coordenadas UTM del uso 30.
    Para usar esta informacion con bing maps supongo que deberia traducirla a geography.
    Como hago esto?

    • 30 noviembre 2010 a las 11:35 am

      Deverias convertir las coordenadas UTM en latitud y longitud.

      Se necesita de una biblioteca de proyección de mapa para hacer esto.

      Hay muchas bibliotecas disponibles que son de código abierto.
      Uno de los más completos es PROJ.4.

      Pueder usar esto tambien :
      http://www.atlascajamarca.info/conversor/

      Saludos
      Ricardo

  2. Dario
    21 noviembre 2011 a las 5:12 pm

    En caso que el campo de una tabla sea geometry y yo posea la latitud y longitud como variables float, ¿Còmo puedo crear el punto en la tabla?

    Agradezco de antemano su ayuda.

  3. Eezequiel
    15 mayo 2012 a las 2:44 am

    a traves de la latitud y la longitud, se puede obtener una direccion como en las apis de google maps?
    gracias

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: