Crear una columna de geografía / geometría a partir de los campos x e y - SQL Server 2008


26

Soy nuevo en SQL Server 2008 y espero que entiendas mi pregunta / necesidad.

Por lo tanto, tengo una tabla que contiene 3 campos (Nombre, Lat y Long) en mi base de datos (espacial). Quiero crear una columna de geometría / geografía basada en esos campos (Lat y Long) pero desafortunadamente sin ningún éxito.

Mi pregunta es: ¿cómo puedo hacer eso?


Respuestas:


36

Puede agregar una columna calculada como esta

alter table yourTable add geographyColumn as geography::STGeomFromText('POINT('+convert(varchar(20),Long)+' '+convert(varchar(20),Lat)+')',4326)

He agregado la conversión de lng o lat porque almaceno Long y Lats como números.


3
Gracias por sus respuestas, logré resolver mi problema usando esta línea: ACTUALIZAR su base de datos SET geometry_column = geometry :: Point ([ColX], [ColY], SRID)
Tudor

3
¿Es posible crear un disparador para esto? Al igual que cuando llena sus campos (columnas X e Y) con información, se ejecutará el script mencionado anteriormente.
Tudor

10

Parece que quieres el método SQL STGeomFromText()o STPointFromText():

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

o

DECLARE @g geography;
SET @g = geography::STPointFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

Cree su campo Geometryo Geography, luego use SQL para llenar ese campo usando sus valores lat / lon.


¿Cuál sería la diferencia en el uso del siguiente método en su lugar ...DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo

@awesomo - Sí, podrías usar ese si quieres, en realidad.
Chad Cooper


1

Si se produce el redondeo de los valores Long / Lat originales al usar la CONVERT(VARCHAR,instrucción.

Intenta usar:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.