第 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)” の続きを読む

国土地理院の地球地図日本ダウンロードから都道府県のポリゴンデータをQGISで作成する

「融合」された結果の都道府県境界

 小地域の境界データはeStatで入手できる.市区町村の境界データは国土数値情報から入手できる.しかし都道府県の境界データは公的機関からは公表されていない.不思議である.今回は国土地理院の地球地図日本ダウンロードというサービスから都道府県の境界データを作成した.

“国土地理院の地球地図日本ダウンロードから都道府県のポリゴンデータをQGISで作成する” の続きを読む

国土数値情報の河川データが一部直っていた件

SQL Server

 以前の記事で国土交通省の国土数値情報の河川データが破損していると口を酸っぱくして述べたが,いつの間にか修復されていた.修復されていたのは北海道および茨城県のテーブル構造である.岐阜県と三重県のファイルは破損したままであり,修復を要した.

参考:QGISのフィールド計算機で国土数値情報の河川データの属性を修正する

QGISで国土数値情報のシェープファイルを修正する

国土数値情報の河川データの属性テーブルを編集してみたが…

“国土数値情報の河川データが一部直っていた件” の続きを読む