2017-02-26 2 views
0

Ich möchte die Daten in Spalte der Tabelle mit Datentyp der Geometrie aktualisieren. Ich habe einen GIS-Webservice, der die JSON-Antwort mit X- und Y-Werten zurückgibt. Ich habe diese Werte zusammen mit anderen Werten abgerufen, die für andere String- und Int-Datentypspalten aus JSON erforderlich sind. Java-Code in der Anwendung funktioniert gut, aber meine Frage ist, wie Sie Daten mit dem Datentyp "Geometrie" "aktualisieren".Wie preparedstatement verwenden, um Daten in SQL Server-Spalte mit "Geometry" zu aktualisieren

In der Datenbank sind einige Beispieldaten im folgenden Format "0x346C0000010CFFC7C50034B01B41BC2D52FF8F660941". Ich habe keine Ahnung, wie ich Preparatement verwenden kann, um die X & Y-Daten in diesem Format zu setzen. Jeder Einblick oder Rat wird hilfreich sein.

Ich weiß, wie man diese Daten abfragt und umwandelt, nachdem ich einige Nachforschungen gemacht habe, die wie folgt, aber nicht wissen, was in meinem Programm zu tun ist.

SELECT Shape.STX as x ,Shape.STY as y from Test 
WHERE ID=14082 

UPDATE

"Insert INTO Test(column1, Column2, Column3, Column4, geom) 
    VALUES (?, ?, ?, ?,ST_GeomFromText(?, 2100));" 

pst.setString(5,"POINT("+lat+" "+log+")"); 

fand ich diese Lösung für jetzt, aber ich habe keine Ahnung, was "2100" in der obigen Abfrage bedeutet. Vielleicht ist es falsch, ich habe jetzt kein Setup, aber ich werde diesen Beitrag aktualisieren, wenn ich eine Lösung mit der Update-Abfrage finde. In der Zwischenzeit, wenn jemand eine Lösung hat, zögern Sie nicht, den Beitrag zu aktualisieren.

+0

gefunden etwas mit „STPointFromText“ ist, dass richtige Richtung? – user3384231

+0

Kann ich den Standard-JDBC-Treiber für "STPointFromText" verwenden? Gibt es eine andere Methode, die ich vom Standard-JDBC-Treiber verwenden kann, die dasselbe Ergebnis wie ST_GeomFromText ausführen wird, wenn ich diese Methode nicht verwenden kann. – user3384231

Antwort

1

Hier können Sie räumliche Daten einfügen und abrufen. HTH.


einfügen und abrufen Geodaten in SQL Server:

Geodaten verwendet hauptsächlich zwei Datentypen:

  1. Geometrie - für 2d auf eine ebene Fläche.
  2. Geographie - für 3d auf globaler/runder Oberfläche.

Alle räumlichen Daten werden in x-y-Koordinaten gespeichert. Um räumliche Daten zu verarbeiten, verwenden die DML-Anweisungen Spatial-Funktionen, die als Zeichenfolge (in Anführungszeichen) geschrieben sind, wie sie im WKT-Format (Well Known Text) vorliegen, z. 'POINT (5 3)' (Hinweis: WKT ist eine Textauszeichnungssprache, die zur Darstellung von Vektorgeometrieobjekten verwendet wird). Im Folgenden sind einige allgemeine Funktionen: (Ausführliche Erläuterungen finden Sie in MSDN):

Einfügen von Daten:

Folgende Funktionen können in INSERT-Anweisung verwendet werden. z.B.

INSERT INTO Tbl1 (mySpatialColumn) Values ('LineString(-1 -2, 6 7))

• 'Point (int x int y)': a 0-dimensionales Objekt oder nur ein Punkt.

• 'Linestring (x1 y1, x2 y2, x .. .. y)' enter image description here

• 'Circular (x1 y1, x2 y2, x .. .. y)' enter image description here

• 'VerbundKurve (x1 y1, x2 y2, x .. y ..)‘ enter image description here

• 'Polygon (x1 y1, x2 y2, x .. .. y)' enter image description here

• 'Curvepolygon (x1 y1, x2 y2, x .. .. y)'

• 'Multipoint' eine Sammlung von mehreren Punkten, zum Beispiel: 'Multipoint ((2 3), (7 8 9,5))'

• ‚Multiline ((x1 y1, x y .. ..), (x1 y1, x .. y ..)) ': mehrere Zeilen, zB:' MultiLineString ((1 1, 3 5), (-5 3, -8 -2)) ' enter image description here

• 'MultiPolygon ((x1 y1, x .. y ..), (x1 y1, x .. y ..))': Sammlung mehrerer Polygone. enter image description here

Daten-Wiederherstellung:

Folgende Funktionen können in SELECT-Anweisung verwendet werden. Beispiel:

SELECT mySpatialCol.ToSting(), mySpatialCol.AsGml() FROM Tbl1; 

.ToString •(): zeigt die Ergebnisse in dem gleichen Format wie eingangs dh als source-Funktion mit Parameterwerten (anstelle der Hex-Werte) eingesetzt, zum Beispiel: colName.ToString() zeigt: LineString (0 0, 7 8).

• .AsGml(): konvertiert und gibt Werte im GML/XML-Format zurück (anstatt Hex- oder Quellfunktion zurückzugeben), z. für einen Linestring() Wert - colName.AsGml() gibt:

<LineString xmlns="www.example.com/gml"><posList>0 0 7 8</posList></LineString> 

Hinweis: In SSMS (Management Studio), können Sie die abgerufenen Resultate sehen, entweder als Daten selbst oder Sie (die hexadezimalen Werte) können gehöriges Spatial Ergebnisse, dh die Formen/Pläne (siehe Beispiel unten):

enter image description here

+0

Danke Eddie für einige Notizen ... aber wissen Sie, ob ich POINT mit üblichen Sql JDBC-Treiber für SQL-Server verwenden kann? Oder brauche ich einen anderen jdbc-Treiber für POINT? – user3384231

+0

Hallo, Sie brauchen keinen spezifischen JDBC-Treiber, um die Spatial-Funktionalität des SQL-Servers nutzen zu können (seit Sql Server 2012). Sie sollten die Funktion POINT() verwenden können, solange Sie aus Ihrem Java-Code eine Verbindung zu den dbms herstellen können. AFAIK, wird es von SQL-Engine (und nicht von JVM) verarbeitet werden. –

+0

Der SQL-Server, mit dem ich arbeite, ist 2008 ..... deshalb war ich nicht sicher, ob die Abfrage, die ich gepostet habe, mit meinem Java-Code funktioniert oder nicht. Hast du irgendwelche Einblicke was ich in SQL Server 2008 tun muss? – user3384231

Verwandte Themen