Jag är ny i SQL Server 2008 och jag hoppas att du förstår min fråga / behöver.

Således har jag en tabell som innehåller tre fält (namn, lat och lång) i min databas (rumslig). Jag vill skapa en geometri / geografisk kolumn baserad på dessa fält (lat och Lång) men tyvärr utan framgång.

Min fråga är: Hur kan jag lyckas göra det?

Kommentarer

Svar

Du kan lägga till en beräknad kolumn så här

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

Jag har lagt till konverteringen från lng eller lat eftersom jag lagrar Long och Lats som siffror.

Kommentarer

  • Tack för dina svar, jag lyckades för att lösa mitt problem med den här raden: UPPDATERA din databas SET geometry_column = geometry :: P salva ([ColX], [ColY], SRID)
  • Är det möjligt att skapa en utlösare för detta? Som när du fyller i dina fält (kolumner X och Y) med information kommer skriptet som nämns ovan att köras.

Svar

Ser ut som om du vill ha STGeomFromText() eller STPointFromText() SQL-metod:

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(); 

Skapa ditt Geometry eller Geography -fält och använd sedan SQL för att fylla i det fältet med dina lat / lon-värden.

Kommentarer

  • Vad skulle vara skillnaden i att använda följande metod istället … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Ja, du kan faktiskt använda den om du vill.

Svar

SQL Server 2012

Du kan göra det så här,

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

För mer information se mitt inlägg på databasadministratörer, ”SQL Server Punktkonstruktör eller version av ST_Point (x, y)? ”

Kommentarer

  • Om konstruktören för Point tar x, y argument, då vill du ändra din beställning som sådan: geography::Point(long, lat, 4326). Longitud är x och Latitude är y.

Svar

Om avrundning av de ursprungliga Long / Lat-värdena inträffar när du använder CONVERT(VARCHAR, -uttalandet.

Försök använda:

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

Kommentarer

  • Jag är orolig för att använda den här metoden, eftersom det innebär att förlora platsprecision.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *