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
- sql-server-helper.com/sql-server-2008/…
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 ärx
och Latitude äry
.
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.