Criar uma coluna de geografia / geometria a partir dos campos x e y - SQL Server 2008


26

Eu sou novo no SQL Server 2008 e espero que você entenda minha pergunta / necessidade.

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

Minha pergunta é: como posso fazer isso?


Respostas:


36

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.


3
Obrigado por suas respostas, eu consegui resolver meu problema usando esta linha: UPDATE yourdatabase SET geometry_column = geometry :: Point ([ColX], [ColY], SRID)
Tudor

3
É possível criar um gatilho para isso? Como quando você preenche seus campos (colunas X e Y) com informações, o script mencionado acima será executado.
Tudor

10

Parece que você deseja o método STGeomFromText()ou STPointFromText()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 Geometryou Geographye, em seguida, use SQL para preencher esse campo usando seus valores de lat / lon.


Qual seria a diferença no uso do seguinte método ... #DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo 1/01/12

@awesomo - Sim, você pode usar esse se quiser, na verdade.
Chad Cooper


1

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

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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.