第 4 章 空間データオブジェクトを生成する (Beginning Spatial with SQL Server 2008)

SQL Server

第 2 部 空間データを追加する

 本書のこの部では空間データを SQL Server 2008 データベースに追加する様々な方法を説明する.第 4 章では,既知の座標からいかなるアイテムをも生成するのに使われる存在する静的メソッドのそれぞれを紹介する.第 5 章では,外部資源をかぶせてそれらの座標を派生させるのを助けるための技術を解説する.Microsoft の Virtual Earth Map Control を使う.第 6 章では,空間データの蓄積される他の一般的なデータフォーマットについて議論し,これらの蓄積されたデータを SQL Server 2008 にインポートする方法についての例を提供する.最後に,第 7 章で SQL Server を拡張してジオコーディング機能を提供する方法を示す.つまり,.NET 経由で Microsoft MapPoint Web Services にアクセスして自動的に住所から座標を取得することである.

 前章では,静的メソッドの概念について紹介し,geography 型および geometry 型のオブジェクトをインスタンス化する方法について説明した.本章では各データ型で利用できる異なる静的メソッドを検査し,空間データの新しいアイテムを生成するのに使われる方法について比較する.

注記 本章でのほとんどのコードサンプルは,@Point などのローカル変数を宣言し,その結果静的メソッドにより生成されたインスタンスを蓄積する.しかし,INSERT ステートメントを呼び出すことで静的メソッドの結果をテーブルの geometry 型および geography 型の列に挿入することもできる.

適切な静的メソッドを選択する

 geography 型および geometry 型は共に多くの異なる静的メソッドを提供し,空間データオブジェクトを生成する.特定の状況で適切なメソッドを使用するのは次に述べる因子による.

生成しようとするジオメトリの種類

 いくつかのメソッドは単に特定のジオメトリを生成するためだけに使われる.例えば,STLineFromWKB() メソッドおよび STLineFromText() メソッドは単に LineString ジオメトリインスタンスを生成するだけである.

このジオメトリの属性を記述する方法

 全てのメソッドはジオメトリの空間参照の提供を必要とし,三つの異なる標準フォーマットのうち一つを使う.つまり,Well-Known Text (WKT), Well-Known Binary (WKB) および Geometry Markup Language (GML) である.ジオメトリを記述するためにいずれのメソッドを選んだかにより,適切な表現フォーマットを使わなければならない.例えば,任意のジオメトリインスタンスを GML 表現から生成するには GeomFromGML() メソッドを使わなければならない.

geometry 型または geography 型で生成したいアイテムは一体何か

 geometry 型および geography 型共に,それら自身の各静的メソッドを実装している.静的メソッドはメソッド自身と同一のデータ型のオブジェクトのインスタンスを生成できるだけであるため,生成したいオブジェクトのデータ型によって適切なデータ型のメソッドを選択しなければならない.例えば,geometry 型の Point オブジェクトを WKT 表現から生成するには geometry::STPointFromText() メソッドを使うべきである.geography 型の Point オブジェクトを WKT 表現から生成するには代わりに同等の geography 型のメソッドである geography::STPointFromText メソッドを使うべきである.

 Table 4-1 に異なるジオメトリインスタンスを生成するのに使用されるメソッドを示す.これら全てのメソッドは geography 型にも geometry 型にも共に実装されている.

Table 4-1. 異なる表現から空間オブジェクトをインスタンス化するのにサポートされる方法
オブジェクトの種類 Well-Known Text Well-Known Binary Geography Markup Laguage
Point STPointFromText() STPointFromWKB() GeoFromGml()
LineString STLineFromText() STLineFromWKB() GeoFormGml()
Polygon STPolyFromText() STPolyFromWKB() GeoFromGml()
MultiPoint STMPointFromText() STMPointFromWKB() GeoFromGml()
MultiLineString STMLineFromText() STMLineFromWKB() GeoFromGml()
MultiPolygon STMPolyFromText() STMPolyFromWKB() GeoFromGml()
Geometry Collection STGeomCollFromText() STGeomCollFromWKB() GeoFromGml()
Any supported type STGeomFromText() Parse() STGeomFromWKB() GeoFromGml()

 空間オブジェクトを表現するのにいずれの言語を使うにせよ,また,いずれの型のオブジェクトを生成するにせよ,本章で議論する静的メソッドは全て同一の構文を共有する.この汎用構文は次に示す通りである.

datatype::method(geometryrepresentation, srid)

 この構文は次に示すとおり 4 つの構成要素からなる.

  • datatype は静的メソッドが geography 型か geometry 型のいずれに属するかを指定し,ゆえにメソッドにより生成されたインスタンスのデータ型を定義する.
  • method はジオメトリを生成するメソッド名である.これは必ず Table 4-1 に列挙したメソッドの一つでなければならない.
  • geometryrepresentation は生成すべきジオメトリの有効な表現である.この表現は選択されたメソッドにより生成された適切なフォーマットにおいて表現されなければならない.その表現とは(WKT および GML フォーマットの)文字列,あるいは問題のジオメトリを定義するのに必要な全情報を含んだバイナリーストリーム (WKB) である.
  • srid は空間参照系の識別子を表現した整数値であり,メソッドを通して geometryrepresentation パラメーター内で座標を定義するのに使われる.

 その中でジオメトリが表現される各フォーマットおよび,オブジェクトがそれらの表現から生成される各メソッドは,それぞれ利点と欠点を有する.しかし,geography 型データか geometry 型データか,いずれのメソッドを使ってアイテムを生成するかの決定は,生成の時点でのみ重要であり,アイテムの生成後は無関係になっていく.特定のメソッドを使って空間データのアイテムを生成してしまえば,そのデータのアイテムは,他の利用可能だったメソッドを使って生成されたものであっても,全く同一のものとなる.

レイトバインディング

 任意の静的メソッドにより指定された geography 型あるいは geometry 型オブジェクトへの参照は,実行中にのみ解決され,それはメソッドを呼び出すクエリが実行される時である.これはレイトバインディングとして知られている.レイトバインディングの一つの効果として,クエリが実行されるまでは SQLCLR はどんな種類のオブジェクトが静的メソッドにより生成されるかを知らない.結果として,SQL Server は表現を解析して有効なデータであるかチェックすることができない.例えば,次のクエリはいかなる解析エラーも発生させずに SQL Server Management Studio において正しくコンパイルされる.

SELECT  geometry::STGeomFromText('This is not a real geometry')

 しかし,実行の際に,メソッドに渡された表現が有効な WKT ではないため,このクエリは失敗する.有効な WKT とは,STGeomFromText() メソッドに必要な,という意味である.いかなる静的メソッドでも表現を指定して渡す時には注意されたい.というのは,これらのクエリを実行するまでエラーが表示されないかもしれないからである.

“第 4 章 空間データオブジェクトを生成する (Beginning Spatial with SQL Server 2008)” の続きを読む

第 6 章 空間データをインポートする (Beginning Spatial with SQL Server 2008)

 多くの空間アプリケーションがカスタム定義の空間機能を組み合わせている.例えば顧客セットの局在と,広く受け入れられた表現の空間データ,地球上の汎用性のある特徴,例えば国や州の境界線,世界の主要都市の局在および主要な道路や鉄道の経路などである.この情報は自分自身で作成するよりも,多くの代替可能な資源が存在しており,そこから普通に使うための空間データを取得して空間アプリケーションに搭載できる.

 本章では,そこから一般公開された空間情報を取得できる資源,そこでそのデータが普通に提供されるフォーマットおよびその情報を SQL Server にインポートするのに使える技術を紹介しよう.

“第 6 章 空間データをインポートする (Beginning Spatial with SQL Server 2008)” の続きを読む