QGIS は ESRI Shapefiles, MapInfo, Microstation ファイル形式とその他の多くのが含まれるベクタデータ形式を読み書きするためにOGRライブラリを使っています. GRASS ベクタ, PostGIS, MSSQL Spatial と Oracle Spatial は QGIS のネイティブデータプロバイダでサポートされています. ベクタデータは zip と gzip アーカイブから QGIS に読み込むこともできます. このドキュメントが書かれた時点で, 69 種類のベクタ形式が OGR ライブラリでサポートされています ( OGR-SOFTWARE-SUITE 文献とWeb参照 参照). OGR ライブラリによるベクタデータサポートの完全なリストは ( OGR-SOFTWARE-SUITE 文献とWeb参照 参照) http://www.gdal.org/ogr/ogr_formats.html を参照して下さい.
ノート
様々な理由で QGIS ではすべてのリストされた形式が利用できるわけではありません. 例えばいくつかの外部商用ライブラリが必要だったり,あなたのOSのGDAL/OGRが利用したい形式用にビルドされていないというようなことが考えられます. よくテストされている形式のファイルタイプだけがベクタを QGIS にロードするところで表示されます. その他のあまりテストされていない形式は *.* で選択できます.
GRASS ベクタデータの利用方法はセクション GRASS GIS の統合 に記述されています.
このセクションでは多くの共通形式でどのように作業を行うかが記述されています.共通形式とはESRI Shapefiles,PostGISレイヤとSpatialiteレイヤ,OpenStreetMapベクタ等です. |qg| の多くの機能はベクタデータソースが異なっても同じように動作します.このようにシステムが設計されているので地物情報表示,選択,ラベリングや属性操作等の動作が同じように動きます.
The standard vector file format used in QGIS is the ESRI Shapefile. Support is provided by the OGR Simple Feature Library ( http://www.gdal.org/ogr/ ).
ひとつのshapefileは実際多くのファイルで構成されています.以下の3個が必須のものです:
.shp ファイルは地物のジオメトリを持ちます.
.dbf ファイルはdBase形式で属性を保持します.
.shx はインデックスファイルです.
Shapefilesではさらに .prj という拡張子のファイルが含まれることがあります, このファイルには投影法の情報が保持されています. プロジェクションファイルがあると便利ですが,このファイルは必須のファイルではありません. shapefile データセットは追加のファイルを持つことができます. さらに詳細な情報は ESRI technical specification http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf を参照して下さい.
To load a shapefile, start QGIS and click on the
Add Vector Layer toolbar button or simply type Ctrl+Shift+V.
This will bring up a new window (see figure_vector_1).
Figure Vector 1:
利用可能なオプションから File をチェックして下さい. それから [Browse] ボタンをクリックして下さい . そうすると標準ファイルダイアログ ( figure_vector_2 を参照)が表示されファイルシステム内をナビゲートしてshapefileまたはその他のサポートされているデータソースを開くことができます. Filter
を使うといくつかのOGRでサポートされているファイル形式をプリセレクトできます.
必要ならばshapefileのエンコーディングを指定することができます.
Figure Vector 2:
リストからshapefileを選択して [Open] をクリックすると QGIS に選択したファイルがロードされます.Figure_vector_3 には QGIS に alaska.shp をロードした状態が表示されています.
Figure Vector 3:
ちなみに
レイヤ色
地図にレイヤを追加するとランダムな色が割り当てられます.複数のレイヤを一度に追加することができますが,その場合それぞれのレイヤには異なる色が割り当てられます.
一度ロードしてしまえば地図ナビゲーションツールを使ってshapefileをズームすることができます. レイヤのスタイルを変えたい場合はレイヤ名をダブルクリックするか凡例でマウス右ボタンで表示されるポップアップメニューから プロパティ を選択して表示される レイヤプロパティ ダイアログ を開いて下さい. See Section詳しい情報はベクタレイヤのシンボロジ設定の スタイルメニュー を参照して下さい.
ちなみに
OS Xで外部ドライブからレイヤとプロジェクトをロードする
OS Xでプライマリハードドライブ以外にマウントされるポータブルドライブは File ‣ Open Project に期待されているように表示されません.私たちはOSX-ネイティブopen/saveダイアログを作ることでこの問題を解決しました.ファイル名ボックスで作業するときに ‘/Volumes’ と打ち込んでから return を押してください. そうすると外部ドライブやネットワークマウントの中を見ることができます.
空間インデックスを作ることによってShapefileの描画パフォーマンスを改善することができます.空間インデックスはズームとパンの両方の速度を改善します. |qg|では .qix という拡張子のファイルを空間インデックスとして利用します.
これらの手順でインデックスを作成できます:
shapefile を .prj ファイルつきでロードする場合 QGIS はそのファイルの空間参照システムを読むことはできません, そこでそのレイヤの Layer Properties ダイアログの General タブで [Specify...] ボタンをクリックして投影法を設定する必要があります. これは .prj ファイルはしばしば QGIS で利用され CRS ダイアログでリストされている完全な投影法パラメータを提供していないからです.
この理由により QGIS で新しいshapefileを作成すると2個の異なるプロジェクションファイルが作成されます. ひとつは .prj というファイルでESRIのソフトウェア互換の限られたパラメータで構成されます, そしてもうひとつは .qpj というファイルで利用されているCRSの全てのパラメータを提供しています. QGIS が .qpj ファイルを見つけた場合は .prj ファイルの代わりに利用されます
MapInfo レイヤをロードする場合は, ツールバーボタンの
ベクタレイヤの追加 をクリックするかキーボードで Ctrl+Shift+V とタイプして下さい, ファイルタイプフィルター Filter
: to ‘Mapinfo File [OGR]’ に変更してロードしたい MapInfo レイヤを選択して下さい.
ArcInfo binary coverageをロードする場合, ツールバーボタン
ベクタレイヤの追加 をクリックするかキーボードで Ctrl+Shift+V をタイプして ベクタレイヤの追加 ダイアログを開いて下さい.
Directory を選択して下さい. Filter
を ‘Arc/Info Binary Coverage’ に変えて下さい. カバレッジファイルが存在するディレクトリにナビゲートして選択して下さい.
UK National Transfer Format をUS Census BureauのTIGER形式と同じように直接ベクタファイルで読むことができます.
QGIS ではOpenstreetmapデータのインポート機能をコア機能として統合しています.
OSM サーバに接続してデータをダウンロードするためにはメニューの ベクタ ‣ Openstreetmap ‣ Load data を選択して下さい. もし josm やoverpassや他のソースを使って .osm XMLファイルをすでに取得している場合はこのステップをスキップできます.
メニュー ベクタ‣ Openstreetmap ‣ XML からトポロジーインポート を使うと .osm ファイルを spatialite データベースに変換してdb接続を作成します.
menu ベクタ ‣ Openstreetmap ‣ Spatialiteへのトポロジーエキスポート を利用するとデータベース接続を開くことができます, 必要なデータのタイプ (points, lines, または polygons) を選びインポートするタグを選択して下さい. これによってspatialiteのジオメトリレイヤができツールバーボタンの SpatiaLite レイヤの追加 をクリックするか レイヤ メニューの
SpatiaLite レイヤの追加... を選択するとプロジェクトに追加をすることができます, セクション SpatiaLite レイヤ を参照して下さい.
PostGIS レイヤは PostgreSQL データベースに格納されます. PostGISの利点は空間インデックス,フィルタリングとクエリー機能が提供されていることです. PostGISを使うと選択や地物情報表示等のベクター機能を QGIS のOGRレイヤ,より正確に利用することができます.
PostGIS データソースを最初に使う時に, データを保持しているPostgreSQLデータベースへのコネクションを作成する必要があります. ツールバーボタン
:sup:` PostGIS レイヤの追加` のクリック, レイヤ メニューの
PostGIS レイヤの追加... オプションの選択または Ctrl+Shift+D のタイプで処理を開始できます. また ベクタレイヤの追加 ダイアログを開いて
データベース を選択しても処理を行えます. PostGIS テーブル(s)を追加 ダイアログが表示されます. コネクションマネージャを利用する場合は [新規] ボタンをクリックして 新規 PostGIS 接続を作成 ダイアログを表示して下さい. 接続を作成するためには次のパラメータが必要です:
Name: このコネクションの名前. Database と同じにすることも可能.
Service: hostname/port (それと利用可能データベース)の代わりに利用するサービスパラメータ. これはファイル pg_service.conf にも定義できます
Host: データベースホストの名前. この名前はtelnet接続やホストへのpingを行うときと同じようにシステムから理解される名前でなければいけません. もしデータベースが QGIS と同じコンピュータにある場合は単純に ‘localhost’ とここに記述して下さい.
Port: PostgreSQL データベースサーバが接続待ちをしているポート番号. デフォルトポートは5432 です.
データベース: データベースの名称
SSL モード: SSL接続がどのようにサーバとネゴシエーションするかの指定. 注 PostGIS レイヤレンダリングの速度は接続エディタでSSLを禁止するととても早くなります. 以下のオプションが利用可能です:
disable: 暗号化されていないSSL接続の場合のみ試みる
allow: SSLコネクションの試行に失敗した場合非SSLコネクションの試行をする
prefer (デフォルトです): SSLコネクションを試行します.もし失敗したら非SSLコネクションを試行します;
require: SSLコネクションのみを試行します.
Username: データベースにログインするユーザー名.
Password: データベースに接続するために Username と一緒に利用するパスワード.
オプションで以下のチェックボックスをアクティブにできます:
すべてのパラメータとオプションを設定した後で [接続テスト] ボタンをクリックして接続テストを行うことができます.
1本以上の接続を定義した後はPostgreSQL データベースからレイヤをロードできます. もちろんPostgreSQLにデータが格納されている必要があります. セクション PostgreSQLへのデータインポート を参照するとデータベースへのデータインポート方法について記述されています.
PostGISからレイヤをロードするには、以下のステップを実行します:
ドロップダウンリストから接続を選択して [Connect] をクリックして下さい.
オプションで Search Options 使うとレイヤからどの地物をロードするか定義できます,また [Build query] ボタンを使うと Query builder ダイアログを開始します.
有効なレイヤリストからあなたが利用したいレイヤを探してください.
クリックすると選択できます. Shift キーを押しながらクリックすると複数のレイヤを選択することができます. PostgreSQLクエリビルダを使ってレイヤを高度に利用する方法についてはセクション クエリビルダー を参照して下さい.
**[追加]**ボタンをクリックし、マップにレイヤを追加します。
ちなみに
PostGIS レイヤ
通常の PostGIS レイヤは geometry_columns テーブルのエントリで定義されます. バージョン 0.9.0 から, QGIS では geometry_columns テーブルエントリを持たないレイヤをロードすることができます. この機能はテーブルとビュー両方に適用できます. 空間ビューを定義することによってあなたのデータをパワフルに可視化することができます. ビューの作成については PostgreSQL マニュアルを参照して下さい.
このセクションでは QGIS がどのようにPostgreSQLレイヤにアクセスするかのいくつかの詳細が含まれています. ほとんどの場合 QGIS は単純にロード可能なデータベーステーブルのリストを提供してそれらに対して要求してロードを行います. それにもかかわらず もしPostgreSQL テーブルを QGIS にロード失敗した場合, 以下の情報が QGIS メッセージを理解するための助けになり PostgreSQLテーブルやビューの定義を QGIS にロードできるように変更する方法を見つける手助けになります.
QGIS では PostgreSQL レイヤにレイヤユニークキーとなるカラムを持つことを必須としています. テーブルの場合通常テーブルはプライマリキーが必要であるかユニーク制約を持つカラムがあるといいです. In |qg|ではこのカラムの型は int4タイプ (4バイト整数)である必要があります. 別の方法として ctid カラムをプライマリキーとして使うことができます. もしテーブルがそれらのアイテムを持っていない場合 oid カラムが代わりに利用されるでしょう. カラムにインデックスが作成されているとパフォーマンスが向上します (注 プライマリキーはPostgreSQLでは自動的にインデックスが作成されます).
もしPostgreSQL レイヤがviewの場合同じ制約が必要です, しかしviewsはプライマリキーを持たなかったりユニーク制約のカラムがなかったりします. viewをロードする前に QGIS ダイアログでプライマリキーフィールド ( integerでなければいけません) を定義する必要があります. viewに適切なカラムが無い場合, QGIS ではそのviewをレイヤとしてロードできません. この問題が発生した場合適切なカラムがふくまれるようにviewを作り直すやりかたが解決方法です ( integer 型でプライマリキーであるかユニーク制約があること,インデックスされているとパフォーマンスが向上します).
QGIS では Select at id チェックボックスを提供していてデフォルトではアクティブです. このオプションを使うと属性を使わずにidを取得することができ,多くの場合最も高速です. 複雑なビューを使う場合このオプションを無効にするといい場合があります.
PostgreSQL/PostGISへのデータインポートはSPITプラグインまたはshp2pgsqlやogr2ogrのようなコマンドラインツールのような様々なツールで実行できます.
QGIS では DB Manager という名前のコアプラグインが使えるようになりました. これを使うとshapefileをロードして他のデータ形式やスキーマサポートに利用できます. 詳しい情報はセクション DB マネージャプラグイン を参照して下さい.
PostGISはshapefileをPostGISにインポートする shp2pgsql というユーティリティを持っています. 例えば lakes.shp というshapefileを gis_data というPostgreSQLデータベースにインポートする場合以下のコマンドを使って下さい:
shp2pgsql -s 2964 lakes.shp lakes_new | psql gis_data
ここで gis_data データベースに lakes_new という名前の新しいレイヤが作成されます. 新しいレイヤは2964という空間参照識別子 (SRID) を持ちます. 空間参照システムと投影についてはセクション 投影法の利用方法 を参照して下さい.
ちなみに
PostGISからデータセットをエキスポートする
インポートツール shp2pgsql と同じように PostGIS-データセットをshapefileとしてエキスポートするツールがあります: pgsql2shp. これはあなたのPostGISディストリビューションと一緒に出荷されています.
Beside shp2pgsql and DB Manager there is another tool for feeding geodata in PostGIS: ogr2ogr. This is part of your GDAL installation.
shapefileをPostGISにインポートする手順は以下のとおりです:
ogr2ogr -f "PostgreSQL" PG:"dbname=postgis host=myhost.de user=postgres \
password=topsecret" alaska.shp
これによって shapefile alaska.shp を サーバ myhost.de. の PostGISデータベース postgis にユーザ postgres パスワード topsecret でインポートします.
注 PostGISをサポートする場合はOGRがPostgreSQLを組み込んでビルドされていなければなりません.次のようにタイプすると確認できます
ogrinfo --formats | grep -i post
もしデフォルトの INSERT INTO メソッドの代わりに PostgreSQLの COPY -command を使いたい場合は以下の環境変数をエキスポートすることができます(少なくても と
の場合は可能です):
export PG_USE_COPY=YES
ogr2ogr は shp2pgsl のように空間インデックスを作成しません. 空間インデックスを作るためには特別ステップとして手動で通常のSQLコマンド CREATE INDEX を発行する必要があります (次のセクション パフォーマンスの改善 で説明しています).
PostgreSQLデータベースから地物を取得する場合時間がかかります, とりわけネットワークごしの場合は時間がかかります.PostgreSQLレイヤの描画パフォーマンスを向上させる場合データベースのそれぞれのレイヤに PostGIS 空間インデックス を作成することが確実です. PostGIS は GiST (Generalized Search Tree) インデックス を作成することでデータの空間検索速度を向上させることをサポートしています (GiST インデックスの情報はPostGIS ドキュメンテーション http://postgis.refractions.net から参照することができます).
GISTインデックス作成シンタックスは次のとおりです
CREATE INDEX [indexname] ON [tablename]
USING GIST ( [geometryfield] GIST_GEOMETRY_OPS );
注 巨大テーブルでインデックスを作ると長い時間がかかります.一度インデックスを作成したら VACUUM ANALYZE を実行する必要があります. 詳しくは PostGIS ドキュメンテーション (POSTGIS-PROJECT 文献とWeb参照) を見て下さい.
以下はGISTインデックス作成の例です
[email protected]:~/current$ psql gis_data
Welcome to psql 8.3.0, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
gis_data=# CREATE INDEX sidx_alaska_lakes ON alaska_lakes
gis_data-# USING GIST (the_geom GIST_GEOMETRY_OPS);
CREATE INDEX
gis_data=# VACUUM ANALYZE alaska_lakes;
VACUUM
gis_data=# \q
[email protected]:~/current$
多くのGISパッケージではジオグラフィックリファランスシステム(緯度/経度)で 経度180度をまたぐライン のベクタマップを含んでいません (http://postgis.refractions.net/documentation/manual-1.4/ST_Shift_Longitude.html). ですからそのような地図を QGIS で開くと隣接しなければいけない場所が2個の離れた異なる領域で表示されます. Figure_vector_4 で地図キャンバスの左側の小さい点 (Chatham Islands)はニュージーランドの本島の右側にグリッドにあるべきです.
Figure Vector 4:
この問題の回避方法は経度の値を PostGIS の ST_Shift_Longitude 関数を使って変換することです この関数はジオメトリのそれぞれの地物のコンポーネント中の点/頂点を読んで,それの経度が < 0° の場合 360° を加算します. その結果は 0° - 360° の間になり 180° が中心の地図にプロットできます.
Figure Vector 5:
DBマネージャプラグインを利用したPostGIS (PostgreSQLへのデータインポート) へのデータインポート例.
PostGISコマンドラインインターフェースを利用して以下のコマンドを発行して下さい (これは例で “TABLE” のところはあなたのPostGISテーブルの実際の名前にして下さい)
gis_data=# update TABLE set the_geom=ST_Shift_Longitude(the_geom);
すべてがうまくいけば更新された地物の数についての確認を求められます,それから地図をロードして違いを見ることができるでしょう(Figure_vector_5)
SpatiaLite データベースから最初にデータをロードする場合ツールバーの
SpatiaLite レイヤの追加 ボタンをクリックするか レイヤ メニューの
SpatiaLite レイヤの追加... を選択するか Ctrl+Shift+L をタイプして下さい. これによりウィンドウを開いて QGIS ですでに設定されているSpatiaLite データベースにドロップダウンメニューから選択して接続するか あたらしいデータベース接続定義を作ることができます. 新しい接続定義を作成する場合 [新規] をクリックしてファイルブラウザであなたのSpatialiteデータベースの .sqlite というエクステンションのファイルを指定して下さい.
ベクタレイヤをSpatiaLite形式で保存したい場合凡例でそのレイヤを右クリックして下さい. それから 名前をつけて保存.., を選択して出力ファイル名を指定して下さい, ‘SpatiaLite’ を形式として選択して CRSを指定して下さい. ‘SQLite’ を形式として選択することもできます, その場合 SPATIALITE=YES を OGR データソース作成オプションフィールドに指定して下さい. この指定で OGR に SpatiaLite データベースを作成することを伝えます. http://www.gdal.org/ogr/drv_sqlite.html も参照して下さい.
|qg|はまた、 SpatiaLiteでの編集可能なビューをサポートしています。
新しいSpatiaLiteレイヤを作成したい場合は 新規Spatialiteレイヤの作成. を参照して下さい.
ちなみに
SpatiaLite データ管理プラグイン
SpatiaLiteのデータ管理には多くのPython plugins: QSpatiaLite, SpatiaLite Manager または DB Manager (コアプラグイン, 推奨)を利用できます. これらはプラグインインストーラでダウンロード、インストールできます.
QGIS ではネイティブMS SQL 2008 もサポートしています. 新しいツールバーボタンには
MSSQL 空間レイヤの追加 があり QBrowser ツリーではMS SQLノードが利用でき, ドラッグアンドドロップインポートがサポートされています.
QGIS ではネイティブ ORACLE Locator/Spatial サポートも提供されています. 新しいツールバーボタンには
ORACLE 空間レイヤの追加 があり QBrowser ツリーではORACLEノードが利用でき, ドラッグアンドドロップインポートがサポートされています. ORACLE 空間レイヤはORACLE データベースに格納されます.
ORACLE Spatial データソースを最初に利用する場合, 利用したいデータが含まれているデータベースへのコネクションを作成しなければなりません. ツールバーボタンの
Add ORACLE Spatial Layer をクリックするか Layer メニューの Add ORACLE Spatial Layer... オプションを選択するかキーボードで Ctrl+Shift+O とタイプしてください. コネクションマネージャを利用する場合は [新規] ボタンをクリックして Create a New ORACLE Spatial Connection ダイアログを表示して下さい. コネクション作成には次のパラメータが必要です:
Name: このコネクションの名前. Database と同じにすることも可能.
Database OracleインスタンスのSID または SERVICE_NAME.
Host: データベースホストの名前. この名前はtelnet接続やホストへのpingを行うときと同じようにシステムから理解される名前でなければいけません. もしデータベースが QGIS と同じコンピュータにある場合は単純に ‘localhost’ とここに記述して下さい.
Port: PostgreSQLデータベースサーバがリスンするポート番号.デフォルトポートは1521です.
Username: データベースにログインするユーザー名.
Password: データベースに接続するために Username と一緒に利用するパスワード.
オプションで以下のチェックボックスをアクティブにできます:
Save Password はデータベースパスワードを接続設定に保存するかどうかを示します. パスワードはクリアテキストでシステム設定に格納されプロジェクトファイルに保存されます!
Only look in meta data table は all_sdo_geom_metadata ビューに存在するテーブルのみ表示するように制限を行います. これをチェックすると空間情報テーブルの初期表示を高速化します.
Only look for user’s tables 空間テーブルを検索する場合に指定ユーザが所有するテーブルのみを検索する制約.
Also list tables with no geometry デフォルトでジオメトリを持たないテーブルもリストすることを示します.
Use estimated table statistics for the layer metadata Oracleテーブルのレイヤ設定するときに様々なメタデータが必要です.ここにはテーブルの行数,ジオメトリタイプ,空間の領域等のデータが含まれます .テーブルの行数がとても多い場合このメタデータ作成に時間がかかります. このオプションを有効にすると以下の高速メタデータ操作が実行されます: 行数はall_tables.num_rows から取得されます. テーブルの領域はフィルターが適用されていても常に SDO_TUNE.EXTENTS_OF 関数で取得されます. テーブルのジオメトリは先頭のNULLでない100行のデータで判定されます.
Only existing geometry types 存在しているジオメトリタイプのみリストを行い他の型の追加は行いません.
すべてのパラメータとオプションを設定した後で [接続テスト] ボタンをクリックして接続テストを行うことができます.
1本以上の接続を定義した後はORACLE データベースからレイヤをロードできます. もちろんORACLEにデータが格納されている必要があります.
ORACLE Spatialからレイヤをロードするには、以下のステップを実行してください:
ドロップダウンリストから接続を選択して [Connect] をクリックして下さい.
オプションで Search Options 使うとレイヤからどの地物をロードするか定義できます,また [Build query] ボタンを使うと Query builder ダイアログを開始します.
有効なレイヤリストからあなたが利用したいレイヤを探してください.
クリックすると選択できます. Shift キーを押しながらクリックすると複数のレイヤを選択することができます. ORACLEクエリビルダを使ってレイヤを高度に利用する方法についてはセクション クエリビルダー を参照して下さい.
**[追加]**ボタンをクリックし、マップにレイヤを追加します。
ちなみに
ORACLE Spatial レイヤ
通常 ORACLE Spatial レイヤは USER_SDO_METADATA テーブルのエントリで定義されています.