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

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

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

空間データの資源

 空間データ資源は豊富に存在し,教育機関や政府機関と同様,さまざまな商用データベンダーからも取得でき,無料で情報を利用可能である.Table 6-1 に空間データを無料でダウンロードできる少数のインターネット資源の詳細を示す.

Table 6-1. 無料でダウンロードできる空間情報資源
資源 詳細
http://www.census.gov/ 米国国勢調査局地理学部は高品質の空間情報を保有しており,それには地名辞典,郵便番号集計エリア (ZCTAs), TIGER 道路・河川・鉄道データベースおよび他の多くの地理的エンティティを包括している(合衆国限定).
http://geodata.grid.unep.ch/ 国連地理データポータルは地球,国家,地域および準地域統計および空間データを含み,それらをカバーするテーマ,つまり淡水,人口,森林,排出,気候,災害,健康および GDP としてカバーする.
http://biogeo.berkeley.edu/gadm/ グローバル行政区データベース (GADM) は国境線,州,国家および全世界をカバーするのと同等の 1 個の ZIP ファイルとして保有しており,バークレイのカリフォルニア大学が運営している.
http://earth-info.nga.mil/gns/html/ アメリカ国家地理空間情報局 (NGA) の GEOnet ネームサーバー (GNS) は全ての外国の地名の公的リポジトリであり,局在,行政区分および品質に関する情報を保有する.
http://geodata.gov/wps/portal/gos 合衆国政府『地理空間ワンストップ』地理データウェブページは分類されたリンクを保有し,様々な資源は生態学,地質学,健康,交通手段および人口統計に関して地域をカバーする.

 第 4 章で示したように,SQL Server 2008 の静的空間メソッドはそれぞれ,WKT 表現からでも WKB 表現からでも GML 表現からでも同時に一つの空間データのアイテムを生成できるだけである.しかし,Table 6-1 に列挙したような空間データ資源はさまざまな他の種類の空間フォーマットを蓄積している可能性があり,何千もの一個一個のアイテムを一つのドキュメントに記述している可能性がある.ゆえに,静的メソッドを使用していては,それらの資源から直接 geography データや geometry データを生成することはできない.

 本章の残りで,利用可能ないくつかの一般的な空間データの代替フォーマットについて議論し,このデータを SQL Server 2008 にインポートするのに使える技術を説明する.

表形式の空間データをインポートする

 間違いなく空間データではないが,もっとも豊富な(そしてもっとも簡素な)無料で利用可能で一般に場所の名前から取得される地理情報の資源とは,各場所の位置を記述した一組の緯度と経度座標である.これらの資源は関連する他の情報,つまり人口や経済指数の列を保有している可能性もある.このフォーマットで表現された情報は一般に「地名辞典」として知られており,測地情報の辞書である.

 仮に地理時点のような緯度と経度(または投影座標系からの北座標と東座標)を含むデータの構造化テーブルから空間情報をインポートしたいなら,一つの静的メソッドを使って geography 型か geometry 型の Point オブジェクトを生成でき,それはデータの各アイテムを表現した座標値に基づいている.これには次のステップが関与している.

  1. SQL Server 2008 の提供するバルクインポートメソッドの一つを使って構造化データを新規テーブルにインポートする.つまり,OPENROWSET および BULK INSERT T-SQL ステートメント,BCP ユーティリティあるいはインポート・エクスポートウィザードである.
  2. ALTER TABLE ステートメントを使ってテーブルに新しい geography 型または geometry 型の列を追加し,由来する空間データを保持する.
  3. T-SQL の UPDATE ステートメントを静的メソッドと共に使って新しい列に投入する.それはインポートされたデータ内の列の座標値に基づいている.

 このアプローチを説明するため,アメリカ地質調査所 (USGS) の提供する地震データのファイルを使って例を示したい.USGS は無料で利用可能なデータベースを数多く作成しており,ウェブサイト http://www.usgs.gov からダウンロードできる.その一つに直近 7 日間のリアルタイムで世界規模の地震のリストがあり,http://earthquake.usgs.gov/eqcenter/catalogs/eqs7day-M1.txt のリンクから直接ダウンロードできる.このファイルはコンマ区切りのデータリストであり,各地震のさまざまな属性を列フォーマットで保有しており,内容は Table 6-2 に列挙して記述してある.

Table 6-2. eqs7day-M1.txt ファイルのデータ列
詳細
Src データに貢献するネットワーク資源の識別子,2文字
Eqid この地震の一意の識別子
Version バージョン番号
Datetime 記録の発生した日の文字列
Lat 震源地の緯度,EPSG:4326 空間参照系で記述
Lon 震源地の経度,EPSG:4326 空間参照系で記述
Magnitude 地震のマグニチュード,各観測所で計測した地震波で決定される
Depth 震源地の深さ,キロメートルで測定
NST 報告した観測所の数
Region 地震の発生した地域を記述した文字列

 このデータを取得するには次のステップに従う.

  1. ウェブブラウザを開き,アドレスバーに次のように URL をタイプする:http://earthquake.usgs.gov/eqcenter/catalogs/eqs7day-M1.txt. Figure 6-1 に例示すようにブラウザは最新のコンテンツを表示する.
  2. このファイルをアクセスできる場所に保存する.「ファイル」メニューから「保存」(または「ページを保存」.ブラウザの種類による).名前と場所を促される.この例ではファイル名を eqs7day-M1.txt, 保存場所を C:\Spatial フォルダーと想定している.

注記 eqs7day-M1.txt ファイルは直近の 7 日間のデータで常にアップデートされているため,実際の内容は本章で説明したものとは異なる.

テキストファイルをインポートする

 SQL Server 2008 にデータをインポートする方法は数多く存在する.この例ではインポート・エクスポートウィザードを使い,データを資源から目標に向かって移動し,簡潔なパッケージを一つずつ生成してもらうことにする.そのステップは次の通りである.

  1. SQL Server Management Studio のオブジェクトエクスプローラーペインからデータをインポートしたいデータベース名を右クリックして「タスク」を選択し「データをインポート」と進む.
  2. インポート・エクスポートウィザードが開く.「次へ」をクリック.
  3. ウィザードの最初のページはデータソースを選択するよう促してくる.スクリーン最上部にある「データソース」ドロップダウンリストから Flat File Source を選択する.
  4. ブラウズボタンをクリックして先に保存しておいた eqs7day-M1.txt テキストファイルへとナビゲートする.Open をクリックする.
  5. デフォルトでは接続のための Text Qualifier フィールドは none にセットされている.eqs-7day-M1.tst テキストファイル内部の文字列はダブルクオーテーションで囲まれており,この値をダブルクオート文字 (“) に変更する.
  6. eqs-7day-M1.txt テキストファイルにはヘッダー行が含まれているため,最初のデータ行を列名にするにチェックを入れる.
  7. ペイン左側の詳細オプションをクリックする.各列を順番にクリックし,右側の属性ペインから,データ型の値を修正し,値に適合するように OutputColumnWidth フィールドを修正する.Table 6-3 に示す.
  8. 適切な変更を加えたなら,次へのボタンをクリックする.ウィザードは目標を選択するように促してくる.
  9. SQL Server 2008 インスタンスとデータベースの詳細を入力し,次へをクリックする.
  10. ウィザードはソースとなるテーブルとビューを選択するよう促してくる.デフォルトではウィザードは自動的に目標テーブルを新規作成し,その名前は eqs7day-M1 となるため,次へをクリックする.
  11. パッケージを保存して実行するスクリーンで,完了をクリックする(仮に SQL Server 2008 Express, Web あるいは Workgroup Edition を使っているなら,このスクリーンはパッケージを実行するとなっている).パッケージの要約が出現し,詳細を確認するよう促される.
  12. 完了をクリックしてパッケージを実行する.

注記 SQL Server 2008 Express, Web または Workgroup Edition ではインポート・エクスポートウィザードを使って即座に実行するだけのパッケージを作成できる.ウィザードによりパッケージを保存するには,SQL Server Standard, Developer あるいは Enterprise Edition を使わなければならない.

Table 6-3. USGS 地震テキストファイル接続のための列の属性
名前 データ型 OutputColumnWidth
Src string [DT_STR] 2
Eqid string [DT_STR] 8
Version string [DT_STR] 1
Datetime string [DT_STR] 50
Lat double-precision float [DT_R8]  
Lon double-precision float [DT_R8]  
Magnitude float [DT_R8]  
Depth float [DT_R4]  
NST two-byte signed integer [DT_I2]  
Region string [DT_STR]  

 実行が成功し,テキストファイルから目標のテーブルにインポートされた行数が記述されているのを知らせるメッセージを受け取るだろう.では,閉じるをクリックしてウィザードを閉じよう.

 我々の新しいテーブルの中身を見てみよう.新しいクエリウィンドウを開き,次のコマンドを発行する.

SELECT * FROM [eqs7day-M1]

 テキストファイルから挿入されたデータを Figure 6-2 に示すように見ることができる.

地理型の列を加える

 各地震の位置は現在その eqs7day-M1 テーブルに記述されており,経度と緯度の座標値は Lat 列と Lon 列を使って蓄積されている.SQL Server により提供されるいかなる空間メソッドを使うためにも,geography 型や geometry 型を使う代わりに,これらの座標を使って各地震の表現を生成する必要がある.Lat および Lon 列が正確な位置を記述した地理座標を含んでいるため,geography 型を使って表現された各地震を表現する Point オブジェクトを生成することにする.テーブルに Location という名の geography 型の新しい列を追加するため,次の T-SQL クエリを実行する.

ALTER TABLE [eqs7day-M1]
ADD Location geography
GO

空間データを移入する

 eqs7day-M1 テーブルに新しい geography 型の列を追加したところで,今度はそこに各地震を表現する Point geometries を移入する必要がある.geography 型の Point() メソッド,これはそれの基づく SRID 4326 と共に Lat および Lon 列の内部に含まれる値を提供するが,を使ってこれを行うことができる.次に,SQL の UPDATE ステートメントを使ったこのメソッドの結果としての Location 列の値をセットしよう.Location 列に移入するために,次のコードを実行する.

UPDATE [eqs7day-M1]
SET Location = geography::Point(Lat, Lon, 4326)

 ここに示すように,影響した多くの行の数を受け取るだろう.影響される行数はダウンロードしたデータセット内の地震の数による.

843 raw(s) affected.

 Location 列の内容を調べるため,今度は次のクエリを走らせよう.

SELECT TOP 5
Eqid,
Location.STAsText() AS Eqicenter
FROM [eqs7day-Mq]

 結果は以下の通りである.

Eqid      Epicenter
14394700  POINT (-117.85 36.0864)
14394696  POINT (-118.008 34.4421)
00069720  POINT (-153.883 60.1676)
14394684  POINT (-115.92 32.6763)
14394680  POINT (-116.424 33.027)

 Point() メソッドを使って,Location 列に地球表面上の各地震の震源地の緯度と経度を表現する Point geometries を移入することができた.しかし,地震の起源の地点(爆心地)は通常地球内部の地下数十から数百マイルの深いところにある.eqs7day-M1 データセット内では,震源地の深度はキロメートルで表現され,Depth 列に記録されている.代わりに各地震の震源地の位置の表現を可能にするためには,Location 列内で Point それぞれを定義し,Depth 列の座標値に基づき Location 列に追加の z 座標を付加する必要がある.このために Point() メソッドを使うことはできないが,それは二つの座標値しか取らないためであり,WKT 構文に基づく静的メソッドを使うことができ,それは z 座標をサポートしている.

 次のコードが示すのは,代わりに STPointFromText() メソッドを使って Location 列を更新する方法であり,各地震の緯度,経度および深度に基づく一個の Point の WKT 表現を生成することによる.Depth 列が地球表面から下の距離を表現するため,各 Point の z 座標は Depth 列の負の値に基づいてセットされる.

UPDATE [eqs7day-Ma]
SET Location = geography::STPointFromText(
'Point(
+ CAST(Lon AS varchar(255)) + ' '
+ CAST(Lat AS varchar(255)) + ' '
+ CAST(-Depth AS varchar(255)) + ')',
4326)

 今度は eqs7day-M1 テーブルに含まれる各地震の震源地を表現する Point を含んだデータを選択しよう.次の通りである.

SELECT
Eqid,
Location.AsTextZM() AS Hypocenter
FROM [eqs7day-Mq]

 結果は次の通りである.

Eqid      Hypocenter
14394700  POINT (-117.85 36.0864 -4.5)
14394696  POINT (-118.007 34.4421 -7.7)
00069720  POINT (-153.883 60.1676 -100)
14394684  POINT (-115.92 32.6763 -6.2)
14394680  POINT (-116.424 33.027 -7.4)

チップス 一度 Location 列に各地震の Point 表現を移入したら,元の緯度,経度および深度の列は削除して構わない.仮にでも元の座標値の取得が必要になったら,Lat, Lon および Z 属性を使うことができる(詳細は第 11 章で解説する).

Keyhole Markup Language から空間データをインポートする

 KML は Keyhole 社により独自に開発された GML ベースの言語であり,EarthViewer アプリケーション内で使われる.2004 年に Google が EarthViewer と共に Keyhole を買収し,今では有名になった Google Earth プラットフォーム (http://earth.google.com) を開発するための基盤として Google が使っている.KML フォーマットはそれ以来何度かの改訂を経ている(執筆時点での最新バージョンは KML 2.2)が,Google Earth で使われる空間情報を蓄積するネイティブフォーマットであり続けている.2008 年,KML は Open Geospatial Consortium に空間情報標準フォーマットとして採用され,今や最新の KML 仕様の実装は OGC ウェブサイトで見ることができる.アドレスは以下の通り. http://www.opengeospatial.org/standards/kml/

 KML が Google Earth コミュニティ内部で使われユーザーの作成した空間データをシェアしている一方,より広いインターネットコミュニティの間では Google Earth プラットフォームの人気と快適さは,KML はますます教育と研究目的で使われるようになってきていることを意味しており,それは救急や災害時のサービスのような重要なアプリケーションにおいても同様である.OGC による標準採用とも相まって,KML は空間データの互換性にとって,ますます重要なフォーマットになりつつある.

KML を GML と比較する

 GML のように,KML ファイルは空間機能,つまり Points, Paths (LineString と同等のもの)および Polygons を記述するため異なる種類の地理インスタンスを保有する可能性がある.しかし,GML フォーマットが(WKT および WKB のように)純粋に地理的特徴の形態と位置を記述する目的で使われる一方で,KML ファイルはそれらの特徴がスタイルを整えられ,グラフィカルなディスプレイで表現される方法を付加的に指定する.

 KML ドキュメントフォーマットを説明するため,http://code.google.com/apis/kml/documentation/kml_tut.html で利用可能なサンプルコードから取得した Path の KML 表現を Listing 6-1 に示す.

 この KML 表現は,問題にしている LineString の純粋な地理属性を記述するのに必要とされるよりも,多くの情報を含んでいることに注意されたい.多くの異なるスタイルおよび記述要素が存在する.仮にこの同じ機能を GML フォーマットを使って記述しようとすると,そこには形態に関する要素しか含まれていないため,Listing 6-2 に示すようなコードを要求するしかない.

KML を GML に変換する

 高度に構造化された XML の性質の利点の一つは,明示的な変換を指定して XML の一つの方言から別の方言に変換することが比較的たやすいことである.生成して必要な変換を適用することにより,(Listing 6-1 に示したように) KML から(Listing 6-2 に示したように) GML に変換することは可能であり,geography 型および geometry 型の GeomFromGml() メソッドを使ってそれを SQL Server に課すことができる.KML から GML に変換するためには,次の変換が起きなければならない.

  1. 純粋にスタイルや記述的な属性を記述する KML 要素を削除する.それらは GML ファイルには全く関係がない.これらの要素とは <LookAt>, <visibility>, <styleUrl>, <Style> および <name> である.
  2. 地理的属性に関連するそれらの要素の内容を取得し,それらを同等の GML 要素で置換する.Table 6-4 に示す.
  3. <coordinates> 要素の内容を操作し,それには KML geometry における各 point の座標が含まれるが,同等の GML の <postList> や <pos> 要素の適切なフォーマットにする.
    1. 各座標値のタプル間に使われるセパレーターのコンマをスペースに置換する.
    2. 仮に KML <coordinates> 要素内部の座標値が高度 (z) 座標で記述されているなら,この値は無視する.
    3. 二つの残りの座標の順を逆転させ,緯度-経度の順に記述する.
Table 6-4. 地理 KML 要素および相当する GML
KML GML 詳細
<GeometryCoolection> <GeometryCollection> Geometry Collection 要素を示す
<Polygon> <Polygon> Polygon geometry を示す
<LineString> <LineString> LineString geometry を示す
<Point> <Point> Point geometry を示す
<outerBoundaryIs> <exterior> Polygon の外部境界を示す
<innerBoundaryIs> <interior> Polygon の内部境界を示す
<coordinates>a <pos><posList> geometry の座標リストを含む要素

a GML においては,<pos> 要素は <posList> 要素とは明確に区別される.<pos> 要素は(1 点の Point geometry を定義するのに使われるように)単一の座標タプルを保有し,<posList> 要素は(LineString や Polygon におけるように)複数の座標タプルを保有する.

付記 KML において全ての multielement geometry はGeometry Collection として表現される.MultiPoint, MultiLineString または MultiPolygon geometry と同等である特異的な同種の要素は存在しない.

付記 GML 標準の初期バージョンには <coordinates> 要素が含まれ,それは KML で使われるものと酷似している.しかし,これは GML バージョン 3.1.0 で非推奨となり,SQL Server 2008 では提供されない.その代わり,必ず <posList> 要素または <pos> 要素を使わなければならない.

 Listing 6-1 に示した KML ドキュメントから,Listing 6-2 に示した同等の GML 表現に変換するのに必要な変化を起こすために使いたいなら,いくつかの方法が存在する.例えば,XQuery を使うこともできるし,あるいは,Extensible Stylesheet Language Transformation (XSLT) を使うこともできる.XQuery および XSLT は共に World Wide Web Consortium (W3C) により管理される承認された標準である.それらが変換し XML データを問い合わせるのに使われる方法のさらなる情報は,W3C ウェブページのそれぞれ http://www.w3.org/TR/xslt.html および http://www.w3.org/TR/xquery/ を参照されたい.しかし,二つの XML フォーマット間の簡単な変換を実行するだけのいかなる方法も,次に述べる制約に苦しむことになるかも知れない.

  • オリジナルの KML ファイルに含まれる何か記述的・スタイリング要素を失うかも知れない.そこには GML では表現できない,各 geometry インスタンスについての有用な付加情報が含まれている可能性がある.
  • ソースドキュメントに対して実行する検証やエラーチェックが存在せず,有効な geometry を生成するかどうかチェックできない.例えば,変換された GML 表現から geography 型の Polygon インスタンスを生成するためには,空間の領域を保有するそれらのリングのポイントは反時計回りの順で列挙しなければならないが,それはオリジナルの KML <coordinates> 要素内で列挙されているのとは違うかも知れない.

 仮にもっと堅牢な方法を使って KML データを SQL Server 2008 にインポートしたいなら,この目的に特化したサードパーティ製のツールが利用できる範囲を調査したくなるだろう.本章の最後にそのいくつかを列挙する.

付記 KML および GML は単なる XML ベースの空間データフォーマットではない.例えば,GPS Exchange Format (GPX) は多くの携帯型 GPS デバイス間でデータをシェアし蓄積するのに使われる XML フォーマットである.

ESRI shapefile format からデータをインポートする

 shapefile フォーマットは Environmental Systems Research Institute 社 (ESRI) により設計され維持されている.最初に開発されたのは GIS のスイート ARC/INFO の用途のためであり,shapefile は今や,あらゆる種類のシステム間で空間情報を変換するのに使う非常に一般的なフォーマットとなっており,ほとんどの商用空間データに提供されるフォーマットである.時間とともに,巨大な空間データセットが ESRI shapefile フォーマットで作成されるようになってきた.

 shapefile フォーマットで提供されるデータセットは一般に “a shapefile” (単数形)と呼ばれるにも関わらず,これは少し誤称である.というのは,単一の shapefile は実際にいくつかのファイルを保有しているからである.与えられた shapefile データセットに関連する各ファイルは同じファイル名を持ち,それにファイルの拡張子が続く.

  • .shp: SHP ファイルは生の幾何学的形態データである.各 SHP ファイルはただ一種類の geometry 形態を保有することができる.Points, LineStrings あるいは Polygon である.
  • .shx: SHX ファイルは shapefile のインデックスを維持し,shapefile ドキュメント内のすべての形態のインデックス登録を一つ保持する.各インデックス登録は SHP ファイル内に記録された関連する形態の始点と長さとを記述する.
  • .dbf: DBF ファイルは各形態の付加的な,非空間属性を保有する.例えば,アメリカの州を表現した Polygons を含む shapefile 内で,DBF ファイルは各州の名前,その人口,あるいはその州都を保有している可能性がある.
  • .prj: PRJ ファイルは,表現された地理データの座標における投影法についての詳細を保有し,同じフォーマットが sys.spatial_reference_systems テーブルの well_known_text 列で使われている.SQL Server に shapefile をインポートする時には,このファイルは正確な空間参照識別子 (SRID) を定義するのに必要とされる情報を保有している.

付記 shapefile フォーマットではいかなる検証ドキュメントも SHP ファイルおよび関連する SHX ファイルを保有していなければならない..dbf および .prj 拡張子を有するファイルは任意であり,そのデータに関する付加的な情報を保有する.

サンプル Shapefile データを取得する

 shapefile フォーマットから SQL server にデータをインポートする方法を説明するため, カリフォルニア州の 郵便番号エリア集計 (ZCTAs) を表現する米国国勢調査局からのデータを使おう.ZCTAs は米国国勢調査局の 2000 年の調査により定義され,米国郵政公社で使われる 5 桁の数字の郵便番号のための配送エリアにほぼ相当する.ZCTA の地域の ESRI shapefile は,カリフォルニア州のものなら直接米国国勢調査局のウェブサイトからダウンロードできる.URL は http://www.census.gov/geo/cob/bdy/zt/zt06_d00_shp.zip. である.

 この ZIP ファイルをダウンロードして内容を解凍する.次のファイルが含まれている.

  • zt06_d00.shp
  • zt06_d00.shx
  • zt06_d00.dbf

 SHP ファイルはこれらのうちで最大サイズであり (4,560 KB), 各 ZCTA を表現する Polygon の形態を定義する生データを保有している.SHX ファイルはインデックスファイルであり,shapefile 内の各形態の始点と長さを記録している.純粋に空間情報を表現している各 ZCTA を保有しているこれら二つのファイルに加えて,DBF ファイルは関連する付加的なデータの列を保有し,それは Table 6-5 に列挙して記述してある.

Table 6-5. zt06_d00.dbf ファイル内のデータの列
記述
Area 各 ZCTA の内部の面積,平方キロメートル
Perimeter 各 ZCTA の外周長,キロメートル
ZT06 D00 自動的に生成した連続する形態の番号
ZT06 D00 ID ユーザー定義の形態の番号
ZCTA ZCTA の参照する 5 桁の番号
NAME ZCTA に同じ
LSAD 法的/統計的地域の記述コード.2文字の領域で法的あるいは統計的地域の種類のエンティティに対応.5 桁の ZCTA コードのため,通常は Z5 とする.
LSAD_TRANS 各形態の LSAD に関する記述.ZCTAs の場合は ‘5-Digit ZCTA’ となる.

チップス zt06_d00.dbf に含まれるさらなるデータについては http://vcgi.org/metadata/BoundaryOther_ZCTA2000.txt に相談されたい.

 ZCTA shapefile に関連する PRJ ファイルが全く含まれていないことに注意されたい.ならば,どうやって座標を定義するために使われる空間参照系を知ることができるのだろう?米国国勢調査局ウェブサイトをさらに検索すると,メタデータのページが見つかった.それは http://www.census.gov/geo/www/cob/zt_metadata.html にあった.このページは ZCTA データが NAD 83 基準点に基づく地理座標系を使って定義されていることを記述している.いかなる空間参照系の WKT 表現でも,使用される座標の種類の表現のキーワードで開始しなければならないことを我々は知っている.ZCTA データにおいて使われる地理座標系では,これは GEOGCS である.我々はまた,空間参照系の WKT 表現が,それに基づく基準点の名前,ここでは NAD83 だが,それを記述しなければならないことも知っている.この情報から,我々はこの空間参照系のための適切な識別子を sys.spatial_reference_systems テーブル内で検索することができる.次のクエリを使う.

SELECT  spatial_reference_id
FROM  sys.spatial_reference_systems
WHERE  well_known_text LIKE 'GEOGCS%"NAD83"%'

 一行の結果が返ってくる.

spatial_reference_id
4269

 さて,この shapefile に含まれるデータをインポートするにあたっては SRID 4269 を使うべきである.この空間参照系は地理座標に基づいているため,空間データを蓄積するためには geography 型を選択しよう.この情報を基に,今やデータを shapefile から SQL server にインポートする準備が整った.

Shapefile データを Shape2SQL を使ってインポートする

 Shap2SQL は人気の,簡単なアプリケーションであり,shapefile データを SQL Server 2008 に搭載することに特化して設計された.SQL Spatial Tools パッケージの一部としてダウンロード可能であり,無料で利用可能である.次の URL からダウンロードできる.http://www.sharpgis.net/page/SQL-Server-2008-Spatial-Tools.aspx

 SqlSpatialTools zip アーカイブを ダウンロードして解凍したら,Shape2Sql.exe ファイルをダブルクリックしてアプリケーションを搭載する.最初に Shape2SQL を実行した時には Figure 6-3 に示すようにデータベース接続の詳細を入力するよう促される.

 Database Configuration ダイアログボックスでは,shapefile をインポートしたい SQL Server 2008 インスタンス名を入力し,サーバーに接続するのに必要な認証のいずれかを入力する.次に適切なデータベースをドロップダウンリストから選択し,OK をクリックする.

 データベースの構成が完了したら,Shape2SQL アプリケーションのメインウィンドウが表れる.Figure 6-4 にShape2SQL アプリケーションを示し,先に保存したカリフォルニア州 ZCTA データをインポートするのに必要な設定を示してある.

 カリフォルニア州 ZCTA データをインポートするのに適切なオプションを設定するために次のステップに従う.

注意 shapefile を Shape2SQL を使ってインポートするためには,SHP ファイルと SHX ファイルは必ず同じ場所に保存されていなければならない.仮に関連する DBF ファイルが同じ場所に保存されていると,各形態に関連する付加的な,非空間属性を DBF ファイルから SQL Server テーブルの列にインポートすることが可能となる.

注意 仮にでも shapefile が .prj 拡張子のあるファイルを保有するなら,必ず対応する SRID を手動で指定し,PRJ ファイル内に含まれる詳細を適合させなければならない.Shape2SQL は対応する SRID を自動では設定してくれない.

付記 付加的なデータ列は関連する DBF ファイルに含まれるデータに基づいている.仮に DBF ファイルが存在しないなら,各シェイプに関連する付加情報をインポートすることはできない.

  1. スクリーン右上のコーナーにある…ボタンをクリックし,shapefile を選択する.保存しておいた zt06_d00.shp ファイルの位置を探してハイライトし,Open をクリックする.アプリケーションは shapefile 内で見つかった形態の数と種類を表示する.zt06_d00.shp ファイルはこの場合,2490 個の Polygon 形態を保有していた.
  2. Database Properties セクションでは Server フィールドをチェックして適切なサーバーとどのデータベースにデータを挿入するかを指定する.仮に詳細を変更する必要があるなら,Configure ボタンをクリックして Database Configuration ダイアログボックスを開く.
  3. Geometry Properties セクションはアプリケーションウィンドウの左下にあり,次のオプションを使ってデータを SQL Server にインポートする方法を指定する.
    • Replace existing table: このオプションをチェックすると,仮に指定した名前のテーブルが既に存在する場合,それは削除され,インポートされた形態データを含む新しいテーブルに置換される.チェックしないなら,代わりにデータは既に存在するテーブルに追加される.仮に指定した名前のテーブルが存在しないなら,このオプションの有無に関係なく新しいテーブルが作成される.
    • Planar Geometry/Geography (Spheric): 挿入するデータがインポートされる列のデータ型を定義するオプションをここから選択する.Planar Geometry 型を選択すると geometry 型が使われることになり,Geography (Spheric) を選択すると geography 型を選択することになる.カリフォルニア州 ZCTA データは地理座標を使って定義されており, Geography (Spheric) を選択する.
    • Set SRID: 形態のどの座標が定義されるかの空間参照系を識別する整数値の入力は必須である.仮に shapefile が .prj 拡張子を持つファイルに関連して由来するなら,そのファイル内に含まれる詳細に対応する SRID を選択すべきである.仮に PRJ ファイルが存在しないなら,代わりに該当ファイルに関連する他のメタデータを検査するか,あるいはデータの提供者に接触するかして,適切な空間参照系を必ず見つけ出さなければならない.このオプションはすでに定義された座標が存在する空間参照を識別することを特記しておく.それは,そこにデータを投影したい空間参照系を識別するものではない.カリフォルニア州 ZCTA に関しては,SRID には 4269 と入力する.
    • Create Spatial Index: このオプションがチェックされると,Shape2SQL は自動でデータの挿入されるテーブルに空間インデックスを生成する.空間インデックスは特定の空間クエリの速度を改善し,これの詳細については第 14 章で議論する.
    • Table Name: この値はデータのインポートされるテーブル名を定義する.仮にテーブルが既に存在しており,Replace Existing Table オプションがチェックされていない場合,このテーブルのスキーマは shapefile からインポートされるデータ列に必ず適合しなければならない.デフォルトのテーブル名はソースの shapefile のファイル名と同じであり,ここでは zt06_d00 となる.
  4. Attribute セクションはウィンドウ右下にあり,次のオプションを使ってデータのどの列をインポートするかを指定する.
    • Geometry Name: このフィールドはインポートされた空間データを保持する geometry 列または geography 列の名前を定義する.デフォルトの列名は geom である.地理座標に基づくデータをインポートしようとしているため,ここは geog に変更する.
    • ID Column Name: テーブル内の各行に一意の ID を導入したいなら,ここにその列名を入力すべきである.この値は生成されたテーブル内に IDENTIFY(1, 1) の整数列を生成し,その列に基づいた主キーを作成する.仮に ID 列を作成したくないなら,この値は空のままにしておく.
    • Optional attributes box: Attribute セクションの最後のボックスでは,オプションの付加的なデータ列に,shapefile 内に関連する各形態をインポートするか否かを選択することができる.インポートしたい各属性のチェックボックスをクリックする.各属性は SQL Server テーブル内のそれ自身の列に対応する.
  5. 選択したオプションを満たしたら,Upload to Database ボタンをクリックする.

 Shape2SQL アプリケーションがインポートを完了したら,次のクエリを SQL Server Management Studio で実行してデータをテストできるようになる.

SELECT  TOP 5
ZCTA, 
geog.STAsText() AS WKT
FROM  zt06_d00

 結果は次の通り.

ZCTA   WKT
96044  POLYGON ((-122.671733 41.914761, -122.682284 41...
960XX  POLYGON ((-122.671733 41.914761, -122.677967 41...
96023  POLYGON ((-122.161862 41.881475, -122.156785 41...
96064  POLYGON ((-122.161862 41.881475, -122.156785 41...
96086  POLYGON ((-123.136812 41.866186, -123.1422 41...

サードパーティ製の変換ツールを使う

 本章で議論してきた技術は,さまざまな簡素な手法であり,SQL Server 2008 にさまざまなフォーマットの空間データをインポートすることができる.しかし仮に,既存の巨大なフォーマットの空間データをインポートするつもりなら,この目的のために設計された専用アプリケーションを使う,もっとふさわしい方法が存在することに気がつくだろう.空間データを SQL Server 2008 が使えるフォーマットの一つに変換するのを促進するのに利用可能なツールは数多く存在する.これらのツールのいくつかは無料で利用可能である一方で,他のツールは Microsoft の空間パートナーによって開発された商用ツールである.このセクションでは有用と思われるツールのいくつかを紹介する.

商用ツール

 SQL Server 2008 をサポートする商用ツールの多くは空間データの完全抽出,変換,搭載 (ETL) プロセスを提供しており,多くの異なる空間データ型の間での変換を可能とする.ファイルフォーマット自体の単純な変換に加えて,これらのツールはまたファイル内に保有するデータの再投影をも提供しており,データの視覚化と解析も同様である.いくつかの商用ツールを次に示す.

  • ArcGIS (バージョン 9.3 およびそれ以上)は,長期確立した業界標準の ESRI (http://www.esri.com) からの GIS プラットフォームで,SQL Server 2008 と共に発展して空間データの操作,解析およびプレゼンテーションのすべての側面をサポートする多くのツールを提供してきた.
  • Manifold (http://manifold.net) もまた SQL Server 2008 に直接接続して数百の空間データフォーマット,再投影および空間データの視覚編集間の変換とインポートを提供する.
  • Feature Manipulation Engine (FME) は Safe Software (http://www.safe.com) の設計で,広範囲のフォーマット間の空間データの変換を促進するが,それもまた基本的な視覚化ツールに含まれる.スタンドアロンのデスクトップアプリケーションに加えて,FME は SQL Server Integration Services (SSIS) を拡張し,既に存在する SSIS プロジェクトの一部として複雑な空間 ETL を実行することもできる.

無料ツール

 仮に二つのフォーマット間での単純な変換しか必要としないなら,代わりに次に示すソースの内の一つを調べたくなるに違いない.

  • FWTools (http://fwtools.org) は様々な有用なオープンソースの GIS コンポーネントを含むパッケージであり,OGR ライブラリおよび空間データ間の変換のためのコマンドラインツールも含まれる.
  • Spatial Order (http://spatialorder.com/downloads.htm) は多くのコマンドライン変換ツールを無料で提供するコンサルタントファームであり,そこには ESRI shapefile フォーマットから GML へのツール (shp2gml) や ESRI フォーマットから WKT へのツール (shp2wkt) も含まれる.
  • Zonum Solutions (http://www.zonum.com) は ESRI shapefile フォーマットと Google Earth KML ファイル間の変換ユーティリティを提供し,座標系と基準点の範囲の間の変換能力も含まれる.

要約

 本章では,そこで空間データが提供されている様々なデータフォーマットについて,またそれらのデータを SQL Server 2008 にインポートする方法について習得した.特に,本章では次の点についてカバーした.

  • 多くの代替可能なファイルフォーマットが存在しており,空間情報はそこで普通に提供されており,表形式の地理情報や ESRI shapefile および Google Earth でも使用される KML ファイルフォーマットを含む.
  • 多くの資源があり,そこから自由に利用できる空間データをインターネット経由で取得可能である.その資源から取得したデータは品質とカバー率は様々な範囲にある.空間データをダウンロードして重要なアプリケーションに使いたいなら,まずそのデータの精度に注意すべきである!
  • 表形式で提供される簡単な空間情報は,インポート・エクスポートウィザードを使ってインポートできる.T-SQL の UPDATE ステートメントと同時に geography 型の Point() 静的メソッドを使い,テーブル内の各行の座標値から geography 型または geometry 型の列を移入する.
  • z 座標を含む表形式の情報から空間データのアイテムを構築するには,各座標値に基づく geometry の WKT 表現を手動で構築できる.次にその表現を STPointFromText() のような関連する WKT メソッドに通す.
  • KML は GML 同様 XML ベースの空間データフォーマットである.二つのフォーマット間にはいくつかの類似性があるが,重要な違いもある.SQL Server を使って KML から GML に変換するためには,各 KML 要素を該当する GML 要素に変換しなければならない.
  • Shape2SQL は無料のツールであり,ESRI shapefile フォーマットから SQL Server にインポートするために設計されている.
  • 他にも,SQL Server に互換性のある空間データを変換したりインポートするための多くのツールがある.

“第 6 章 空間データをインポートする (Beginning Spatial with SQL Server 2008)” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください