GeoJSONファイルをDXFに変換する方法
登記所備付地図データをCADで利用したい方のために、公図ビューアで保存したGeoJSONファイルをDXFに変換する方法をご紹介します。
公図ビューアのGeoJSON形式保存機能では、座標値は元データのまま保存するので、さらに今回の方法で変換すれば元データのXY座標のままのDXFファイルを作成できます。
変換方法にはPythonまたはQGISを利用する2通りがあります。それぞれを以下で説明します。
目次
- サポートする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.3) | 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ファイルの検証結果】
上記のPythonプログラムで変換したDXFファイルが、CADで問題なく読み込んで表示できるかを検証しました。変換プログラムは、以下の設定で実行しました。
- DXFのバージョン: R12, R2000, R2004, R2007, R2010, R2013, R2018
- DXF を Shift_JIS で保存するか: ON
- ラベル(地番)を出力するか: ON
- ラベルのサイズ: 3.0
- ラベルを MSゴシック にするか: ON
Jw_cad と RootPro CAD 12 Free で検証した結果は以下の通りです。
変換DXFバージョン | R12 | R2000 | R2004 | R2007 | R2010 | R2013 | R2018 |
---|---|---|---|---|---|---|---|
図形 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 半角数字 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 日本語 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
変換DXFバージョン | R12 | R2000 | R2004 | R2007 | R2010 | R2013 | R2018 |
---|---|---|---|---|---|---|---|
図形 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 半角数字 | ◯ | ◯ | ◯ | ✕ | ✕ | ✕ | ✕ |
ラベル: 日本語 | ◯ | ◯ | ◯ | ✕ | ✕ | ✕ | ✕ |
上の表で、RootPro CAD 12 Free がR2007以降ラベルを表示しないのは、R2007以降はDXFのエンコーディングを「UTF-8」に限定するというDXFの仕様に対応しているからです。
そこで、「DXF を Shift_JIS で保存するか: OFF」に変更して、ezdxfのデフォルトのエンコーディングで保存してどのように変わるか確認してみましょう。
変換DXFバージョン | R12 | R2000 | R2004 | R2007 | R2010 | R2013 | R2018 |
---|---|---|---|---|---|---|---|
図形 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 半角数字 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 日本語 | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
変換DXFバージョン | R12 | R2000 | R2004 | R2007 | R2010 | R2013 | R2018 |
---|---|---|---|---|---|---|---|
図形 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 半角数字 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
ラベル: 日本語 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
今度は Jw_cad のラベルの日本語が文字化けします。これは、ezdxfのデフォルトではDXFの仕様に従いR2007以降は「UTF-8」を用い、R2004までは日本語を¥U+9053のようにUnicodeコードポイントに変換するためです。DXFの仕様に対応しているRootPro CAD 12 Freeでは問題なく表示されます。
以上より、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を用いた方法には以下の2つ留意点があります。
- 作成したDXFファイルをメモ帳で開くとわかりますが、以下のように座標の数値がわずかに変わってしまいます。 [例](GeoJSON)-2641.642 (DXF変換後)-2641.64199999999982538
- DXFにエクスポートするときに、ラベルを出力するために地番を「出力レイヤ属性」に設定しているため、地番のラベルのレイヤが以下のように筆ごとに生成されてしまいます。
それぞれ、CADで精度を小数点以下3桁に設定したり、自分でレイヤを合成(マージ)することで対応できますが、支障となる場合はPython(ezdxf)による方法を用います。
【DXFファイルの検証結果】
上記の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」フォルダにあります。
※ 有料記事のご購入前の確認用(ご使用のCADで読み込めるかどうか)としてもご利用ください。