Jeg er ny i SQL Server 2008, og jeg håper du forstår spørsmålet mitt / behov.
Dermed har jeg en tabell som inneholder 3 felt (Navn, Lat og Lang) i databasen min (romlig). Jeg vil lage en geometri / geografisk kolonne basert på disse feltene (Lat og Lang) men dessverre uten suksess.
Spørsmålet mitt er: Hvordan kan jeg klare det?
Kommentarer
- sql-server-helper.com/sql-server-2008/…
Svar
Du kan legge til 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 lagt til konverteringen fra lng eller lat fordi jeg lagrer Long og Lats som tall.
Kommentarer
- Takk for svarene dine, jeg klarte for å løse problemet mitt ved å bruke denne linjen: UPDATE yourdatabase SET geometry_column = geometry :: P salve ([ColX], [ColY], SRID)
- Er det mulig å lage en utløser for dette? Som når du fyller ut feltene (kolonnene X og Y) med informasjon, vil skriptet nevnt ovenfor kjøre.
Svar
Ser ut som om du vil ha 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();
Opprett Geometry
eller Geography
-feltet, og bruk deretter SQL til å fylle ut feltet ved hjelp av lat / lon-verdiene.
Kommentarer
- Hva ville være forskjellen i å bruke følgende metode i stedet …
DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
- @awesomo – Ja, du kan faktisk bruke den hvis du vil.
Svar
SQL Server 2012
Du kan gjøre det slik,
SELECT geography::Point(lat, long, 4326)
For mer informasjon, se innlegget mitt på databaseadministratorer, «SQL Server Punktkonstruktør eller versjon av ST_Point (x, y)? «
Kommentarer
- Hvis konstruktøren for
Point
tar x, y argumenter, så vil du endre rekkefølgen slik:geography::Point(long, lat, 4326)
. Lengdegrad erx
og Latitude ery
.
Svar
Hvis avrunding av de opprinnelige lange / latente verdiene forekommer når du bruker CONVERT(VARCHAR,
-uttalelsen.
Prøv å bruke:
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 frykt for å bruke denne metoden, da det innebærer å miste posisjonspresisjon.