Sou novo no SQL Server 2008 e espero que você entenda minha pergunta / precisa.

Assim, eu tenho uma tabela que contém 3 campos (Nome, Lat e Long) em minha base de dados (espacial). Quero criar uma coluna de geometria / geografia baseada nesses campos (Lat e Long), mas infelizmente sem sucesso.

Minha pergunta é: Como posso fazer isso?

Comentários

Resposta

Você pode adicionar uma coluna computada como esta

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

Eu adicionei a conversão de lng ou lat porque armazeno Long e Lats como números.

Comentários

  • Obrigado por suas respostas, consegui para resolver meu problema usando esta linha: UPDATE yourdatabase SET geometry_column = geometry :: P oint ([ColX], [ColY], SRID)
  • É possível criar uma trigger para isso? Como quando você preenche seus campos (colunas X e Y) com informações, o script mencionado acima será executado.

Resposta

Parece que você deseja STGeomFromText() ou STPointFromText() Método SQL:

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

ou

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

Crie seu campo Geometry ou Geography e use o SQL para preencher esse campo usando seus valores de latitude / longitude.

Comentários

  • Qual seria a diferença em usar o método a seguir … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Sim, você pode usar esse se quiser, na verdade.

Resposta

SQL Server 2012

Você pode fazer assim,

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

Para obter mais informações, consulte minha postagem sobre Administradores de banco de dados, “SQL Server Construtor de ponto ou versão de ST_Point (x, y)? “

Comentários

  • Se o construtor para Point aceita argumentos x, y, então você vai querer mudar sua ordem da seguinte maneira: geography::Point(long, lat, 4326). A longitude é x e a Latitude é y.

Resposta

Se ocorrer o arredondamento dos valores Long / Lat originais ao usar a instrução CONVERT(VARCHAR,.

Tente usar:

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

Comentários

  • Tenho receio de usar este método, pois envolve a perda de precisão da localização.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *