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

Quindi, ho una tabella che contiene 3 campi (Nome, Lat e Long) nel mio database (spaziale). Voglio creare una colonna di geometria / geografia basata su quei campi (Lat e Lungo) ma sfortunatamente senza alcun successo.

La mia domanda è: come posso farlo?

Commenti

Risposta

Puoi 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.

Commenti

  • Grazie per le tue risposte, sono riuscito per risolvere il mio problema usando questa riga: UPDATE yourdatabase SET geometry_column = geometry :: P oint ([ColX], [ColY], SRID)
  • È possibile creare un trigger per questo? Come quando compili i tuoi campi (colonne X e Y) con le informazioni che lo script menzionato sopra verrà eseguito.

Risposta

Sembra che tu voglia STGeomFromText() o STPointFromText() Metodo 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 Geometry o Geography, quindi utilizza SQL per popolare quel campo utilizzando i valori lat / lon.

Commenti

  • Quale sarebbe la differenza nellusare invece il seguente metodo … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Sì, potresti usarlo se vuoi, in realtà.

Rispondi

SQL Server 2012

Puoi farlo in questo modo,

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

Per ulteriori informazioni vedi il mio post su Database Administrators, “SQL Server Point Constructor o versione di ST_Point (x, y)? “

Commenti

  • Se il costruttore di Point accetta argomenti x, y, quindi dovrai cambiare lordine in questo modo: geography::Point(long, lat, 4326). La longitudine è x e la latitudine è y.

Risposta

Se larrotondamento dei valori Long / Lat originali si verifica quando si utilizza listruzione CONVERT(VARCHAR,.

Prova a utilizzare:

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

Commenti

  • Ho apprensione nellutilizzo di questo metodo, poiché comporta la perdita di precisione della posizione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *