Creare una colonna di geografia / geometria dai campi xey - SQL Server 2008


26

Sono nuovo in SQL Server 2008 e spero che capirai la mia domanda / necessità.

Quindi, ho una tabella che contiene 3 campi (Nome, Lat e Long) nella mia base di dati (spaziale). Voglio creare una colonna geometria / geografia basata su quei campi (Lat e Long) ma sfortunatamente senza successo.

La mia domanda è: come posso riuscirci?


Risposte:


36

È possibile aggiungere una colonna calcolata come questa

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

Ho aggiunto la conversione da lng o lat perché memorizzo Long e Lats come numeri.


3
Grazie per le risposte, sono riuscito a risolvere il mio problema utilizzando questa riga: AGGIORNA il tuo database SET geometry_column = geometry :: Point ([ColX], [ColY], SRID)
Tudor

3
È possibile creare un trigger per questo? Come quando si popolano i campi (colonne X e Y) con informazioni, verrà eseguito lo script menzionato sopra.
Tudor

10

Sembra che tu voglia il metodo STGeomFromText()o STPointFromText()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();

Crea il tuo campo Geometryo Geography, quindi usa SQL per popolare quel campo usando i tuoi valori lat / lon.


Quale sarebbe la differenza nell'utilizzare il seguente metodo invece ...DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo

@awesomo - Sì, potresti usarlo se vuoi, in realtà.
Chad Cooper


1

Se si verificano arrotondamenti dei valori Long / Lat originali quando si utilizza l' CONVERT(VARCHAR,istruzione.

Prova a usare:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.