GeoJSONファイルをDXFに変換する方法
公図ビューアのGeoJSON形式保存機能で保存したGeoJSONファイルは、DXFに変換することができます。これにより登記所備付地図データをCADで利用することが可能になります。
変換方法にはPythonまたはQGISを利用する2通りがあります。それぞれを以下で説明します。
今回説明する方法は、どちらも途中で緯度経度への変換は行わないので、元の登記所備付地図データのXY座標のままのDXFファイルを作成できます。
なお、今回の方法は図面全体を地番ラベルも含めて変換できますが、公図ビューアには筆界線のみを選択した筆だけ簡単にDXFファイルに保存できる機能もあります。
目次
- 本記事の方法がサポートするDXFのバージョン
- 本記事で用いるGeoJSONファイルのサンプル
- 方法1: Python(ezdxf)を利用したDXF変換方法
- 方法2: QGISを利用したDXF変換方法
- 本記事で作成したDXFファイルのダウンロード
DXFファイルの読込・表示の検証には、Windows11 にインストールした以下の2つの2次元CADを利用させていただきました。
- Jw_cad: v8.25a
- RootPro CAD 12 Free: Ver 12.06
Jw_cadは[基本設定]の[DXF読込み]で「図面範囲を読取る」にチェックを入れた状態でDXFファイルを開いています。
本記事の方法で作成するDXFファイルは、GeoJSONファイルの座標の数値をそのまま使用するので、尺度は実寸大(1:1)、単位はメートルになります。
本記事の方法がサポートするDXFのバージョン
今回紹介する2つの方法は、GeoJSONファイルを以下のバージョンのDXFファイルに変換して保存することができます。
変換方法 | 変換可能なDXFバージョン | |
---|---|---|
方法1 | Python(ezdxf ver1.3.5) | R12R2000R2004R2007R2010R2013R2018 |
方法2 | QGIS ver3.34.8 | R2000 |
本記事で用いるGeoJSONファイルのサンプル
本記事では、東京都千代田区一番町〜三番町の 13101-0100-1.zip(任意座標系) をGeoJSON形式保存した 13101-0100-1.geojson
をサンプルとして使用します。
また、ビューアで筆を選択した状態でGeoJSON形式で保存した1筆分のデータ(千代田区一番町1-2.geojson
)も使用します。
それぞれ以下のリンクからダウンロードできます。
今回は任意座標系のデータをサンプルに使用しましたが、座標の数値はそのまま転記するので、公共座標系のデータでもDXFへの変換方法は同じです。
方法1: Python(ezdxf)を利用したDXF変換方法
プログラミング言語の Python で変換プログラムを作成して変換する方法です。変換処理には ezdxf というオープンソースで公開されているDXFを読み書きできるライブラリを利用します。
弊社が作成した変換プログラムはソースコードを以下のnoteの有料記事で公開しています。
上記の有料記事にあるソースコードは、Google Colab で動かせるようにしてあるので、パソコンにPythonがなくてもGoogleアカウントがあればすぐに実行できます。
変換方法
プログラムの実行方法は有料記事で詳しく説明していますが、Google Colabでソースコードを読み込んだら、以下のように上から順にセルを実行してゆくだけです。
変換したDXFファイルをJw_cadで以下のように表示できます。
実際に変換したDXFファイルは本記事でダウンロードできます。有料記事のご購入前の確認などにご利用ください。
DXFファイルのCAD読み込み検証結果
上記のPythonプログラムで変換したDXFファイルが、CADで問題なく読み込んで表示できるかを検証しました。変換プログラムは、以下の設定で実行しました。
Jw_cad と RootPro CAD 12 Free で検証した結果は以下の通りです。
1)「DXFをShift_JISで保存するか」をONにした場合
検証結果の以下の表から、Shift_JISで保存すると RootPro CAD 12 Free では R2007以降 でラベルが表示されませんでした。これは、DXFの仕様ではR2007以降はDXFのエンコーディングは「UTF-8」に限定されており、RootPro CAD 12 Free がこの仕様に対応しているからです。
変換DXFバージョン | R12 | R2000 | R2004 | R2007 | R2010 | R2013 | R2018 |
---|---|---|---|---|---|---|---|
図形 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 半角数字 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 日本語 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
変換DXFバージョン | R12 | R2000 | R2004 | R2007 | R2010 | R2013 | R2018 |
---|---|---|---|---|---|---|---|
図形 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 半角数字 | ◯ | ◯ | ◯ | ✕ | ✕ | ✕ | ✕ |
ラベル: 日本語 | ◯ | ◯ | ◯ | ✕ | ✕ | ✕ | ✕ |
2)「DXFをShift_JISで保存するか」をOFFにした場合
今度は「DXF を Shift_JIS で保存するか: OFF」に変更して、ezdxfのデフォルトのエンコーディングで保存すると、Jw_cad のラベルの日本語が文字化けします。
これは、ezdxfのデフォルトではDXFの仕様に従いR2007以降は「UTF-8」を用い、R2004までは日本語を¥U+9053のようにUnicodeコードポイントに変換するためです。DXFの仕様に対応しているRootPro CAD 12 Freeでは問題なく表示されます。
変換DXFバージョン | R12 | R2000 | R2004 | R2007 | R2010 | R2013 | R2018 |
---|---|---|---|---|---|---|---|
図形 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 半角数字 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 日本語 | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
変換DXFバージョン | R12 | R2000 | R2004 | R2007 | R2010 | R2013 | R2018 |
---|---|---|---|---|---|---|---|
図形 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 半角数字 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 日本語 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
以上より、Jw_cadで使用する場合は、「DXF を Shift_JIS で保存するか」は ON に、Jw_cad以外のCADではOFFに設定して変換するのが適当であるのがわかります。
参考記事(外部リンク)
AutoCAD 2023 Developer and ObjectARX Help | Group Code Value Types Reference (DXF) | Autodesk
方法2: QGISを利用したDXF変換方法
2つ目は、QGISの「プロジェクトをDXFにエクスポート」機能を利用する方法です。
QGISのインストール方法はこちらを参考にしてください。
変換方法
今回は、QGIS 3.34.8 を使用して、前述のサンプル13101-0100-1.geojson
を例にDXFに変換する方法を以下で説明します。
プロジェクトのCRSの設定
QGISを起動したら、メニューバーから[プロジェクト]-[プロパティ]を選択してプロパティ画面を表示し、以下のように[座標参照系(CRS)]のタブで「CRSなし(または未知/非地球)」にチェックして[OK]をクリックします。
GeoJSONファイルをレイヤに追加
メニューバーから[レイヤ]-[レイヤを追加]-[ベクトルレイヤを追加…]を選択して、以下の画面で「ソース」にGeoJSONファイルを指定して、[追加]をクリックします。
レイヤのプロパティを変更
すると図が以下のように表示されますが、のプロジェクトのCRSの設定をもう一度確認してください。もしも「CRSなし」のチェックが外れてしまっていたら、再度チェックし直してください。
レイヤを右クリックして[プロパティ]を選択して、レイヤプロパティの画面を表示します。
この画面でまず「シンボロジ」の設定を変更します。デフォルトでは「塗りつぶし」になっているので、以下のように「アウトライン」の中からどれか選択して[適用]をクリックします。
次に以下のように「直線」を選択して「ストローク幅」を空欄にして[適用]をクリックします。ストローク幅があると筆界線がポリラインでなくハッチングになってしまいます。
今度は「ラベル」のタブを選択します。以下のように一番上のドロップダウンリストから「単一定義(single)」を選択し、[値(value)]のリストは「地番」を選び[適用]をクリックします。
このままだと一部のラベルの位置がずれてしまうので、以下のように[配置]の設定で「ポリゴンの全体の重心」を選択し、「点をポリゴンの内側に強制移動する」にチェックを入れて[OK]をクリックします。
これで以下のように地番のラベル付きの筆界線のレイヤが出来上がりました。これをDXFにエクスポートします。
プロジェクトをDXFでエクスポート
メニューバーから[プロジェクト]-[インポートとエクスポート]-[プロジェクトをDXFにエクスポート…]を選択して、以下の画面を表示します。
上の図のように設定して[OK]をクリックすると、DXFファイルが作成されます。これでCADに読み込むことができます。例えば、Jw_cadで読み込むと以下のように表示できます。
QGISを用いた方法の留意点
上記のQGISを用いた方法には以下の2つ留意点があります。
1. 作成したDXFファイルをメモ帳で開くとわかりますが、以下のように座標の数値がわずかに変わってしまいます。
[例](GeoJSON)-2641.642 (DXF変換後)-2641.64199999999982538
2. DXFにエクスポートするときに、ラベルを出力するために地番を「出力レイヤ属性」に設定しているため、地番のラベルのレイヤが以下のように筆ごとに生成されてしまいます。
それぞれ、CADで精度を小数点以下3桁に設定したり、自分でレイヤを合成(マージ)することで対応できますが、支障となる場合はPython(ezdxf)による方法を用います。
DXFファイルのCAD読み込み検証結果
上記のQGISで変換したDXFファイルが、CADで問題なく読み込んで表示できるかを検証しました。
その結果、QGIS(ver3.34.8)で変換できるバージョンは R2000のみ ですが、以下のように Jw_cad と RootPro CAD 12 Free のどちらでも問題なく表示できました。なお、DXFファイルのエンコーディングは Shift_JIS で保存されていました。
変換DXFバージョン | R2000 |
---|---|
図形 | ◯ |
ラベル: 半角数字 | ◯ |
ラベル: 日本語 | ◯ |
変換DXFバージョン | R2000 |
---|---|
図形 | ◯ |
ラベル: 半角数字 | ◯ |
ラベル: 日本語 | ◯ |
本記事で作成したDXFファイルのダウンロード
本記事で変換したDXFファイルは以下のリンクからダウンロードできます。
Python(ezdxf)による方法で変換したDXFファイル
R12からR2018の各バージョンのDXFファイルをZIP形式で格納してあります。Shift_JIS保存をOFFにしたものは「shift_jis_off」フォルダにあります。
また、上記の検証ではOFFにしましたが、今回使用したPythonのコードでは、座標値を1000倍にして単位をメートルからミリに変換できます。このミリ単位にしたバージョンも以下のリンクでダウンロードできます。Jw_cadで読み込む時に便利です。
※ 有料記事のご購入前の確認用(ご使用のCADで読み込めるかどうか)としてもご利用ください。