Subject: [ts-mag:00077] OpenGIS Mail Magazine for T.S.U 【第 71号】 Date: Fri, 25 Oct 2002 20:36:53 +0900 From: Taichi FURUHASHI OpenGIS Mail Magazine for Technical Support Users 2002/10/25 Keywords: OpenGIS,TNTmips,Line,Attribute,Island,Head,IMG,1bit-4bit オープンGIS テクニカル・サポート専用メールマガジン 第71号「 等 値 線 か ら 段 彩 図 を つ く る に は . . . 」 ################################################################# 株式会社 オープンGIS 等高線や、天気図など、 なにか面的に分布している値を表現する際には、 線を描くことがありますね。 同じ値同士を線でつないでいくことで等値線が引けるわけですが、 例えばこの線が触れるか触れないかギリギリの密度で、ぎっしり集中して いる場所は、傾斜が急であるとか、何重にも取り囲まれたドーナッツ状の 低気圧をみるとこれは台風だな!などなど、線の形状と分布からいろいろ な情報を読み取ることができます。 しかし、その線の値は? というと、意外に読み取りにくいものです。 線の横に数値を併記するとか、値を線の色に置き換えて表現するのが一般 的ですが、細い線に色をつけても、なかなか伝わらない... そんなとき、線と線の間も色で塗りつぶしてしまえばいいじゃないか!! この発想が「段彩図」です。 ● DEM などのラスタデータを使って段彩図を描くのは、非常に簡単ですが、 等値線のベクタデータのみで段彩図を作成するのは案外難しいものです。 ラインの属性を隣り合っているポリゴンに転写してあげるわけですが、 そもそもラインのみで構成されているデータには、面的なポリゴン要素 がほとんどありません。 しかも、各ラインに隣り合っているポリゴンは2つあります。 このどちら側につけるかでも、考えてしまいますね。 というわけで、今週は、等値線から段彩図を作成する自動処理について プログラミングしてみました。 ●● 【作業全体の流れは?】 まず、おおまかな作業の流れをご紹介しましょう。 ▼等値線ベクタデータを用意 前提条件として、等値線のベクタデータが用意されていることとします。 値は、X,Y,Z の Z 値として入力されています。 TNTmips の Surface Modeling 機能などを利用して作成してください。 ▼Spatial Data Editor で枠を描く 次に、Edit/Spatial Data 機能を使って対象地域を囲むポリゴンを作成し ます。こうすることで、各ラインの隙間が、すべてポリゴンとして利用 可能になります。 ▼SML を実行する http://www.opengis.co.jp/sml/sml_basic/vector/contour2poly083.sml あとは、今回作成しました TNTmips の独自言語 SML ファイルをダウンロード して実行してみてください。これでポリゴンに等値線の属性が付きます。 (実行は メインメニューより Process/SML/Edit Script を選択して File/Open/SML File... で選択後、File/Run... です) ■Spatial Data Display で色付けする SML を実行すると2つの新しい属性テーブルが作成されます。 ひとつは、Z_Raw_Table(各ポリゴンに、複数のレコードがリンク)という、 前処理のテーブルで、もう一つは Z_Computed(1ポリゴン1レコードの関係) というテーブルが段彩図作成に使うものです。テーブルの中には、Max と Min という2つのフィールドがありますので、Spatial Data Display 機能 で、By Theme を設定するときに使用したいフィールドを指定してください。 ●●● 【SML はどんな処理をしているの?】 自動処理を行っているプログラムのソースは、公開しておりますので、 ご自由にいじったり改良を加えてみてください。 ただ、一体どんな処理をおこなっているのか、簡単にご紹介いたします。 ▼「各ラインと隣り合っているポリゴンに、属性を転写」 まず最初の処理は、各等値線が接するポリゴンに対して、片っ端からライン が持っている値をポリゴンに転写しています。こうすることで、ひとつの ポリゴンを構成している複数のラインから、いくつもの値がポリゴンに与 えられたことになります。これが Z_Raw_Table テーブルの中身です。 ▼「ポリゴンについた属性のうち最大値と最小値のみを抽出」 次に、一つのポリゴンにたくさんの値が付いていると、一体どの値を 用いればよいのか悩んでしまいますので、この SML では簡易的に、最大値 と最小値だけを選びだします。選び出した値は、一度バッファーの中に 格納しておきます。 ■「ポリゴンと属性が1対1となるテーブルを作成」 最後に、ひとつのポリゴンにはひとつの属性レコードが対応するよう、 溜めておいたバッファーから値を読み出して、ポリゴンに割り振りなお しております。ここで作成されるのが Z_Computed テーブルです。 ●●●● 【問題点は?】 もうお気づきの方もいらっしゃるかと思いますが、sml のバージョンは まだ ver0.83 です。つまり未完成なんです。 どのあたりが問題なのかといいますと、島状ポリゴンの扱いです。 もう一度こちらの段彩図をじっくり観てください。 島状に孤立しているポリゴンの色が変化していません。 これは、ポリゴンを囲む等値線が1本しかないため、実際の値を求める にはさらに周囲の等値線と比較しながら、決定する必要があります。 島状ポリゴンは凹地?それとも凸地? この判別アルゴリズムを追加するとより実用的になります。 そうそう、値ゼロの等値線も注意が必要です。 一番最初の作業で、枠線を描いていただきますが、この場合、入力された ラインにはゼロ(0)という値がデフォルトで入力されます。 もし、標高0m の等高線があったとき、枠線とごっちゃになり、出力結果 がおかしくなってしまいます。 この ・島状ポリゴン認識アルゴリズム ・枠線認識アルゴリズム が完成すれば、かなり便利な機能になると思います。 ●●●●● なんだかいろいろな事を書いてしまい、混乱している方も多いかと思います。 毎度毎度、わかりにくくて申し訳ありません。 せめて最後にまとめを... ◆等値線ラインデータから段彩図を書くのは意外と難しい!! ◆ポリゴンさえ作ってしまえば自動処理が行える!! ◆島状ポリゴンには要注意!! まだまだ修行の日々が続きます... 今週の旧プチ・テクニック """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " 例えばフォント一覧や投影法・座標系の一覧リストなどなど、 " たくさんの情報が現れたときは、キーボードから頭文字キーを " 叩いてみましょう。 " " Tokyo - JAPAN の行へは 頭文字 Tを " HDF インポートを選択したいときは頭文字 Hを " " 但しフォルダ名とファイル名では、ファイル名を優先してしまいます " " """" 隔 週 で 新 / 過 去 テ ク ニ ッ ク を 交 互 に 発 信 """" New Things 最新情報 ================================================================= = = 1bit-4bit の「IMG ファイルインポートバグ」が修正されました = 【TNT 修正パッチ】 = http://www.opengis.co.jp/htm/patch/patch.htm#THIRD = = ERDAS GIS/LAN 形式の「座標情報未認識バグ」が修正されました = 【TNT 修正パッチ】 = http://www.opengis.co.jp/htm/patch/patch.htm#THIRD = ================================================================= バグ・トラブル情報 ??? ??? ??? ??? ERDAS IMAGINE データのインポートバグが2つ修正されました。 ??? ??? ひとつは、マスク画像などの 1bit や 4bit で構成されたラスタ ??? データを IMG 形式で読み込むと、カラム方向でズレが生じるバグ ??? が修正されました。尚 8bit 以上のラスタでは問題ありません。 ??? せっかく 1bit に圧縮したのに読み込めないなんて... という ??? ことがなくなりました。 ??? ??? ??? ふたつめは、GIS/LAN 形式のデータをインポート時に座標情報が ??? 読み込まれないバグが修正されました。 ??? ??? ??? どちらも、tntdisp.zip と needed.zip の最新パッチをあてることで ??? 修正されます。 ??? ??? パッチの詳しい充て方につきましてはこちらをご覧ください。 ??? http://www.opengis.co.jp/htm/patch/patch.htm#THIRD ??? ??? ??? ??? ただ、パッチを充てることで、他の障害を発生させる可能性も ??? ありますので十分ご注意ください。 ??? ??? よろしくお願いいたします。 ??? ??? ??? ??? 今週の話題 on メーリングリスト ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ 今週はとくにありませんでした。 ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ メーリングリストに参加されたい方は、 info@opengis.co.jp までご連絡ください。 弊社からの対応は バグ対応と、新製品告知のみですが、 ユーザーさまの間での情報交換の場として 多くの方に利用されています。 ☆☆☆ バ ー ジ ョ ン ア ッ プ が 年2回 と な り ま し た ☆☆☆ いままでの年3回バージョンアップから年2回に変更されました。 同時に、年間バージョンアップ契約も、140,000円で2回分となりました。 前倒しで購入されていた分に関しましては、3回としてカウントされます が、今後申し込まれた方は、2回分としてカウントされます。 また、今まで新規購入の際に1回分のフリーアップグレード・サービスが ありましたが、こちらのサービスもなくなりました。 新規購入された場合、そのバージョンのみの対応となります。 わからない点などありましたら、 info@opengis.co.jp までご連絡ください。 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ ■■■■■■■ 料 金 改 定 し ま し た ! ! ■■■■■■■ 最近の円高に合わせまして、料金を改定を行いました。 今まで、日本語解説書・動作チェック・手数料などを含めまして、 1ドル = 150円(130円 + 20円) 換算で行っておりましたが、 1ドル = 140円(120円 + 20円) 換算へ変更いたしました。 例えば、TNTmips シングルライセンスの場合、 旧価格 900,000円 から 新価格 840,000円 となります。 普段より、元価格にあまり上乗せしていない分、 円相場に応じて価格が変動いたしますことを ご理解よろしくお願いいたします。 わからない点などありましたら、 info@opengis.co.jp までご連絡ください。 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ############# このメールマガジンの配信について ################ このメールマガジンは、 年間テクニカル・サポートに加入されている、 ユーザーさまのみを対象としております。 基本的には、登録アカウント1つに対して 1ユーザーを配信対象としておりますが、 例えば、研究室の予算で加入された場合などは、 ご購入いただいた指導教官と、実際に TNTmips で作業を行う学生1名の、 計2ユーザーを対象として配信させていただきます。 1アカウントに対して合計3名以上の配信は行いません。 学生さん2名が同じくらい使用する場合は、 申し訳ありませんが、じゃんけん等で1人に決めてください。 また、テクニカル・サポートの期限を半年以上過ぎてしまった場合は、 メールマガジンの配信を停止させていただきます。 メールマガジンが配信されなくなった時は、 サポート期限が半年過ぎたとお考えください。 転勤、ドメイン変更などでメールアドレスが変わった場合は、 お手数ですが、弊社までご連絡ください。 テクニカル・サポート活用案内 >サービスその1:緊急なバグ情報はすぐにメール配信します。 >サービスその2:TNTmipsに関するどんな質問にも対応します。 >サービスその3:対応は最優先で行います。 >サービスその4:専用FAX質問用紙をお送りします。 >サービスその5:電話・電子メールも、もちろん最優先で対応いたします。 >サービスその6:週に1回メールマガジンを配信します。 >サービスその7:展示ブースへご来場の方には特製オリジナルグッズを進呈。 >サービスその8:サポート対応で FTP サイトを 20MB まで利用できます。 >サービスその9:現在計画中です... 「これで年間9万円は安い!!」と感じていただけるような サービスを提供していきたいと考えております。 よろしくお願いいたします。 ============ おことわり ============= ※OpenGIS Mail Magazine for T.S.Uでは、 TNTmipsに関わる新しいニュースを、 毎週金曜日に、皆さまへご提供させていただきます。 ※このメールマガジンの転載・転送はご遠慮ください。 ================================