SQL Server2008の新機能です。私の質問を理解していただければ幸いです/
したがって、データベース(空間)に3つのフィールド(名前、緯度、経度)を含むテーブルがあります。これらのフィールド(緯度と経度)に基づいてジオメトリ/地理列を作成したいと思います。長い)が、残念ながら成功しませんでした。
私の質問は、どうすればそれを実現できるかということです。
コメント
- sql-server-helper.com/sql-server-2008/ …
回答
次のような計算列を追加できます
alter table yourTable add geographyColumn as geography::STGeomFromText("POINT("+convert(varchar(20),Long)+" "+convert(varchar(20),Lat)+")",4326)
LongとLatsを数値として格納するため、lngまたはlatからの変換を追加しました。
コメント
- 回答ありがとうございます、管理しましたこの行を使用して私の問題を解決するには:UPDATE yourdatabase SETgeometry_column = geometry :: P oint([ColX]、[ColY]、SRID)
- これのトリガーを作成することは可能ですか?フィールド(列XとY)に上記のスクリプトが実行される情報を入力するときのように。
回答
STGeomFromText()
または
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-はい、実際には必要に応じて使用できます。
回答
SQL Server 2012
次のように実行できます
SELECT geography::Point(lat, long, 4326)
詳細については、データベース管理者に関する私の投稿
“SQL ServerポイントコンストラクタまたはST_Point(x、y)のバージョン? “
コメント
-
はx、y引数を取るので、次のように順序を切り替える必要があります:
geography::Point(long, lat, 4326)
。経度はx
、緯度はy
です。
回答
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)
コメント
- 位置の精度が失われるため、この方法を使用することに不安があります。