こんにちは、インフォマティクスの空間情報クラブ編集部です。
今回はGEOS(ジオス)についてご紹介します。
目次
GEOSとは
GEOS(ジオス)とはGeometry Engine - Open Sourceの略で、地理空間情報を処理するためのオープンソースライブラリのことであり、OSGeo財団が支援するオープンソースプロジェクトの1つです。
GEOSはJTS Technology Suiteのすべての機能をC++に移植したもので、GISの標準化に取り組んでいる団体「OGC(Open Geospatial Consortium)」が定義している OpenGIS Simple Features for SQLに含まれる空間関数と、JTSの高度なトポロジー関数が実装されています。
こちらに詳細が記載されていますので、ご参照ください。(英文)
ここではGEOSを使用するメリットと、GEOSを使用した場合の空間検索の考え方についてご紹介します。
GEOSのメリット
GEOSは、PostGIS、QGIS、GDAL/OGR、MapServer、FMEなど各種オープンソースのプロジェクトで利用されており、弊社のGISソフト「SIS」でもバージョン7.1以降利用しています。
GEOSを使用した場合の最大のメリットは処理速度の高速化です。
例えば、こちらのサイト(github/GEOS)では、ジオメトリ処理にGEOSを使用した場合と使用しない場合でのパフォーマンスが比較されています。
SISでは、GEOSを使用することで、従来バージョンと比べて空間検索やブール演算などのジオメトリ関連の処理速度が向上しました。
GEOSを使った空間検索
GEOSには、主に以下の機能があります。
上記の「ジオメトリ」と「空間関係」を組み合わせると、空間検索の定義が作成されます。
では、どのように空間検索の定義が作成されるのか具体例を使って見てみましょう。
検索例
図1で「赤色の太線で囲まれた領域に対して、対象のジオメトリを含む」という条件で、家形の図形を検索します。
「赤の網掛けの図形」が検索条件に合致したものです。
図1:家形と検索領域のポリゴン
GEOSではこの検索をOGCのDE-9IMを使用して以下のように行います。
検索条件
今回使用した条件は以下のとおりです。
Relate式
この条件では、「を含む」という図形どうしの関係を「Relate」という式を使って定義しています。
Relate式は、「交差する」や「一致する」など「空間関係」の条件に応じてOGCのDE-9IMで定義されています。
例)
「交差する」は「not Relate("FF*FF****") 」、「一致する」は「Relate("TFFF*FFF*") 」で表わされます。
空間検索を行う場合、まず検索元の領域や検索対象の図形を「内部」「境界」「外部」の3つに分けて、「表1」の①~⑨の空間関係がどのようになっているかを調べます。
表1:DE-9IM
これを「Relate("①②③④⑤⑥⑦⑧⑨")」となるようにRelate式の引数に当てはめます。
①~⑨の値は、以下のいずれかの空間関係になります。
今回使用した条件は以下のとおりです。
今回の検索条件の「を含む:Relate("T*****FF*") 」は、①が「T」、⑦と⑧が「F」で、それ以外は「*」です。
つまり検索元の領域と検索対象の図形が、以下の空間関係を持っていることになります。
図1で検索された赤の網掛けの図形(検索対象)と赤色の太線で囲まれた領域(検索元)の空間関係を、表1に当てはめたものが「表2」です。
表2:図1の「赤の網掛け図形」と検索元図形の空間関係のDE-9IM
Relate式では「Relate("212FF1FF2")」となり、「を含む:Relate("T*****FF*") 」の条件と合致します。
一方、検索されていない図形は「Relate("212101212")」(図2)あるいは「Relate("FF2FF1212")」(図3)であるため、 「を含む:Relate("T*****FF*") 」の条件に合致しません。
GEOSを使った空間検索は、このように行われます。
おわりに
今回はGEOSを使用した空間検索を中心にご紹介しました。
これ以外の検索条件もRelate式で定義されています。空間検索の結果を確認したい場合は、実際にRelate式に当てはめて検証するとよいでしょう。
GEOSを使用した空間検索の定義はシンプルなので、パズルのように組み合わせて確認するのもよいと思います。
インフォマティクスからのお知らせ
GISソフトをお探しなら
GISソフトをお探しの方、現在お使いのGISに課題を感じている方は、GIS(地理情報システム)製品SISをご利用ください。
SISの資料をダウンロードする
【参考】
・DE-9IM http://en.wikipedia.org/wiki/DE-9IM
・GEOS Integration https://geophp.net/geos.html