Ich bin neu in SQL Server 2008 und hoffe, dass Sie meine Frage verstehen.
Daher habe ich eine Tabelle mit 3 Feldern (Name, Lat und Long) in meiner Datenbank (räumlich). Ich möchte eine Geometrie- / Geografiespalte basierend auf diesen Feldern erstellen (Lat und Lang), aber leider ohne Erfolg.
Meine Frage lautet: Wie kann ich das schaffen?
Kommentare
Antwort
Sie können eine berechnete Spalte wie diese hinzufügen.
alter table yourTable add geographyColumn as geography::STGeomFromText("POINT("+convert(varchar(20),Long)+" "+convert(varchar(20),Lat)+")",4326)
Ich habe die Konvertierung von lng oder lat hinzugefügt, weil ich Long und Lats als Zahlen speichere.
Kommentare
- Vielen Dank für Ihre Antworten, die ich verwaltet habe Um mein Problem mit dieser Zeile zu lösen: UPDATE yourdatabase SETometry_column = geometr :: P. Salbe ([ColX], [ColY], SRID)
- Ist es möglich, einen Trigger dafür zu erstellen? Wie wenn Sie Ihre Felder (Spalten X und Y) mit Informationen füllen, wird das oben erwähnte Skript ausgeführt.
Antwort
Sieht so aus, als ob Sie die STGeomFromText()
oder STPointFromText()
SQL-Methode:
DECLARE @g geography; SET @g = geography::STGeomFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString();
oder
DECLARE @g geography; SET @g = geography::STPointFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString();
Erstellen Sie Ihr Feld Geometry
oder Geography
und füllen Sie dieses Feld mit SQL mit Ihren lat / lon-Werten.
Kommentare
- Was wäre der Unterschied, wenn stattdessen die folgende Methode verwendet würde …
DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
- @awesomo – Ja, Sie können diesen verwenden, wenn Sie möchten.
Antwort
SQL Server 2012
Sie können dies folgendermaßen tun:
SELECT geography::Point(lat, long, 4326)
Weitere Informationen finden Sie in meinem Beitrag zu Datenbankadministratoren, „SQL Server Punktkonstruktor oder Version von ST_Point (x, y)? „
Kommentare
- Wenn der Konstruktor für
Point
verwendet x, y Argumente, dann möchten Sie Ihre Reihenfolge als solche ändern:geography::Point(long, lat, 4326)
. Der Längengrad istx
und der Breitengrad isty
.
Antwort
Wenn bei Verwendung der Anweisung CONVERT(VARCHAR,
eine Rundung der ursprünglichen Long / Lat-Werte auftritt.
Versuchen Sie Folgendes:
GeoData = geometry:: STGeomFromText("POINT(" + CAST(CAST(X AS decimal(13, 2)) AS varchar) + " " + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ")", 4326)
Kommentare
- Ich habe Bedenken, diese Methode zu verwenden, da dabei die Standortgenauigkeit verloren geht.