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
- sql-server-helper.com/sql-server-2008/…
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.