Soy nuevo en SQL Server 2008 y espero que comprenda mi pregunta /

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 éxito.

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

Comentarios

Respuesta

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) 

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

Comentarios

  • Gracias por sus respuestas, logré para resolver mi problema usando esta línea: ACTUALIZAR su base de datos SET geometry_column = geometry :: P oint ([ColX], [ColY], SRID)
  • ¿Es posible crear un disparador para esto? Como cuando llena sus campos (columnas X e Y) con información, se ejecutará el script mencionado anteriormente.

Respuesta

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

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 Geometry o Geography, luego use SQL para completar ese campo usando sus valores lat / lon.

Comentarios

  • ¿Cuál sería la diferencia al usar el siguiente método en su lugar … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Sí, podrías usar ese si quieres, en realidad.

Responder

SQL Server 2012

Puede hacerlo así,

SELECT geography::Point(lat, long, 4326) 

Para obtener más información, consulte mi publicación sobre administradores de bases de datos, «SQL Server ¿Constructor de puntos o versión de ST_Point (x, y)? «

Comentarios

  • Si el constructor de Point toma argumentos x, y, entonces querrá cambiar su orden como tal: geography::Point(long, lat, 4326). La longitud es x y la latitud es y.

Respuesta

Si el redondeo de los valores originales Long / Lat ocurre cuando se usa la instrucción CONVERT(VARCHAR,.

Intente usar:

GeoData = geometry:: STGeomFromText("POINT(" + CAST(CAST(X AS decimal(13, 2)) AS varchar) + " " + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ")", 4326) 

Comentarios

  • Tengo aprensión al usar este método, ya que implica perder precisión de ubicación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *