GeoJSONファイルをDXFに変換する方法

登記所備付地図データをCADで利用したい方のために、公図ビューアで保存したGeoJSONファイルをDXFに変換する方法をご紹介します。

pdf print flow

公図ビューアのGeoJSON形式保存機能では、座標値は元データのまま保存するので、さらに今回の方法で変換すれば元データのXY座標のままのDXFファイルを作成できます。

変換方法にはPythonまたはQGISを利用する2通りがあります。それぞれを以下で説明します。

目次

検証に利用したCADソフト

DXFファイルの読込・表示の検証には、Windows11 にインストールした以下の2つの2次元CADを利用させていただきました。

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の有料記事で公開しています。

note article
「公図ビューアのGeoJSONファイルのためのDXF変換プログラム ソースコード」(noteのサイトが開きます)

上記の有料記事にあるソースコードは、Google Colab で動かせるようにしてあるので、パソコンにPythonがなくてもGoogleアカウントがあればすぐに実行できます。

変換方法

プログラムの実行方法は有料記事で詳しく説明していますが、Google Colabでソースコードを読み込んだら、以下のように上から順にセルを実行してゆくだけです。

dxf python

変換したDXFファイルをJw_cadで以下のように表示できます。

dxf python
13101-0100-1.geojsonをDXFに変換
dxf python
千代田区一番町1-2.geojsonをDXFに変換

実際に変換した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 で検証した結果は以下の通りです。

Jw_cad
変換DXFバージョン R12 R2000 R2004 R2007 R2010 R2013 R2018
図形
ラベル: 半角数字
ラベル: 日本語
RootPro CAD 12 Free
変換DXFバージョン R12 R2000 R2004 R2007 R2010 R2013 R2018
図形
ラベル: 半角数字
ラベル: 日本語

上の表で、RootPro CAD 12 Free がR2007以降ラベルを表示しないのは、R2007以降はDXFのエンコーディングを「UTF-8」に限定するというDXFの仕様に対応しているからです。

そこで、「DXF を Shift_JIS で保存するか: OFF」に変更して、ezdxfのデフォルトのエンコーディングで保存してどのように変わるか確認してみましょう。

Jw_cad(DXF を Shift_JIS で保存するか: OFF)
変換DXFバージョン R12 R2000 R2004 R2007 R2010 R2013 R2018
図形
ラベル: 半角数字
ラベル: 日本語
RootPro CAD 12 Free(DXF を Shift_JIS で保存するか: OFF)
変換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]をクリックします。

qgis project crs

GeoJSONファイルをレイヤに追加

メニューバーから[レイヤ]-[レイヤを追加]-[ベクトルレイヤを追加…]を選択して、以下の画面で「ソース」にGeoJSONファイルを指定して、[追加]をクリックします。

qgis add layer

レイヤのプロパティを変更

すると図が以下のように表示されますが、のプロジェクトのCRSの設定をもう一度確認してください。もしも「CRSなし」のチェックが外れてしまっていたら、再度チェックし直してください。

qgis layer

レイヤを右クリックして[プロパティ]を選択して、レイヤプロパティの画面を表示します。

この画面でまず「シンボロジ」の設定を変更します。デフォルトでは「塗りつぶし」になっているので、以下のように「アウトライン」の中からどれか選択して[適用]をクリックします。

qgis layer symbology

次に以下のように「直線」を選択して「ストローク幅」を空欄にして[適用]をクリックします。ストローク幅があると筆界線がポリラインでなくハッチングになってしまいます。

qgis layer

今度は「ラベル」のタブを選択します。以下のように一番上のドロップダウンリストから「単一定義(single)」を選択し、[値(value)]のリストは「地番」を選び[適用]をクリックします。

qgis layer label

このままだと一部のラベルの位置がずれてしまうので、以下のように[配置]の設定で「ポリゴンの全体の重心」を選択し、「点をポリゴンの内側に強制移動する」にチェックを入れて[OK]をクリックします。

qgis layer label position

これで以下のように地番のラベル付きの筆界線のレイヤが出来上がりました。これをDXFにエクスポートします。

qgis project

プロジェクトをDXFでエクスポート

メニューバーから[プロジェクト]-[インポートとエクスポート]-[プロジェクトをDXFにエクスポート…]を選択して、以下の画面を表示します。

qgis dxf export

上の図のように設定して[OK]をクリックすると、DXFファイルが作成されます。これでCADに読み込むことができます。例えば、Jw_cadで読み込むと以下のように表示できます。

qgis jwcad

留意点

上記のQGISを用いた方法には以下の2つ留意点があります。

  1. 作成したDXFファイルをメモ帳で開くとわかりますが、以下のように座標の数値がわずかに変わってしまいます。
  2. [例](GeoJSON)-2641.642 (DXF変換後)-2641.64199999999982538
  3. DXFにエクスポートするときに、ラベルを出力するために地番を「出力レイヤ属性」に設定しているため、地番のラベルのレイヤが以下のように筆ごとに生成されてしまいます。
  4. dxf label layers
    RootPro CAD 12 Freeで確認

それぞれ、CADで精度を小数点以下3桁に設定したり、自分でレイヤを合成(マージ)することで対応できますが、支障となる場合はPython(ezdxf)による方法を用います。

【DXFファイルの検証結果】

上記のQGISで変換したDXFファイルが、CADで問題なく読み込んで表示できるかを検証しました。

その結果、QGIS(ver3.34.8)で変換できるバージョンはR2000のみですが、以下のように Jw_cad と RootPro CAD 12 Free のどちらでも問題なく表示できました。なお、DXFファイルのエンコーディングは Shift_JIS で保存されています。

Jw_cad
変換DXFバージョン R2000
図形
ラベル: 半角数字
ラベル: 日本語
RootPro CAD 12 Free
変換DXFバージョン R2000
図形
ラベル: 半角数字
ラベル: 日本語

本記事で作成したDXFファイルのダウンロード

本記事で変換したDXFファイルは以下のリンクからダウンロードできます。

Python(ezdxf)による方法で変換したDXFファイル

R12からR2018の各バージョンのDXFファイルをZIP形式で格納してあります。Shift_JIS保存をOFFにしたものは「shift_jis_off」フォルダにあります。

※ 有料記事のご購入前の確認用(ご使用のCADで読み込めるかどうか)としてもご利用ください。

QGISによる方法で変換したDXFファイル