Adobe Illustratorで自由に書いて,これをGrassで使えたら。さらにGrassのベクトルデータをIllustratorで印刷できたら。これを実現したのがIllustratorのplug-inのPlugX Shape4.0 CS (for Mac)である。これは地理情報開発 https://ssl.chiri.com/plugx_shape.htm によって提供されている。具体例でしめす。
1. インストール
2010.12.11自宅に届く。早速インストールを使用としたがどうにもならない。12.13にChiriに電話してすぐに対応を得た。その結果を次ぎに。
1. インストールCDでIllustrator CS3インストール。plug-inフォルダーに入る。
2. 説明に従って,Illustratorを立ち上げる。その際に,ユーザ,所属,シリアル番号を入れるのであるが,次の作業をしないと,12-6そしてエラーコード12と表示される。
対策:前もって,Macintosh HD/ライブラリ/Application Support/に入って,chiriのフォルダを選んで,command+Iで,adminのアクセス権が読みだけになっているのをロック解除して読み書きができるようにする。
3. これでライセンスコードが表示されるのでメールをすれば1日半ほどでライセンスキーがメールで届く。Illustratorを立ち上げた際に再びライセンスコードを含むページが表示されるのでライセンスコードを入力する。Macの場合,コピペよりも手入力を推奨している。これで,Illustratorのメニュー以外に,このPlugx Shapeのウィンドが表示される。
2. Grassのベクトルデータの出力
国土情報基盤の行政界をGrassで取り込んでいるがそれをshapeファイルで出力する。
2.1 Grassを立ち上げて旧測地系の京都及大阪の範囲の大阪府の行政界を表示(確認のためでこの作業は不要ではある)。
2.2 File/Export vector map/Multiple format using OGRを選ぶと,v.out.ogrのパネルが出現する。
2.3 optionsタブで,Name of input vector map: に既存ベクトルマップを選ぶ。出力ファイルについては,OGR output datasource nameを入れる。例えば,osaka_adminというように。これがフォルダ名になる。inputタブでは,centroid, area, polygon, linなどから一つだけ選ぶ。Creationタブでは,OGR format:の選択窓があり,ESRI_Shapefileを選ぶ。
2.4 結果,ぼくの環境では/Users/moto/の次のサイトにosaka_adminというフォルダが形成され,prjファイルも含めて,Grass内の元ファイル名の4ファイルが作成されている。同じ作業をしていくと自動でフォルダ名に2,3などの数字が付加される。レイヤー番号を変えて,boudary,areaなどを作ることが可能である。
Grassから出力したファイルをPlugX-Shapeが読み込まない。この理由は次ぎに述べる。
3. PlugX-ShapeはUTM距離の座標系の読み込みに対応していない
イラレでは座標系変換前の世界測地系経緯度座標系のベクトルデータは完全に読み込めた。
ogr2ogrで旧測地系UTM距離に変換したものは,grass出力ファイルと同様,読み込めなかった。そこでplugxに質問した。
FAQ見ましたが以下の疑問の回答がなく,ここにお尋ねします。国土情報基盤の行政区画をGrass-GISで使っています。まずはillustratorに取り込む練習をしました。座標情報のテキストが一行現れるだけ(アウトライン表示にしても)。そこで国土交通省からのxmlファイルをKsjToolを使ってshpファイルに変換。それは読み込めました。しかし,ogrを使って旧日本測地系UTM距離に変換したものが,Grassから出力したものと同様,一行の座標関係のテキストが現れるだけです。
そこで以下の疑問を持ってます。シェープファイルの読み込みを選んだ際に表示されるパネルには,平面直角座標系以外は経緯度しか用意されていません。ぼくのイラレに読み込めないシェープファイルはUTMの距離座標です。しかたなく,経緯度を選んでいます。 UTMの距離座標系には対応していないのでしょうか。ご回答お待ちしています。
これに対する解答があって,その通りということ。今後開発する可能性もあるとのこと。
それゆえ,Grassから出力したベクトルデータは,ogr2ogrを使って経緯度の座標系に変換後,PlugX-Shapeを使えばいい。
4. イラレでベクトル図を作成
Grassに取り込みたいデータは,1/3000地形図スキャン画像をベースにイラレIllustratorでトレースしたものである。Grassでの作業のために注意すべきことを次ぎに示す。
1. ポリゴン,ポリラインを別々のレイヤーに作成する。
2. 例えば異なる段丘面は異なるレイヤーに描く。これはGrassでの分析の際に便利である。
3. Grassやgdal/ogrコマンドを使う場合,レイヤー名は2bytes文字を使わない。英数字を使うこと。(今回の場合,次のように変更する。きみどり→yellow_green,灰色→grey,水色→watery,肌色→flesh,みどり→green,断層→fault,岩盤崩壊→collapse)。ArcGISだけを使うのであれば日本語が使える。
5.エクセルで4隅の座標値を整理
イラレデータの下敷きになっている地図画像とベクトルデータを取り込むGrassのLocatiionの座標系によって,座標変換の内容は異なる。ここで述べる
大阪府の1/3000地形図の多くは国土地理院が1961年に撮影した航空写真に基づいている。もちろん旧測地系平面直角座標系である。取り込み予定のGrassのLocationは平面直角座標系ではあるが新測地系であるから,次のサイトを使って,4隅の座標値を世界測地系に変換する必要がある。http://vldb.gsi.go.jp/sokuchi/tky2jgd/
そしてこのエクセルファイル(後にリンクを作成する)のように,それぞれの地図に4隅について,上から左上,右上,左下,右下の順に並べる。というのは,PlugX-Shapeの座標マーカーの作成,を実行する際に作成されるレイヤーと対応関係が取りやすい。=concatenate(northing, &,easting)の関数を使って,PlugX-Shapeの入力文字列を合成すれば,コピペで入力できる。
追加 Jan. 23, 2011: 国土基本図など平面直角座標系の地図の図廓の四隅には(northing, easting)座標値が表示されている。図廓の四隅は直角をなす。それゆえ,PlugXでshape化する場合,当然ながら例えば,北辺,南辺それぞれの端点のnorthing値は一致するし,東辺,西辺それぞれの端点のeasting値は一致する。
しかしながら,前者の緯度,後者の経度は一致しない。これは勘違いしやすい。次の変換結果を見て欲しい。緯度は一致しているが経度が変われば,X座標つまりnorthing値は変わるのである。
それゆえ,PlugXの使用については,UTMマップについては次のようなことが起こりうる。
前述のようにUTMマップについてはPlugXは経緯度しか対応していない。平面直角座標系については(northing, easting)に対応している。日本の地図の投影法は,UTM経緯度がすべてと言って良い。この図を平面直角座標系に変換する場合,注意が必要である。
UTM経緯度の地図を平面直角座標系の座標系に展開したい場合,前もって四隅を平面直角座標系に変換してしまうと,上の出力例のように四隅の座標値が例えば北辺の両端で同じnorthing値を示さない。これをPlugXは受け入れない。それゆえ,目的を遂行するためには,四隅の座標値を経緯度で入力して,座標設定のパネルで,座標マーカーの座標値については経度緯度(BL)のボタンを選んで,ファイルに書き込む座標値については変換するとし,座標値を平面直角座標(XY)のボタンを選んで座標系のゾーン(大阪府の場合VI系)を選んで実行することになる。
茨木市の地質図については旧測地系の経緯度なので,PlugX内で旧測地系の経緯度から,世界測地系の平面直角座標系に変換することになる。
6. PlugX-Shapeで
文字ツールで,northing&eastingのテキストを入力するのであるが,入力値を表示するには,Illustratorで,表示/アウトライン,を選ばなければならない。ただ,そうすると他のレイヤーは見えなくなる。表示/プレビューで,他のレイヤーを見えるようにして,入力済のテキスト枠をドラッグするとその際にテキスト内容をみることができ,テキスト枠左隅の×マークも見ることができる。このマークが図廓の隅に一致するように移動しなければならない。
段丘などは図廓を越えて分布しているので,それぞれの図廓で閉じたポリゴンを作ってもこの座標マーカーの設定で,ポリラインになってしまう。
再度の確認である。Grassで表示した範囲をスクリーンショットして,そのイメージを下図にして作業して,ベクトル出力する場合,4隅の座標点の設定に注意を払う必要がある。下の図で言えば,37.8373126の整数部の3の左下の極小さな×印が設置点である(3の左の大きな×ではない)。内側の灰色の枠線と画面の境界の隅である。Grass上でマウスを移動すると,灰色の枠線の外側まで座標値が増えるが,ピクセルの情報取得をすると,枠線の内側つまり画像内しか情報が無い。つまり,マウスを画像内から徐々に外側に移動して,座標値表示の変化が終了する場所は枠の外側であるが,座標値と画像の対応関係は,灰色の枠線の内側ということである。
7. 書き出し設定
7.1 書き出すフォルダを用意
Grassやgdal/ogrコマンドを使うなら,ファイル名にハイフンは入れないほうがいい。たとえば,K5-8はK5_8にする。IllustratorのPlugXで出力する時に出力用のフォルダ名をK5_8のようにして作成する。
7.2 書き出し時のトラブル
PlugXで,シェープファイル書き出し,を選んでも,座標マーカーの設定が必要です,と出てきて,進めない。この理由は下の図に示したようにマーカーのレイヤーで座標値が正しく入力されなかったためであった。
上のレイヤーに見られるように何度か練習も兼ねながら試行錯誤している間に新たに4点座標マーカーのレイヤーが作成されていた。
ここに表示するレイヤー群の一番上の「左上」は正しい。ところが次の「右上」レイヤーでは座標値がグループの構成物になってしまっている。座標値のサブレイヤーをドラッグアンドドロップで,4点座標マーカー右上のレイヤー直下に移動して,他のグループサブレイヤーは削除すればいい。
座標マーカーの設定が必要です,は他の場合にも表示される。4点座標マーカーを設定する場合は必ず各辺が水平か垂直方向の矩形でなければならない。基図を正確に測るとスキャン地図など必ずしもこの条件を満たさない。その場合は,4隅のうち,比較的正確な3点を選んでアフィン変換を実施することになる。3点座標マーカーを選択,という方法を選べばいい。
7.3 書き出す手順
書き出すレイヤーとして,表示されているレイヤー,を選択する。基図である地図画像はイメージデータであるし不要なので,表示しないようにする。シェープタイプとして一つだけしか選ぶことができないので,表示するレイヤーを選択する必要がある。そのため,段丘などのpolygon,岩盤崩壊や断層などのpolylineなど,概念としてグループ分けをしておく必要がある。 なお,eg. ポリゴンは入れ子になっていたり,交差していては問題が出るので,そうならないように,別レイヤーとすること。
書き出すレイヤーの設定をたとえば段丘についてまとめると,
0.新たに出力用のフォルダを用意する(すでに説明)。
1.変換対象として,表示されているレイヤー,を選ぶ(すでに説明)。
2.レイヤーごとに別のシェープファイルにする,にチェックを入れるかどうか: 別のシェープファイルにすると,レイヤーごとにシェープ関係3ファイルが新たなフォルダ(元のレイヤー名で)内に作成される。Grassへの取り込みの手間を考えると,タイプが同じものは一括した方がいいだろうのではあるが,残念ながら,別のシェープファイルにしないでタイプが同じのものを一括すると,後述するようにレイヤー名の情報が保持されず,異なるレイヤー,ここでは異なる段丘であっても区別できなくなる。
3.シェープタイプでは,Polygonを選ぶ。
4.書き出すオブジェクト,のところでは複数を選択することができる。前述したように段丘は必ずしも一つの図廓で完結しない。また,閉じたつもりが開いているポリゴンが存在する可能性がある。それゆえ,閉じたパス,閉じていないパス,の両方を選ぶ。
5.オプションのベジェ曲線を折線補完する,にチェックを入れる。精度はdefaultの2.5で変えない(出力をみてから判断が変わる可能性がある)
以上を入力して,次へを選ぶと,座標マーカーの座標値,パネルが出る。
1.測地系は世界測地系,座標値は平面直角座標(XY)でこの場合は,(大阪府をカバーする)6系を選ぶ。
2.ファイルに書き込む座標値は,ここでは変換しない。
もともと1/3000地形図は旧測地系であるが4隅の座標値を世界測地系に変えて座標マーカーを入れているので,変換の必要性がない(地球の形は実は異なるが1/3000地形図の一枚の範囲では影響しないと考える。まあ手順が一つ減る点だけを考えているに過ぎない)。
追加 May 4, 2011: 異なる地質や段丘毎に,シェープファイルを作っておけば,それぞれに対して色塗りや線の太さを変えることができる。種々表示したあとで,workspaceを保存(Grass外のファインダ上に保存できる)して,いつでも表示し,また修正することができる。
8. Grassに読み込んでみる
8.1 PlugX-Shapeで
マーカーを表示して,ポリゴンというか塗りのレイヤーを表示する。
書き出すレイヤーパネルで,表示されているレイヤー,シェープタイプはpolygonだけ,書き出すオブジェクトは,閉じたパスだけ。
ベジェ曲線を折線補完する,についてチェックを入れない時は.shpファイルは49kB,入れた時は414kBになる。
座標設定 パネルで,
座標マーカーの座標値は,世界測地系,平面直角座標(XY) 6系,ファイルに書き込む座標値は,変換しない。
ファイル名をpolygon.shpとして,保存先として前もって用意したK5_8フォルダを選んで実行。一瞬で完了。ファインダでK5_8のファイルをみると,polygon.dbf 4kB,polygon.shp 49kB(または414kB),polygon.shx 4kBが作成されている。
8.2 Grassへの取り込み
———————————————— start 追加 Aug. 4, 2017
新たな安定版Grass 7でのベクトルマップの変更, Adobe Cloudによって頻繁にアップデートされる Illustrator CC,といった環境のなかで,PlugX-shapeが一部対応しなくなっている。Grassのguiでは対応できない。コマンドベースであれば問題がない。
取り込むシェープファイルのパスが通らない場合が多く,この場合,ファイル名をコピペして使うことで解決する。ファイル名の入力ミスで作業者の頭にあるファイル名と実際の取り込むファイル名が異なることもある。下にコマンド入力例とその出力例を示す。
GRASS 7.0.5 (Plane6_JGD2000):~ > v.in.ogr -o -e input=/Users/moto/grassdata/FileConvert_folder/Asuka/Asukadera_polygons3/Asukadere_galleria_outer.shp output=Asukadere_galleria_outer min_area=0.0001 type=boundary,centroid snap=1e-10 --overwrite
最優先の投影チェック
Check if OGR layer <Asukadere_galleria_outer> contains polygons... 100%
警告: ベクトルマップ <Asukadere_galleria_outer> は既に存在し上書きされます
Importing 1 features (OGR layer <Asukadere_galleria_outer>)... 100%
-----------------------------------------------------
プリミティブを登録しています...
One primitive registered
5 vertices registered
ノードの数: 1
プリミティブの数: 1
ポイントの数: 0
ラインの数: 0
境界の数: 1
セントロイドの数: 0
領域の数: -
アイルの数: -
-----------------------------------------------------
Cleaning polygons
-----------------------------------------------------
Snapping boundaries (threshold = 1.000e-10)...
Reading features...
Snap vertices Pass 1: select points
100%
Snap vertices Pass 2: assign anchor vertices
100%
Snap vertices Pass 3: snap to assigned points
100%
-----------------------------------------------------
ポリゴンを解消
Breaking polygons (pass 1: select break points)...
100%
Breaking polygons (pass 2: break at selected points)...
100%
-----------------------------------------------------
重複を削除中、、、
100%
-----------------------------------------------------
境界を切断しています、、、
100%
-----------------------------------------------------
重複を削除中、、、
100%
-----------------------------------------------------
ノードの境界をクリーニング中、、、
100%
-----------------------------------------------------
Merging boundaries...
100%
-----------------------------------------------------
Changing boundary dangles to lines...
100%
-----------------------------------------------------
領域を作成しています...
100%
One area built
One isle built
ノードの数: 1
プリミティブの数: 1
ポイントの数: 0
ラインの数: 0
境界の数: 1
セントロイドの数: 0
領域の数: 1
アイルの数: 1
-----------------------------------------------------
Changing boundary bridges to lines...
100%
-----------------------------------------------------
プリミティブを登録しています...
One primitive registered
5 vertices registered
領域を作成しています...
100%
One area built
One isle built
島を接続しています...
100%
ノードの数: 1
プリミティブの数: 1
ポイントの数: 0
ラインの数: 0
境界の数: 1
セントロイドの数: 0
領域の数: 1
アイルの数: 1
-----------------------------------------------------
Finding centroids for OGR layer <Asukadere_galleria_outer>...
-----------------------------------------------------
セントロイドを書き込み中、、、
100%
-----------------------------------------------------
1 入力ポリゴン
トータルエリア: 11468.7 (1 エリア)
-----------------------------------------------------
Copying features...
100%
ベクトルマップ <Asukadere_galleria_outer@Asuka>
にトポロジーを作成しています...
プリミティブを登録しています...
2 primitives registered
6 vertices registered
領域を作成しています...
100%
One area built
One isle built
島を接続しています...
100%
セントロイドを接続しています...
100%
ノードの数: 1
プリミティブの数: 2
ポイントの数: 0
ラインの数: 0
境界の数: 1
セントロイドの数: 1
領域の数: 1
アイルの数: 1
現在のマップセットの領域が更新されました
GRASS 7.0.5 (Plane6_JGD2000):~ >
———————————————— end 追加 Aug. 4, 2017
マック版Grass6.4.0(草アイコン)を立ち上げて,ぼくの場合,LocationPlane6_JGD2000のPERMATENTを開く。そして,File/Import vector map/Multiple Format using OGR。パネルが開く。Requiredタブで,OGR datasource nameとしてplugXで出力したパスのpolygon.shpを選ぶ。Name for output vector mapとしてここではK5_8_polygonとする。Optionsタブでは,List available layers in data source and edit, Override dataset projection (use location's projection, Allow overwriteにチェック。
実行すると,Data source contains 1 layers: polygon,となってエラーが無く,作成されたように見えるが,何も保存されていない。
追加 May 4, 2011: file/import vector map/Multiple formats using OGRで,v.in.ogrのパネルでOptionsを選び,Override dataset projection (use location's projection) と, Allow overwriteを選んでおく必要がある。これで,問題なく実行できる。
追加 Mar. 27, 2013:
x windowsでのcommandベースが確実ではある。
polylineの例:
v.in.ogr -o -e dsn=/Users/moto/grassdata/FileConvert_folder/landclassbyTakehisa/active_fault_broken.shp output=NaraBonchLandcl_active_fault_broken min_area=0.0001 snap=-1 --overwrite
polygonの例: v.in.ogr -o -e dsn=/Users/moto/grassdata/FileConvert_folder/landclassbyTakehisa/raised_fan.shp output=NaraBonchLandcl_raised_fan min_area=0.0001 snap=-1 --overwrite
Windows版Grass6.4.0(草アイコン)で実施しても成功しない。v.in.ogr dsn=\\.psf\.mac\Users\moto\grassdata\FileConvert_folder\K5_8\yellow_green\yellow_green.shp output=polygon
説明内のバグ, <境界>内のオプション 'type' は存在しませんなど,が表示。さらに,ERROR: データセットの投影は現在のロケーションに適合していません,として,Grass側のLocationの座標系情報がでる。
Windows版Grass 6.4.0 with MSYSで実施するのであるが,Import vector data/に次のコマンドがある。これは結果的に言えば成功した。
File/Import vector data/Bulk import of vector dataを実行。
(Sun Dec 19 15:20:29 2010) 次のような作業過程が示される。
v.in.ogr dsn=\\.psf\.mac\Users\moto\grassdata\FileConvert_folder\K5_8\yellow_green layer=yellow_green output=yellow_green -o
説明内のバグ, <ポイント>内のオプション 'type' は存在しません,などが出る。
最優先の投影チェック
レイヤー: yellow_green
マップ 21 フィーチャーをインポートしています...
-----------------------------------------------------
ベクトルマップ <yellow_green> にトポロジーを作成しています...
プリミティブを登録しています... 21 プリミティブは登録されました 1788 頂点は登録されました 領域を作成しています...
作成された領域 21 21 アイルは作成されました 島を接続しています... セントロイドを接続しています... ノードの数: 21 プリミティブの数: 21 ポイントの数: 0 ラインの数: 0 境界の数: 21 セントロイドの数: 0 領域の数: 21 アイルの数: 21 セントロイドのないエリアの数: 21
-----------------------------------------------------
ポリゴンを除いています、結果は保証されていません!
ベクトルマップ <yellow_green> にトポロジーを作成しています...
ノードの数: 21 プリミティブの数: 21 ポイントの数: 0 ラインの数: 0
境界の数: 21
セントロイドの数: 0 領域の数: -
アイルの数: -
------------------------- ポリゴンを崩します: ----------------------------- 複写を除去します:
------------------------- 境界をくずします: -------------------------------- 複写を除去します:
------------------------ノードにある境界を除去します: -------------------- ダングルをラインに変更します:
-------------------------- ブリッジを除去します:----------------------------
ベクトルマップ <yellow_green> にトポロジーを作成しています... 領域を作成しています... 作成された領域 21 21 アイルは作成されました 島を接続しています...
ノードの数: 42 プリミティブの数: 42 ポイントの数: 0
ラインの数: 0
境界の数: 42
セントロイドの数: 0 領域の数: 21 アイルの数: 21
セントロイドのないエリアの数: 21
レイヤー: yellow_green
----------------------------------------------------------------------------------------------------------
ベクトルマップ <yellow_green> にトポロジーを作成しています... プリミティブを登録しています... 42 プリミティブは登録されました 1576 頂点は登録されました
領域を作成しています... 作成された領域 21
21 アイルは作成されました 島を接続しています...
セントロイドを接続しています... ノードの数: 42 プリミティブの数: 42 ポイントの数: 0
ラインの数: 0
境界の数: 21
セントロイドの数: 21
領域の数: 21
アイルの数: 21
-----------------------------------------------------
21 入力ポリゴン トータルエリア: 1.149183e+005 (21 エリア) 重複するエリア: 0.000000e+000 (0 エリア) カテゴリーのない領域: 0.000000e+000 (0 areas)
(Sun Dec 19 15:20:31 2010) Command finished (1 sec)
Grasseでの表示を次ぎに示す。
元のIllustratorの表示は次のようである。
次ぎに参考のため,nvizでの表示を示す。
前述のように,レイヤーごとに別々にせずに一括出力した場合の具体例を次ぎにしめす。
レイヤーを別けずにポリゴンつまり段丘をまとめて出力したのがpolygon_total.shp他3ファイルである。Grass6.4.0 with MSYSで,Bulk import of vector dataを実行。Override projection,Allow output files to overwrite existing filesにチェック。レイヤー列には1にチェックが入っているだけ。
実行過程の最後の部分を次ぎにしめした。
-----------------------------------------------------
ベクトルマップ <polygon_total> にトポロジーを作成しています... プリミティブを登録しています... 303 プリミティブは登録されました 9592 頂点は登録されました 領域を作成しています... 作成された領域 119 75 アイルは作成されました 島を接続しています... セントロイドを接続しています... ノードの数: 259 プリミティブの数: 303 ポイントの数: 0 ラインの数: 0 境界の数: 197 セントロイドの数: 106 領域の数: 119 アイルの数: 75 セントロイドのないエリアの数: 13
-----------------------------------------------------
10 エリアはより多くの (重複している) フィーチャを表します,ポリゴンは入力レイヤーで重複するため. そのようなエリアは属性テーブルにおいて1つ以上の行にリンクされています. それらのエリアのフィーチャの数はセントロイドとしてレイヤー 2 に保存されています
96 入力ポリゴン トータルエリア: 1.362333e+006 (119 エリア) 重複するエリア: 5.151044e-001 (10 エリア) カテゴリーのない領域: 5.146161e-001 (13 areas) (Wed Dec 22 16:16:10 2010) Command finished (1 sec)
さて,このように作成されたベクトルファイルを次ぎに表示する。
Query raster/vector mapsで一つのポリゴンを見ると,次のようである。イラストレータでのレイヤー名が反映されていない。つまり,すべての段丘が融合されてしまった。これでは使えない。このトライで,レイヤーは別々に出力する必要があることがわかった。
(Wed Dec 22 16:30:38 2010)
v.what --q -a map=polygon_total@PERMANENT east_north=-41351.068735,-126542.007791 distance=45.114128
East: -41351.068735 North: -126542.007791 Map: polygon_total Mapset: PERMANENT タイプ: エリア 平方メートル:132097.177 ヘクタール:13.210 エーカー:32.642 平方マイル:0.0510 レイヤー:1 カテゴリー:69 ドライバ:dbf データベース:¥¥.psf¥.mac¥Users¥moto¥grassdata/Plane6_JGD2000/PERMANENT/dbf/ テーブル:polygon_total キー列:cat cat : 69 (Wed Dec 22 16:30:39 2010) Command finished (0 sec)
なお,ベクトルマップについては,.dbfファイルを直接クリックしてNeoOffice (Calc,つまりMicrosoftのexcelに対応する表計算ソフト)で開くことができる。yellow_green.dbfの場合,一行目は,cat,N,11,0だけが入力されている。2行目以降は,1〜21までの数値のみ。このファイルは1列目しか入力されていない。の表にデータを入力することでgrassに反映させることができる。
個々の段丘ポリゴンファイルを取り込んで順次まとめて表示したものを次の図に示す。複数の図廓についてそれぞれの段丘ごとに接合するために,ベクトルマップ名として後ろに図廓名を示す必要がある。段丘の色のセンスはかなり悪いが,完成版では色の調合をしたいと思っている。
8.2'ポリライン入力
書き出すレイヤー(ここでは,city_boudaryとcollapseのみ)は,表示されているレイヤー(レイヤーごとに別のシェープファイルにする),シェープタイプはpolyline,書き出すオブジェクトとしては閉じたパス,閉じていないパス,の両方を選ぶ。オプションとして,ベジェ曲線を折線補完するにチェックを入れて精度はdefaultで。
(Wed Dec 22 22:08:15 2010) レイヤー: collapseK5_8 マップ 134 フィーチャーをインポートしています
----------- ベクトルマップ <collapseK5_8> にトポロジーを作成しています...プリミティブを登録しています...134 プリミティブは登録されました3219 頂点は登録されました領域を作成しています...作成された領域 00 アイルは作成されました島を接続しています...セントロイドを接続しています...ノードの数: 240プリミティブの数: 134ポイントの数: 0ラインの数: 134境界の数: 0セントロイドの数: 0領域の数: 0アイルの数: 0
(Wed Dec 22 22:08:15 2010) Command finished (0 sec)
この図は前掲のpolygon図の上にpolyline図を載せたものである。個々の千分にcatナンバーがついている。東端に近いところに南北に続く黒い線は茨木市と高槻市の境界である。他の赤い線分または曲線は木庭の岩盤崩壊である。
この図で問題なのは左下の60代から84まで付された破線である。この破線は深く切れ込んだ谷線ではなく,写真判読で読み取れる地形境界で岩盤崩壊と考えているものである。原図で破線で示したのでそれを反映している。catナンバーが破線の一つ一つに付いているのは,地形分類の主旨とは大きく外れる。そのため,原図の破線を実線に変更する必要がある。
次の図はIllustratorに戻って破線を1本のベジェ曲線に修正した結果である。図廓K5_8
8.3 隣接図廓を接合して隣接ベクトルの結合
この例の作業では20数枚の図廓を接合して解析を実施する予定である。一気に実施するのがベターではあるが,まずは2枚の図廓の接合を試みる。例えば段丘については面区分ごとに接合する必要がある。4種あるので茨木市及び周辺域を含む全域について4枚のマップを作成することになる。コマンドはr.patchに類するv.patchを利用することになる。ここでは,この節のすぐ上に示すK5_8図廓の西隣のK5_7と接合する。図廓K5_7を次ぎに示す。
8.3.1 v.patch
これまで同様,Windows版Grass 6.4.0 with MSYSで実施すればいいが,MacユーザーとしてはMacを使う方が楽なのでMac版を使用する。(wxGUI.Vector_Digitizing_Toolを使用する可能性があるので,Windows版のGrass old Tcl/Tk GUIで作業を実施したいところだが,vector/overlay map/patchもoverlayもエラーメッセージが出て実行できない) 。
v.patchは次ぎに説明されている。http://grass.fbk.eu/grass62/manuals/html62_user/v.patch.html
v.patch [-ae] input=name[,name,...] output=name [--overwrite]
Flags: -a Append files to existing file
-e
Copy also attribute table. Only the table of layer 1 is currently supported
--overwrite Force overwrite of output files
EXAMPLE v.patch input=geology,streams out=geol_streams
vector/overlay map/patch,を実施。inputするマップはリストから選ぶことができる。カンマも自動で追加される。
v.patch -e input=wateryK5_7@PERMANENT,wateryK5_8@PERMANENT output=wateryK5_78 --overwrite
さて,その結果作成されたwateryK5_78を次ぎに示す。両図でもともと一つのポリゴンであるべきだが図廓が異なるために切断されているポリゴンが東西の中程の北縁に2箇所ある。
図
接合部の重なっている部分の拡大図が次のものである。重なっている。
試しにv.cleanを実施したのが次のものである。
http://grass.fbk.eu/grass62/manuals/html62_user/v.clean.html
v.clean input=wateryK5_78@PERMANENT output=wateryK5_78clean type=boundary,centroid,area tool=break,snap,rmdupl thresh=0.1 --overwrite
図
重なっている部分がいずれも削除されている。これでは駄目だから,v.dissolveを使って見る。
v.dissolve input=wateryK5_78@PERMANENT output=wateryK5_78dis layer=1 --overwrite
これでは,v.patchだけした場合と違いが見られない。この後でv.cleanしたらどうだろうか。
v.clean input=wateryK5_78dis@PERMANENT output=wateryK5_78dis_clean type=boundary,area tool=break,rmdangle,rmdupl --overwrite
v.cleanと同じ。dissolveするとダブっている部分は一つになるから,rmduplしたら隙間ができるのか。
v.patchの直後にv.clean tool=rmdulpしたらどうだろうか。
v.clean input=wateryK5_78@PERMANENT output=wateryK5_78rmdupl type=point,line,boundary,centroid,area tool=break,rmdupl --overwrite
これも変わらない。Windows版のGrass old Tcl/Tk GUIだけで, wxGUI.Vector_Digitizing_Toolでの編集もうなくいかない。
8.3.2 v.overlay
patchは貼り合わせるという意味で,v.patchの入力ファイルの順番に上にペタペタと載って行く。これに対し,overlayはより複雑で,ベン図と同様の論理的重ね合わせである。本来,この隣り合う図廓の場合,重ならない筈であるが,Illustrator上で4隅の位置を決める際に全たきと言えるほど正確でないこともあるが,紙地図のスキャンの際に図廓が正しく長方形ではないことに由来する。
http://www.ing.unitn.it/~grass/docs/tutorial_62_en/htdocs/esercitazione/geoprocessing/node1.html の説明は非常にわかりやすい。これに従えば,次の手順で可能であろう。
Areas union (OR) This example creates a new area by merging the two starting areas (logical OR between the two areas), generating the new test_or map:
> v.overlay ainput=uno atype=area alayer=1 binput=due btype=area blayer=1 output=test_or operator=or olayer=1,0,0 --overwrite
なお,http://grass.fbk.eu/gdp/html_grass64/v.overlay.html に詳細が示されている。
v.overlay [-t] ainput=name [atype=string[,string,...]] [alayer=integer] binput=name [btype=string[,string,...]] [blayer=integer] output=name [operator=string] [olayer=integer[,integer,...]] [--overwrite] [--verbose] [--quiet]
Parameters:
ainput=name
Name of input vector map (A)
atype=string[,string,...]
Feature type (vector map A)
Feature type
Options: line,area
Default: area
alayer=integer
Layer number (vector map A)
A single vector map can be connected to multiple database tables. This number determines which table to use.
Default: 1
binput=name
Name of input vector map (B)
btype=string[,string,...]
Feature type (vector map B)
Feature type
Options: area
Default: area
blayer=integer
Layer number (vector map B)
A single vector map can be connected to multiple database tables. This number determines which table to use.
Default: 1
output=name
Name for output vector map
operator=string
Operator defines features written to output vector map
Feature is written to output if the result of operation 'ainput operator binput' is true. Input feature is considered to be true, if category of given layer is defined.
Options: and,or,not,xor
Default: or
and: also known as 'intersection' in GIS
or: also known as 'union' in GIS (only for atype=area)
not: features from ainput not overlayed by features from binput
xor: features from either ainput or binput but not those from ainput overlayed by binput (only for atype=area)
olayer=integer[,integer,...]
Output layer for new category, ainput and binput
If 0 or not given, the category is not written
Default: 1,0,0
茨木市の例では,
v.overlay ainput=wateryK5_7@PERMANENT atype=area alayer=1 binput=wateryK5_8@PERMANENT btype=area blayer=1 output=wateryK5_78_or operator=or olayer=1,0,0 --overwrite
であるが,パラメータはすべてdefaultである。
Display the result:
> d.erase
> d.vect map=test_or display=shape,cat type=centroid,area color=black lcolor=black fcolor=green cat=1
> d.vect map=test_or display=shape,cat type=centroid,area color=black lcolor=black fcolor=blue cat=2
> d.vect map=test_or display=shape,cat type=centroid,area color=black lcolor=black fcolor=red cat=3
このように,3領域でカテゴリーが異なることに注意。下に図(申し訳ないけど失敬した)を示す。
8.3.3 マージ
Merge areas with the same category (dissolving)
Dissolving consists in merging the areas having the same category and a common boundary into one entity, deleting the boundaries. In GRASS it possible to merge adjacent vector features into a new one in two different ways:
by using the category value and assigning to all the areas satisfying a given condition (selected through a SQL query on the table) the same category: in this way all the areas in the output map have the same category and it is therefore possible to apply the dissolving. Maps created in this way do not inherit the table of the input map but it is possible to rebuild it.
by using an existing column of the attribute table (or creating a new one). In this case maps does not inherit the table of the input map and it is usually not possible to rebuilt it.
ここでは,後者を使用
Elements (areas) with the same category are merged according to a value taken from the attribute table. The column of the attribute table must contain the same value for the areas to be merged. The following command adds a new column of type integer named merge to the table of the map test_or:
> v.db.addcol map=test_or layer=1 'columns=merge INT'
この使い方は,http://grass.fbk.eu/gdp/html_grass64/v.db.addcol.html
The value 3 is added to all the elements in the newly created column:
> v.db.update map=test_or layer=1 column=merge value=3
この使い方は,http://grass.fbk.eu/gdp/html_grass64/v.db.update.html
A new map with is created with the v.dissolve module: boundaries are deleted where the merge column has the same values.
> v.dissolve input=test_or output=test_dissolv2 column=merge --overwrite
Display the result:
> d.erase
> d.vect map=test_dissolv2 display=shape,cat type=centroid,area fcolor=red
このようになる。
8.3.4 茨木市の場合
1. v.overlay
Vecter/Overlay maps/OverlayでOverlays two vector mapsパネルを開く。 v.overlay ainput=wateryK5_7@PERMANENT atype=area alayer=1 binput=wateryK5_8@PERMANENT btype=area blayer=1 output=wateryK5_78_or operator=or olayer=1,0,0 --overwrite できた図はv.patchと結果的には同じに見える。
2. v.dissolve
Vector/Develop map/Dissolve boundariesで, v.dissolve input=wateryK5_78_or@PERMANENT output=wateryK5_78_dissolv column=merge --overwrite を実行。境界部の継ぎ目に変化がない。上記のようなデータベースの変更が必要なのか。
9. v.digitで修正
Mac版ではターミナルでv.digitを入力すると,guiで快適に使える。Windows版では,Windows版Grass 6.4.0 with MSYSで,v.digitとこれに続く情報を入力すれば,やはりguiが使える。
なお,wxGUI.Vector_Digitizing_Toolの使い方は,http://grass.osgeo.org/gdp/html_grass64/wxGUI.Vector_Digitizing_Tool.htmlにある。Parallels Desktopではそういったオプションは見られないので,使用するには3ボタンのマウスが必須となる。
v.overlayとv.patchの概念的な違いはあるが,今回のように20数枚の図廓を接合するには多数の図廓をまとめて接合できるv.patchが圧倒的に使い易い。隣接図廓の実は連続するポリラインとかポリゴンを一つにする作業は一つまたは数回のコマンド作業で一律に実施することはできない。隣接図廓に隙間ができる可能性もある。 v.digitの使い方は,http://www2.ipcku.kansai-u.ac.jp/~moto/GISContents/10.htm (おサルのGIS GRASS ☆ はじめに)の,IV v.digit操作,に示している。その結果得られた図が下記のものである。
10. contoursとポリゴン・ポリラインの分布の対応関係
次の図を見て頂きたい。
ここには,茨木市域のK5-8, -7という2枚の図廓の水色の段丘(最終氷期段丘)と木庭の岩盤崩壊を示す。この等高線は国土地理院10mメッシュからr.contourで作成したものである(5m間隔)。前述のように大阪府の1/3000地形図に描いたもの(ベクトル)をGrassに取り込んでいる。等高線と岩盤崩壊の谷筋との不一致の場所が結構見られて,等高線を生成した10mメッシュdemがずれているか,イラストレータから取り込むプロセスに問題があるか,と考えた。上の図の詳細を観察して,問題がないことがわかった。判読に使用した空中写真のほとんどは1961年撮影(一部北縁が1963年)で,判読結果を描いた地図はこの写真から作成された1/3000の地図であり,10mメッシュは2000年前後の地形を反映している。この間,かなりの地形改変があった。
コンターとポリゴンやポリラインがずれていないことが明らかになったのであるが,ずれる原因として,次のようなことを考えた。言い換えると,次のような問題はないとほぼ言えるだろう。
1. イラレのベクトルデータをplugx-shapeでshapeファイルに出力したのであるが座標値入力にミスがあった(測地系変換のミス,4隅の位置決めのミスなど)。
2. plugx-shapeが不適切な挙動をする。
3. 1/3000地形図は旧測地系平面直角座標系である。Grassの平面直角座標系は世界測地系である。本来両者の地球モデルは違うので,本来は,旧測地系の4隅の値をそのままに,ogr2ogrで世界測地系に変換する必要がある。それをせずに イラストレータの段階で1/3000地形図の4隅を世界測地系に変換した後,shapeファイルとして出力し,Grassに取り込んだ。地球モデルの違いがズレを生み出す。
なお,contour表示の際に,shapeとzcoor(垂直座標値)を選ぶ。ただzcoorを選ぶと,大量の数値が出現するので拡大表示をする必要がある。
11. Grass上でのテキスト表示
Illustratorでテキストを入力する。好きなフォントを使う。たとえば,Aerial Blackなどや明朝などである。その後,書式/アウトラインを作成,を実行。PlugX-Shape 4.0を開く。書き出すオブジェクトの設定,で,現在のレイヤー(設定の状況によるが),シェープファイルは,polyline,書き出すオブジェクトは,閉じたパスと閉じていないパスを選ぶ。そして座標設定を決定して出力する。
Grassへの取り込みは,Windows版のwxPython 6.4.0でFile/Import vector data/Bulk import of vector data,で実行。見事に表示される。中抜きになっているが表示上,全く問題がない。線幅は1が美しい。Fillは選択しない。表示されたものをtiff出力したものを次ぎに示す。jpg出力で300dpiなどにしても粗く出力することがあるので注意。次の図は,tiff出力したものをwebのためにjpegで粗く出力したものである。
12. 追加: PlugX-Shapeによるshape3ファイルの読み込み
簡潔。茨木市考古学関係ファイルのうち, CK_HOUZON_PT(市の天然記念物のクスや墓碑やメダルなど)とCK_HOUZON_PL(遺跡)とCK_HOUZON_LN(三島街道と西国街道)を受け取る。 当方に意味があるのは,CK_HOUZON_PL(遺跡,polygon)のみ。.shp, .shx, .dbfの3ファイルのうち,.dbfをexcel2004で2 bytes文字を1 byteに変更。 測地系の報告はないが,世界測地系平面直角座標系である。 茨木市から得たshapeファイルをPlugXを通じてイラレに取り込んで,東奈良,玉櫛,西福井遺跡のみを残して保存し,これをGrassに取り込んだ。まず,イラレへの取り込みにあたっては,矩形域の詳細な座標情報が表示される。元図が1/3000地形図であることも明らかになった。 レイヤーを作成して遺跡名称(前述のようにpolyline)を入力し(72ポイントの最大で表示しアウトライン化してオブジェクトの拡大で300%にした),他のレイヤーをロックして,アウトライン化した。
次の図は,shapeファイルのイラレへの取り込みの際に表示されたパネル。
次の図は,イラレに取り込んだところ。
13. GoogleEarth画像で位置決めした測点群をイラレ上でプロットして位置(地点名)をGrassに取り込み測点群の座標値を求める手順
GoogleEarthの画像は解像度も高く手軽に利用できる。ただ,この座標系はSRTM (Shuttle Radar Topography Mission) で取得された情報から作成されたDEMが使用されており,平面位置の歪みがかなりあり,この限界を知る必要がある。
13.1 Google Earthの画像をイラレに取り込んで,イラレ上で,何らかの計測地点の位置をプロットするのであるが,測点名をテキストで入力して,テキストボックスの左下隅にある原点を測点に置く作業を実施して,PlugX-shapeで座標マーカー3点を設定する。測点とその名称を同時に入力できるので,重宝する。
4点マーカー法を選ぶには,座標値に合った縦横線が等間隔の直線の必要なのだが,Google Earthではこれが成立しないので,3点マーカー法を使用するのである。3点マーカー法では,アフィン変換してくれる。下の図は,イラレでアウトライン表示したもののスクリーンショットである。
3点マーカーの位置は,イラレ上でGE画像を表示して,3点マーカーの位置を小円オブジェクトなどで前もって描く。 PlugX-shapeは何故かUTM座標系に対応していない。経緯度座標系と平面直角座標系のみに対応している。それゆえ,GoogleEarthでの座標値の読み取りは経緯度座標系表示(環境設定で変更可能)環境下で実施することになる。 この例では,北西隅 (37.767868 E, 140.393936 N), 南東隅 (37.767149 E, 140.394709 N) 南西隅(37.767145 E, 140.393949 N)をGE上で読み込んで,コピペ用テキストデータ(3レイヤーに1マーク宛) を次の様に,作成する。
Northing-Eastingの配列で,北西隅 37.767868&140.393936 南東隅 37.767149&140.394709 南西隅 37.767145&140.393949,であり,上の図では入力されている。
13.2 PlugX-shapeで出力した際の設定を次の図に示している。
測定地点の位置がシンボル,テキストはテキストに対応している。シェープタイプはPointである。
13.3 PlugX-shapeで出力したシェープファイルは,経緯度座標系(EPSG:4612)からUTM54座標系(EPSG:3100)に変換する必要がある。ここでは,次のコマンドで実行可能。半角スペースが2連続したり,不要なスペースがあると実行できないので注意が必要である。下のスクリプトは表示のために,改行を入れている。
>ogr2ogr -t_srs EPSG:3100 /Users/moto/grassdata/FileConvert_folder/Fukushima_Kajuen_Cs/Machiniwasaka
/Machiniwasaka_Kanno_Saito_2014meas.shp
-s_srs EPSG:4612 /Users/moto/grassdata/FileConvert_folder/Fukushima_Kajuen_Cs
/Machiniwasaka/Machiniwasaka_Kanno_Saito.shp
13.4 Grassに取り込んで表示
上の図はGrass 6.4 gis.mの表示のためのオプションの設定である。表示された測定点とその名称の分布は,建物表示よりも多少北にシフトしていた。この理由を基盤地図情報25000が粗いのではないかと,福島市,伊達市,桑折町の基盤地図情報2500ファイルをまとめてダウンロードして(☆ 基盤地図情報2500 25000(含5000土地利用)のGrass(平面直角座標系 UTM座標系)への取り込み,に示したように建物と道路のシェープ出力に手間取ったが),25000と2500の道路と建物を同時に表示下のが次の図である。
上の図で灰色の矩形領域群は,25000の建物であり,茶色線の多角形は2500の建物である。薄い灰色線は25000の道路縁,紫色線は2500の道路縁である。測点と道路や建物の関係は現地の認識と全く一致している。
13.5 GEでの測点決めとUTM座標系での表示にずれがあった。上の図の中央部付近には2m間隔の等高線がみえる。測点群の西部は多少谷筋にある。測点は西から東へ南北の列を配置している。西から第5列の部分で顕著であるが,13.1に示した第5列の測点 5r〜5cはほぼ直線上に並んでいるが,第5列の北半分についてみると,13.4の図に見られるように等高線の弯曲に応じて,弯曲している。DEMの影響を受けているのである。
GoogleEarthの画像で現地調査の記憶から直線的に測点を並べたことが禍したのである。果樹園の果樹の幹はほぼ直線上に並んでいるが,画像では幹は見えず,上方からの樹冠形や樹形から樹幹位置を推測した結果がここに出てしまったのである。
14. イラレにUTM座標系表示画像を取り込んでポリゴン(ベクトル)を作成しUTM座標系に新たに取り込むプロセス
14.0 GrassのMap Displayに表示されている画像をtiff出力
GrassのMap Displayに表示されている画像は,tiffで出力した画像と異なる。 出力画像を下地にイラレで作業をしてGrassにベクトルファイルを戻すためには,この出力したtiff画像の四隅の座標値が必要となる。tiff画像とMap Displayの画像の右上隅と左下隅の表示の違いを次の画像2枚に示している。
左図は全体図の左下のもので,このうち,奥の図(左手)は,GrassのMap Displayに表示されているもので,手前の図(右手)は出力されたtiff画像。
右図は全体図の右上のもので,このうち,奥の図(左手)は,GrassのMap Displayに表示されているもので,手前の図(右手)は出力されたtiff画像。
これを見るとわかるように,tiff画像がMap Display画像に比べて一回り大きくなっている。 Map Displayでポインタを選んで,表示画像の四辺の周辺で動かすと,画像外の少し出た所で座標の表示数値の増加が止まる。この数値が要するに,tiff画像の座標値にあたる。ポインタの矢印の先の動きと画像欄外右下に表示される座標値をみると,MapDisplayの画像表示枠の周辺に幅狭い縁取りがあるが,この外寄り側にポインタの矢印の先が届いてから後,つまり,より外へポインタが動いても数値は変化しなくなる。南,北,西の縁辺については,このことが言える。
東だけは様子が違って,ここの例では,縁取り部分でも内寄り側だと-35321.163であるが,外よりおよび縁取りを超えると-35314.321になる(この場合,原点はこの場所よりも東方にある)。この現象はtiffの出力画像にも現れていて,東縁だけがraster表示よりもベクトル表示がはみ出している(上の右図の東縁でも見ることができる)。 それゆえ,東辺についてはGrassで使うにはいずれを使うかでどちらの数値を採用するか選択すべきである。
14.1 イラレで土地利用図などのポリゴン作成
ペンツールでベジェ曲線を使わずにクリッククリックで線分のみでポリゴンclosed polygonを作成する。
イラレで土地利用図などのポリゴンを多数作った場合,ポリゴンがclosedになっていない場合があったり,余計なポイントがあると,Grassの取り込みに多くの問題が生じる。
イラレのウィンドウ/ドキュメント情報を開いて,オブジェクトを全部選ぶと,openとclosedの確認ができる。open polygonsがある場合,特定するために,別レイヤーに全オブジェクトを前面または背面コピーして,このレイヤー上で,作業をする。つまり,適当に矩形領域を選んで,ドキュメント情報をみて,openedが無ければ,選んだ矩形領域のポリゴンを削除し,次にまた別の矩形領域を選ぶ。といったようにして,open polygonを含む矩形領域がある場合,削除せず,ポリゴンの線を赤色などにして,この矩形領域の中で,より細かく矩形領域を設定し,open polygonがなければ削除してゆき,open polygonを特定する。
ここでの例では
パス:157
closed polygon:157
ポイント:1607
である。この幾何学的情報がGrass-GISのプロセスでどのように変わるだろうか。これを見たのがこの節である。
14.2 イラレプラグインPlugX-shapeでシェープ出力,特にUTM座標系の限界
PlugX-Shapeは平面直角座標系と経緯度座標系にのみ対応している。UTM座標系に対応していない。GrassのUTM座標系のLocationで作成した表示のスクリーンショットを基図としてイラレでポリゴンなどを作成した場合,同じLocationに戻す場合,幾つかの問題が生じる。
まず,左上,左下,右上,右下の計4隅の座標値は上述の2座標系にしか対応していないので,UTM座標系を経緯度座標系に変換する必要がある。この方法は,地理情報システム/GISの周辺/座標系と変換情報/,に示している。ただ変換すると4隅の東西南北の各辺の座標値が一致しなくなる。一致しないとPlugX-Shapeによる4隅の座標マーカーを使ったシェープ出力ができない。ここでの例ではmm単位までは揃うがより小さな位では揃わない。それゆえ,例えば北辺については左上と右上の緯度は,両値の平均値を採用することになる。
次に,経緯度で出力したシェープ関連ファイル(3ファイル)をGrassに取り込むことになるが,このままでは,UTM座標系のLocationに取り込めない。
経緯度のLocationを持たない場合,前もって作成する必要がある。日本列島経緯度全域は,epsg:4612である。この作成方は地理情報システム/おサルのGIS/はじめに/GrassのLocation作成,に示している。
MacのtcltkGrassではgis.mに問題があり,X-Windowでコマンド入力する。
v.in.ogr -o -e dsn=/Users/moto/grassdata/FileConvert_folder/Koori_orchards/Koori_orchards3.shp output=Koori_orchards min_area=0.0001 snap=-1 --overwrite
取り込んだベクトルファイルの情報を,Vector/Reports and Statistics,で見ると,この例では,
Number of areas:201
Number of islands:107
Number of boundaries:296
Number of centroids:179
となっている。
イラレでポリゴン数が157であったのが,セントロイド数が179と増えている。
なお,Vector/Change Attributes/で実行してもこの問題は解決しなかった。Vector/Change Attributes/,で,新たなファイル名をKoori_orchards_categoryとして,Selectionタブでfeature typeのcentroidだけを選択して,実行した。そのコマンドはつぎのようである。
v.category input=Koori_orchards@PERMANENT output=Koori_orchards_category option=add type=centroid layer=1 cat=1 step=1
Vector/Change Attributes/,を実行してもしなくても,Show attribute dataを見ると,157となっている。この時点では,catが付されているポリゴンの統計処理については,問題は無いのかと思われる。
14.3 経緯度座標系からMacファインダのパスへ出力,そして経緯度からUTMへの座標系変換とUTM座標系への取り込み
経緯度座標系Locationに入力したベクトルファイルを,いったん,Macファインダ(Windowsの場合ブラウザ)で見えるパスに出力する必要がある。あらかじめリージョンを出力したいデータ全体が入るように設定する。gis.mでの利用が可能で,
File/Export vector map/Multiple formats using OGR/
を選ぶ。コマンドでの実施は次のようである。
v.out.ogr input=Koori_orchards@PERMANENT type=auto dsn=/Users/moto/grassdata/FileConvert_folder/Koori_orchards/Koori_orchards3 layer=1 format=ESRI_Shapefile
ここで,type=auto,の設定が重要である。boundaryとかarea,centroidなど複数の種類にチェックを入れると多数のエラーメッセージが出る。
そして,X-Windowで,UTMから経緯度への座標系変換。
ogr2ogr -t_srs EPSG:3100 /Users/moto/grassdata/FileConvert_folder/Koori_orchards_UTM/Koori_orchards2.shp -s_srs EPSG:4612 /Users/moto/grassdata/FileConvert_folder/Koori_orchards_BL/Koori_orchards.shp
そして,UTMゾーン54NのLocationのX-Windowによる取り込み。
v.in.ogr -o -e dsn=/Users/moto/grassdata/FileConvert_folder/Koori_orchards_UTM/Koori_orchards2.shp output=Koori_orchards min_area=0.0001 snap=-1 --overwrite
この際のメッセージで,気になる幾つか。
Counting polygons for 254 features...
Importing map 254 features...100%
ポリゴンの再作成が実施される。最終的には,
Number of nodes: 403
Number of primitives: 497
Number of boundaries: 296
Number of centroids: 201
Number of areas: 201
Number of isles: 107
となっている。
この情報は,Vector/Reports and Statistics/Basic Inoformationでも同じ。
レイヤーにベクトルマップを選んで,Show attribute columnsをみると,次のように,INTEGER|cat_,が追加されている。
v.info -c map=Koori_orchards@PERMANENT layer=1
Displaying column types/names for database connection of layer 1:
INTEGER|cat
INTEGER|cat_
Show attribute dataを見ると,
cat|cat_
1|
2|22
3|23
4|
5|23
6|33
7|34
(中略)
245|154
246|156
247|157
248|
249|157
250|104
251|105
252|110
253|47
254|92
のように,既存のポリゴンは右列に,新たなポリゴンは左列に示されている。既存のポリゴンが分割されて,空白を含めて,既存の157個から新たな254個になっている。
そこで,gis.mのOptionsタブで,Do not clean polygons (not recommended),Extend region extents based on new dataset, Allow overwriteにチェックを入れた。Do not clean polygons(-c) が重要。強制終了。
v.in.ogr -c -o -e dsn=/Users/moto/grassdata/FileConvert_folder/Koori_orchards_UTM/Koori_orchards2.shp output=Koori_orchards_nonbroken min_area=0.0001 snap=-1 --overwrite
表示内容は次のようで,
Over-riding projection check
Layer: Koori_orchards2
Importing map 254 features...
取り込むファイルにすでに254 featuresがある。経緯度座標系からファインダのパスに出力される際にすでに作成されていることになる。-cオプションをつけても全く改善されなかった。
14.4 経緯度座標系からの出力のやりなおし
-cオプションを実行するとイラレで作成したポリゴンが壊れずに維持されるのではと考えて,実行したのがこの項である。
Inputタブで,boundary,centroid, areaをチェック。
v.out.ogr input=Koori_orchards_category@PERMANENT type=auto dsn=/Users/moto/grassdata/FileConvert_folder/Koori_orchards/Koori_orchards5 layer=1 format=ESRI_Shapefile
ERROR 1: Attempt to write non-linestring (POINT) geometry to ARC type shapefile.
(上のエラーメッセージが沢山)
The map contains islands. To preserve them in the output map, use the -c flag
No points found, but requested to be exported. Will skip this geometry type.
Inputタブで,centroid, areaをチェック。強制終了。
Inputタブで,centroid, をチェック。強制終了。
The map contains islands. To preserve them in the output map, use the -c flag.
296 boundaries found, but not requested to be exported.
201 areas found, but not requested to be exported.
No points found, but requested to be exported.
結局,islandsが問題のようだ。
そこで,-c オプションを実行
v.out.ogr -c input=Koori_orchards@PERMANENT type=auto dsn=/Users/moto/grassdata/FileConvert_folder/Koori_orchards/Koori_orchards_BL2 layer=1 format=ESRI_Shapefile
この記録を次に。
GRASS 6.4.2 (LatLon_JGD2000):~ > v.out.ogr -c input=Koori_orchards@PERMANENT type=auto dsn=/Users/moto/grassdata/FileConvert_folder/Koori_orchards/Koori_orchards7 layer=1 format=ESRI_Shapefile
WARNING: Skipping all boundaries that are not part of an area.
Exporting 201 areas (may take some time)...
100%
WARNING: 22 features found without category were skipped
v.out.ogr complete. 201 features written to <Koori_orchards>
(ESRI_Shapefile).
GRASS 6.4.2 (LatLon_JGD2000):~ >
一応,座標変換,取り込みを実行してみよう。
ogr2ogr -t_srs EPSG:3100 /Users/moto/grassdata/FileConvert_folder/Koori_orchards_UTM/Koori_orchards9.shp -s_srs EPSG:4612 /Users/moto/grassdata/FileConvert_folder/Koori_orchards_BL2/Koori_orchards.shp
座標変換完了。エラーメッセージなど,無し。
また,UTM座標系に取り込み。
gis.mのOptionsタブで,-cなどを選択。
出力された図をみると,結局,-cオプションを選ぶことが適当ではないことがわかった。-cを選ぶと,area数は減少するが,もともとのイラレで作成したポリゴンが失われる。イラレで作成したポリゴンは再構成されてしまうが,-cオプションは無い方がいい。イラレで作成したポリゴンの面積分布の分析などは,出来ない。ポリゴンが近接する場合,Grassでの再構成の際に,別のものにならないように,nodeを増やす必要があるのだろうと思う。確かめたいと思っている。
まずはイラレのポリゴン表示を次に:
-cオプションなし。これがベター。
次は-cオプション。これは駄目。
14.6 イラレで作成したポリゴン表示のずれ
イラレから取り込んだポリゴンが全体的に南西方向へ10m余りずれていた。この理由を当初,PlugX-Shapeの経緯度対応に係わる問題とも考えた。一応と学生が入力した4隅の経緯度値を調べたら入力ミスがあった。特に西方向は18mものズレであった。そこで,所定の過程を実行して適切な表示が見られた。
次の図はその一部である。黒色の線が誤って取り込んだベクトル,紫色の線が正しいベクトル。
次の図も正しい図の一部である。赤丸は線量計測地点を示す。これはGEの画像から経緯度を読み取ってUTM座標系に変換してUTM54帯Locationに取り込んだもので,基盤地図情報との対応関係がいい。
14.7 イラレで作成したポリゴンのUTM座標系までの取り込みのX-Windowを使った取り込みの一連のコマンド入力系列(まとめ)
1. イラレから取り込んだポリゴン
LatLon_JGD2000のX-Windowで,
v.in.ogr -o -e dsn=/Users/moto/grassdata/FileConvert_folder/Koori_PlugX_Shape/Koori_Low_FloodPlain2.shp output=Koori_Low_FloodPlain2 min_area=0.0001 snap=-1 --overwrite
2. 経緯度座標系LocationでMacファインダに出力
v.out.ogr input=Koori_artifit2@PERMANENT type=auto dsn=/Users/moto/grassdata/FileConvert_folder/Koori_BL/Koori_artifit2 layer=1 format=ESRI_Shapefile
この作業の際,個々の出力ファイルは一つのフォルダにまとめられる。
3. X-Windowで,UTMから経緯度への座標系変換
なお,問題なければ特にメッセージはない。
ogr2ogr -t_srs EPSG:3100 /Users/moto/grassdata/FileConvert_folder/Koori_UTM/Koori_Low_FloodPlain2.shp -s_srs EPSG:4612 /Users/moto/grassdata/FileConvert_folder/Koori_BL/Koori_Low_FloodPlain2/Koori_Low_FloodPlain2.shp
4. UTMゾーン54NのLocationのX-Windowによる取り込み。
これを実行する前に必ず,UTMゾーン54NのLocationを開いておかなければならない。
3の段階で,
UTMゾーン54NのLocationを開いて座標変換をした方が誤らないだろう。
v.in.ogr -o -e dsn=/Users/moto/grassdata/FileConvert_folder/Koori_UTM/Koori_Low_FloodPlain2.shp output=Koori_Low_FloodPlain2 min_area=0.0001 snap=-1 --overwrite
15. イラレでの地形分類図などの製図
15.1 ドロー過程
ペンツール(4種のうちの左端の主要ツール)を使ってトレースをする。 この作業中,ドキュメント情報,のウィンドウを開いておくと,openとclosedの区別を見ることができる。
クリック,クリックで直線で繋いでゆくこともできるが,なだらかな曲線はベジェ曲線の方が美しく,むしろ早い。ベジェ曲線はシェープ出力用のプラグインPlugX-Shapeでは分割して出力される。ベジェ曲線を使ったあとは,線分などを入力することが多く,ベジェ曲線の端点のアンカーポイントにポインターを載せると,切り替えツールのvを120度ほど時計回りに回転した記号が現れる。この時にクリックすると実行されて,次の入力が直前のベジェ曲線の影響を受けない。入力作業に失敗した場合,その都度,コマンドキー(Windowsはコントロールキー)+Zで戻ることができる。
一つのポリゴン作成中に別の作業をしても,また継続できる。作成中のオブジェクトをクリックして(選んで),先ほど入力中の最後のアンカーポイントにポインターを載せると,\(バックスラッシュ)マークが表示されるので,この最後のアンカーポイントをクリックして,その後,新たな場所にクリックしてゆくことができる。
15.2 レイヤーに種ごとに
地形分類図では氾濫原,低位段丘,人口平坦面(盛り土面や均し面)など,植生図は群落毎など,幾つかの種類kindsに分けることができる。異なる種類のポリゴンは隣接する場合が普通である。Grassで取り込んだ際に違いに干渉する。そこで,種類毎にレイヤーを分けるとそれを防ぐ効果もある。ただ,Grass上で表示するのに,種類毎に異なるベクトル群になっている必要があり,レイヤー別にすることは必須のことである。
15.3 パスファインダーを使って
次のサイトにパスファインダの種々の使用法が易しく示されている。
Illustrator実践講座 -パスとオブジェクト19(編集-11)
http://illustrator-ok.com/illustrator_koza/path/contents/path19.html
(a) オープンパスをクローズドパスに
オープンパスのそれぞれのアンカーがピッタリと重なった状態で図形が見えるなら、
全体を選択ツールで選択>パスファインダパレット内の下段左端の「分割」をクリック(場合によっては,>オブジェクト>グループ解除>一番外側の四角を選択して削除)すると,実行される。
(b) 複合パスを使って刳り貫き(穴開け)
http://helpx.adobe.com/jp/illustrator/kb/5736.html
ただ,イラレでの結果は,Grassでは反映されない。
(c) 地形分類図でのパスファインダの使い方の確認
この方法以外では地形分類図などをポリゴン化できない。ポリゴンが接する部分を個別にトレースするとどうしても,外側に食み出したり,より内側に寄ってしまう。
1. ペンツールで要するにポリゴンを作って何らかの色塗りをする。
2. 線だけを表示するようにして,ポリゴンの範囲をちょっと超えるようにして,いわばポリゴンを分割してゆく。
3. 全体を選んで,パスファインダの6種のアイコンのうちの左端の,分割,を選ぶ。
4.グループ解除
これで,元のポリゴンが分割された領域はすべて独立して,新たなポリゴンになる。
基本的には使用環境は変わらない。PlugX-shape 4.0の限界を一部超えた部分がある。マニュアルを次にリンクする。PlugX-Shape 4.5 ユーザーズガイド.pdf
pp. 10-11に座標マーカーの説明, pp. 17-21に,シェープファイルの書き出し,の説明あり。
開発した地理情報開発のサイトを次に http://www.chiri.com/plugx_shape.htm
以 上