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 ist x und der Breitengrad ist y.

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.