2017-02-26 10 views
0

データ型がGeometryの表の列のデータを更新したいとします。私は、XとYの値を持つJSON応答を返すGIS Webサービスを持っています。これらの値をJSONの他の文字列とIntデータ型の列に必要な他の値と共に取得しました。アプリケーション内のJavaコードは正常に動作していますが、私の質問はどのように "ジオメトリ"のデータ型でデータを更新するのですか?preparedstatementを使用してSQL Server列のデータを "Geometry"で更新する方法

データベースには、「0x346C0000010CFFC7C50034B01B41BC2D52FF8F660941」という形式のサンプルデータがいくつかあります。私は、このフォーマットでX &のYデータを設定するためにpreparestatementをどのように使用することができないのか分かりません。どんな洞察力や助言も役に立つでしょう。

私は次のようないくつかの調査を行った後、このデータをクエリして変換する方法を知っていますが、私のプログラムで何が行われるのか分かりません。

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+")"); 

私は今のところ、この解決策を見つけたが、私は "2100" は上記のクエリでは何を意味するのか見当もつかない。多分それは間違っている、私は今セットアップを持っていないが、私は更新クエリで任意のソリューションを見つける場合は、この記事を更新します。その間に誰かが解決策を持っていれば、投稿を更新することができます。

+0

「STPointFromText」で何かが正しい方向であることを発見されましたか? – user3384231

+0

"STPointFromText"に標準JDBCドライバを使用できますか?このメソッドを使用できない場合、ST_GeomFromTextと同じ結果を実行する標準のJDBCドライバから使用できる他のメソッドがありますか? – user3384231

答えて

1

ここでは、空間データを挿入および取得する方法を説明します。 HTH。


挿入とSQL Serverで空間データを取得する:

空間データは、主に2つのデータタイプを使用します

  1. ジオメトリ - 平らな表面上での2Dのために。
  2. 地理 - グローバル/円形の3Dサーフェスです。

すべての空間データは、x-y座標で格納されます。空間データを扱うために、DMLステートメントは、WKT(Well Known Text)フォーマットのように、文字列( '引用符'内)として書かれたSpatial-Functionsを使用します。 'POINT(5 3)'(注:WKTは、ベクトルジオメトリオブジェクトを表すために使用されるテキストマークアップ言語です)。いくつかの一般的な機能は次のとおりです(詳細な説明についてはMSDNを参照してください):

データ挿入

以下の機能がINSERT文で使用することができます。例えば

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

'ポイント(INT X INT Y)' •:0次元オブジェクトまたは単にポイント。 'ラインストリング(×1 Y1、X2のY2、X ... Y ...)' enter image description here

• 'CIRCULARSTRING(×1 Y1、X2のY2、X ... Y ...)' enter image description here

• 'CompoundCurve(x1 y1、x2 y2、x .. y ..「) enter image description here

• 'ポリゴン(×1 Y1、X2のY2、X ... Y ...)CurvePolygon(×1 Y1、X2のY2、X .. Y ..' • enter image description here

')'

• 'マルチポイント':複数の点の集合、例えば: 'マルチポイント((2)、(7 8 9.5))'「MultiLineStringの((X1のY1、•

X .. Y .. )、 'MultiLineString((1 1、3 5)、(-5 3、-8 -2))' enter image description here

• 'MultiPolygon((x1 y1、x..y ..)、(x1 y1、x .. y ..))':複数のポリゴンのコレクション。 enter image description here

データ検索:

以下の機能は、SELECT文で使用することができます。例えば:.ToString•

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

():同一の形式で表示された結果として、最初に(代わり進値の)パラメータ値と、ソース関数として、すなわち挿入された、例えば:colName.ToString()が表示されます。 LineString(0 0、7 8)。

•.AsGml():16進またはソース関数を返す代わりに、GML/XML形式の値を変換して返します。ラインストリング()値のために - colName.AsGml()が返されます:

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

注:SSMS(管理Studio)では、あなたは(16進数の値である)データのまま、あるいは、あなたのいずれかを行うことができ、検索結果を表示することができますが形状/図表すなわち空間の結果を表示(以下の例を参照):

enter image description here

+0

いくつかのメモのためにおかげでエディ...しかし、私はSQLサーバーの通常のSQL JDBCドライバでPOINTを使用することができます知っていますか?または、私はPOINTのための他のjdbcドライバが必要ですか? – user3384231

+0

こんにちは、SQL ServerのSpatial機能を使用できるようにするために、特定のJDBCドライバは必要ありません(これはSql Server 2012以降です)。 Javaコードからdbmsに接続できる限り、POINT()関数を使用できるはずです。 AFAIKは、SQLのエンジンによって処理されます(JVMでは処理されません)。 –

+0

私が扱っているSQLサーバは2008年です.....投稿したクエリがJavaコードで動作するかどうかはわかりませんでした。あなたはSQL Server 2008で何をする必要があるかについての洞察を持っていますか? – user3384231

関連する問題