LRTKレフィクシア株式会社

点群OBJの指数表記が読み込めないときの変換手順4ステップ

点群データをOBJ形式で書き出し、クラウドや業務システムへアップロードしようとした際に、ファイルが読み込まれない、処理が途中で止まる、頂点が欠落する、モデルが極端に小さく表示されるといった問題が起こることがあります。その原因の一つが、頂点座標に使われている指数表記です。

指数表記は、非常に大きな数値や非常に小さな数値を短く記述できる一般的な表現です。しかし、OBJを読み込む側の実装によっては、指数表記を数値として正しく解釈できない場合があります。OBJファイル自体を開けても、一部の頂点だけが無視されたり、座標がゼロとして扱われたりするケースもあるため、単純なアップロードエラーとは限りません。

本記事では、「点群 OBJ アップロード」で問題が発生した実務担当者に向けて、指数表記を固定小数表記へ変換する手順を4ステップで解説します。元データを壊さずに変換する方法、必要な桁数の考え方、OBJの構造を維持する注意点、再アップロード後の確認方法まで順番に整理します。

点群OBJで指数表記が問題になる理由

OBJは、頂点座標や面、法線、テクスチャ座標などをテキストで記述する形式です。頂点座標は、一般に行頭のvに続けてX、Y、Zの数値を並べます。たとえば、通常の小数表記であれば次のように記録されます。

v 1234.567 9876.543 25.125

同じ座標が指数表記で出力されると、次のような記述になります。

v 1.234567e+03 9.876543e+03 2.5125e+01

数学的には、どちらも同じ値を表しています。1.234567e+03は、1.234567に10の3乗を掛けた値なので、固定小数表記では1234.567です。指数が負の場合は小数点を左へ移動します。

v 1.25e-04 2.50e-05 3.00e-03

この例は、固定小数表記では次の値になります。

v 0.000125 0.000025 0.003

指数表記そのものが異常なわけではありません。問題になるのは、OBJを受け取る側がどの数値形式まで想定しているかです。読み込み処理が単純な文字分割と小数変換だけで構成されている場合や、入力値の形式を厳しく制限している場合には、eやEを含む値が無効と判断されることがあります。

ファイル全体が拒否される場合だけでなく、該当する頂点行だけが読み飛ばされることもあります。その場合、アップロード自体は完了しても、点群の一部が欠けたり、面を構成する頂点番号との対応が崩れたりします。面情報を含むOBJでは、頂点が一つ欠落しただけでも形状の破綻につながる可能性があります。

また、指数表記が直接の原因に見えても、実際には桁区切り、文字コード、改行、余分な文字、座標値の範囲などが同時に影響していることがあります。そのため、ファイル内のeやEをすべて削除するような処理ではなく、座標値を正しく数値変換する必要があります。

まず理解したいOBJの数値表現と読み込み差

OBJはテキスト形式であるため、一般的なテキスト閲覧環境で内容を確認できます。ただし、テキストとして読めることと、アップロード先が正しく解釈できることは別です。

頂点を表す行は、通常、行頭のvと複数の数値で構成されます。

v 100.125 200.250 15.500

法線はvn、テクスチャ座標はvt、面はfで始まります。

vn 0.000 0.000 1.000
vt 0.500 0.500
f 1/1/1 2/2/1 3/3/1

点群として利用するOBJでは、頂点行を中心に構成され、面情報を持たない場合があります。ただし、頂点だけのOBJを点群として受け付けるかどうかは、読み込み先の仕様によって異なります。指数表記を直しても読み込めない場合は、面のないOBJに対応しているか、頂点数やファイル容量に制限がないかといった条件も確認する必要があります。

指数表記の形にも複数のパターンがあります。

1e3
1E3
1e+03
1E-03
1.250000e+03
-2.500000E-04

いずれも一般的な指数表記ですが、読み込み側が一部の形しか受け付けないことがあります。小文字のeは読めても大文字のEを処理できない、正の指数に付いた+を許容しない、小数点を含まない1e3を認識しないといった実装差も考えられます。

さらに、指数表記を固定小数表記へ変換すると、文字列の長さが大きく変わります。たとえば、1e-12は短い文字列ですが、固定小数表記では0.000000000001になります。小さな値が大量に含まれる場合、変換後のOBJファイルが元より大きくなる可能性があります。

反対に、大きな座標では1.23456789e+07が12345678.9のようになります。数値としては同じでも、変換時に小数点以下の桁を一律に切り捨てると、元の精度を失うことがあります。点群の座標変換では、表示上の見た目だけでなく、距離、標高差、位置合わせに必要な精度を考慮しなければなりません。

指数表記を固定小数表記に変える作業は、文字列の置換ではなく、数値を一度正しく解釈し、必要な精度を保った文字列として再出力する処理です。この点を理解しておくと、変換後に座標がずれる事故を防ぎやすくなります。

変換前に確認する範囲と判断基準

変換作業を始める前に、指数表記がどの行に含まれているかを確認します。OBJ内のすべてのeやEが指数を示すとは限りません。コメント、ファイル名、材質名、グループ名などにも同じ文字が含まれる可能性があります。

たとえば、次のような行に含まれる文字を数値の指数として処理してはいけません。

mtllib site_model.mtl
usemtl concrete_surface
g measurement_area

site_modelやconcrete_surfaceに含まれるeを置換すると、関連ファイル名や材質名が変わり、テクスチャや材質の関連付けが失われるおそれがあります。したがって、変換対象は原則として、数値を含む頂点行や必要な数値属性の行に限定します。

点群OBJで最初に確認したいのは、行頭がvの頂点行です。頂点座標に指数表記が含まれている場合は、アップロードエラーとの関連を疑えます。

v 3.521478e+05 3.949125e+06 4.812500e+01

一方で、法線のvnやテクスチャ座標のvtにも指数表記が使われることがあります。アップロード先がこれらの情報を読み込む場合は、同様に変換対象となる可能性があります。

vn 1.250000e-05 0.000000e+00 1.000000e+00
vt 5.000000e-01 2.500000e-01

ただし、最初からファイル内のすべての数値を変換する必要はありません。問題を切り分けるためには、まず頂点行だけを対象にした複製ファイルを作り、読み込み結果を確認する方法が安全です。頂点行の変換だけでアップロードできるようになれば、原因を狭い範囲に特定できます。

変換前には、座標の大きさも確認します。数十から数千程度のローカル座標なのか、数十万から数百万程度の平面座標なのか、原点付近の微小な相対座標なのかによって、残すべき小数桁が変わります。

必要な小数桁を決めるときは、用途を基準にします。数メートル単位の概略確認に使う点群と、数センチメートル以下の差を確認する点群とでは、同じ丸め方を使用できません。座標の単位がメートルで、センチメートル単位の情報を保ちたい場合は、少なくとも小数第2位より細かい値を安易に削除しないようにします。ミリメートル単位の確認が必要であれば、さらに桁を残す必要があります。

座標の単位が不明な場合は、変換前に代表的な2点間の距離を確認します。既知の寸法と比較することで、メートル、ミリメートル、その他の単位のどれに近いかを推定できます。単位を誤解したまま小数桁を削ると、必要な精度を大きく失う可能性があります。

ステップ1 元ファイルを保全して指数表記の位置を特定する

最初のステップは、元のOBJファイルを変更せずに保管し、作業用の複製を作ることです。変換処理に失敗すると、座標値、頂点番号、改行、関連ファイル名などが意図せず変わる可能性があります。必ず元ファイルへ戻せる状態を確保してから作業します。

複製ファイルには、変換対象であることが分かる名前を付けます。たとえば、元のファイル名がsurvey.objであれば、作業用をsurvey_fixed_decimal.objのように区別します。元ファイルと同じ名前で上書きすると、変換前後の比較ができなくなります。

次に、テキスト検索で指数表記の候補を調べます。小文字のeと大文字のEの両方を確認します。ただし、単純な検索結果には、ファイル名や材質名に含まれる文字も混ざります。検索結果の前後を見て、数値の途中にeまたはEが含まれているかを判断します。

指数表記の候補には、正の指数と負の指数があります。

v 1.250000e+05 2.750000e+06 5.200000e+01
v 5.000000e-04 2.500000e-03 1.000000e-02

正の指数は大きな座標、負の指数は小さな値を表す場合が多いものの、必ずしも異常ではありません。座標変換の結果や、法線ベクトルのように小さな値を含みやすい情報では、負の指数が自然に現れることがあります。

指数表記を含む行数も確認します。数行だけなのか、頂点行のほぼすべてなのかで、適した変換方法が変わります。数行であれば、値を確認しながら手作業で修正できる場合があります。しかし、数万行以上の点群OBJを手作業で直すと、入力ミスや行ずれが発生しやすくなります。大量の行を扱う場合は、数値として解析して再出力できる一括処理を利用するのが基本です。

ファイルの先頭、中間、末尾から、それぞれ複数の頂点行を抽出しておくと、変換後の比較に役立ちます。頂点数が多い場合でも、異なる位置のサンプルを記録しておけば、途中から桁数や形式が変わっていないかを確認できます。

この段階では、指数表記以外の異常も確認します。数値の間が空白ではなくカンマで区切られていないか、小数点がピリオド以外になっていないか、行末に不要な記号が付いていないか、数値の一部がNaNや無限値を示す文字列になっていないかを見ます。

次のような行は、指数表記を直すだけでは正常化できない可能性があります。

v 123.45, 678.90, 10.25
v 123,45 678,90 10,25
v NaN 250.000 15.000

OBJの数値は、一般に空白で区切り、小数点にはピリオドを使います。桁区切りや地域設定由来のカンマが含まれている場合は、指数表記とは別の修正が必要です。

ステップ1の目的は、ファイルをすぐに書き換えることではありません。元ファイルを保全し、どの行のどの値を変換するのか、変換対象が何件あるのか、指数表記以外の問題がないかを明確にすることです。

ステップ2 対象の数値だけを固定小数表記へ変換する

指数表記の位置を特定したら、対象となる数値を固定小数表記へ変換します。ここで重要なのは、文字のeやEを削除するのではなく、指数を含む文字列全体を数値として解釈することです。

たとえば、次の値を考えます。

1.2345e+03

e+03だけを削除すると1.2345になり、本来の1234.5とは異なる値になります。正しい変換結果は次のとおりです。

1234.5

負の指数も同様です。

1.2345e-03

正しい固定小数表記は次の値です。

0.0012345

変換処理では、行を空白で区切り、行頭の識別子と数値部分を分けて扱います。頂点行であれば、最初の要素はvのまま保持し、後続のX、Y、Z座標だけを数値変換します。追加の値が存在するOBJでは、その値の意味を確認してから扱います。

変換前の頂点行が次の内容だったとします。

v 3.521478123e+05 3.949125456e+06 4.812345678e+01

固定小数表記へ変換すると、次のようになります。

v 352147.8123 3949125.456 48.12345678

実際の出力桁数は、元の有効数字、座標単位、必要精度、アップロード先の制限を考慮して決めます。一律に小数第2位や第3位で切り捨てると、点群の形状や位置関係が変わる可能性があります。

たとえば、メートル単位の座標で小数第3位まで保持すれば、数値上はミリメートル相当の差を表現できます。しかし、元データの測定精度や処理精度が必ずミリメートル単位であるとは限りません。桁が多いことと、現実の精度が高いことは別です。それでも、変換作業だけで元の情報を失わないためには、最初の変換では十分な桁を残す方法が安全です。

大きな座標では、小数点以下の桁だけでなく、数値全体の有効桁数にも注意が必要です。たとえば、数百万程度の座標値に対して非常に細かな小数を付けると、読み込み側の内部計算精度によっては細部が表現しにくくなることがあります。これは指数表記とは別の問題ですが、変換後も表示が震える、局所的に形状が崩れる、原点付近へ移動すると改善するといった場合には、座標値の大きさが影響している可能性があります。

ただし、読み込みを成功させるために、無断で座標の原点を変更してはいけません。平行移動を行うと、他の測量成果や設計データとの位置関係が変わります。原点移動が必要な場合は、移動量を記録し、復元できる運用にする必要があります。

指数表記を変換するときは、次のような数値も正しく扱います。

-1.250000e+03
+2.500000e-04
0.000000e+00
-0.000000e+00

変換結果の例は次のとおりです。

-1250
0.00025
0
0

-0.000000e+00は数値としてゼロですが、変換方法によっては-0として出力されることがあります。多くの場合は0へ統一して問題ありませんが、処理前後の数値比較では同じ値として扱います。

頂点行以外を変換する場合は、識別子ごとに処理を分けます。vnの法線値は通常、座標より小さな値を含むことがあります。小数桁を少なくしすぎると、方向情報が粗くなる可能性があります。vtのテクスチャ座標も、材質表示に影響するため、必要な桁を保持します。

面を表すf行に含まれる数字は、通常、座標値ではなく頂点、テクスチャ座標、法線などの参照番号です。

f 1/1/1 2/2/1 3/3/1

これらは指数表記の座標変換とは異なるため、原則として変更しません。参照番号を誤って小数へ変換したり並びを変えたりすると、形状が破損します。

材質ファイル名、グループ名、オブジェクト名、コメントも保持します。変換処理は、対象となる行の数値部分だけに限定することが重要です。

ステップ3 桁数とOBJ構造を検証して別名保存する

固定小数表記への変換が終わったら、すぐにアップロードするのではなく、変換後のOBJが構造を保っているか確認します。

最初に確認するのは、指数表記が残っていないかです。小文字のeだけでなく、大文字のEも検索します。検索結果に材質名やファイル名が含まれている場合は、それらを指数表記と誤認しないようにします。数値部分に指数表記が残っているかを確認することが目的です。

次に、変換前後の頂点行数を比較します。元ファイルに100万行の頂点がある場合、変換後も原則として同じ数の頂点行が必要です。変換処理中に空行として除外されたり、解析できない行が削除されたりしていると、頂点数が減少します。

面を含むOBJでは、f行の件数も比較します。頂点行だけを変換したつもりでも、行の再構成処理によって面情報が失われていないか確認します。vn、vt、mtllib、usemtlなど、元ファイルに含まれていた識別子の件数も大きく変わっていないことを確かめます。

続いて、ステップ1で記録した先頭、中間、末尾のサンプル座標を比較します。指数表記の元の値と固定小数表記の変換後の値を数値として比較し、差が許容範囲に収まっていることを確認します。

たとえば、元の値が次の内容だったとします。

3.521478123e+05

変換後が次の値であれば、元の値を保っています。

352147.8123

一方、次の値になっている場合は、桁の不足によって丸めが発生しています。

352147.81

差は約0.0023です。座標単位がメートルなら、数ミリメートル相当の差になります。この差が用途上許容できるかを判断します。概略表示だけなら問題にならない場合がありますが、細かな位置照合では無視できない可能性があります。

座標全体の最小値と最大値も比較します。X、Y、Zのそれぞれについて、変換前後で範囲が大きく変わっていないことを確認します。指数の符号を誤って処理すると、最大値や最小値が桁違いになります。

たとえば、1.25e-03を1.25e+03として扱うと、0.00125が1250になり、値が100万倍変わります。一点だけの誤変換でも、表示範囲が異常に広がり、本来の点群が極端に小さく見える原因になります。

OBJの各頂点行に必要な数値がそろっているかも確認します。一般的な3次元座標であれば、少なくともX、Y、Zの3値が必要です。

v 125.000 250.000 15.000

変換失敗によって次のような行が生じていないかを調べます。

v 125.000 250.000
v 125.000  15.000
v 125.000 invalid 15.000

空白の数が変わること自体は、読み込み側が空白区切りとして正しく処理できれば問題にならない場合があります。しかし、値そのものが欠落している場合は修正が必要です。

保存時には、元ファイルとは異なる名前を使用します。拡張子が二重になっていないことも確認します。見た目はmodel.objでも、実際にはmodel.obj.txtになっていると、アップロード先でOBJとして認識されない場合があります。

関連する材質ファイルや画像がある場合は、OBJ内の参照名を変更しないようにします。ファイル名を変える必要がある場合は、OBJ内の記述と実ファイル名の両方を一致させます。指数表記の変換だけが目的であれば、関連ファイル名には触れない方法が安全です。

ステップ4 小さな範囲から再アップロードして結果を照合する

検証が終わったら、変換後のOBJを再アップロードします。ただし、大容量の点群を最初から本番領域へ投入するのではなく、可能であれば小さなサンプルで確認します。

サンプルは、元のOBJから一定範囲の頂点を取り出す方法や、同じ出力条件で小規模な対象を用意する方法で作成できます。面情報を持つOBJでは、頂点だけを単純に削ると参照番号が崩れるため、形状を維持できる方法でサンプル化する必要があります。

再アップロード時は、処理結果を成功または失敗だけで判断しません。アップロードが完了しても、頂点が欠落している可能性があります。表示された点数、ファイルの範囲、中心位置、高さ、形状、向きなどを確認します。

まず、点群の全体形状が元データと一致しているかを見ます。建物、地形、構造物など、特徴の分かりやすい部分を基準にすると比較しやすくなります。点群が一直線に潰れている場合は、X、Y、Zのいずれかが欠落している可能性があります。平面状に潰れている場合は、一つの軸がゼロや同一値として扱われていることが考えられます。

点群が表示されない場合は、表示範囲の外に配置されていないか確認します。大きな座標値を含むOBJは、読み込み後の初期視点から遠く離れた位置に配置されることがあります。アップロード失敗ではなく、表示位置の問題である可能性もあります。

点群が極端に小さく見える場合は、一部の座標が誤変換されていないか確認します。数値が一つだけ異常に大きいと、全体を収める表示処理によって、本来の点群が小さく縮んで見えます。X、Y、Zの最大値と最小値を再確認し、他の点から大きく離れた値がないかを調べます。

位置合わせが必要なデータでは、既知点や特徴点の座標を照合します。変換前に記録した代表点が、変換後のOBJでも同じ位置にあることを確認します。見た目が似ているだけでは、全体が数メートルずれていても気付かない場合があります。

面や材質を含むOBJでは、形状だけでなく、面の欠落、表裏、法線、材質の適用状態も確認します。指数表記の変換対象を頂点だけに限定した場合でも、保存方法の影響で関連情報が変わる可能性があるためです。

サンプルで問題がなければ、全体ファイルをアップロードします。全体版では、処理時間、ファイル容量、頂点数の上限など、サンプルでは表面化しなかった制限に注意します。小規模ファイルは読み込めるのに全体版だけ失敗する場合、指数表記以外に容量や処理時間の問題が残っている可能性があります。

再アップロード後は、元ファイル、変換後ファイル、変換条件、確認結果をセットで保存します。どの桁数で出力したか、どの行種別を変換したか、座標の原点を変更していないかを記録しておくと、後から同じ処理を再現できます。

変換で起こりやすい失敗と対処方法

指数表記の変換では、読み込みエラーを解消する一方で、新しい問題を作ってしまうことがあります。代表的な失敗を理解しておくと、変換結果の検証がしやすくなります。

最も危険なのは、eやEだけを削除する処理です。1.25e+03からe+03を取り除くと1.25になり、元の値とは大きく異なります。指数表記は、仮数、指数記号、指数部を一つの数値として解釈しなければなりません。

次に多いのが、小数桁を一律に減らしすぎる失敗です。ファイル容量を減らす目的で小数第2位までに統一すると、座標単位によっては必要な精度を失います。特に、元の値が小さな差分によって形状を表している場合、複数の点が同じ座標へ丸められる可能性があります。

たとえば、次の2点を考えます。

v 10.004 20.004 5.004
v 10.006 20.006 5.006

小数第2位に丸めると、処理方法によっては両方が近い値へ集約されます。点の密度や局所形状に影響するため、必要な精度を確認してから桁数を決めます。

反対に、固定小数表記で不要なゼロを大量に付けると、ファイル容量が増えます。

v 123.450000000000000 678.900000000000000 10.250000000000000

桁を残すことは重要ですが、元データ以上の意味のないゼロを追加しても、現実の精度が向上するわけではありません。必要な有効数字を保ちながら、過剰な文字数を避けます。

正負の符号を誤る失敗にも注意します。負の座標や負の指数を変換するとき、先頭のマイナスを落とすと点群が反対側へ移動します。

-2.50e+02

正しい変換結果は-250です。250ではありません。

小数点とカンマの扱いも重要です。作業環境の地域設定によって、数値を文字列へ変換した際に小数点がカンマになることがあります。

v 123,45 678,90 10,25

この形式は、OBJの座標として正しく読まれない可能性があります。変換後は、小数点がピリオドになっていることを確認します。

表計算形式へ一度読み込んで変換する方法は、少量のデータでは便利に見えますが、大規模な点群では注意が必要です。行数上限によって末尾が欠落する、長い数値が丸められる、指数表記へ自動変換される、先頭や末尾のゼロが変更されるといった問題が起こる可能性があります。

また、OBJ全体を区切り形式として読み込むと、コメントや面情報、材質指定などが崩れることがあります。点群の頂点だけを抽出して扱う場合でも、元のOBJへ戻す手順を誤ると、頂点番号と面番号の対応が失われます。

改行の変化も確認が必要です。保存処理によって複数行が一行へ連結されたり、行の途中に不要な改行が入ったりすると、読み込み側が頂点を正しく認識できません。変換後のファイルを先頭だけでなく、中間と末尾でも確認します。

文字コードを変更したことで問題が発生する場合もあります。OBJの数値行は基本的に単純な文字で構成されますが、コメントやグループ名に日本語などが含まれる場合は、保存方法によって文字化けする可能性があります。数値だけでなく、ファイル全体の情報を維持する必要がある場合は、変換前後で文字列も比較します。

指数表記をすべて固定小数表記へ変えたのに読み込めない場合は、原因を指数表記だけに限定しないことが重要です。頂点数、ファイル容量、面情報の有無、座標範囲、欠損値、改行、拡張子、関連ファイル、アップロード先の対応形式などを順番に確認します。

大規模な点群OBJを安全に処理する実務上の工夫

点群OBJは、頂点数によっては非常に大きなファイルになります。一般的な文書編集の感覚で開くと、表示に時間がかかったり、編集環境が応答しなくなったりすることがあります。大容量ファイルでは、全体を画面に表示せず、行単位で順番に読み込みながら変換する方法が適しています。

行単位の処理では、一度に保持するデータ量を抑えられます。元ファイルから一行を読み、行頭の識別子を確認し、対象の数値を変換して、別ファイルへ書き出します。この方法なら、数百万行のOBJでも、全体をメモリ上へ展開する方法より安定して処理しやすくなります。

処理中に解析できない行が見つかった場合は、黙って削除しないようにします。エラー行の番号と内容を記録し、変換処理を停止するか、元の行を維持したまま警告を残す運用が安全です。問題行を自動的に無視すると、アップロード後に点が欠けても原因を追跡しにくくなります。

変換件数も記録します。元ファイルに含まれる頂点行数、指数表記を含む頂点数、変換に成功した数、失敗した数を把握します。対象件数と成功件数が一致しない場合は、アップロード前に原因を調べます。

大容量の点群では、変換前後のファイル全体を数値比較するのが難しいことがあります。その場合でも、座標の最小値、最大値、平均的な範囲、代表点、頂点数などを比較することで、大きな変換ミスを検出できます。

ファイル容量の変化も判断材料になります。指数表記を固定小数表記へ変えると、通常は文字数が変化するため、容量が増減すること自体は異常ではありません。しかし、元の数分の一まで急減した場合は、行が欠落している可能性があります。反対に、数倍以上に増えた場合は、必要以上の小数桁やゼロを出力していないか確認します。

処理時間を短縮するために、最初から元ファイル全体を何度も変換するのではなく、小さな範囲で出力形式を決めてから全体処理へ進みます。指数表記の種類、必要な小数桁、アップロード先の受け付ける形式が分かった後で本変換を行うと、やり直しを減らせます。

複数のOBJを同じ条件で処理する場合は、変換ルールを統一します。担当者ごとに小数桁や対象行が異なると、ファイル間の精度や容量がばらつきます。変換条件を文書化し、ファイル名に処理日や変換条件を含めると管理しやすくなります。

変換後のOBJを圧縮して受け渡す場合は、解凍後の拡張子やファイル名が変わっていないか確認します。アップロード先が圧縮ファイルを直接受け付けるとは限らないため、対応形式に合わせます。

ネットワーク経由で大きなファイルをアップロードする場合は、指数表記の修正とは別に、通信切断や処理時間超過の可能性があります。小規模なサンプルが読み込めるのに全体ファイルだけ失敗する場合は、容量を分割して確認すると、形式と容量のどちらが原因かを判断しやすくなります。

指数表記を再発させない出力ルール

一度変換できても、点群を書き出すたびに同じ問題が起きると、作業負担が増えます。再発防止には、OBJを生成する段階で固定小数表記を選べるか確認することが有効です。

書き出し設定に、数値形式、小数桁、有効桁数、精度、座標出力形式などの項目がある場合は、指数表記を使用しない設定を選びます。設定名は環境によって異なりますが、固定小数、通常表記、指数表記を使わない形式などが該当します。

ただし、小数桁を少なく設定しすぎないようにします。読み込み互換性を優先して固定小数表記へ変えても、座標精度が不足すれば別の問題が発生します。出力設定は、アップロード先の互換性と利用目的の両方を考えて決めます。

座標値が非常に大きい場合は、出力元とアップロード先で座標系や原点の扱いを確認します。大きな座標をそのまま扱えない環境では、指数表記を直しても表示精度の問題が残ることがあります。

ローカル座標へ変換して出力する場合は、元の座標へ戻すための平行移動量や変換条件を必ず保存します。原点移動後のOBJだけが残ると、他の測量成果や設計データとの位置照合が難しくなります。

点群取得、座標変換、OBJ書き出し、アップロードの担当者が異なる場合は、受け渡し条件を明確にします。少なくとも、座標単位、座標系、原点、必要精度、固定小数表記の桁数、面情報の有無、材質ファイルの有無を共有します。

検証済みのサンプルOBJを保管しておくことも有効です。新しい出力条件やアップロード先を試す際に、既知の小規模ファイルを使用すれば、問題が出力元にあるのか、アップロード先にあるのかを切り分けやすくなります。

同じ処理を定期的に行う場合は、手作業の置換ではなく、変換ルールを固定した処理を使用します。入力ファイル、出力ファイル、対象行、桁数、変換件数、エラー件数を記録できる仕組みにすると、担当者が変わっても結果を再現しやすくなります。

点群OBJアップロード前の最終確認

点群OBJをアップロードする前には、指数表記が消えていることだけでなく、ファイル全体の整合性を確認します。

最初に、元ファイルが別に保管されていることを確認します。変換後に問題が判明したとき、元データへ戻れなければ再出力からやり直す必要があります。

次に、変換後ファイルの数値部分を検索し、指数表記が残っていないことを確認します。ファイル名や材質名に含まれるeやEは対象外ですが、頂点、法線、テクスチャ座標など、読み込み対象となる数値行は確認します。

頂点行数が変換前後で一致していることも重要です。面を含む場合は、面行数と参照番号の構造が維持されていることを確かめます。頂点行が減っている場合は、変換できなかった行が削除されていないか調べます。

X、Y、Zの座標範囲を比較し、最小値と最大値が大きく変わっていないことを確認します。一点だけ異常な値が存在すると、アップロード後の表示範囲に影響します。

代表点の座標も比較します。元の指数表記を手計算または数値変換し、固定小数表記の結果と一致することを確認します。先頭付近だけでなく、中間と末尾からも確認すると、ファイルの一部だけ変換条件が異なる問題を見つけやすくなります。

拡張子、ファイル名、関連ファイルとの対応も確認します。材質ファイルや画像を参照するOBJでは、変換処理によって参照名が変わっていないことを確かめます。

アップロード先が頂点のみのOBJを受け付けるかどうかも確認します。指数表記を変換しても、面情報が必須の環境では読み込めません。点群として受け付ける形式と、立体形状として受け付ける形式が分かれている場合もあります。

サンプルファイルでのアップロードが成功したら、表示位置、縮尺、向き、高さ、点数、形状を確認します。成功メッセージだけで判断せず、実際のデータが正しく配置されていることを確認します。

全体ファイルで失敗する場合は、指数表記の修正を何度も繰り返す前に、容量、頂点数、処理時間、通信状態を切り分けます。サンプルが成功しているなら、数値形式以外の制限が原因である可能性があります。

まとめ

点群OBJの指数表記が読み込めない場合は、元ファイルを保全したうえで指数表記の場所を特定し、対象となる数値だけを固定小数表記へ変換します。その後、頂点数、座標範囲、桁数、OBJの行構造を検証し、小さなサンプルから再アップロードする流れが安全です。

指数表記のeやEを単純に削除すると、座標値が大きく変わります。必ず指数を含む文字列全体を数値として解釈し、必要な精度を保って出力することが重要です。また、頂点行以外のファイル名、材質名、グループ名、面の参照番号などを変更しないようにします。

固定小数表記へ変換しても読み込めない場合は、頂点のみのOBJへの対応状況、ファイル容量、頂点数、欠損値、座標範囲、改行、拡張子なども確認します。指数表記だけを原因と決めつけず、サンプルファイルを使って一つずつ切り分けることで、不要な再変換を減らせます。

点群データの取得から座標確認、現場記録、共有までの作業を見直す際は、LRTK Phoneを活用した点群計測の進め方もあわせて確認してください。

現場を3Dで残して、あとから測る。
実際の画面と動画で使い方を確認できます。

LRTK Phoneの使い方・実例を見る
資料請求導入相談
現場をスマホで3DスキャンLRTK Phone実例を見る