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