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