Sunt nou în SQL Server 2008 și sper că veți înțelege întrebarea mea / need.

Astfel, am un tabel care conține 3 câmpuri (Nume, Lat și Long) în baza mea de date (spațială). Vreau să creez o coloană de geometrie / geografie pe baza acestor câmpuri (Lat și Lung) dar din păcate fără succes.

Întrebarea mea este: Cum pot reuși să fac asta?

Comentarii

Răspuns

Puteți adăuga o coloană calculată ca aceasta

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

Am adăugat conversia din lng sau lat pentru că stochez Long și Lats ca numere.

Comentarii

  • Vă mulțumim pentru răspunsuri, am reușit pentru a rezolva problema mea folosind această linie: UPDATE yourdatabase SET geometry_column = geometry :: P oint ([ColX], [ColY], SRID)
  • Este posibil să creați un declanșator pentru acest lucru? Ca atunci când vă completați câmpurile (coloanele X și Y) cu informații, scriptul menționat mai sus va rula.

Răspuns

Se pare că doriți STGeomFromText() sau STPointFromText() Metoda SQL:

DECLARE @g geography; SET @g = geography::STGeomFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString(); 

sau

DECLARE @g geography; SET @g = geography::STPointFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString(); 

Creați câmpul Geometry sau Geography, apoi utilizați SQL pentru a completa acel câmp folosind valorile lat / lon.

Comentarii

  • Care ar fi diferența utilizării în schimb a următoarei metode … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Da, ai putea să-l folosești dacă vrei, de fapt.

Răspunde

SQL Server 2012

Puteți face acest lucru,

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

Pentru mai multe informații, consultați postarea mea pe Administratorii bazei de date, „SQL Server Constructor de puncte sau versiunea ST_Point (x, y)? „

Comentarii

  • Dacă constructorul pentru Point ia argumente x, y, atunci veți dori să comutați comanda ca atare: geography::Point(long, lat, 4326). Longitudinea este x, iar latitudinea este y.

Răspuns

Dacă se face rotunjirea valorilor inițiale Long / Lat atunci când se utilizează instrucțiunea CONVERT(VARCHAR,.

Încercați să utilizați:

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

Comentarii

  • Am teamă să folosesc această metodă, deoarece implică pierderea preciziei locației.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *