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

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 er x og Latitude er y.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *