Jeg er ny i SQL Server 2008, og jeg håber, du forstår mit spørgsmål / behov.

Således har jeg en tabel, der indeholder 3 felter (navn, lat og lang) i min database (rumlig). Jeg vil oprette en geometri / geografisk søjle baseret på disse felter (lat og Langt) men desværre uden nogen succes.

Mit spørgsmål er: Hvordan kan jeg klare det?

Kommentarer

Svar

Du kan tilføje en beregnet kolonne som denne

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

Jeg har tilføjet konverteringen fra lng eller lat, fordi jeg gemmer Long og Lats som tal.

Kommentarer

  • Tak for dine svar, det lykkedes mig for at løse mit problem ved hjælp af denne linje: OPDATER din database SET geometry_column = geometry :: P salve ([ColX], [ColY], SRID)
  • Er det muligt at oprette en udløser for dette? Som når du udfylder dine felter (kolonne X og Y) med information, kører ovennævnte script.

Svar

Det ser ud til, at du vil have STGeomFromText() eller STPointFromText() SQL-metode:

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

eller

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

Opret dit Geometry eller Geography -felt, og brug derefter SQL til at udfylde det felt ved hjælp af dine lat / lon-værdier.

Kommentarer

  • Hvad ville være forskellen i at bruge følgende metode i stedet … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Ja, du kunne faktisk bruge den, hvis du vil.

Svar

SQL Server 2012

Du kan gøre det sådan,

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

For mere information se mit indlæg på databaseadministratorer, “SQL Server Punktkonstruktør eller version af ST_Point (x, y)? “

Kommentarer

  • Hvis konstruktøren til Point tager x, y argumenter, så vil du skifte din ordre som sådan: geography::Point(long, lat, 4326). Længdegrad er x og Latitude er y.

Svar

Hvis afrunding af de originale lange / latente værdier forekommer, når du bruger CONVERT(VARCHAR, udsagnet.

Prøv at bruge:

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

Kommentarer

  • Jeg har frygt for at bruge denne metode, da det indebærer at miste placeringspræcision.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *