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 -
© Copyright 2025 ExpyDoc