xおよびyフィールドからgeography / geometry列を作成する-SQL Server 2008


26

私はSQL Server 2008の初心者です。私の質問/必要性を理解してください。

したがって、データベース(空間)に3つのフィールド(Name、Lat、Long)を含むテーブルがあります。これらのフィールド(LatおよびLong)に基づいてジオメトリ/ジオグラフィ列を作成したいのですが、残念ながら成功しません。

私の質問は、どうすればそれを行うことができますか?


回答:


36

このような計算列を追加できます

alter table yourTable add geographyColumn as geography::STGeomFromText('POINT('+convert(varchar(20),Long)+' '+convert(varchar(20),Lat)+')',4326)

LongとLatsを数値として保存するため、lngまたはlatからの変換を追加しました。


3
あなたの答えをありがとう、私はこの行を使用して私の問題を解決することができました:UPDATE yourdatabase SET geometry_column = geometry :: Point([ColX]、[ColY]、SRID)
チューダー

3
これのトリガーを作成することは可能ですか?フィールド(X列とY列)に情報を入力すると、上記のスクリプトが実行されます。
チューダー

10

STGeomFromText()またはSTPointFromText()SQLメソッドが必要なようです:

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

または

DECLARE @g geography;
SET @g = geography::STPointFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

GeometryまたはGeographyフィールドを作成してから、SQLを使用して、lat / lon値を使用してそのフィールドにデータを入力します。


代わりに次の方法を使用する場合の違いは何ですか?DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
-awesomo

@awesomo-ええ、実際には、必要に応じて使用できます。
チャドクーパー


1

CONVERT(VARCHAR,ステートメントの使用時に元のLong / Lat値の丸めが発生する場合。

使用してみてください:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.