Excelで測量面積と土地の形を表示する

30年前の測量のメモが出てきた

ノートに書かれていたメモ
これを綺麗に書き直してみるとこんな形の土地でした。

古いノートが出てきてこの中に、もう30年程前に行ったコンパス測量の時の測量メモが書かれていました。
土地の角ごとにポールを立てて、コンパスで覗いて方位角、仰迎角、距離を書きとどめた簡単なものでしたが、コロナ騒ぎの中、何処にも出掛けられなく出来る事も無いので、暇つぶしにこのデータを元にExcelで面積を出してみようと始めてみました。
この測量を行ったのはもう30年以上も前の事になります。

Excelで面積を出す

その当時使っていたのは富士通のFM−8という、富士通で始めて販売したパソコンでした。実はこのFM−8に搭載されていたF−Basicで測量結果から、面積を出し、ついでにこの地形も印刷するプログラムを作った事がありました。

30年以上も前の8ビットパソコンで何とか出来たのだから、今のExcelならば簡単に出来るだろう、と始めたのですが、これが意外に悪戦苦闘。何としても正確な面積が出ないのです。
特別な関数も無いし、コンパスからポイントまでの距離、方位、仰迎角が出ているのですから、2辺に挟まれた角度と2辺の長さから簡単に面積は求められます。

何とか面積が出ました。

暫く悪戦苦闘した結果、ようやく気がつきました。
入力したデータが間違っていたのですから、正確な面積など出るはずもありませんでした。
ようやく何とか正確な面積が出るようになりましたが、ここまで来たら、何とか地形も出したくなります。

実際に出来たとしても、これを何に使うのか?
別になんの目的もありません。単に、コロナ騒ぎで外出自粛の暇つぶしでしか無いのです。
それでもテレビを見ているよりはいいでしょう

地形も表示したい

さて、面積を出すだけならば、簡単でしたが、このデータを元に図形を描くとなると厄介そうです。

以前やった記憶を辿ると、角ポイントの座標を出さなくてはなりません。
Excelの場合は左上がX,Y共に0となり、マイナス座標は駄目なようです。

まず、中心位置(この場合だとコンパスを設置したポイント。今回は200,200を中心にしてみました。)を決めて、ここからポイントまでの距離からXとYの座標を出してみました。
Excelでの角度単位は「ラジアン」なので「度」を「ラジアン」に変換する必要があります。これにはRADIANS関数を使って変換しています。

式は
X座標=200+ポイントまでの距離 x COS(RADIANS(角度))x画像の大きさ倍率
Y座標=200+ポイントまでの距離 x SIN(RADIANS(角度))x画像の大きさ倍率
で出ますから、これを2列xポイントの数行 の中に入れておきます。

ここまでは問題はありませんが、さて、これからはどうやるんだ?
VBAに頼るしかありませんが、自分には無理そうです。

いろいろと調べていくと、参考になるページが見つかりました。
ブログのタイトルが「Excelの座標値リストから図形を作成」と、まさに自分が探していたそのものです。
そこに書かれていたコードは以下のようなものでした。

Option Explicit
Option Base 1
Sub DrawPolyline()Dim C As Variant
Dim f As Double
Dim n As Integer
Dim m As Integer
Dim i As Integer’ セルの読み込み
n = Selection.Rows.Count
m = Selection.Columns.Count
If (n < 2 or m <> 2) Then
MsgBox (“座標リストには2行以上×2列(x,y)の矩形領域を選択してください”)
Exit Sub
End If
C = Selection.Value’単位換算(セル入力値[mm] -> 内部処理[pt])
f = 72 / 25.4 ‘ 1pt=1/72in, 1in=25.4mm
For i = 1 To n
C(i, 1) = C(i, 1) * f
C(i, 2) = C(i, 2) * f
Next i’ ポリライン(フリーフォーム)の作成
With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, C(1, 1), C(1, 2))
For i = 2 To n
.AddNodes msoSegmentLine, msoEditingAuto, C(i, 1), C(i, 2)
Next i
.ConvertToShape.Select
End WithEnd Sub

https://qiita.com/HMMNRST/items/9b7677124f5ccb0ea938
@HMMNRSTさんのページより

ここでの説明によれば
1)BuildFreeform で図形作成用のオブジェクトを作る(開始点も指定)
2)AddNodes でオブジェクトに点を追加していく
3)ConvertToShape で図形作成を完了する
となっていました。

以上の三段階の処理で図形が描かれるようです。
早速、x,y座標の入っているセルを選択状態にして、このマクロプログラムを実行すると何ともあっけなく、土地の形が描かれました。

あ、出来ちゃった!

このVBAのソースを見ると、それ程厄介なプログラムでは無いようで、自分にも何とか理解出来る範囲でした。
座標が入力されているセルはどの場所でも良く、これらを全部選択した状態でマクロを実行すれば良いようです。
ただ、土地の広さによっては画面内に収まらなくなる事もあるので、座標値の計算の時に、描かれる図形の表示倍数を指定出来るようにしました。

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です