見出し画像

Excelで座標SIMAの入出力


測量と不動産法務の何でも屋こと横山太郎です。
単純作業が大の苦手な私ですが、単純作業を自動化するためのプログラミングは時間気にせずやっちゃいます。
測量屋として膨大な座標データや帳票を扱うときはExcelを使う時が多いです。(たまにPythonやGoogle Apps Scriptもちょします。)
Excelをさらに高度に使おうと思うと関数だけじゃなくてVBAも覚えたいところですね。今日はExcelVBAを使ってSIMA出力する方法を紹介します。


SIMAファイルとは

simaファイルは座標や地番などの情報を記録したデータです。
ソフトと測量機(TSやGNSS)間でデータを転送したり、業務の関係者間でデータを交換する際に役立ちます。

SIMAファイルを測量CADではなく、EXCELで出力しようと思ったワケ

私の使用している測量CADは福井コンピュータのTrendOneです。
(色々オプション付けて100万超えです)
もちろんこのソフトの機能でもsimaの入出力は可能ですが、「出力時に測点の順序を自由に決められない」という問題がありました。(点番の順序で出力されてしまう)
10点くらいの杭打ちなら順番は気になりませんが、数十点、数百点測設するような大規模な現場ですと、事前に杭打ちの順序を想定して登録した方が圧倒的に作業効率がよくなります。APAフォーマットなら順序を決められますが、apaの転送はオプション料金がかかる。。。
ということでExcelでSIMAを作ろうと思いました。

SIMAファイルの中身

SIMAファイルの仕様や定義について色々サイトを調べましたが、適当なものが出てきません。一般社団法人日本測量機器工業会が仕様を決めてるのかな?

こういうときは既存のsimaデータから予測しかありません。とりあえずテキストエディタでsimaファイルを開いてみます。

適当なsimaファイル

G00,03,14条地図◯◯地区,
Z00, /* 座標データ */,
Z01,0,
A00,
A01,  244,H7A22               , -18633.478, -29423.638,,
A01,  249,H7R-14              , -18627.808, -29462.018,,
A01,  250,H7R-15              , -18620.468, -29476.078,,
A01,  951,H7L-9               , -18649.338, -29387.109,,
A01,  952,H7A50               , -18650.378, -29387.649,,
A99,
G99,

こんな感じです。
G00,03,14条地図◯◯地区,
は現場名ですかね
Z00, /* 座標データ */,
Z01,0,
これは意味があるのかな?ただのコメント?
A01, 244,H7A22 , -18633.478, -29423.638,,
これは座標ですね。
A99,
これも意味は不明ですが
とりあえず座標データについてはA00で始まり、
A01で各座標を入れていって、
A99で座標が終われば良さそうです。
G99で現場の終わり?

VBAでコードを書いてみます

とりあえずコンマ区切り(csv)のテキストデータを出したらsimaになりそうなので書いてみましょう。

座標simaを出力するコード

Sub sima出力()
    Dim i As Integer
    Dim folderName As String
    '保存場所を選ぶ画面を開く
    folderName = Application.GetSaveAsFilename(FileFilter:="SIMA,*.sim")
     
    'ファイルを書き込みで開く
    Open folderName For Output As #1
     
    '開いたファイルに書き込む
    Print #1, "G00,04,simafile,"
    Print #1, "Z01,,"
    Print #1, "A00,"
    i = 5 '取込開始行。excelの形式に合わせて変えてください。
    Dim name As String, x As Double, y As Double, z As Double
    Dim strx As String, stry As String, strz As String
    Dim a As String
    Do Until Cells(i, 2).Value = ""
        name = Cells(i, 2).Value '点名のある列
        x = Cells(i, 3).Value 'X座標のある列
        y = Cells(i, 4).Value 'Y座標のある列
        z = Cells(i, 5).Value 'Z座標のある列
        strx = Format(x, "#.000")
        stry = Format(y, "#.000")
        strz = Format(z, "0.000")
        
        a = "A01," & CStr(i) & "," & name & "," & strx & "," & stry & "," & strz & ",,"
        
        Print #1, a
    i = i + 1
    Loop
    


    Print #1, "A99,"
    Print #1, "G99,"

 
'開いたファイルを閉じる
Close #1
 
MsgBox "SIMA出力完了!"

End Sub

こんなところで。

処理するデータ

元のデータ

このデータをSIMAに出力します。

結果

sima出力結果
ブルトレでも取込できました。

その後

このExcelはさらに多機能化し、
APA入出力、経緯度変換、ジオイド補正、KML出力に対応します。
その内容は気が向いたらアップします

この記事が気に入ったらサポートをしてみませんか?