! Pathfinder Tools ソフトウェア 開発キットの使い方 (パート 4 ) - サンプル

T
Path
Pathfind
finder Too
Tools ソフトウェア
開発キットの使い方
(パート
パート 4 )
- サンプルアプ
サンプルアプリケーション -
1999 年 4 月 26 日発行
トリンブルジャパン株式会社
Pathfinder Tools ソフトウェア開発キットの使い方
T
3. サンプルアプリケーション
本章は Pathfinder Tools SDK に含まれている二つのサンプルアプリケーションに
ついて説明しています。こで説明しているレベルはパート 1、2、3 の章で説明さ
れたものを越えるものではありません。
サンプルアプリケーションの各々のコードは、Pathfinder Tools SDK をインスト
ールした Samples フォルダに保存されています。
3.1 サンプル
サンプル 1 : Park Surveyor
Park Surveyor のサンプルアプリケーションは、簡単な GIS/GPS データコレクタを
作るために Pathfinder Tools SDK を使用する方法を説明しています。このプログ
ラムは都市の公園にある地物のポイントの特徴についての情報を収集します。特
に、樹木、ポール、そして消火栓の位置と属性情報を収集します。
Park Surveyor サンプルアプリケーションのコードは Pathfinder Tools SDK をイ
ンストールした¥SAMPLES¥PARK SURVEYOR¥フォルダに保存されています。
収集されたデータは二つの場所に保存されます。各特徴は公園データベースファ
イル(PARK.MDB)のテーブルの一つのレコードとして保存されます。各特徴は SSF
ファイルにも保存されます。ユニークな特徴 ID が二つにリンクしています。特徴
が現場で収集されたら、属性値と単独測位の位置がデータベースに保存されます。
SSF ファイルは補正された位置でデータベースレコードを更新するデータファイ
ルを生成するために、Pathfinder Office ディファレンシャル補正と Export ユー
ティリティで処理されます。
このサンプルはアンテナ高についての位置の調整も説明しています。GPS 受信機が
返す位置は GPS アンテナについてのものです。測定するポイントは地表のものな
ので、地表からのアンテナ高を記録して、測量するポイントの真の高さを計算す
るために使用しなければなりません。
- 2 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
ノート - これはサンプルアプリケーションです。これは現場で GIS と GPS データを
収集するために Pathfinder Tools を使用し、そして後処理によってディファレンシ
ャル補正された位置でフィールドにおいて収集した位置を更新することを示してい
ます。これを実際のアプリケーションで使用する場合は、よりしっかりとしたエラ
ー処理をする必要があります。また、GIS と GPS の両方についてのより完全な特徴も
必要です。一つの自然な拡張としては地図を追加することです。これは、サードパ
ーティの GIS マップ Active X コントロールを使用することによって行われます。こ
の場合、GIS データはデータファイルのものではなく、地図の GIS フォーマットとな
ります。この機能の追加はデータの収集についてもこのアプリケーションの基本的
な動作、GIS と GPS データのリンク、そして補正された位置のアプリケーションを変
更します。
以下のセクションでは次のことを説明しています。
Park Surveyor アプリケーションの構造と使用方法。
データを後処理するために Pathfinder Office ソフトウェアを使用する方法。
Park Surveyor サンプルアプリケーションについての関係するコードセクション。
3.1.1 アプリケ
アプリケーショ
ーションの構造と
構造と動作の概要
このセクションは Park Surveyor サンプルアプリケーションの構造についての簡
単な説明と、フィールドデータコレクタの使用方法を説明しています。
測量フ
測量ファィル
ァィルの構造
各測量は Park データベースファイルと多数の SSF ファイルを含むフォルダに書か
れます。Microsoft の Access データベースは GIS データ(PARK.MDB)を保存します。
「測量」を開くために、新しい SSF ファイルが作成され(PARK.SSF)、データベー
スが更新のために開かれます。Park データベースファィルは樹木、ポール、そし
て消火栓の各特徴のタイプについてのテーブルを持っています。更に、値を検索
するためのいくつかのテーブル(例、木の種類)と、各測量の細目についてのテー
ブルを持っています。
測量の細目のテーブルは一つのレコードのみです。これは測量の名前、所有者、
- 3 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
注記、標準のアンテナ高、そして座標系の設定のフィールドがあります。
各 SSF ファイルは、SSF ファイルが作成されたときのセッションで収集された特徴
について補正された位置を計算する必要のある GPS データを持っています。SSF フ
ァイル中の特徴とデータベース中の特徴はユニークな番号でリンクされています。
SSF ファイルが補正されて、エクスポートされた時に、エクスポートされた ASCII
ファイルは測量の Access データベースコンポーネントに統合されます。
特徴デ
特徴データの
ータの収集とユーザ
とユーザインター
ンターフェース
各特徴のタイプはデータ収集のための独自のフォームを持っています。ユーザは
選択バー上のアイコンを使用して適当なフォームを選択することができます。こ
こでは三つのフォームがあります。
最初は樹木のフォームです。
- 4 -
Pathfinder Tools ソフトウェア開発キットの使い方
二番目は、ポールのフォームです。
- 5 -
T
Pathfinder Tools ソフトウェア開発キットの使い方
T
三番目は消火栓のフォームです。
特徴 ID、座標、そして日付レコード属性は、特徴が作成されたときに自動的に生
成されます。ID はユニークな数値で、順に増えます。座標は特徴の収集の間に受
信した位置の平均です。記録された日付は最初の位置から得られたものです。ユ
ーザは与えられたフォームに他の属性データを入力します。
特徴は測量がオープンされ、GPS 受信機がアクティブな時にのみ追加することがで
きます。
通常動
通常動作
通常作業フローは以下の様な動作を通して進行します。
1. "測量"の作成または開く
新規ボタン(またはファイル/新規)は"測量"を新しく作成します。ユーザはフ
ォルダを選択するための標準ダイアローグで表されます。これが"測量フォル
ダ"です。空の Park データベースがコピーされ、測量の細目編集ダイアローグ
が現れます。ユーザは細目を埋めて、座標系を選択します。グリッド座標(緯
- 6 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
度経度ではなく、北距/東距(XY))の選択が必要です。
あるいは、ユーザはデータベースファイルを選択することによって既存の"測
量"を開くことができます。いずれの場合も、新しい SSF ファイルが開かれま
す。
2. 特徴のレビュー
測量を開いた時に、特徴のメニューと関連するツールバーのボタンがアクティ
ブになります。ユーザは特徴のタイプ(樹木、ポールまたは消火栓)をピックす
ることによって現在の測量の内容をレビューして、既存の特徴を見るために次
と前の機能を使用します。属性の値は変更が可能で、そして特徴は削除するこ
とができます。
3. GPS の動作
新しい特徴を追加する前に、GPS 受信機はアクティブ(衛星を受信)でなければ
なりません。GPS メニューは GPS 受信機の設定と、必要な場合にシュミレート
モードでの動作をする機能を提供します。設定ができたときに、同じメニュー
で GPS 受信機の動作の開始と終了ができます。現在の位置と GPS ステータスを
示す"チャイルド(子)"ウインドウが表示されます。
4. 新しい特徴の追加
新しい特徴を追加する操作は追加ボタンを単にクリックするだけです(または、
ファイル/追加メニューコマンド)。新しい ID を持つ空のフォームが作成され
ます。アンテナ高と記録日の属性は自動的にフィールドで入力されます。ユー
ザはフォームの残りを入力する必要があります。新しい特徴は SSF ファイルの
中に作られます。ユーザがフォームを埋めている間、受信した位置は平均化さ
れ SSF ファイルに記録されます。終了ボタン(またはメニューコマンド)がクリ
ックされた時、平均された位置はフォームに置かれ、SSF ファイルが終了しま
す。特徴 ID は後で SSF とデータベース情報をリンクするために SSF ファイル
に渡されます。特徴はロギング中にキャンセルすることができます。
5. "測量"を閉じます。
フィールドセッションが終わったら、測量データベースと関連する SSF ファイ
ルが閉じます。
- 7 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
6. 補正を適用します。
フィールドで収集した単独測位の位置を補正するために、測量した SSF ファイ
ルは Pathfinder Office のディファレンシャル補正とエクスポートユーティリ
ティによって処理されなければなりません。処理が終わったら、補正された位
置がデータベース中の位置の更新に使用されます。
補正適用の機能はユーザがエクスポートされたファイルを選択して、そして特
徴タイプ ID の一致によって測量データベースを更新します。簡単なレポート
が各特徴についての成功または失敗を示すために生成されます。
3.1.2 Pathfinder Office ソフトウェアによ
アによる処理
このセクションは Pathfinder Office ソフトウェアが Park Surveyor データの補
正された位置を適用するために使用された時に必要な特定の操作について説明し
ています。
Pathfinder Office の全体の情報については、Pathfinder Office のマニュアルを
ご覧下さい。
ユーザは同じフォルダに Pathfinder Office プロジェクトを作り、そして SSF フ
ァイルを選択して、*.COR ファイルを生成するためにディファレンシャル補正ユー
ティリティを実行しなければなりません。これらの補正されたファイルは、エク
スポートユーティリティの入力として使用されます。エクスポートユーティリテ
ィはプロジェクトの Export フォルダに補正された位置を持つ ASCII テキストファ
イルを書き込みます。これらのテキストファイルは特別に構成可能な ASCII エク
スポートの設定で説明されているフォーマットで書かれます。ここは、この設定
についてのテンプレートの表示です。最初の表示は構成可能な ASCII オプション
ダイアローグです。これはエクスポートユーティリティのエクスポート設定ダイ
アローグのフォーマットタブ上のフォ
フォー
フォーマットオプション
ションをクリックすることに
よってアクセスします。
- 8 -
Pathfinder Tools ソフトウェア開発キットの使い方
二番目の表示は ASCII エクスポートテンプレートエディタです。
- 9 -
T
Pathfinder Tools ソフトウェア開発キットの使い方
T
ノート - Park Surveyor のサンプルアプリケーションは、上記で表示されたフォー
マットで書かれた ASCII データファイルにエクスポートされる必要があります。
この設定を使用した時に、エクスポートユーティリティは相当する.SSF ファイル
中の特徴のすべてを含む.ASC ファイルを作成します。
3.1.3 プログラ
プログラムの概
ムの概要
GIS/GPS データ収集から見た Park Surveyor サンプルアプリケーションの主要部分
はデータベースと SSF ファイルへの特徴の追加と、補正された位置でデータベー
スを更新することです。
Park Surveyor サンプルアプリケーションは Visual Basic データベース管理ツー
ルを広い範囲で使用します。これらの説明はここではあまりしていません。Visual
Basic のデータベース管理ツールの詳細については Visual Basic の参考書をご覧
下さい。
SSFWriter と GPSReceiver の接続
GPS データを SSF ファィルに記録するには、
SSFWriter コントロールを GPSReceiver
コントロールに接続しなければなりません。これは ParkSurveyorMain フォームの
Form_Initialize プロシジャーで ParkSurveyor 初期化の一部として行われます。
'GPSRecever コントロールを SSFWriter に接続
'これは後で補正するために GPS データを SSF ファイルに
'書き込みます。
SSFWriter.AttachToGPSReceiverControl GPSReceiver
測量を
測量を開く
ユーザが新しい地物の特徴を収集するために現場に出かけた時に、最初のステ
ップは既存の「測量」を開くか、新しいものを作成することです。これが新し
い「測量」の場合、空の Park データベースファイル(SEED.MDB)が PARK.MDB と
して選択されたフォルダにコピーされます。いずれの場合も、ユーザは共通ダ
イアローグを使用して効率的に PARK.MDB ファイルを選択します。完全なパス
- 10 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
を含むこの名前は、グローバルストリング変数 SurveyDatabaseFile に保存さ
れます。この変数は UTILIS.BAS モジュールで宣言したアプリケーションに対
するグローバル変数の一つです。
Public SurveyPath AS String
Public SurveyDatabaseFullName As String
Public SurveyDatabaseFileName As String
SurveyPath と SurveySSFFile 変数はそれぞれ survey フォルダへのパスと、現
在の SSF ファイル名を持っています。
これが実行された場合、ParkSurveyorMain フォームの OpenSurvey プロシジャーが
呼ばれます。このプロシジャーはデータベース名を Visual Basic Data コントロ
ールにセットし、トリンブルの SSFWriter コントロールを使用して開きます。
Data コントロールで使用可能なデータを得るためのコードは以下の通りです。
SurveyData.DatabaseName = SurveyDatabaseFullName
SurveyData.Refresh
SurveyData.Recordset.MoveFirst
SurveyData.UpdateControls
このコードは最初の内容の元になり、そしてメインフォーム上のコントロールの
範囲で使用可能な測量細目のテーブルとなります。
フィールドの一つは、この測量で開かれた SSF ファィルの項目です。このフィー
ルドは SSFCount と名前の付いた TextBox の範囲です。この項目はインクリメント
され、そしてこのセッションについて新しい SSF ファイルの名前を生成するため
に使用されます。
Dim SSFNumber AS Integer
Dim SSFFile As String
Dim SSFErrorCode As SSFWriterErrorCode
SSFNumber = SSFCount.Text
SSFNumber = SSFNumber + 1
DotPosition = InStr(1, SurveyDatabaseFileName, ".", vBTextCompare)
SSFFile = Left(FileOpenDialog.FileTitle, DotPosition -1) _
- 11 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
& Format(SSFNumber, "0000") & ".ssf"
SSFErrorCode = SSFWriter.StartSSFFile(SurveyPath, SSFFile)
SSF ファイルがうまく開かれなかった場合、ユーザは知らされます。そうでな
ければ、アプリケーションの初期化の残りが行われます。
If SSFErrorCode <> pfSSFWriterSuccess Then
MsgBox "測量を開けません - SSF ファイルを開けません" & SSFFile
SurveyIsInProgress = False
Else
'正常に開けました
'SSF カウントをインクリメント
'すべてのパネルにデータベースをセット
SSFCount.Text = SSFNumber
SurveyIsInProgress = True
SurveyData.UpdateRequired
OpenAll Panels
SetCaption
End If
'正常なコントロールを使用可能と使用不可
SetControlState
各パネルはパネルに要求されるデータベースを開くことを実行するためのサブプ
ロシジャーを持っています。例えば、"樹木"パネル(これは TreePanel ユーザコン
トロール)について、樹木、種類、そして高さに関するデータベースのテーブルを
セットアップしなければなりません。以下のコードは HydrantPanel、PolePanel、
そして TreePanel ユーザコントロールのそれぞれに現れます。
Public Sub OpenSyrvey()
Data.DatabaseName = SurveyDatabaseFile
Data.Refresh
- 12 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
SpeciesData.DatabaseName = SurveyDatabaseFile
SpeciesData.Refresh
HealthData.DatabaseName = SurveyDatabaseFile
HealthData.Refresh
EnableFields
End Sub
地物の
地物の特徴を
特徴を追加
ユーザはデータベースと SSF ファイルが開かれて、GPS 受信機が衛星の捕捉をした
ら測量のために地物の特徴を追加することができます。このプロセスは別な部分
を持っています。ある動作は特徴を開始するために行われ、あるものは特徴を収
集中に、そしてある動作は特徴を終了するために行われます。
特徴の(収
開始
特徴の 収集)開
呼び出されたコードは、MenuFeatureAdd_Click イベントプロシジャーです。この
プロシジャーは SSF ファィル中の新しいポイントの特徴を最初に開始します。こ
れは新しい特徴の開始を SSF ファイルに記録し、SSF ファィル中にこのポイントの
特徴の GPS 受信機から受けた位置の追加を始めます。
Private Sub MenuFeatureAdd_Click()
' 目的: 新しい特徴を"測量"に追加
' 以下が行われる
' 特徴は SSF ファイルで開始され、そして
' アクティブパネルはデータベースにレコードを追加するために呼ばれ
' そして、標準値を埋め、そして
' 新しい PositionAverager を作成し、
' アプリケーションの状態とステータスバーを IsFeatureInProgress = True
'にセット
' 特徴が SSF ファイル中で始まります
Dim SSFError As SSFWriterErrorCode
- 13 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
Dim PanelMessage As String
Dim AddedOK As Boolean
AddedOK = False
SSFError = SSFWriter.StartFeature(pfPointFeature)
If SSFError = pfSSFWriterSuccess Then
' アクティブパネルがデータベースにレコードを追加するために呼び出され
' そして標準値が埋められます
If Frame.GetActivePanel.Control.AddFeature Then
AddedOK = True
' 新しい PositionAverager が作成され、そして
Set Averager = New PositionAverager
' アプリケーションの状態とステータスバーは IsFeatureInProgress = True
' にセットされます
PanelMessage = "追加中 " + Frame.GetActivePanel.Title
StatusBar.Panels(FeatureStatePanelIndex).Text = PanelMessage
SetControlState
End If
End If
If Not AddedOK Then
MsgBox "新しい特徴追加に失敗"
End If
End Sub
アクティブパネルのコード(例えば、TreePanel ユーザコントロール)は、データベ
ースレコードの追加と開始時の値を埋めることに責任があります。
Public Sub AddFeature()
Data.UpdateRecord
- 14 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
Data.Recordset.AddNew
IDBox = GetFeatureID()
AntennaHeightBox.Text = DefaultAntennaHeight
IsCorrected.Value = vbUnchecked
EnableFields
End Sub
一 つ の値 はユ ニー クな 特 徴 ID で す 。 こ の 値 は UTILS.BAS モ ジュ ール 中 の
GetFeatureID プロシジャーによって割り当てられています。この値はデータベー
ス の 測 量 細 目 テ ー ブ ル の Feature ID フ ィ ー ル ド に 保 存 さ れ ま す 。 こ れ は
ParkSurveyMain フォームの FeatureID の名前が付いた TextBox に結びつけること
によって管理されます。
Public Function GetFeatureID() As Integer
Dim NextFeatureID As Integer
NextFeatureID = MainForm.FeatureID
NextFeatureID = NextFeatureID + 1
MainForm.FeatureID = NextFeatureID
GetFeatureID = NextFeatureID
End Function
特徴が
特徴が記録さ
記録されている間
この処理は新しい特徴に対して属性値をセットするためにフォームにユーザが埋
めている間に行われます。この時間の間、グローバル変数 FeatureIsInProgress
は True にセットされます。
FeatureIsInProgress が真(True)の時、GPSReceiver コントロールの NewPosition
イベントと SSFWriter コントロールの NewPositionLogged イベントは特別な処理
を得ます。
GPS 受信機からの各新しい位置は PositionAverager クラスモジュールを使用して
定義された Averager に渡されます。これは多数の単独測位の位置を平均し、フィ
ールドで特徴を記録した位置とします。これはやや精度が良くなります。
- 15 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
Private Sub GPSReceiver_NewPosition(ByVal Position As GPSPosition)
If Not Averager Is Nothing Then
Averager.AddPosition Position
End If
If SSFWriter.IsFeatureInProgress Then
Frame.GetActivePanel.Control.SetDataRecorded Position.GPSTime
End If
位置からの GPS 時刻はアクティブパネル(例えば、TreePanel ユーザコントロール)
に渡されるので、これは特徴の Data Recorded 属性を埋めるために使用されます。
Public Sub SetDateRecoded(ByVal DataRecorded As Date)
'これが、この特徴について受信した最初の GPS 日付の値の場合、
'ローカル時差に変換して保存します。
If DateRecordedBox.Caption = "" Then
Dim LocalDate As Date
LocalDate = TimeConverter.ConvertFromGPSTime(DateRecorded)
DateRecordedBox.Caption = LocalDate
End If
End Sub
ParkSurveyorMain フ ォ ー ム の SSFWriter コ ン ト ロ ー ル に つ い て の
NewPositionLogged イベントプロシジャーは新しい位置が現在の特徴について記
録されるたびにステータスバーを更新します。
Private Sub SSFWriter_NewPositionLogged()
Dim Count AS Integer
Dim Message As String
If SSFWriter.IsFeatureInProgress Then
Count = SSFWriter.NumberOfPositionLoggedInFeature
Message = "記録された位置 " + Frame.GetActivePanel.Title + " - " _
+Str(Count) + " を追加中"
- 16 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
StatusBar.Panels(FeatureStatePanelIndex).Text = Message
End If
End Sub
特徴(収集
特徴 収集)の
収集 の終了
ユーザがフォームにすべての属性値を入力した時に、特
特徴終了ボタンまたはメニ
ュー項目は測量にこの特徴の追加の完了するために使用されます。呼び出された
コードは MenuFeatureEnd_Click プロシジャーに含まれています。このプロシジャ
ーは最初に SSFWriter に特徴の終了を知らせます。また、Comment(コメント)と呼
ばれる一つのテキスト属性値の値を提供し、これは各特徴について保存されます。
この属性値は SSF ファイル中の特徴とデータベース中の特徴をリンクしています。
値は特徴タイプとユニークな数字 ID の組み合わせ、例えば"Tree47"です。
Private Sub MenuFeatureEnd_Click()
' 目的: 特徴の入力を完了する
' 以下の動作が行われます。
' SSF ファイルでの特徴収集は終了します。特徴タイプの名前の ID と
' ユニークな数字 ID が割り当てられ、そして
' 平均座標がパネルに書き込まれ、そして
' アクティブパネルが通知されるので、データベースを更新することができます。
' 現在位置の平均を無効にし、そして
' アプリケーションの状態がリセットされます。
' SSF ファイルで特徴収集が終了します。 特徴タイプの名前の ID と
' ユニークな数字 ID が割り当てられます。
Dim FeatureIDString As String
Dim SSFWriterError As SSFWriterErrorCode
Dim EndedOK As Boolean
EndedOK = False
FeatureIDString = Frame.GetActivePanel.Key + " " + FeatureID.Text
' 以前の EndFeature が失敗した場合、データベースに保存せずに SSF ファイル
' の収集がすでに終わっています。再試行のためにパスすることができます。
- 17 -
T
Pathfinder Tools ソフトウェア開発キットの使い方
If SSFWriter.IsFeatureInProgress Then
SSFWriterError = SSFWriter.EndFeature(FeatureIDString)
Else
SSFWriterError = pfSSFWriterSuccess
End If
If SSFWriterError = pfSSFWriterSuccess Then
Dim ErrorCode As CoordinateTransformerErrorCode
Dim Northing As Double
Dim Easting As Double
Dim Elevation As Double
' 平均座標がパネルに書き込まれます。
If Not Averager Is Nothing Then
If Averager.NumberOfPositions > 0 Then
ErrorCode =
Transformer.TransformFromWGS84(Averager.AverageLatitude, _
Averager.AverageLongitude, _
Averager.AverageAltitude, _
Easting, _
Northing, _
Elevation)
If ErrorCode = pfCoordinateTransformerSuccess Then
Frame.GetActivePanel.Control.SetPosition Northing, _
Easting, _
Elevation
Else
MsgBox "この特徴についての座標計算中のエラー"
End If
- 18 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
Else
MsgBox "この特徴について収集された GPS 位置はありません"
End If
' 現在の位置の平均を無効にします
Set Averager = Nothing
End If
' アクティブパネルが通知されるので、データベースを更新することができます。
If Frame.GetActivePanel.Control.EndFeature Then
EndedOK = True
' アプリケーションの状態がリセットされます。
SetControlState
End If
End If
If Not EndedOK Then
MsgBox "特徴終了中のエラー"
End If
End Sub
これがうまくいったら、平均位置は特徴の北距、東距と高度フィールドを更新す
るためにアクティブパネル(例えば、TreePanel ユーザコントロール)に渡されます。
位置は GPS アンテナのものであり、アンテナ高の調整が行われます。
Public Sub SetPosition(ByVal Northing As Double, ByVal Easting As Double,
ByVal Elevation As Double)
' 目的: この特徴についての補正されていないの平均位置をセット
' アンテナ高は真の地上高を与えるために GPS アンテナ位置から引かれます。
On Error GoTo DataError
NorthingBox.Caption = Northing
EastingBox.Caption = Easting
ElevationBox.Caption = Elevation - AntennaHeightBox.Text
- 19 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
Exit Sub
DataError:
MsgBox "データベース更新中のエラー - フィールドの値をチェック"
End Sub
アクティブパネルは特徴の最後で知らされるので、データベースをアップデート
することができます。
Public Sub EndFeature() As Boolean
Data.RecordSet.Update
DateRecordSet.Bookmark = Data.Recordset.LastModified
EndFeature = True
End Sub
補正の
補正の適用
一つ、または複数のフィールドセッション(現場の観測)が、この測量で一つ、ま
たは複数の SSF ファイルを作成した場合、ユーザはオフィスに戻って各特徴につ
いて補正された位置を含む一つ、または複数の ASCII ファイルを作成するために
Pathfinder Office のディファレンシャル補正またはエクスポートユーティリティ
を使用することができます。これらのファイルは SSF ファイルと同じ名前を持っ
ていますが、ASC のファイル拡張子を使用しています。ここにサンプルファイルの
数行を示します。
599956.688,1863848.330,-7.067,"Tree 10"
599956.684,1863848.294,-7.027,"Tree 11"
599956.787,1863848.281,-7.004,"Pole 12"
599956.690,1863848.271,-6.985,"Pole 13"
599956.692,1863848.257,-6.962,"Hydrant 14"
呼び出されたコードは ParkSurveyorMain フォームの
MenuFileApplyCorrections_Click プロシジャーにあります。このプロシジャーで、
ユーザは*.ASC ファイルを選択することを聞かれます。これが行われた時に、ファ
イルはテキストデータベースとして使用され、ファイル中のレコードの全て持つ
- 20 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
レコードセットが作られます。ファイル中の各レコードについて、属性値は正し
いパネルをアクティブなパネルとするために分析され、補正された位置がデータ
ベースを更新するために渡されます。
特徴の読み込み、補正、そして発生したエラーのカウントが保持されます。
' ファイル中の各レコードについて、正しいパネルを探して補正を適用します。
Dim SpacePosition As Integer
Dim FeatureType As String
Dim ID As Integer
Dim Northing As Double
Dim Easting As Double
Dim Elevation As Double
Dim FeaturesCorrected As Integer
Dim FeaturesRead As Integer
Dim FeaturesWithErrors As Integer
FeaturesCorrected = 0
FeaturesRead = 0
FeaturesWithErrors = 0
Do Until CorrectionData.Recordset.EOF
FeaturesRead = FeaturesRead + 1
SpacePosition = InStr(1, CorrectionID.Caption, " ", vbTextCompare)
If SpacePosition = 0 Then
ReportRecord = "無効な特徴 ID - " + CorrectionID.Caption
Print #1, ReportRecord
FeaturesWithErrors = FeaturesWithErrors + 1
Else
FeatureType = Left(CorrectionID.Caption, SpacePosition - 1)
ID = Right(CorrectionID.Caption, Len(CorrectionID.Caption) - _
SpacePosition)
- 21 -
T
Pathfinder Tools ソフトウェア開発キットの使い方
If Frame.GetActivePanel.Key <> FeatureType Then
Frame.SetActivePanel FeatureType
End If
Northing = CorrectionNorthing.Caption
Easting = CorrectionEasting.Caption
Elevation = CorrectionElevation.Caption
CorrectionApplied = _
Frame.GetActivePanel.Control.ApplyCorrection(ID, _
Northing, Easting, Elevation)
If CorrectionApplied Then
FeaturesCorrected = FeaturesCorrected + 1
Else
ReportRecord = "補正に失敗 " + FeatureType _
+ "ID 付きの特徴= " + Str(ID)
Print #1, ReportRecord
FeaturesWithErrors = FeaturesWithErrors + 1
End If
End If
CorrectionData.Recordset.MoveNext
Loop
各パネルには ApplyCorrection と呼ばれるプロシジャーがあります。このプロシ
ジャーは ID を使用してデータベース中の正しいレコードを探します。そしてこの
特徴がすでに補正されたものであるかを見るためにチェックして、ユーザに確認
を要求します。データベースレコードは更新され、補正されたとしてフラグが付
けられます。
Public Function ApplyCorrection(ByVal ID As Integer, ByVal Northing As Double,
ByVal Easting As Double, ByVal Elevation As Double) As Boolean
Dim Criteria As String
- 22 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
On Error GoTo Failed
ApplyCorrection = False
Criteria = "ID = "
Criteria = Criteria + Str(ID)
Data.Recordset.FindFirst Criteria
If Not Data.Recordset.NoMatch Then
Data.UpdateControls
If IsCorrected.Value = vbChecked Then
Dim Message As String
Dim Result As VbMsgBoxResult
Message = "ID 付きの樹木= "
Message = Message + Str(ID) + " はすでに補正済み" _
+ Chr(13) + Chr(10)
Message = Message + "新規に補正を適用?"
Result = MsgBox(Message, vbYesNo, "補正の問い合わせを適用")
If Result = vbNo Then
Exit Function
End If
End If
' 新しい位置の適用。アンテナ高を引く
NorthingBox.Caption = Northing
EastingBox.Caption = Easting
ElevationBox.Caption = Elevation - AntennaHeightBox.Text
IsCorrected.Value = vbChecked
Data.UpdateRecord
ApplyCorrection = True
Exit Function
- 23 -
Pathfinder Tools ソフトウェア開発キットの使い方
End If
Exit Function
Failed:
ApplyCorrection = False
End Function
- 24 -
T
Pathfinder Tools ソフトウェア開発キットの使い方
T
3.2 サンプル
サンプル 2: シュミレー
シュミレーションデ
ョンデータの生成
このアプリケーションは以前に説明した学習のためのレッスンをたくさん引用し
ています。Pathfinder Tools SDK に関するコードはレッスンですでに説明したコ
ードと違いはありません。しかし、テキストファイルに位置を記録するための方
法を追加します。このファイルはテストやデモ用に位置を提供するためにシュミ
レーションモードを使用することができます。
Simulation Data Generator(シュミレーションデータ生成)のサンプルアプリケー
ションのコードは、Pathfinder Tools をインストールした¥SAMPLES¥SIMDATA
GENERATOR フォルダに保存されています。
GPS シュミレーションはレッスン 1 で説明し、ご覧いただきました。これは
Circle(サークル)オプションで強制的に行ったものです。このサンプルアプリケ
ーションは Simulation Settings ダイアローグの Data File オプションからシュ
ミレーションのアプリケーション例を提供しています。
Simulation Data Generator サンプルアプリケーションは、位置をテキストファイ
ルに記録できるということでレッスンの GPS 受信機アプリケーション例と異なっ
ています。位置を記録するために、アプリケーションは最初に衛星を受信しなけ
ればなりません。
Microsoft の Visual Basic で提供されるコモンダイアローグは、位置を書き込む
ためのテキストファイルをブラウズするために名前を付けて保存ダイアローグを
表示します。
- 25 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
Private Sub BrowseCommand_Click()
CommonDialogControl.filename = DataFileField
CommonDialogControl.Flags = cdlOFNHideReadOnly
CommonDialogControl.ShowSave
DataFileField = CommonDialogControl.filename
End Sub
ロギン
ロギング開始
グ開始をクリックした時に、コードはファイルがすでにあるかどうかをチ
ェックします。ファイルの存在はファイルの長さをチェックすることによってチ
ェックされます。あれば、既存のファイルに追加するか、あるいは上書きするを
ユーザに求めます。
Dim FileLength As Long
Dim AppendToFile As Boolean
AppendToFile = False
On Error Resume Next
FileLength = Len(Dir$(DataFileField))
If Err Then
MsgBox Error$, 48
Exit Sub
End If
If FileLength > 0 Then
' ファイルがすでにある場合は、何をするかを質問
Dim Response As VbMsgBoxResult
Response = MsgBox("ログファイルはすでにあります. " & _
"追加しますか?", vbYesNoCancel)
If Response = vbCancel Then
Exit Sub
ElseIf Response = vbYes Then
- 26 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
AppendToFile = True
Else '応答は No です、上書き前に問い合わせ
Response = MsgBox("既存のログファイルに上書きしますか?", _
vbYesNo)
If Response = vbYes Then
AppendToFile = False
Else
Exit Sub
End If
End If
End If
If AppendToFile Then
Open DataFileField For Append Shared As #1
Else
Open DataFileField For Output Shared As #1
End If
Logging = True
ノート - True にセットされた Logging 論理変数は、グローバル変数として宣言され、
そしてファイルにデータを書き込む場合の決定に使用されます。
データは NewPosition イベントが GPSReceiver コントロールによって発せられた
時にのみファイルに書き込まれます。以下のコードは位置の収集、テキストファ
イルへの書き込み、そして記録した位置の数のカウンタのインクリメントのプロ
シジャーを含んでいます。
If Logging Then
NumberOfPotionsField = NumberOfPositionsField + 1
Write #1, Position.Latitude, Position.Longitude _
Position.Altitude
- 27 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
End If
ログフ
ログファイル
ァイル表示のクリックは、コマンドラインのパラメータとしてテキストフ
ァイル名を使用して Microsoft のメモ帳アプリケーションを立ち上げます。
Shell "Notepad.exe " & DataFileField, vbNormalFocus
Simulation(シュミレーション)ダイアローグの Simulation from Data File(デー
タファイルからシュミレーション)を使用した場合、データは以下のフォーマット
でファイルに保存されなければなりません。
緯度、
緯度、経度、
経度、高度
緯度と経度の値は、WGS-84 楕円体の十進数の度で保存され、一方高度の値は十進
数のメートルで、WGS-84 楕円体上の高さとして表されます。これは GPSReceiver
コントロールの NewPosition イベントの緯度、経度と高度パラメータのフォーマ
ットです。
- 28 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
シュミレーションデータ生成のアプリケーションは、以前に作成された位置のフ
ァイルをプレイバックするためにも使用されます。
アプリケーションによって書かれたファイルを使用する目的で、GPS 模擬のボタン
模擬
が Simulation Setting ダイアローグを開くために用意されています。Simulation
Settings ダイアローグで、シュミレーションモードを使用可能にするために
Enabled をチェックし、そして Simulation from Data File オプションを選択しま
す。このオプションは WGS-84 の WGS-84 の位置を含むことが確認される有効なデ
ータファイルが必要です。ファイルの選択のためにファイルを開くのダイアロー
グを示すために Data File
File をクリックします。
- 29 -
Pathfinder Tools ソフトウェア開発キットの使い方
T
アプリケーションのメインメニューから受
受信開始をクリックした場合、ファイル
信開始
からの位置はファイルに書き込んだ順序で毎秒ごとに一つの位置を読み込みます。
受信機ステータスのダイアローグはアプリケーションがデータファイルからのシ
ュミレーションモードであることを示しています。アプリケーションは WGS84 位
置グループのキャプションを"Pre-recorded WGS84 Position"に変へます。
これで、サンプルアプリケーションの説明を終わります。
- 30 -