国土地理院さんの「平面直角座標への換算」
https://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/bl2xyf.html
↑で一括計算すると作成されるoutファイルからCADに一気に作図(円をプロット)するプログラムを書きました。
10個程度の座標であれば手入力でも良いでしょうが、50個100個となると入力ミスも増えてストレスが溜まるものだと思います。
私の直近で行った業務では約17000個の座標入力が必要であり、仮に1個の入力で10秒かかるとしても170000秒(約47時間)、8時間勤務だとしても5日で終わらない量のデータを取り扱う必要がありました。
数週間前に作成したプログラムが予想以上に便利だったので、皆さまにも使って頂きたいと思い記事にしました。
※データ量が10億個以下であれば1秒程度で作図が完了します。
※Windowsでの使用を想定していますが、Mac,Linuxでも動作確認済みです。(コマンドが若干異なります...)
導入
1.Pythonをインストール
2.コマンドプロンプトで以下のコマンドを実行
pip install ezdxf
使い方
1.ソースコードをどこでもいいので保存します。(拡張子は.py)
2.コマンドプロンプトで以下のコマンドを実行します。(pythonファイルはドラッグ&ドロップがオススメ)
python ******.py
3.outファイルをドラッグ&ドロップ(またはファイルパスを手入力)
コードの説明
①outファイルの6行目以降をリストへ追加
②半角スペースで区切りリストへ追加
③X座標を抽出しリストへ追加
④Y座標を抽出しリストへ追加
⑤X座標とY座標および半径を引数として円を作成する
ソースコード
import os
import ezdxf
from decimal import Decimal
i = 0
list1 = []
list2 = []
x_list = []
y_list = []
filepath = input(".outファイルをドラッグアンドドロップしてください。>>")
with open(rf"{filepath}",encoding="utf-8") as f:
for line in f:
i += 1
if i > 5:
list1.append(line)
for i in range(len(list1)):
list2.append(list1[i].split())
for j in range(len(list2)):
x_list.append(list2[j][2])
for k in range(len(list2)):
y_list.append(list2[k][3])
doc = ezdxf.new("R2010", setup=True)
doc.layers.new(name="MyLine2", dxfattribs={'linetype': 'CONTINUOUS', 'color': 1})
msp = doc.modelspace()
for l in range(len(x_list)):
x = Decimal(y_list[l])
y = Decimal(x_list[l])
msp.add_circle(center=[x,y], radius=10, dxfattribs={'layer': 'MyLine2'})
msp.add_circle(center=[x,y], radius=1000, dxfattribs={'layer': 'MyLine2'})
doc.saveas('sample.dxf')
print("作図完了")
print("ファイル名:sample.dxf")
print("ファイル作成場所",os.getcwd())
半径はradius=10の部分を変更して使ってください。
(最後にradius=1000と大きめの円を入れている理由は見つけやすいためです。)
参考記事