PythonでDatabaseを使ってみる準備編[Chapter 19]

PythonでDatabaseを使ってみる準備編[Chapter 19]

Pythonでgeometryと距離の変換と標準化_3[Chapter 18] に引き続き、PythonでDatabaseを使用する基本を学んでおきます。

本tutorialは、Python Geospatial Developmentを参考にして、実践的に使えるPythonでGeoSpatialの使い方を学んでいくものです。

準備

Python環境については、PythonでGeoSpatialをやってみる。[Chapter 1] PythonでGeoSpatial Dataの読み書きについて_1[Chapter 8] でPythonとGeoSpatialに関するlibraryが設定できているもとして進めていきます。

Spatially-enabled databases

GISでDatabseを扱う場合、地理空間情報を扱うことができなければなりません。

ある意味では、ほとんどどんなDatabseも地理空間データ単に格納するために使用することができます、geometryをWKTフォーマットに変換し、テキスト・カラムに結果を格納すればですが。
しかし、これでは地理空間データを格納することはできても、有用な方法ではありません。

空間的処理が可能なDatabase(Spatially-enabled databases)は、空間についての概念をもっており、空間のオブジェクトおよび概念を用いて直接的にDatabaseをそうさすることができます。
特に、空間的処理が可能なDatabaseは、次のような機能を持つことになります。

- 直接Datbaseにspatial data typesとして保存することができる。(geometry column形式として)
- 空間検索(spatial queries)が実行できる。例えば、select all landmarks within 10 km of the city named “San Francisco” のようなSQLが実行できる。
- 空間結合(spatial joins)が実行できる。例えば、select all cities and their associated countries by joining cities and countries on (city inside country) のようなSQLが実行できる。
- 空間関数(spatial functions)を使って新しいobjectを作成できる。例えば、set “danger_zone” to the intersection of the “flooded_area” and “urban_area” polygons  のようなfunctionLが実行できる。

空間的処理が可能なDatabaseは、地理空間データを用いて作業するための非常に強力なツールです。そして、空間index(spatial indexes)および他の最適化の使用によって、空間的処理が可能なDatabaseは速くこれらのタイプのオペレーションを行なうことができ、莫大な量のデータを簡単に処理することができます。

Spatial indexes

空間のデータベースの定義する特性のうちの1つはgeometryに基づいた探索を促進する特別の空間indexを作成する能力です。
これらのindexは与えられたbounding box内に位置するfeatureをすべて識別するか、与えられたpointのある距離内のfeatureをすべて識別するか、与えられたpolygonと交差するfeatureをすべて識別するような空間の操作を行なうために使用されます。

空間indexのキーワードSPATIALを加えること以外は、通常のDatabase indexを定義するのと同じ方法で定義されています。
例えば、

CREATE TABLE cities (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
name CHAR(255),
geom POLYGON NOT NULL,
INDEX (name),
SPATIAL INDEX (geom)
)

このDatabaseの章で使う3つのOpen Source Spatial Databaseは、R木(R-Tree)データ構造を使用する空間indexを持っています。

R木(R-tree) indexは空間のデータベースの中で最も強力な特徴のうちの1つです。
R木は、各々geometryがdatabaseでの位置を使用して、gfeometryを速く捜すことを可能にするために最小の長方形となるようにします:
blog.godo-tys.jp_wp-content_gallery_python_19_image01.jpg

これらのbounding boxは、ともに、それらがどれくらい接近してあるかに基づいた入れ子の階層へグループ化されます:
blog.godo-tys.jp_wp-content_gallery_python_19_image02.jpg

その後、入れ子のbounding boxの階層は木のようなデータ構造を使用して表わされます:
blog.godo-tys.jp_wp-content_gallery_python_19_image03.jpg

特別のgeometryを見つけるかあるいは様々なgeometryの位置あるいはサイズを比較するために、コンピューターは、この木によって速く走査することができます。
例えば、Xによって最後のものに先行する図に表わされるポイントを含んでいるgeometryは、木を横断し各レベルにbounding boxを比較することにより速く見つけることができます。
R木(R-tree)は次の方法で探索されるでしょう:
blog.godo-tys.jp_wp-content_gallery_python_19_image04.jpg

R木(R-tree) indexを使用して、polygonを見つけることはわずか3つの比較しか必要としませんでした。

Tree構造の階層的性質のために、R木(R-tree) indexは、またわずかなbounding boxの比較を使用して、多数のfeatureを隅々まで捜すことができます。
また、まさにgeometryが単純な bounding boxになるので、R木(R-tree)はpolygonだけでなく任意のタイプのgeometryをサポートすることができます。

R木(R-tree) indexは囲まれた座標を単に探索することだけではありません。それらは、空間の比較のすべての種類および空間の接合個所に使用することができます。

今回のまとめ

今回は、GISでDatabaseを使うときの基本事項について学びました。
次回はいよいよOpen Source Databaseを使ったGeoSpatialなDatabaseを使ってみます。

また、本tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや勘違いや翻訳間違いなど多々出てくると考えられます。
それは違うじゃん!!とかいろんな意見をいただければと思います。
そこんところ ヨロシク~~!!

Python GeoSpatial Tutorialの目次に戻る。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 

WP-SpamFree by Pole Position Marketing

Social Widgets powered by AB-WebLog.com.