Skip to content

Repository files navigation

ARCoordinateViewer 1.5.5

KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを読み込み、測量点・境界線・画地・画像をiPhoneのカメラ映像に重ねて確認するSwiftUI / ARKitアプリです。現場で迷いにくいよう、操作を「AR」「地図」「データ」の3画面に整理しています。

バージョン1.5.5では、ゲームの移動操作のように使えるドラッグ式パッドを採用し、方位・高さ・前後左右を調整した状態での「中心を更新」を改善しました。標高GeoTIFFと基盤地図情報DEMによる地形追従、AR写真・動画撮影、LiDAR表示にも対応しています。

できること

  • 点を球体、境界線・画地外周・柱を軽量な結合メッシュでAR表示
  • 点名と画地名を色分けし、選択した点を強調表示
  • 読み込んだデータを平面図で確認し、目標点または立ち位置を選択
  • ファイル単位のレイヤー表示・非表示・削除
  • GeoTIFFを半透明の水平画像として表示
  • 標高付きGeoTIFFまたは基盤地図情報DEMを使い、境界線を地形に沿わせてAR表示
  • 方位、高さ、前後左右の表示位置を現場で微調整
  • 距離に応じて点と線の見やすさを自動調整
  • コンパスを補助に使い、森林・草地での方位ドリフトを緩やかに補正
  • LiDAR対応端末で、現実物体の後ろにあるAR表示を部分単位で薄く表示
  • 操作UIを写さずにAR写真を写真アプリへ保存
  • ReplayKitでAR動画を録画し、録画後に保存・共有

本アプリの表示は現地確認を補助するための概略表示です。境界の確定、測量成果の検証、位置精度の保証を行うものではありません。

最初の3ステップ

  1. 下部の「データ」を開き、「データを追加」から境界データを読み込みます。地形追従を使う場合は、続けて標高GeoTIFFまたは基盤地図情報DEMも追加します。基盤地図情報DEMは、先に読み込んだ点・線・画地の周辺だけを自動選別します。
  2. 「AR」に戻り、上部の「立ち位置を設定してください」を押して、現在立っている位置を設定します。
  3. 必要に応じて「地図」で目標点を選び、「AR」で現地と重ねて確認します。

AR画面上部の状態表示は、次に必要な操作へつながるボタンです。データ未読込なら「データ」、立ち位置未設定なら設定方法を開き、準備後は詳しい追跡状態を表示します。

3つの画面

AR

  • カメラ映像に点・線・柱・GeoTIFF・名称を重ねて表示します。
  • 左下の丸い小型パッドを現在位置を移動したい方向へ倒し、AR表示を見ながら前後左右を調整します。
  • 調整後はパッド内の「中心を更新」で、現在の表示中心と高さを新しい基準に反映できます。
  • 右下の白いカメラボタンで写真、赤い動画ボタンで録画を開始します。
  • 右上の目に斜線が付いたボタンで、AR要素を残したまま操作UIをまとめて隠せます。
  • 「位置合わせ」で立ち位置、補正値のリセット・基準反映、方位、高さを調整します。
  • 「表示項目」で点、線、点名、距離、柱、GeoTIFF、LiDARを切り替えます。
  • 右上の「…」から立ち位置、詳細設定、ライト、ヘルプを開きます。
  • AR画面の横スワイプで方位、縦スワイプで高さを微調整できます。斜め操作は一方の調整だけに固定されます。

地図

  • 読み込んだ点、線、画地、GeoTIFFを平面表示します。
  • 点をタップして、ARで強調する目標点または現在の立ち位置として適用できます。
  • GeoTIFFだけを読み込んだ場合も画像上の位置を選択できます。

データ

  • KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを追加します。
  • GeoTIFFは読込時に「背景画像」または「標高DEM」の用途を選択します。
  • 読み込んだファイルをレイヤーとして管理します。
  • 不要なレイヤーを非表示または削除できます。
  • 表示制限、地図、AR表示、境界線の地形追従は表示中のレイヤーだけを対象にします。

対応形式

形式主な対応内容注意点
KML / KMZPoint、LineString、Polygon、名称、標高KMZは一般的なdeflate / store方式を対象とします。
CSV点名、緯度・経度・高さ、または点名・X・Y・Z読込時に列と座標系を指定します。
SIMAA01座標、D00〜D99画地座標は指定した平面直角座標系として扱います。派生仕様は読めない場合があります。
GeoTIFF(背景画像)緯度経度または平面直角座標系1〜19系簡易対応です。座標系は読込時に指定します。
GeoTIFF(標高DEM)単一バンドの数値標高、緯度経度または平面直角座標系1〜19系標高値の単位はmを想定します。画像としては表示しません。
基盤地図情報DEM国土地理院の数値標高モデルXML、またはXMLを格納したZIPDEM1A / 5A / 5B / 5C / 10A / 10B、JGD2011 / JGD2024を対象とします。

背景画像と標高DEMのGeoTIFFは、ModelPixelScaleTag + ModelTiepointTagまたはModelTransformationTagに対応します。EPSG情報からの座標系自動決定は行わず、読込時に緯度経度または平面直角座標系1〜19系を指定します。

背景画像として読み込んだGeoTIFFは、端末負荷を抑えるため最大辺2048px程度へ縮小し、同時表示は1枚です。白・黒・明るさによる画素別透過は行わず、画像全体の不透明度を設定します。初期値は35%です。標高DEMとして読み込んだGeoTIFFは縮小せず、数値セルとして扱います。

標高GeoTIFFの対応範囲

項目対応
TIFF構造通常のClassic TIFF(リトルエンディアン/ビッグエンディアン)
バンド単一バンド、SamplesPerPixel=1
数値型8 / 16 / 32 / 64bitの符号なし整数・符号付き整数、32 / 64bit浮動小数点
格納方法ストリップ、タイル
圧縮無圧縮、LZW、Deflate、旧Deflate、PackBits
位置情報ModelPixelScaleTag + ModelTiepointTag、またはModelTransformationTag
画素基準PixelIsArea、PixelIsPoint
欠測値GDAL_NODATA、NaN、非有限値

BigTIFF、複数バンドのRGB画像、バンド別平面配置、左上起点以外のOrientation、JPEG・ZSTD等の未対応圧縮、浮動小数点への水平差分Predictor、位置情報タグがないTIFF、ワールドファイルだけの画像には対応していません。単一バンドのパレット画像は色ではなく画素番号を数値標高として解釈してしまうため、標高DEMには使用しないでください。COGはローカルファイルとして通常のClassic TIFF構造と上表の条件を満たす範囲だけを読み、COG固有の通信・部分読込最適化は行いません。GeoTIFF内の標高単位やScale / Offset、鉛直基準面は自動変換しません。

DEMによる境界線の地形追従

  • 標高GeoTIFFまたは基盤地図情報DEMを読み込むと、そのファイルは標高DEMレイヤーとして追加されます。
  • 「境界線をDEMの地形に沿わせる」をONにすると、表示中のDEMと重なる線・画地外周を細分化し、各位置の標高をAR表示へ適用します。
  • 同じ設定がONのときは、DEM範囲内の点にもDEM標高を補間してAR表示へ適用します。点は線のような細分化を行わず、元の点位置で高さだけを更新します。
  • 元の境界座標や標高は変更しません。DEMレイヤーを非表示または削除した場合、地形追従をOFFにした場合は、境界線が元の表示へ戻ります。再表示すると再びDEMを適用します。
  • 複数のDEMが重なる場所では、表示中のDEMを細かい解像度から調べます。範囲外または欠測の場合だけ次のDEMへ進みます。
  • DEMの標高0mは海抜0mの有効値です。KML / CSV / SIMAの従来の「標高0・標高なしの概略補完」とは分けて扱い、DEMでは0mを欠測にしません。
  • 標高は周囲4セルの有効値を距離に応じて補間します。一部が欠測なら残った有効セルだけで補間し、4セルすべてが欠測の場合だけ周囲2セルまでの最も近い有効値を使用します。そこにも値がなければ、その位置では元の境界標高を使用します。
  • 境界線のDEMサンプリング間隔は1〜50mで設定できます。初期値は5mです。ただし、DEM自体のセル間隔より細かくはせず、大量データでは処理負荷を抑えるため自動的に粗くします。
  • 細分化で生成する境界区間は、通常は表示対象全体で約5,000区間以内を目安に調整します。元の境界線がすでに5,000区間を超える場合は、元の区間を欠落させないことを優先します。
  • 地形追従はAR上の概略確認用です。DEMの測量精度、作成時期、植生下の補間、異なるDEMの継ぎ目などにより、現地地盤と一致しない場合があります。

基盤地図情報DEMは、先に読み込んだ点・線・画地の全座標から外周100mの対象範囲を作り、1m DEMの標準ファイル名に含まれる3次メッシュ番号で重なるXMLだけを選別してから展開します。DEMを先に選ぶと対象範囲を作れないため、先に別の点・線データを読み込むよう案内します。対象範囲が離れた場所に複数ある場合は、それらを含む範囲のXMLが選ばれます。

基盤地図情報DEMでは、XML単体と通常ZIP内のXMLを受け付けます。JPGISのtupleListstartPoint、北西から東方向へ進む走査順を解釈し、「データなし」と-9999を欠測として扱います。1つのXMLに1つのDEM・coverageがある国土地理院の通常配布形式を対象とし、複数coverageを1ファイルへまとめた派生XMLは誤適用を避けるため拒否します。JGD2000は座標変換未実装のため対象外です。ZIPは無圧縮またはDeflateに対応し、CRCを確認します。ZIP内のDEMが1件でも壊れている場合は部分読込せず、全体をエラーにします。ZIP64、暗号化ZIP、その他の圧縮方式には対応していません。

DEM読込時の安全上限

異常に大きいファイルや展開爆弾でアプリが停止しないよう、次の上限を設けています。上限を超えた場合は読込を中止し、範囲を分けるようメッセージを表示します。

  • 基盤地図情報DEM:1グリッド最大2,000,000セル、1回の読込合計最大48,000,000セル
  • 基盤地図情報DEMのZIP:最大512項目、展開後合計最大512MB
  • 標高GeoTIFF:最大8,000,000セル
  • 標高GeoTIFFのストリップ/タイル:最大100,000ブロック
  • 数値標高の安全範囲:-12,000〜20,000m

位置合わせと表示精度

立ち位置は次の方法で設定できます。

  • iPhoneの現在位置を使う
  • 読み込んだ点を現在位置として使う
  • 緯度経度を入力する
  • 日本の平面直角座標系1〜19系でX・Yを入力する

前後左右の水平移動は、AR画面左下の丸いパッドを、現在位置を移動したい方向へ倒して調整します。ノブは指に追従し、指を離すと中央へ戻りますが、調整値は維持されます。「微/大」で感度を切り替え、位置と高さが合ったら「中心を更新」を押します。現在の表示中心と高さが新しい基準へ反映され、表示位置を保ったまま水平調整値が0へ戻ります。「0」は立ち位置を変更せず、水平調整だけをリセットします。パッドは×で隠せ、「表示項目」または右上の「…」から再表示できます。

画面をほかの人に見せる場合は、右上の目に斜線が付いたボタンで、状態表示、タブバー、位置調整、撮影、設定などの操作UIを一括非表示にできます。右上に残る小さな目のボタンで通常表示へ戻します。

「方位安定化(コンパス補助)」は、コンパスがほぼ変化していないのにARKitの推定方位だけが動いた場合、表示を急に戻さず緩やかに補正します。磁気の乱れる場所ではOFFにしてください。読込、設定、地図などでARカメラを止めている間は、方位更新も停止します。

高さ情報は初期状態では使用しません。「高さ情報を使う(概略)」をONにした場合だけ、KML / CSV / SIMAの標高を現在地付近からの概略的な上下差として表示します。KML / CSV / SIMAの標高0または標高なしは、読込時に近い有効標高から概略補完します。DEMを読み込むと、この高さ表示と境界線の地形追従がONになります。DEM内の標高0mは有効値です。

位置精度は、入力座標、iPhoneの現在位置、コンパス、周囲の磁気環境、ARKitの追跡状態に依存します。LiDARをONにしてもGPS座標や方位の絶対精度は向上しません。

LiDAR・写真・動画の制限

LiDAR

  • LiDAR対応端末で「LiDARを使用」と「物体の後ろを薄く表示」をONにした場合だけ動作します。
  • 現実物体の後ろにある点・線などを部分単位で薄く表示します。手、柱、壁などの境界での見え方は端末実機での確認が必要です。
  • v38では、線・柱を小規模データ時は約25〜30cmの区間へ分けて判定します。大量データ時は負荷を抑えるため自動的に粗い空間グループへ切り替わります。
  • 点・選択点・GeoTIFFは複数箇所の深度を調べますが、各要素の不透明度をまとめて変える方式です。カメラ画素と完全に一致する輪郭マスクではありません。
  • 深度が取得できない場所や信頼度が低い場所は通常表示になります。
  • 深度解像度、距離、光沢面、透明物、細い物、動く物体、照明条件によって境界がずれることがあります。
  • 処理負荷を抑えるため、深度判定の頻度と対象数を制限し、不透明度を緩やかに変化させます。
  • LiDAR非対応端末では自動的に無効になり、OFF時は関連処理を停止します。

写真

  • カメラ映像、点、線、柱、GeoTIFF、点名、画地名、選択点を保存します。
  • 上部状態表示、位置合わせなどの操作案内、下部メニュー、撮影・設定ボタンは保存画像に含めません。
  • 初回は「写真への追加」権限が必要です。拒否した場合はiOSの設定アプリから変更してください。
  • 撮影中と保存中は進行状態を表示します。画像作成が完了しない場合はタイムアウトし、再撮影できる状態へ戻します。

動画

  • 録画開始前に通常の操作UIを隠し、カメラ映像とAR要素を録画します。
  • 画面上の停止ボタンで終了し、iOSの保存・共有画面を表示します。
  • 保存・共有画面を閉じると通常UIを復元します。
  • ReplayKitとiOSが表示する録画インジケーターなどは完全に非表示にできない場合があります。
  • ReplayKitの可否や保存動作はシミュレータではなく実機で確認してください。

ビルド

  1. AR境界簡易表示.xcodeprojをXcodeで開きます。
  2. Signing & CapabilitiesでTeamとBundle Identifierを設定します。
  3. iOS 18以降の実機iPhoneを選択してビルドします。
  4. 初回起動時にカメラと位置情報を許可します。写真保存を使う場合は、撮影時に「写真への追加」も許可します。
  5. 「AR」画面でカメラ映像と追跡状態を確認します。

シミュレータではARカメラ、LiDAR、ReplayKitを十分に確認できません。実機確認項目はXCODE_TEST_CHECKLIST.mdを参照してください。このパッケージの生成環境にはXcodeがないため、最終的なビルドと実機動作の確認は未実施です。

主な表示設定

  • 点、線、点名、距離、柱、GeoTIFFの表示切替
  • 表示半径と最大表示数
  • 点、選択点、線幅の固定サイズ
  • 点・線・平面図のサイズをまとめて調整する表示サイズ倍率
  • 表示半径・点名表示距離をまとめて調整する表示範囲倍率
  • 距離による自動サイズ調整と遠方の最小サイズ
  • GeoTIFF不透明度
  • 境界線のDEM地形追従とサンプリング間隔(1〜50m)
  • 点名・画地名の表示距離と件数
  • 標高による概略上下表示
  • 方位安定化
  • LiDARの奥側不透明度

設定値は端末内に保存され、次回起動時も維持されます。大量データでは表示範囲と件数を制限し、立ち位置に近い要素を優先します。

以下のv38〜v40.4は、App Storeの公開バージョンとは別の内部開発履歴です。

内部開発版 v40.4の修正

  • 旧版と同じ「中心を更新」ボタンを、AR画面のドラッグパッド内へ復活
  • 表示中心を新しい立ち位置に反映した後、水平調整値を0へ戻す旧版の挙動を維持
  • 上段を「微/大」と「中心を更新」、下段を感度表示と「0」にし、旧版に近い操作配置へ変更
  • パッドの常時表示・非表示保存、UI一括非表示を維持

v40.3の修正

  • AR画面左下の前後左右調整を、矢印タップから丸いノブのドラッグ操作へ変更
  • ドラッグ中はノブを指に追従させ、終了後は中央へ戻しつつ補正値を維持
  • 微調整1cm/大移動8cmの感度切替を、横スライドを使わない1回タップ式で維持
  • 常時表示・非表示の保存、リセット、UI一括非表示を維持

v40.2の修正

  • ContentView.bodyに集中していたタブ、ファイル読込、各シート、状態監視を小さなView式へ分割
  • コンパイラの型推論時間切れエラーを回避
  • 画面操作、読込、写真、動画、LiDAR、DEMの処理内容は変更なし

v40.1の修正

  • GeoTIFFの「背景画像/標高DEM」ボタンを正しい画面構造へ配置
  • geoTIFFPurposeButtonpurposeが見つからないコンパイルエラーを解消
  • 旧形式の1引数版onChangeを全17か所でiOS 18向けAPIへ更新

v40の主な変更

  • AR画面左下に、表示を見ながら使える小型の前後左右パッドを追加
  • パッドを1cm/8cm単位のタップ操作と長押し連続操作へ変更
  • パッドの表示状態を保存し、×・「表示項目」・右上メニューから表示を切替可能に変更
  • タブバーを含む操作UIの一括非表示と、小さな復帰ボタンを追加
  • 写真と動画を独立した直接操作ボタンへ変更し、大きな下部パネルを廃止
  • 撮影方法、移動量、CSV座標形式、設定区分、GeoTIFF用途からセグメント型UIを廃止

v39の主な変更

  • 標高付きGeoTIFFを「標高DEM」として読み込む機能を追加
  • 国土地理院の基盤地図情報DEMをXMLまたはZIPから読み込む機能を追加
  • 表示中のDEMを使い、境界線・画地外周を細分化して地形に沿わせる表示を追加
  • DEMレイヤーの非表示・削除、地形追従OFFで元の境界表示へ戻る非破壊方式を採用
  • DEMの0mを有効値として扱い、欠測セルの局所補間と複数DEMへのフォールバックを追加
  • サンプリング間隔、生成区間数、セル数、ZIP展開量に負荷・安全上限を追加

v38の主な変更

  • 主画面を「AR」「地図」「データ」の3画面に整理
  • AR画面を、状態表示・位置合わせ・撮影・表示項目を中心に再構成
  • 写真撮影に撮影中/保存中/成功/失敗の状態表示、タイムアウト復旧、要求ID管理を追加
  • LiDARによる奥側表示を、線全体の一括切替ではなく部分単位の判定へ改善
  • 詳細な状態値と専門的な設定を常時表示せず、必要なときに開く構成へ変更

既存のファイル読込、レイヤー、平面図、点名検索、名称の色分け、概略標高、軽量メッシュ、スワイプ補正、GeoTIFF不透明度、ライト、画面遷移中のカメラ停止は維持しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - early277/ARCoordinateViewer · GitHub
Skip to content

Repository files navigation

ARCoordinateViewer 1.5.5

KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを読み込み、測量点・境界線・画地・画像をiPhoneのカメラ映像に重ねて確認するSwiftUI / ARKitアプリです。現場で迷いにくいよう、操作を「AR」「地図」「データ」の3画面に整理しています。

バージョン1.5.5では、ゲームの移動操作のように使えるドラッグ式パッドを採用し、方位・高さ・前後左右を調整した状態での「中心を更新」を改善しました。標高GeoTIFFと基盤地図情報DEMによる地形追従、AR写真・動画撮影、LiDAR表示にも対応しています。

できること

  • 点を球体、境界線・画地外周・柱を軽量な結合メッシュでAR表示
  • 点名と画地名を色分けし、選択した点を強調表示
  • 読み込んだデータを平面図で確認し、目標点または立ち位置を選択
  • ファイル単位のレイヤー表示・非表示・削除
  • GeoTIFFを半透明の水平画像として表示
  • 標高付きGeoTIFFまたは基盤地図情報DEMを使い、境界線を地形に沿わせてAR表示
  • 方位、高さ、前後左右の表示位置を現場で微調整
  • 距離に応じて点と線の見やすさを自動調整
  • コンパスを補助に使い、森林・草地での方位ドリフトを緩やかに補正
  • LiDAR対応端末で、現実物体の後ろにあるAR表示を部分単位で薄く表示
  • 操作UIを写さずにAR写真を写真アプリへ保存
  • ReplayKitでAR動画を録画し、録画後に保存・共有

本アプリの表示は現地確認を補助するための概略表示です。境界の確定、測量成果の検証、位置精度の保証を行うものではありません。

最初の3ステップ

  1. 下部の「データ」を開き、「データを追加」から境界データを読み込みます。地形追従を使う場合は、続けて標高GeoTIFFまたは基盤地図情報DEMも追加します。基盤地図情報DEMは、先に読み込んだ点・線・画地の周辺だけを自動選別します。
  2. 「AR」に戻り、上部の「立ち位置を設定してください」を押して、現在立っている位置を設定します。
  3. 必要に応じて「地図」で目標点を選び、「AR」で現地と重ねて確認します。

AR画面上部の状態表示は、次に必要な操作へつながるボタンです。データ未読込なら「データ」、立ち位置未設定なら設定方法を開き、準備後は詳しい追跡状態を表示します。

3つの画面

AR

  • カメラ映像に点・線・柱・GeoTIFF・名称を重ねて表示します。
  • 左下の丸い小型パッドを現在位置を移動したい方向へ倒し、AR表示を見ながら前後左右を調整します。
  • 調整後はパッド内の「中心を更新」で、現在の表示中心と高さを新しい基準に反映できます。
  • 右下の白いカメラボタンで写真、赤い動画ボタンで録画を開始します。
  • 右上の目に斜線が付いたボタンで、AR要素を残したまま操作UIをまとめて隠せます。
  • 「位置合わせ」で立ち位置、補正値のリセット・基準反映、方位、高さを調整します。
  • 「表示項目」で点、線、点名、距離、柱、GeoTIFF、LiDARを切り替えます。
  • 右上の「…」から立ち位置、詳細設定、ライト、ヘルプを開きます。
  • AR画面の横スワイプで方位、縦スワイプで高さを微調整できます。斜め操作は一方の調整だけに固定されます。

地図

  • 読み込んだ点、線、画地、GeoTIFFを平面表示します。
  • 点をタップして、ARで強調する目標点または現在の立ち位置として適用できます。
  • GeoTIFFだけを読み込んだ場合も画像上の位置を選択できます。

データ

  • KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを追加します。
  • GeoTIFFは読込時に「背景画像」または「標高DEM」の用途を選択します。
  • 読み込んだファイルをレイヤーとして管理します。
  • 不要なレイヤーを非表示または削除できます。
  • 表示制限、地図、AR表示、境界線の地形追従は表示中のレイヤーだけを対象にします。

対応形式

形式主な対応内容注意点
KML / KMZPoint、LineString、Polygon、名称、標高KMZは一般的なdeflate / store方式を対象とします。
CSV点名、緯度・経度・高さ、または点名・X・Y・Z読込時に列と座標系を指定します。
SIMAA01座標、D00〜D99画地座標は指定した平面直角座標系として扱います。派生仕様は読めない場合があります。
GeoTIFF(背景画像)緯度経度または平面直角座標系1〜19系簡易対応です。座標系は読込時に指定します。
GeoTIFF(標高DEM)単一バンドの数値標高、緯度経度または平面直角座標系1〜19系標高値の単位はmを想定します。画像としては表示しません。
基盤地図情報DEM国土地理院の数値標高モデルXML、またはXMLを格納したZIPDEM1A / 5A / 5B / 5C / 10A / 10B、JGD2011 / JGD2024を対象とします。

背景画像と標高DEMのGeoTIFFは、ModelPixelScaleTag + ModelTiepointTagまたはModelTransformationTagに対応します。EPSG情報からの座標系自動決定は行わず、読込時に緯度経度または平面直角座標系1〜19系を指定します。

背景画像として読み込んだGeoTIFFは、端末負荷を抑えるため最大辺2048px程度へ縮小し、同時表示は1枚です。白・黒・明るさによる画素別透過は行わず、画像全体の不透明度を設定します。初期値は35%です。標高DEMとして読み込んだGeoTIFFは縮小せず、数値セルとして扱います。

標高GeoTIFFの対応範囲

項目対応
TIFF構造通常のClassic TIFF(リトルエンディアン/ビッグエンディアン)
バンド単一バンド、SamplesPerPixel=1
数値型8 / 16 / 32 / 64bitの符号なし整数・符号付き整数、32 / 64bit浮動小数点
格納方法ストリップ、タイル
圧縮無圧縮、LZW、Deflate、旧Deflate、PackBits
位置情報ModelPixelScaleTag + ModelTiepointTag、またはModelTransformationTag
画素基準PixelIsArea、PixelIsPoint
欠測値GDAL_NODATA、NaN、非有限値

BigTIFF、複数バンドのRGB画像、バンド別平面配置、左上起点以外のOrientation、JPEG・ZSTD等の未対応圧縮、浮動小数点への水平差分Predictor、位置情報タグがないTIFF、ワールドファイルだけの画像には対応していません。単一バンドのパレット画像は色ではなく画素番号を数値標高として解釈してしまうため、標高DEMには使用しないでください。COGはローカルファイルとして通常のClassic TIFF構造と上表の条件を満たす範囲だけを読み、COG固有の通信・部分読込最適化は行いません。GeoTIFF内の標高単位やScale / Offset、鉛直基準面は自動変換しません。

DEMによる境界線の地形追従

  • 標高GeoTIFFまたは基盤地図情報DEMを読み込むと、そのファイルは標高DEMレイヤーとして追加されます。
  • 「境界線をDEMの地形に沿わせる」をONにすると、表示中のDEMと重なる線・画地外周を細分化し、各位置の標高をAR表示へ適用します。
  • 同じ設定がONのときは、DEM範囲内の点にもDEM標高を補間してAR表示へ適用します。点は線のような細分化を行わず、元の点位置で高さだけを更新します。
  • 元の境界座標や標高は変更しません。DEMレイヤーを非表示または削除した場合、地形追従をOFFにした場合は、境界線が元の表示へ戻ります。再表示すると再びDEMを適用します。
  • 複数のDEMが重なる場所では、表示中のDEMを細かい解像度から調べます。範囲外または欠測の場合だけ次のDEMへ進みます。
  • DEMの標高0mは海抜0mの有効値です。KML / CSV / SIMAの従来の「標高0・標高なしの概略補完」とは分けて扱い、DEMでは0mを欠測にしません。
  • 標高は周囲4セルの有効値を距離に応じて補間します。一部が欠測なら残った有効セルだけで補間し、4セルすべてが欠測の場合だけ周囲2セルまでの最も近い有効値を使用します。そこにも値がなければ、その位置では元の境界標高を使用します。
  • 境界線のDEMサンプリング間隔は1〜50mで設定できます。初期値は5mです。ただし、DEM自体のセル間隔より細かくはせず、大量データでは処理負荷を抑えるため自動的に粗くします。
  • 細分化で生成する境界区間は、通常は表示対象全体で約5,000区間以内を目安に調整します。元の境界線がすでに5,000区間を超える場合は、元の区間を欠落させないことを優先します。
  • 地形追従はAR上の概略確認用です。DEMの測量精度、作成時期、植生下の補間、異なるDEMの継ぎ目などにより、現地地盤と一致しない場合があります。

基盤地図情報DEMは、先に読み込んだ点・線・画地の全座標から外周100mの対象範囲を作り、1m DEMの標準ファイル名に含まれる3次メッシュ番号で重なるXMLだけを選別してから展開します。DEMを先に選ぶと対象範囲を作れないため、先に別の点・線データを読み込むよう案内します。対象範囲が離れた場所に複数ある場合は、それらを含む範囲のXMLが選ばれます。

基盤地図情報DEMでは、XML単体と通常ZIP内のXMLを受け付けます。JPGISのtupleListstartPoint、北西から東方向へ進む走査順を解釈し、「データなし」と-9999を欠測として扱います。1つのXMLに1つのDEM・coverageがある国土地理院の通常配布形式を対象とし、複数coverageを1ファイルへまとめた派生XMLは誤適用を避けるため拒否します。JGD2000は座標変換未実装のため対象外です。ZIPは無圧縮またはDeflateに対応し、CRCを確認します。ZIP内のDEMが1件でも壊れている場合は部分読込せず、全体をエラーにします。ZIP64、暗号化ZIP、その他の圧縮方式には対応していません。

DEM読込時の安全上限

異常に大きいファイルや展開爆弾でアプリが停止しないよう、次の上限を設けています。上限を超えた場合は読込を中止し、範囲を分けるようメッセージを表示します。

  • 基盤地図情報DEM:1グリッド最大2,000,000セル、1回の読込合計最大48,000,000セル
  • 基盤地図情報DEMのZIP:最大512項目、展開後合計最大512MB
  • 標高GeoTIFF:最大8,000,000セル
  • 標高GeoTIFFのストリップ/タイル:最大100,000ブロック
  • 数値標高の安全範囲:-12,000〜20,000m

位置合わせと表示精度

立ち位置は次の方法で設定できます。

  • iPhoneの現在位置を使う
  • 読み込んだ点を現在位置として使う
  • 緯度経度を入力する
  • 日本の平面直角座標系1〜19系でX・Yを入力する

前後左右の水平移動は、AR画面左下の丸いパッドを、現在位置を移動したい方向へ倒して調整します。ノブは指に追従し、指を離すと中央へ戻りますが、調整値は維持されます。「微/大」で感度を切り替え、位置と高さが合ったら「中心を更新」を押します。現在の表示中心と高さが新しい基準へ反映され、表示位置を保ったまま水平調整値が0へ戻ります。「0」は立ち位置を変更せず、水平調整だけをリセットします。パッドは×で隠せ、「表示項目」または右上の「…」から再表示できます。

画面をほかの人に見せる場合は、右上の目に斜線が付いたボタンで、状態表示、タブバー、位置調整、撮影、設定などの操作UIを一括非表示にできます。右上に残る小さな目のボタンで通常表示へ戻します。

「方位安定化(コンパス補助)」は、コンパスがほぼ変化していないのにARKitの推定方位だけが動いた場合、表示を急に戻さず緩やかに補正します。磁気の乱れる場所ではOFFにしてください。読込、設定、地図などでARカメラを止めている間は、方位更新も停止します。

高さ情報は初期状態では使用しません。「高さ情報を使う(概略)」をONにした場合だけ、KML / CSV / SIMAの標高を現在地付近からの概略的な上下差として表示します。KML / CSV / SIMAの標高0または標高なしは、読込時に近い有効標高から概略補完します。DEMを読み込むと、この高さ表示と境界線の地形追従がONになります。DEM内の標高0mは有効値です。

位置精度は、入力座標、iPhoneの現在位置、コンパス、周囲の磁気環境、ARKitの追跡状態に依存します。LiDARをONにしてもGPS座標や方位の絶対精度は向上しません。

LiDAR・写真・動画の制限

LiDAR

  • LiDAR対応端末で「LiDARを使用」と「物体の後ろを薄く表示」をONにした場合だけ動作します。
  • 現実物体の後ろにある点・線などを部分単位で薄く表示します。手、柱、壁などの境界での見え方は端末実機での確認が必要です。
  • v38では、線・柱を小規模データ時は約25〜30cmの区間へ分けて判定します。大量データ時は負荷を抑えるため自動的に粗い空間グループへ切り替わります。
  • 点・選択点・GeoTIFFは複数箇所の深度を調べますが、各要素の不透明度をまとめて変える方式です。カメラ画素と完全に一致する輪郭マスクではありません。
  • 深度が取得できない場所や信頼度が低い場所は通常表示になります。
  • 深度解像度、距離、光沢面、透明物、細い物、動く物体、照明条件によって境界がずれることがあります。
  • 処理負荷を抑えるため、深度判定の頻度と対象数を制限し、不透明度を緩やかに変化させます。
  • LiDAR非対応端末では自動的に無効になり、OFF時は関連処理を停止します。

写真

  • カメラ映像、点、線、柱、GeoTIFF、点名、画地名、選択点を保存します。
  • 上部状態表示、位置合わせなどの操作案内、下部メニュー、撮影・設定ボタンは保存画像に含めません。
  • 初回は「写真への追加」権限が必要です。拒否した場合はiOSの設定アプリから変更してください。
  • 撮影中と保存中は進行状態を表示します。画像作成が完了しない場合はタイムアウトし、再撮影できる状態へ戻します。

動画

  • 録画開始前に通常の操作UIを隠し、カメラ映像とAR要素を録画します。
  • 画面上の停止ボタンで終了し、iOSの保存・共有画面を表示します。
  • 保存・共有画面を閉じると通常UIを復元します。
  • ReplayKitとiOSが表示する録画インジケーターなどは完全に非表示にできない場合があります。
  • ReplayKitの可否や保存動作はシミュレータではなく実機で確認してください。

ビルド

  1. AR境界簡易表示.xcodeprojをXcodeで開きます。
  2. Signing & CapabilitiesでTeamとBundle Identifierを設定します。
  3. iOS 18以降の実機iPhoneを選択してビルドします。
  4. 初回起動時にカメラと位置情報を許可します。写真保存を使う場合は、撮影時に「写真への追加」も許可します。
  5. 「AR」画面でカメラ映像と追跡状態を確認します。

シミュレータではARカメラ、LiDAR、ReplayKitを十分に確認できません。実機確認項目はXCODE_TEST_CHECKLIST.mdを参照してください。このパッケージの生成環境にはXcodeがないため、最終的なビルドと実機動作の確認は未実施です。

主な表示設定

  • 点、線、点名、距離、柱、GeoTIFFの表示切替
  • 表示半径と最大表示数
  • 点、選択点、線幅の固定サイズ
  • 点・線・平面図のサイズをまとめて調整する表示サイズ倍率
  • 表示半径・点名表示距離をまとめて調整する表示範囲倍率
  • 距離による自動サイズ調整と遠方の最小サイズ
  • GeoTIFF不透明度
  • 境界線のDEM地形追従とサンプリング間隔(1〜50m)
  • 点名・画地名の表示距離と件数
  • 標高による概略上下表示
  • 方位安定化
  • LiDARの奥側不透明度

設定値は端末内に保存され、次回起動時も維持されます。大量データでは表示範囲と件数を制限し、立ち位置に近い要素を優先します。

以下のv38〜v40.4は、App Storeの公開バージョンとは別の内部開発履歴です。

内部開発版 v40.4の修正

  • 旧版と同じ「中心を更新」ボタンを、AR画面のドラッグパッド内へ復活
  • 表示中心を新しい立ち位置に反映した後、水平調整値を0へ戻す旧版の挙動を維持
  • 上段を「微/大」と「中心を更新」、下段を感度表示と「0」にし、旧版に近い操作配置へ変更
  • パッドの常時表示・非表示保存、UI一括非表示を維持

v40.3の修正

  • AR画面左下の前後左右調整を、矢印タップから丸いノブのドラッグ操作へ変更
  • ドラッグ中はノブを指に追従させ、終了後は中央へ戻しつつ補正値を維持
  • 微調整1cm/大移動8cmの感度切替を、横スライドを使わない1回タップ式で維持
  • 常時表示・非表示の保存、リセット、UI一括非表示を維持

v40.2の修正

  • ContentView.bodyに集中していたタブ、ファイル読込、各シート、状態監視を小さなView式へ分割
  • コンパイラの型推論時間切れエラーを回避
  • 画面操作、読込、写真、動画、LiDAR、DEMの処理内容は変更なし

v40.1の修正

  • GeoTIFFの「背景画像/標高DEM」ボタンを正しい画面構造へ配置
  • geoTIFFPurposeButtonpurposeが見つからないコンパイルエラーを解消
  • 旧形式の1引数版onChangeを全17か所でiOS 18向けAPIへ更新

v40の主な変更

  • AR画面左下に、表示を見ながら使える小型の前後左右パッドを追加
  • パッドを1cm/8cm単位のタップ操作と長押し連続操作へ変更
  • パッドの表示状態を保存し、×・「表示項目」・右上メニューから表示を切替可能に変更
  • タブバーを含む操作UIの一括非表示と、小さな復帰ボタンを追加
  • 写真と動画を独立した直接操作ボタンへ変更し、大きな下部パネルを廃止
  • 撮影方法、移動量、CSV座標形式、設定区分、GeoTIFF用途からセグメント型UIを廃止

v39の主な変更

  • 標高付きGeoTIFFを「標高DEM」として読み込む機能を追加
  • 国土地理院の基盤地図情報DEMをXMLまたはZIPから読み込む機能を追加
  • 表示中のDEMを使い、境界線・画地外周を細分化して地形に沿わせる表示を追加
  • DEMレイヤーの非表示・削除、地形追従OFFで元の境界表示へ戻る非破壊方式を採用
  • DEMの0mを有効値として扱い、欠測セルの局所補間と複数DEMへのフォールバックを追加
  • サンプリング間隔、生成区間数、セル数、ZIP展開量に負荷・安全上限を追加

v38の主な変更

  • 主画面を「AR」「地図」「データ」の3画面に整理
  • AR画面を、状態表示・位置合わせ・撮影・表示項目を中心に再構成
  • 写真撮影に撮影中/保存中/成功/失敗の状態表示、タイムアウト復旧、要求ID管理を追加
  • LiDARによる奥側表示を、線全体の一括切替ではなく部分単位の判定へ改善
  • 詳細な状態値と専門的な設定を常時表示せず、必要なときに開く構成へ変更

既存のファイル読込、レイヤー、平面図、点名検索、名称の色分け、概略標高、軽量メッシュ、スワイプ補正、GeoTIFF不透明度、ライト、画面遷移中のカメラ停止は維持しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - early277/ARCoordinateViewer · GitHub
Skip to content

Repository files navigation

ARCoordinateViewer 1.5.5

KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを読み込み、測量点・境界線・画地・画像をiPhoneのカメラ映像に重ねて確認するSwiftUI / ARKitアプリです。現場で迷いにくいよう、操作を「AR」「地図」「データ」の3画面に整理しています。

バージョン1.5.5では、ゲームの移動操作のように使えるドラッグ式パッドを採用し、方位・高さ・前後左右を調整した状態での「中心を更新」を改善しました。標高GeoTIFFと基盤地図情報DEMによる地形追従、AR写真・動画撮影、LiDAR表示にも対応しています。

できること

  • 点を球体、境界線・画地外周・柱を軽量な結合メッシュでAR表示
  • 点名と画地名を色分けし、選択した点を強調表示
  • 読み込んだデータを平面図で確認し、目標点または立ち位置を選択
  • ファイル単位のレイヤー表示・非表示・削除
  • GeoTIFFを半透明の水平画像として表示
  • 標高付きGeoTIFFまたは基盤地図情報DEMを使い、境界線を地形に沿わせてAR表示
  • 方位、高さ、前後左右の表示位置を現場で微調整
  • 距離に応じて点と線の見やすさを自動調整
  • コンパスを補助に使い、森林・草地での方位ドリフトを緩やかに補正
  • LiDAR対応端末で、現実物体の後ろにあるAR表示を部分単位で薄く表示
  • 操作UIを写さずにAR写真を写真アプリへ保存
  • ReplayKitでAR動画を録画し、録画後に保存・共有

本アプリの表示は現地確認を補助するための概略表示です。境界の確定、測量成果の検証、位置精度の保証を行うものではありません。

最初の3ステップ

  1. 下部の「データ」を開き、「データを追加」から境界データを読み込みます。地形追従を使う場合は、続けて標高GeoTIFFまたは基盤地図情報DEMも追加します。基盤地図情報DEMは、先に読み込んだ点・線・画地の周辺だけを自動選別します。
  2. 「AR」に戻り、上部の「立ち位置を設定してください」を押して、現在立っている位置を設定します。
  3. 必要に応じて「地図」で目標点を選び、「AR」で現地と重ねて確認します。

AR画面上部の状態表示は、次に必要な操作へつながるボタンです。データ未読込なら「データ」、立ち位置未設定なら設定方法を開き、準備後は詳しい追跡状態を表示します。

3つの画面

AR

  • カメラ映像に点・線・柱・GeoTIFF・名称を重ねて表示します。
  • 左下の丸い小型パッドを現在位置を移動したい方向へ倒し、AR表示を見ながら前後左右を調整します。
  • 調整後はパッド内の「中心を更新」で、現在の表示中心と高さを新しい基準に反映できます。
  • 右下の白いカメラボタンで写真、赤い動画ボタンで録画を開始します。
  • 右上の目に斜線が付いたボタンで、AR要素を残したまま操作UIをまとめて隠せます。
  • 「位置合わせ」で立ち位置、補正値のリセット・基準反映、方位、高さを調整します。
  • 「表示項目」で点、線、点名、距離、柱、GeoTIFF、LiDARを切り替えます。
  • 右上の「…」から立ち位置、詳細設定、ライト、ヘルプを開きます。
  • AR画面の横スワイプで方位、縦スワイプで高さを微調整できます。斜め操作は一方の調整だけに固定されます。

地図

  • 読み込んだ点、線、画地、GeoTIFFを平面表示します。
  • 点をタップして、ARで強調する目標点または現在の立ち位置として適用できます。
  • GeoTIFFだけを読み込んだ場合も画像上の位置を選択できます。

データ

  • KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを追加します。
  • GeoTIFFは読込時に「背景画像」または「標高DEM」の用途を選択します。
  • 読み込んだファイルをレイヤーとして管理します。
  • 不要なレイヤーを非表示または削除できます。
  • 表示制限、地図、AR表示、境界線の地形追従は表示中のレイヤーだけを対象にします。

対応形式

形式主な対応内容注意点
KML / KMZPoint、LineString、Polygon、名称、標高KMZは一般的なdeflate / store方式を対象とします。
CSV点名、緯度・経度・高さ、または点名・X・Y・Z読込時に列と座標系を指定します。
SIMAA01座標、D00〜D99画地座標は指定した平面直角座標系として扱います。派生仕様は読めない場合があります。
GeoTIFF(背景画像)緯度経度または平面直角座標系1〜19系簡易対応です。座標系は読込時に指定します。
GeoTIFF(標高DEM)単一バンドの数値標高、緯度経度または平面直角座標系1〜19系標高値の単位はmを想定します。画像としては表示しません。
基盤地図情報DEM国土地理院の数値標高モデルXML、またはXMLを格納したZIPDEM1A / 5A / 5B / 5C / 10A / 10B、JGD2011 / JGD2024を対象とします。

背景画像と標高DEMのGeoTIFFは、ModelPixelScaleTag + ModelTiepointTagまたはModelTransformationTagに対応します。EPSG情報からの座標系自動決定は行わず、読込時に緯度経度または平面直角座標系1〜19系を指定します。

背景画像として読み込んだGeoTIFFは、端末負荷を抑えるため最大辺2048px程度へ縮小し、同時表示は1枚です。白・黒・明るさによる画素別透過は行わず、画像全体の不透明度を設定します。初期値は35%です。標高DEMとして読み込んだGeoTIFFは縮小せず、数値セルとして扱います。

標高GeoTIFFの対応範囲

項目対応
TIFF構造通常のClassic TIFF(リトルエンディアン/ビッグエンディアン)
バンド単一バンド、SamplesPerPixel=1
数値型8 / 16 / 32 / 64bitの符号なし整数・符号付き整数、32 / 64bit浮動小数点
格納方法ストリップ、タイル
圧縮無圧縮、LZW、Deflate、旧Deflate、PackBits
位置情報ModelPixelScaleTag + ModelTiepointTag、またはModelTransformationTag
画素基準PixelIsArea、PixelIsPoint
欠測値GDAL_NODATA、NaN、非有限値

BigTIFF、複数バンドのRGB画像、バンド別平面配置、左上起点以外のOrientation、JPEG・ZSTD等の未対応圧縮、浮動小数点への水平差分Predictor、位置情報タグがないTIFF、ワールドファイルだけの画像には対応していません。単一バンドのパレット画像は色ではなく画素番号を数値標高として解釈してしまうため、標高DEMには使用しないでください。COGはローカルファイルとして通常のClassic TIFF構造と上表の条件を満たす範囲だけを読み、COG固有の通信・部分読込最適化は行いません。GeoTIFF内の標高単位やScale / Offset、鉛直基準面は自動変換しません。

DEMによる境界線の地形追従

  • 標高GeoTIFFまたは基盤地図情報DEMを読み込むと、そのファイルは標高DEMレイヤーとして追加されます。
  • 「境界線をDEMの地形に沿わせる」をONにすると、表示中のDEMと重なる線・画地外周を細分化し、各位置の標高をAR表示へ適用します。
  • 同じ設定がONのときは、DEM範囲内の点にもDEM標高を補間してAR表示へ適用します。点は線のような細分化を行わず、元の点位置で高さだけを更新します。
  • 元の境界座標や標高は変更しません。DEMレイヤーを非表示または削除した場合、地形追従をOFFにした場合は、境界線が元の表示へ戻ります。再表示すると再びDEMを適用します。
  • 複数のDEMが重なる場所では、表示中のDEMを細かい解像度から調べます。範囲外または欠測の場合だけ次のDEMへ進みます。
  • DEMの標高0mは海抜0mの有効値です。KML / CSV / SIMAの従来の「標高0・標高なしの概略補完」とは分けて扱い、DEMでは0mを欠測にしません。
  • 標高は周囲4セルの有効値を距離に応じて補間します。一部が欠測なら残った有効セルだけで補間し、4セルすべてが欠測の場合だけ周囲2セルまでの最も近い有効値を使用します。そこにも値がなければ、その位置では元の境界標高を使用します。
  • 境界線のDEMサンプリング間隔は1〜50mで設定できます。初期値は5mです。ただし、DEM自体のセル間隔より細かくはせず、大量データでは処理負荷を抑えるため自動的に粗くします。
  • 細分化で生成する境界区間は、通常は表示対象全体で約5,000区間以内を目安に調整します。元の境界線がすでに5,000区間を超える場合は、元の区間を欠落させないことを優先します。
  • 地形追従はAR上の概略確認用です。DEMの測量精度、作成時期、植生下の補間、異なるDEMの継ぎ目などにより、現地地盤と一致しない場合があります。

基盤地図情報DEMは、先に読み込んだ点・線・画地の全座標から外周100mの対象範囲を作り、1m DEMの標準ファイル名に含まれる3次メッシュ番号で重なるXMLだけを選別してから展開します。DEMを先に選ぶと対象範囲を作れないため、先に別の点・線データを読み込むよう案内します。対象範囲が離れた場所に複数ある場合は、それらを含む範囲のXMLが選ばれます。

基盤地図情報DEMでは、XML単体と通常ZIP内のXMLを受け付けます。JPGISのtupleListstartPoint、北西から東方向へ進む走査順を解釈し、「データなし」と-9999を欠測として扱います。1つのXMLに1つのDEM・coverageがある国土地理院の通常配布形式を対象とし、複数coverageを1ファイルへまとめた派生XMLは誤適用を避けるため拒否します。JGD2000は座標変換未実装のため対象外です。ZIPは無圧縮またはDeflateに対応し、CRCを確認します。ZIP内のDEMが1件でも壊れている場合は部分読込せず、全体をエラーにします。ZIP64、暗号化ZIP、その他の圧縮方式には対応していません。

DEM読込時の安全上限

異常に大きいファイルや展開爆弾でアプリが停止しないよう、次の上限を設けています。上限を超えた場合は読込を中止し、範囲を分けるようメッセージを表示します。

  • 基盤地図情報DEM:1グリッド最大2,000,000セル、1回の読込合計最大48,000,000セル
  • 基盤地図情報DEMのZIP:最大512項目、展開後合計最大512MB
  • 標高GeoTIFF:最大8,000,000セル
  • 標高GeoTIFFのストリップ/タイル:最大100,000ブロック
  • 数値標高の安全範囲:-12,000〜20,000m

位置合わせと表示精度

立ち位置は次の方法で設定できます。

  • iPhoneの現在位置を使う
  • 読み込んだ点を現在位置として使う
  • 緯度経度を入力する
  • 日本の平面直角座標系1〜19系でX・Yを入力する

前後左右の水平移動は、AR画面左下の丸いパッドを、現在位置を移動したい方向へ倒して調整します。ノブは指に追従し、指を離すと中央へ戻りますが、調整値は維持されます。「微/大」で感度を切り替え、位置と高さが合ったら「中心を更新」を押します。現在の表示中心と高さが新しい基準へ反映され、表示位置を保ったまま水平調整値が0へ戻ります。「0」は立ち位置を変更せず、水平調整だけをリセットします。パッドは×で隠せ、「表示項目」または右上の「…」から再表示できます。

画面をほかの人に見せる場合は、右上の目に斜線が付いたボタンで、状態表示、タブバー、位置調整、撮影、設定などの操作UIを一括非表示にできます。右上に残る小さな目のボタンで通常表示へ戻します。

「方位安定化(コンパス補助)」は、コンパスがほぼ変化していないのにARKitの推定方位だけが動いた場合、表示を急に戻さず緩やかに補正します。磁気の乱れる場所ではOFFにしてください。読込、設定、地図などでARカメラを止めている間は、方位更新も停止します。

高さ情報は初期状態では使用しません。「高さ情報を使う(概略)」をONにした場合だけ、KML / CSV / SIMAの標高を現在地付近からの概略的な上下差として表示します。KML / CSV / SIMAの標高0または標高なしは、読込時に近い有効標高から概略補完します。DEMを読み込むと、この高さ表示と境界線の地形追従がONになります。DEM内の標高0mは有効値です。

位置精度は、入力座標、iPhoneの現在位置、コンパス、周囲の磁気環境、ARKitの追跡状態に依存します。LiDARをONにしてもGPS座標や方位の絶対精度は向上しません。

LiDAR・写真・動画の制限

LiDAR

  • LiDAR対応端末で「LiDARを使用」と「物体の後ろを薄く表示」をONにした場合だけ動作します。
  • 現実物体の後ろにある点・線などを部分単位で薄く表示します。手、柱、壁などの境界での見え方は端末実機での確認が必要です。
  • v38では、線・柱を小規模データ時は約25〜30cmの区間へ分けて判定します。大量データ時は負荷を抑えるため自動的に粗い空間グループへ切り替わります。
  • 点・選択点・GeoTIFFは複数箇所の深度を調べますが、各要素の不透明度をまとめて変える方式です。カメラ画素と完全に一致する輪郭マスクではありません。
  • 深度が取得できない場所や信頼度が低い場所は通常表示になります。
  • 深度解像度、距離、光沢面、透明物、細い物、動く物体、照明条件によって境界がずれることがあります。
  • 処理負荷を抑えるため、深度判定の頻度と対象数を制限し、不透明度を緩やかに変化させます。
  • LiDAR非対応端末では自動的に無効になり、OFF時は関連処理を停止します。

写真

  • カメラ映像、点、線、柱、GeoTIFF、点名、画地名、選択点を保存します。
  • 上部状態表示、位置合わせなどの操作案内、下部メニュー、撮影・設定ボタンは保存画像に含めません。
  • 初回は「写真への追加」権限が必要です。拒否した場合はiOSの設定アプリから変更してください。
  • 撮影中と保存中は進行状態を表示します。画像作成が完了しない場合はタイムアウトし、再撮影できる状態へ戻します。

動画

  • 録画開始前に通常の操作UIを隠し、カメラ映像とAR要素を録画します。
  • 画面上の停止ボタンで終了し、iOSの保存・共有画面を表示します。
  • 保存・共有画面を閉じると通常UIを復元します。
  • ReplayKitとiOSが表示する録画インジケーターなどは完全に非表示にできない場合があります。
  • ReplayKitの可否や保存動作はシミュレータではなく実機で確認してください。

ビルド

  1. AR境界簡易表示.xcodeprojをXcodeで開きます。
  2. Signing & CapabilitiesでTeamとBundle Identifierを設定します。
  3. iOS 18以降の実機iPhoneを選択してビルドします。
  4. 初回起動時にカメラと位置情報を許可します。写真保存を使う場合は、撮影時に「写真への追加」も許可します。
  5. 「AR」画面でカメラ映像と追跡状態を確認します。

シミュレータではARカメラ、LiDAR、ReplayKitを十分に確認できません。実機確認項目はXCODE_TEST_CHECKLIST.mdを参照してください。このパッケージの生成環境にはXcodeがないため、最終的なビルドと実機動作の確認は未実施です。

主な表示設定

  • 点、線、点名、距離、柱、GeoTIFFの表示切替
  • 表示半径と最大表示数
  • 点、選択点、線幅の固定サイズ
  • 点・線・平面図のサイズをまとめて調整する表示サイズ倍率
  • 表示半径・点名表示距離をまとめて調整する表示範囲倍率
  • 距離による自動サイズ調整と遠方の最小サイズ
  • GeoTIFF不透明度
  • 境界線のDEM地形追従とサンプリング間隔(1〜50m)
  • 点名・画地名の表示距離と件数
  • 標高による概略上下表示
  • 方位安定化
  • LiDARの奥側不透明度

設定値は端末内に保存され、次回起動時も維持されます。大量データでは表示範囲と件数を制限し、立ち位置に近い要素を優先します。

以下のv38〜v40.4は、App Storeの公開バージョンとは別の内部開発履歴です。

内部開発版 v40.4の修正

  • 旧版と同じ「中心を更新」ボタンを、AR画面のドラッグパッド内へ復活
  • 表示中心を新しい立ち位置に反映した後、水平調整値を0へ戻す旧版の挙動を維持
  • 上段を「微/大」と「中心を更新」、下段を感度表示と「0」にし、旧版に近い操作配置へ変更
  • パッドの常時表示・非表示保存、UI一括非表示を維持

v40.3の修正

  • AR画面左下の前後左右調整を、矢印タップから丸いノブのドラッグ操作へ変更
  • ドラッグ中はノブを指に追従させ、終了後は中央へ戻しつつ補正値を維持
  • 微調整1cm/大移動8cmの感度切替を、横スライドを使わない1回タップ式で維持
  • 常時表示・非表示の保存、リセット、UI一括非表示を維持

v40.2の修正

  • ContentView.bodyに集中していたタブ、ファイル読込、各シート、状態監視を小さなView式へ分割
  • コンパイラの型推論時間切れエラーを回避
  • 画面操作、読込、写真、動画、LiDAR、DEMの処理内容は変更なし

v40.1の修正

  • GeoTIFFの「背景画像/標高DEM」ボタンを正しい画面構造へ配置
  • geoTIFFPurposeButtonpurposeが見つからないコンパイルエラーを解消
  • 旧形式の1引数版onChangeを全17か所でiOS 18向けAPIへ更新

v40の主な変更

  • AR画面左下に、表示を見ながら使える小型の前後左右パッドを追加
  • パッドを1cm/8cm単位のタップ操作と長押し連続操作へ変更
  • パッドの表示状態を保存し、×・「表示項目」・右上メニューから表示を切替可能に変更
  • タブバーを含む操作UIの一括非表示と、小さな復帰ボタンを追加
  • 写真と動画を独立した直接操作ボタンへ変更し、大きな下部パネルを廃止
  • 撮影方法、移動量、CSV座標形式、設定区分、GeoTIFF用途からセグメント型UIを廃止

v39の主な変更

  • 標高付きGeoTIFFを「標高DEM」として読み込む機能を追加
  • 国土地理院の基盤地図情報DEMをXMLまたはZIPから読み込む機能を追加
  • 表示中のDEMを使い、境界線・画地外周を細分化して地形に沿わせる表示を追加
  • DEMレイヤーの非表示・削除、地形追従OFFで元の境界表示へ戻る非破壊方式を採用
  • DEMの0mを有効値として扱い、欠測セルの局所補間と複数DEMへのフォールバックを追加
  • サンプリング間隔、生成区間数、セル数、ZIP展開量に負荷・安全上限を追加

v38の主な変更

  • 主画面を「AR」「地図」「データ」の3画面に整理
  • AR画面を、状態表示・位置合わせ・撮影・表示項目を中心に再構成
  • 写真撮影に撮影中/保存中/成功/失敗の状態表示、タイムアウト復旧、要求ID管理を追加
  • LiDARによる奥側表示を、線全体の一括切替ではなく部分単位の判定へ改善
  • 詳細な状態値と専門的な設定を常時表示せず、必要なときに開く構成へ変更

既存のファイル読込、レイヤー、平面図、点名検索、名称の色分け、概略標高、軽量メッシュ、スワイプ補正、GeoTIFF不透明度、ライト、画面遷移中のカメラ停止は維持しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - early277/ARCoordinateViewer · GitHub
Skip to content

Repository files navigation

ARCoordinateViewer 1.5.5

KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを読み込み、測量点・境界線・画地・画像をiPhoneのカメラ映像に重ねて確認するSwiftUI / ARKitアプリです。現場で迷いにくいよう、操作を「AR」「地図」「データ」の3画面に整理しています。

バージョン1.5.5では、ゲームの移動操作のように使えるドラッグ式パッドを採用し、方位・高さ・前後左右を調整した状態での「中心を更新」を改善しました。標高GeoTIFFと基盤地図情報DEMによる地形追従、AR写真・動画撮影、LiDAR表示にも対応しています。

できること

  • 点を球体、境界線・画地外周・柱を軽量な結合メッシュでAR表示
  • 点名と画地名を色分けし、選択した点を強調表示
  • 読み込んだデータを平面図で確認し、目標点または立ち位置を選択
  • ファイル単位のレイヤー表示・非表示・削除
  • GeoTIFFを半透明の水平画像として表示
  • 標高付きGeoTIFFまたは基盤地図情報DEMを使い、境界線を地形に沿わせてAR表示
  • 方位、高さ、前後左右の表示位置を現場で微調整
  • 距離に応じて点と線の見やすさを自動調整
  • コンパスを補助に使い、森林・草地での方位ドリフトを緩やかに補正
  • LiDAR対応端末で、現実物体の後ろにあるAR表示を部分単位で薄く表示
  • 操作UIを写さずにAR写真を写真アプリへ保存
  • ReplayKitでAR動画を録画し、録画後に保存・共有

本アプリの表示は現地確認を補助するための概略表示です。境界の確定、測量成果の検証、位置精度の保証を行うものではありません。

最初の3ステップ

  1. 下部の「データ」を開き、「データを追加」から境界データを読み込みます。地形追従を使う場合は、続けて標高GeoTIFFまたは基盤地図情報DEMも追加します。基盤地図情報DEMは、先に読み込んだ点・線・画地の周辺だけを自動選別します。
  2. 「AR」に戻り、上部の「立ち位置を設定してください」を押して、現在立っている位置を設定します。
  3. 必要に応じて「地図」で目標点を選び、「AR」で現地と重ねて確認します。

AR画面上部の状態表示は、次に必要な操作へつながるボタンです。データ未読込なら「データ」、立ち位置未設定なら設定方法を開き、準備後は詳しい追跡状態を表示します。

3つの画面

AR

  • カメラ映像に点・線・柱・GeoTIFF・名称を重ねて表示します。
  • 左下の丸い小型パッドを現在位置を移動したい方向へ倒し、AR表示を見ながら前後左右を調整します。
  • 調整後はパッド内の「中心を更新」で、現在の表示中心と高さを新しい基準に反映できます。
  • 右下の白いカメラボタンで写真、赤い動画ボタンで録画を開始します。
  • 右上の目に斜線が付いたボタンで、AR要素を残したまま操作UIをまとめて隠せます。
  • 「位置合わせ」で立ち位置、補正値のリセット・基準反映、方位、高さを調整します。
  • 「表示項目」で点、線、点名、距離、柱、GeoTIFF、LiDARを切り替えます。
  • 右上の「…」から立ち位置、詳細設定、ライト、ヘルプを開きます。
  • AR画面の横スワイプで方位、縦スワイプで高さを微調整できます。斜め操作は一方の調整だけに固定されます。

地図

  • 読み込んだ点、線、画地、GeoTIFFを平面表示します。
  • 点をタップして、ARで強調する目標点または現在の立ち位置として適用できます。
  • GeoTIFFだけを読み込んだ場合も画像上の位置を選択できます。

データ

  • KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを追加します。
  • GeoTIFFは読込時に「背景画像」または「標高DEM」の用途を選択します。
  • 読み込んだファイルをレイヤーとして管理します。
  • 不要なレイヤーを非表示または削除できます。
  • 表示制限、地図、AR表示、境界線の地形追従は表示中のレイヤーだけを対象にします。

対応形式

形式主な対応内容注意点
KML / KMZPoint、LineString、Polygon、名称、標高KMZは一般的なdeflate / store方式を対象とします。
CSV点名、緯度・経度・高さ、または点名・X・Y・Z読込時に列と座標系を指定します。
SIMAA01座標、D00〜D99画地座標は指定した平面直角座標系として扱います。派生仕様は読めない場合があります。
GeoTIFF(背景画像)緯度経度または平面直角座標系1〜19系簡易対応です。座標系は読込時に指定します。
GeoTIFF(標高DEM)単一バンドの数値標高、緯度経度または平面直角座標系1〜19系標高値の単位はmを想定します。画像としては表示しません。
基盤地図情報DEM国土地理院の数値標高モデルXML、またはXMLを格納したZIPDEM1A / 5A / 5B / 5C / 10A / 10B、JGD2011 / JGD2024を対象とします。

背景画像と標高DEMのGeoTIFFは、ModelPixelScaleTag + ModelTiepointTagまたはModelTransformationTagに対応します。EPSG情報からの座標系自動決定は行わず、読込時に緯度経度または平面直角座標系1〜19系を指定します。

背景画像として読み込んだGeoTIFFは、端末負荷を抑えるため最大辺2048px程度へ縮小し、同時表示は1枚です。白・黒・明るさによる画素別透過は行わず、画像全体の不透明度を設定します。初期値は35%です。標高DEMとして読み込んだGeoTIFFは縮小せず、数値セルとして扱います。

標高GeoTIFFの対応範囲

項目対応
TIFF構造通常のClassic TIFF(リトルエンディアン/ビッグエンディアン)
バンド単一バンド、SamplesPerPixel=1
数値型8 / 16 / 32 / 64bitの符号なし整数・符号付き整数、32 / 64bit浮動小数点
格納方法ストリップ、タイル
圧縮無圧縮、LZW、Deflate、旧Deflate、PackBits
位置情報ModelPixelScaleTag + ModelTiepointTag、またはModelTransformationTag
画素基準PixelIsArea、PixelIsPoint
欠測値GDAL_NODATA、NaN、非有限値

BigTIFF、複数バンドのRGB画像、バンド別平面配置、左上起点以外のOrientation、JPEG・ZSTD等の未対応圧縮、浮動小数点への水平差分Predictor、位置情報タグがないTIFF、ワールドファイルだけの画像には対応していません。単一バンドのパレット画像は色ではなく画素番号を数値標高として解釈してしまうため、標高DEMには使用しないでください。COGはローカルファイルとして通常のClassic TIFF構造と上表の条件を満たす範囲だけを読み、COG固有の通信・部分読込最適化は行いません。GeoTIFF内の標高単位やScale / Offset、鉛直基準面は自動変換しません。

DEMによる境界線の地形追従

  • 標高GeoTIFFまたは基盤地図情報DEMを読み込むと、そのファイルは標高DEMレイヤーとして追加されます。
  • 「境界線をDEMの地形に沿わせる」をONにすると、表示中のDEMと重なる線・画地外周を細分化し、各位置の標高をAR表示へ適用します。
  • 同じ設定がONのときは、DEM範囲内の点にもDEM標高を補間してAR表示へ適用します。点は線のような細分化を行わず、元の点位置で高さだけを更新します。
  • 元の境界座標や標高は変更しません。DEMレイヤーを非表示または削除した場合、地形追従をOFFにした場合は、境界線が元の表示へ戻ります。再表示すると再びDEMを適用します。
  • 複数のDEMが重なる場所では、表示中のDEMを細かい解像度から調べます。範囲外または欠測の場合だけ次のDEMへ進みます。
  • DEMの標高0mは海抜0mの有効値です。KML / CSV / SIMAの従来の「標高0・標高なしの概略補完」とは分けて扱い、DEMでは0mを欠測にしません。
  • 標高は周囲4セルの有効値を距離に応じて補間します。一部が欠測なら残った有効セルだけで補間し、4セルすべてが欠測の場合だけ周囲2セルまでの最も近い有効値を使用します。そこにも値がなければ、その位置では元の境界標高を使用します。
  • 境界線のDEMサンプリング間隔は1〜50mで設定できます。初期値は5mです。ただし、DEM自体のセル間隔より細かくはせず、大量データでは処理負荷を抑えるため自動的に粗くします。
  • 細分化で生成する境界区間は、通常は表示対象全体で約5,000区間以内を目安に調整します。元の境界線がすでに5,000区間を超える場合は、元の区間を欠落させないことを優先します。
  • 地形追従はAR上の概略確認用です。DEMの測量精度、作成時期、植生下の補間、異なるDEMの継ぎ目などにより、現地地盤と一致しない場合があります。

基盤地図情報DEMは、先に読み込んだ点・線・画地の全座標から外周100mの対象範囲を作り、1m DEMの標準ファイル名に含まれる3次メッシュ番号で重なるXMLだけを選別してから展開します。DEMを先に選ぶと対象範囲を作れないため、先に別の点・線データを読み込むよう案内します。対象範囲が離れた場所に複数ある場合は、それらを含む範囲のXMLが選ばれます。

基盤地図情報DEMでは、XML単体と通常ZIP内のXMLを受け付けます。JPGISのtupleListstartPoint、北西から東方向へ進む走査順を解釈し、「データなし」と-9999を欠測として扱います。1つのXMLに1つのDEM・coverageがある国土地理院の通常配布形式を対象とし、複数coverageを1ファイルへまとめた派生XMLは誤適用を避けるため拒否します。JGD2000は座標変換未実装のため対象外です。ZIPは無圧縮またはDeflateに対応し、CRCを確認します。ZIP内のDEMが1件でも壊れている場合は部分読込せず、全体をエラーにします。ZIP64、暗号化ZIP、その他の圧縮方式には対応していません。

DEM読込時の安全上限

異常に大きいファイルや展開爆弾でアプリが停止しないよう、次の上限を設けています。上限を超えた場合は読込を中止し、範囲を分けるようメッセージを表示します。

  • 基盤地図情報DEM:1グリッド最大2,000,000セル、1回の読込合計最大48,000,000セル
  • 基盤地図情報DEMのZIP:最大512項目、展開後合計最大512MB
  • 標高GeoTIFF:最大8,000,000セル
  • 標高GeoTIFFのストリップ/タイル:最大100,000ブロック
  • 数値標高の安全範囲:-12,000〜20,000m

位置合わせと表示精度

立ち位置は次の方法で設定できます。

  • iPhoneの現在位置を使う
  • 読み込んだ点を現在位置として使う
  • 緯度経度を入力する
  • 日本の平面直角座標系1〜19系でX・Yを入力する

前後左右の水平移動は、AR画面左下の丸いパッドを、現在位置を移動したい方向へ倒して調整します。ノブは指に追従し、指を離すと中央へ戻りますが、調整値は維持されます。「微/大」で感度を切り替え、位置と高さが合ったら「中心を更新」を押します。現在の表示中心と高さが新しい基準へ反映され、表示位置を保ったまま水平調整値が0へ戻ります。「0」は立ち位置を変更せず、水平調整だけをリセットします。パッドは×で隠せ、「表示項目」または右上の「…」から再表示できます。

画面をほかの人に見せる場合は、右上の目に斜線が付いたボタンで、状態表示、タブバー、位置調整、撮影、設定などの操作UIを一括非表示にできます。右上に残る小さな目のボタンで通常表示へ戻します。

「方位安定化(コンパス補助)」は、コンパスがほぼ変化していないのにARKitの推定方位だけが動いた場合、表示を急に戻さず緩やかに補正します。磁気の乱れる場所ではOFFにしてください。読込、設定、地図などでARカメラを止めている間は、方位更新も停止します。

高さ情報は初期状態では使用しません。「高さ情報を使う(概略)」をONにした場合だけ、KML / CSV / SIMAの標高を現在地付近からの概略的な上下差として表示します。KML / CSV / SIMAの標高0または標高なしは、読込時に近い有効標高から概略補完します。DEMを読み込むと、この高さ表示と境界線の地形追従がONになります。DEM内の標高0mは有効値です。

位置精度は、入力座標、iPhoneの現在位置、コンパス、周囲の磁気環境、ARKitの追跡状態に依存します。LiDARをONにしてもGPS座標や方位の絶対精度は向上しません。

LiDAR・写真・動画の制限

LiDAR

  • LiDAR対応端末で「LiDARを使用」と「物体の後ろを薄く表示」をONにした場合だけ動作します。
  • 現実物体の後ろにある点・線などを部分単位で薄く表示します。手、柱、壁などの境界での見え方は端末実機での確認が必要です。
  • v38では、線・柱を小規模データ時は約25〜30cmの区間へ分けて判定します。大量データ時は負荷を抑えるため自動的に粗い空間グループへ切り替わります。
  • 点・選択点・GeoTIFFは複数箇所の深度を調べますが、各要素の不透明度をまとめて変える方式です。カメラ画素と完全に一致する輪郭マスクではありません。
  • 深度が取得できない場所や信頼度が低い場所は通常表示になります。
  • 深度解像度、距離、光沢面、透明物、細い物、動く物体、照明条件によって境界がずれることがあります。
  • 処理負荷を抑えるため、深度判定の頻度と対象数を制限し、不透明度を緩やかに変化させます。
  • LiDAR非対応端末では自動的に無効になり、OFF時は関連処理を停止します。

写真

  • カメラ映像、点、線、柱、GeoTIFF、点名、画地名、選択点を保存します。
  • 上部状態表示、位置合わせなどの操作案内、下部メニュー、撮影・設定ボタンは保存画像に含めません。
  • 初回は「写真への追加」権限が必要です。拒否した場合はiOSの設定アプリから変更してください。
  • 撮影中と保存中は進行状態を表示します。画像作成が完了しない場合はタイムアウトし、再撮影できる状態へ戻します。

動画

  • 録画開始前に通常の操作UIを隠し、カメラ映像とAR要素を録画します。
  • 画面上の停止ボタンで終了し、iOSの保存・共有画面を表示します。
  • 保存・共有画面を閉じると通常UIを復元します。
  • ReplayKitとiOSが表示する録画インジケーターなどは完全に非表示にできない場合があります。
  • ReplayKitの可否や保存動作はシミュレータではなく実機で確認してください。

ビルド

  1. AR境界簡易表示.xcodeprojをXcodeで開きます。
  2. Signing & CapabilitiesでTeamとBundle Identifierを設定します。
  3. iOS 18以降の実機iPhoneを選択してビルドします。
  4. 初回起動時にカメラと位置情報を許可します。写真保存を使う場合は、撮影時に「写真への追加」も許可します。
  5. 「AR」画面でカメラ映像と追跡状態を確認します。

シミュレータではARカメラ、LiDAR、ReplayKitを十分に確認できません。実機確認項目はXCODE_TEST_CHECKLIST.mdを参照してください。このパッケージの生成環境にはXcodeがないため、最終的なビルドと実機動作の確認は未実施です。

主な表示設定

  • 点、線、点名、距離、柱、GeoTIFFの表示切替
  • 表示半径と最大表示数
  • 点、選択点、線幅の固定サイズ
  • 点・線・平面図のサイズをまとめて調整する表示サイズ倍率
  • 表示半径・点名表示距離をまとめて調整する表示範囲倍率
  • 距離による自動サイズ調整と遠方の最小サイズ
  • GeoTIFF不透明度
  • 境界線のDEM地形追従とサンプリング間隔(1〜50m)
  • 点名・画地名の表示距離と件数
  • 標高による概略上下表示
  • 方位安定化
  • LiDARの奥側不透明度

設定値は端末内に保存され、次回起動時も維持されます。大量データでは表示範囲と件数を制限し、立ち位置に近い要素を優先します。

以下のv38〜v40.4は、App Storeの公開バージョンとは別の内部開発履歴です。

内部開発版 v40.4の修正

  • 旧版と同じ「中心を更新」ボタンを、AR画面のドラッグパッド内へ復活
  • 表示中心を新しい立ち位置に反映した後、水平調整値を0へ戻す旧版の挙動を維持
  • 上段を「微/大」と「中心を更新」、下段を感度表示と「0」にし、旧版に近い操作配置へ変更
  • パッドの常時表示・非表示保存、UI一括非表示を維持

v40.3の修正

  • AR画面左下の前後左右調整を、矢印タップから丸いノブのドラッグ操作へ変更
  • ドラッグ中はノブを指に追従させ、終了後は中央へ戻しつつ補正値を維持
  • 微調整1cm/大移動8cmの感度切替を、横スライドを使わない1回タップ式で維持
  • 常時表示・非表示の保存、リセット、UI一括非表示を維持

v40.2の修正

  • ContentView.bodyに集中していたタブ、ファイル読込、各シート、状態監視を小さなView式へ分割
  • コンパイラの型推論時間切れエラーを回避
  • 画面操作、読込、写真、動画、LiDAR、DEMの処理内容は変更なし

v40.1の修正

  • GeoTIFFの「背景画像/標高DEM」ボタンを正しい画面構造へ配置
  • geoTIFFPurposeButtonpurposeが見つからないコンパイルエラーを解消
  • 旧形式の1引数版onChangeを全17か所でiOS 18向けAPIへ更新

v40の主な変更

  • AR画面左下に、表示を見ながら使える小型の前後左右パッドを追加
  • パッドを1cm/8cm単位のタップ操作と長押し連続操作へ変更
  • パッドの表示状態を保存し、×・「表示項目」・右上メニューから表示を切替可能に変更
  • タブバーを含む操作UIの一括非表示と、小さな復帰ボタンを追加
  • 写真と動画を独立した直接操作ボタンへ変更し、大きな下部パネルを廃止
  • 撮影方法、移動量、CSV座標形式、設定区分、GeoTIFF用途からセグメント型UIを廃止

v39の主な変更

  • 標高付きGeoTIFFを「標高DEM」として読み込む機能を追加
  • 国土地理院の基盤地図情報DEMをXMLまたはZIPから読み込む機能を追加
  • 表示中のDEMを使い、境界線・画地外周を細分化して地形に沿わせる表示を追加
  • DEMレイヤーの非表示・削除、地形追従OFFで元の境界表示へ戻る非破壊方式を採用
  • DEMの0mを有効値として扱い、欠測セルの局所補間と複数DEMへのフォールバックを追加
  • サンプリング間隔、生成区間数、セル数、ZIP展開量に負荷・安全上限を追加

v38の主な変更

  • 主画面を「AR」「地図」「データ」の3画面に整理
  • AR画面を、状態表示・位置合わせ・撮影・表示項目を中心に再構成
  • 写真撮影に撮影中/保存中/成功/失敗の状態表示、タイムアウト復旧、要求ID管理を追加
  • LiDARによる奥側表示を、線全体の一括切替ではなく部分単位の判定へ改善
  • 詳細な状態値と専門的な設定を常時表示せず、必要なときに開く構成へ変更

既存のファイル読込、レイヤー、平面図、点名検索、名称の色分け、概略標高、軽量メッシュ、スワイプ補正、GeoTIFF不透明度、ライト、画面遷移中のカメラ停止は維持しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - early277/ARCoordinateViewer · GitHub
Skip to content

Repository files navigation

ARCoordinateViewer 1.5.5

KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを読み込み、測量点・境界線・画地・画像をiPhoneのカメラ映像に重ねて確認するSwiftUI / ARKitアプリです。現場で迷いにくいよう、操作を「AR」「地図」「データ」の3画面に整理しています。

バージョン1.5.5では、ゲームの移動操作のように使えるドラッグ式パッドを採用し、方位・高さ・前後左右を調整した状態での「中心を更新」を改善しました。標高GeoTIFFと基盤地図情報DEMによる地形追従、AR写真・動画撮影、LiDAR表示にも対応しています。

できること

  • 点を球体、境界線・画地外周・柱を軽量な結合メッシュでAR表示
  • 点名と画地名を色分けし、選択した点を強調表示
  • 読み込んだデータを平面図で確認し、目標点または立ち位置を選択
  • ファイル単位のレイヤー表示・非表示・削除
  • GeoTIFFを半透明の水平画像として表示
  • 標高付きGeoTIFFまたは基盤地図情報DEMを使い、境界線を地形に沿わせてAR表示
  • 方位、高さ、前後左右の表示位置を現場で微調整
  • 距離に応じて点と線の見やすさを自動調整
  • コンパスを補助に使い、森林・草地での方位ドリフトを緩やかに補正
  • LiDAR対応端末で、現実物体の後ろにあるAR表示を部分単位で薄く表示
  • 操作UIを写さずにAR写真を写真アプリへ保存
  • ReplayKitでAR動画を録画し、録画後に保存・共有

本アプリの表示は現地確認を補助するための概略表示です。境界の確定、測量成果の検証、位置精度の保証を行うものではありません。

最初の3ステップ

  1. 下部の「データ」を開き、「データを追加」から境界データを読み込みます。地形追従を使う場合は、続けて標高GeoTIFFまたは基盤地図情報DEMも追加します。基盤地図情報DEMは、先に読み込んだ点・線・画地の周辺だけを自動選別します。
  2. 「AR」に戻り、上部の「立ち位置を設定してください」を押して、現在立っている位置を設定します。
  3. 必要に応じて「地図」で目標点を選び、「AR」で現地と重ねて確認します。

AR画面上部の状態表示は、次に必要な操作へつながるボタンです。データ未読込なら「データ」、立ち位置未設定なら設定方法を開き、準備後は詳しい追跡状態を表示します。

3つの画面

AR

  • カメラ映像に点・線・柱・GeoTIFF・名称を重ねて表示します。
  • 左下の丸い小型パッドを現在位置を移動したい方向へ倒し、AR表示を見ながら前後左右を調整します。
  • 調整後はパッド内の「中心を更新」で、現在の表示中心と高さを新しい基準に反映できます。
  • 右下の白いカメラボタンで写真、赤い動画ボタンで録画を開始します。
  • 右上の目に斜線が付いたボタンで、AR要素を残したまま操作UIをまとめて隠せます。
  • 「位置合わせ」で立ち位置、補正値のリセット・基準反映、方位、高さを調整します。
  • 「表示項目」で点、線、点名、距離、柱、GeoTIFF、LiDARを切り替えます。
  • 右上の「…」から立ち位置、詳細設定、ライト、ヘルプを開きます。
  • AR画面の横スワイプで方位、縦スワイプで高さを微調整できます。斜め操作は一方の調整だけに固定されます。

地図

  • 読み込んだ点、線、画地、GeoTIFFを平面表示します。
  • 点をタップして、ARで強調する目標点または現在の立ち位置として適用できます。
  • GeoTIFFだけを読み込んだ場合も画像上の位置を選択できます。

データ

  • KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを追加します。
  • GeoTIFFは読込時に「背景画像」または「標高DEM」の用途を選択します。
  • 読み込んだファイルをレイヤーとして管理します。
  • 不要なレイヤーを非表示または削除できます。
  • 表示制限、地図、AR表示、境界線の地形追従は表示中のレイヤーだけを対象にします。

対応形式

形式主な対応内容注意点
KML / KMZPoint、LineString、Polygon、名称、標高KMZは一般的なdeflate / store方式を対象とします。
CSV点名、緯度・経度・高さ、または点名・X・Y・Z読込時に列と座標系を指定します。
SIMAA01座標、D00〜D99画地座標は指定した平面直角座標系として扱います。派生仕様は読めない場合があります。
GeoTIFF(背景画像)緯度経度または平面直角座標系1〜19系簡易対応です。座標系は読込時に指定します。
GeoTIFF(標高DEM)単一バンドの数値標高、緯度経度または平面直角座標系1〜19系標高値の単位はmを想定します。画像としては表示しません。
基盤地図情報DEM国土地理院の数値標高モデルXML、またはXMLを格納したZIPDEM1A / 5A / 5B / 5C / 10A / 10B、JGD2011 / JGD2024を対象とします。

背景画像と標高DEMのGeoTIFFは、ModelPixelScaleTag + ModelTiepointTagまたはModelTransformationTagに対応します。EPSG情報からの座標系自動決定は行わず、読込時に緯度経度または平面直角座標系1〜19系を指定します。

背景画像として読み込んだGeoTIFFは、端末負荷を抑えるため最大辺2048px程度へ縮小し、同時表示は1枚です。白・黒・明るさによる画素別透過は行わず、画像全体の不透明度を設定します。初期値は35%です。標高DEMとして読み込んだGeoTIFFは縮小せず、数値セルとして扱います。

標高GeoTIFFの対応範囲

項目対応
TIFF構造通常のClassic TIFF(リトルエンディアン/ビッグエンディアン)
バンド単一バンド、SamplesPerPixel=1
数値型8 / 16 / 32 / 64bitの符号なし整数・符号付き整数、32 / 64bit浮動小数点
格納方法ストリップ、タイル
圧縮無圧縮、LZW、Deflate、旧Deflate、PackBits
位置情報ModelPixelScaleTag + ModelTiepointTag、またはModelTransformationTag
画素基準PixelIsArea、PixelIsPoint
欠測値GDAL_NODATA、NaN、非有限値

BigTIFF、複数バンドのRGB画像、バンド別平面配置、左上起点以外のOrientation、JPEG・ZSTD等の未対応圧縮、浮動小数点への水平差分Predictor、位置情報タグがないTIFF、ワールドファイルだけの画像には対応していません。単一バンドのパレット画像は色ではなく画素番号を数値標高として解釈してしまうため、標高DEMには使用しないでください。COGはローカルファイルとして通常のClassic TIFF構造と上表の条件を満たす範囲だけを読み、COG固有の通信・部分読込最適化は行いません。GeoTIFF内の標高単位やScale / Offset、鉛直基準面は自動変換しません。

DEMによる境界線の地形追従

  • 標高GeoTIFFまたは基盤地図情報DEMを読み込むと、そのファイルは標高DEMレイヤーとして追加されます。
  • 「境界線をDEMの地形に沿わせる」をONにすると、表示中のDEMと重なる線・画地外周を細分化し、各位置の標高をAR表示へ適用します。
  • 同じ設定がONのときは、DEM範囲内の点にもDEM標高を補間してAR表示へ適用します。点は線のような細分化を行わず、元の点位置で高さだけを更新します。
  • 元の境界座標や標高は変更しません。DEMレイヤーを非表示または削除した場合、地形追従をOFFにした場合は、境界線が元の表示へ戻ります。再表示すると再びDEMを適用します。
  • 複数のDEMが重なる場所では、表示中のDEMを細かい解像度から調べます。範囲外または欠測の場合だけ次のDEMへ進みます。
  • DEMの標高0mは海抜0mの有効値です。KML / CSV / SIMAの従来の「標高0・標高なしの概略補完」とは分けて扱い、DEMでは0mを欠測にしません。
  • 標高は周囲4セルの有効値を距離に応じて補間します。一部が欠測なら残った有効セルだけで補間し、4セルすべてが欠測の場合だけ周囲2セルまでの最も近い有効値を使用します。そこにも値がなければ、その位置では元の境界標高を使用します。
  • 境界線のDEMサンプリング間隔は1〜50mで設定できます。初期値は5mです。ただし、DEM自体のセル間隔より細かくはせず、大量データでは処理負荷を抑えるため自動的に粗くします。
  • 細分化で生成する境界区間は、通常は表示対象全体で約5,000区間以内を目安に調整します。元の境界線がすでに5,000区間を超える場合は、元の区間を欠落させないことを優先します。
  • 地形追従はAR上の概略確認用です。DEMの測量精度、作成時期、植生下の補間、異なるDEMの継ぎ目などにより、現地地盤と一致しない場合があります。

基盤地図情報DEMは、先に読み込んだ点・線・画地の全座標から外周100mの対象範囲を作り、1m DEMの標準ファイル名に含まれる3次メッシュ番号で重なるXMLだけを選別してから展開します。DEMを先に選ぶと対象範囲を作れないため、先に別の点・線データを読み込むよう案内します。対象範囲が離れた場所に複数ある場合は、それらを含む範囲のXMLが選ばれます。

基盤地図情報DEMでは、XML単体と通常ZIP内のXMLを受け付けます。JPGISのtupleListstartPoint、北西から東方向へ進む走査順を解釈し、「データなし」と-9999を欠測として扱います。1つのXMLに1つのDEM・coverageがある国土地理院の通常配布形式を対象とし、複数coverageを1ファイルへまとめた派生XMLは誤適用を避けるため拒否します。JGD2000は座標変換未実装のため対象外です。ZIPは無圧縮またはDeflateに対応し、CRCを確認します。ZIP内のDEMが1件でも壊れている場合は部分読込せず、全体をエラーにします。ZIP64、暗号化ZIP、その他の圧縮方式には対応していません。

DEM読込時の安全上限

異常に大きいファイルや展開爆弾でアプリが停止しないよう、次の上限を設けています。上限を超えた場合は読込を中止し、範囲を分けるようメッセージを表示します。

  • 基盤地図情報DEM:1グリッド最大2,000,000セル、1回の読込合計最大48,000,000セル
  • 基盤地図情報DEMのZIP:最大512項目、展開後合計最大512MB
  • 標高GeoTIFF:最大8,000,000セル
  • 標高GeoTIFFのストリップ/タイル:最大100,000ブロック
  • 数値標高の安全範囲:-12,000〜20,000m

位置合わせと表示精度

立ち位置は次の方法で設定できます。

  • iPhoneの現在位置を使う
  • 読み込んだ点を現在位置として使う
  • 緯度経度を入力する
  • 日本の平面直角座標系1〜19系でX・Yを入力する

前後左右の水平移動は、AR画面左下の丸いパッドを、現在位置を移動したい方向へ倒して調整します。ノブは指に追従し、指を離すと中央へ戻りますが、調整値は維持されます。「微/大」で感度を切り替え、位置と高さが合ったら「中心を更新」を押します。現在の表示中心と高さが新しい基準へ反映され、表示位置を保ったまま水平調整値が0へ戻ります。「0」は立ち位置を変更せず、水平調整だけをリセットします。パッドは×で隠せ、「表示項目」または右上の「…」から再表示できます。

画面をほかの人に見せる場合は、右上の目に斜線が付いたボタンで、状態表示、タブバー、位置調整、撮影、設定などの操作UIを一括非表示にできます。右上に残る小さな目のボタンで通常表示へ戻します。

「方位安定化(コンパス補助)」は、コンパスがほぼ変化していないのにARKitの推定方位だけが動いた場合、表示を急に戻さず緩やかに補正します。磁気の乱れる場所ではOFFにしてください。読込、設定、地図などでARカメラを止めている間は、方位更新も停止します。

高さ情報は初期状態では使用しません。「高さ情報を使う(概略)」をONにした場合だけ、KML / CSV / SIMAの標高を現在地付近からの概略的な上下差として表示します。KML / CSV / SIMAの標高0または標高なしは、読込時に近い有効標高から概略補完します。DEMを読み込むと、この高さ表示と境界線の地形追従がONになります。DEM内の標高0mは有効値です。

位置精度は、入力座標、iPhoneの現在位置、コンパス、周囲の磁気環境、ARKitの追跡状態に依存します。LiDARをONにしてもGPS座標や方位の絶対精度は向上しません。

LiDAR・写真・動画の制限

LiDAR

  • LiDAR対応端末で「LiDARを使用」と「物体の後ろを薄く表示」をONにした場合だけ動作します。
  • 現実物体の後ろにある点・線などを部分単位で薄く表示します。手、柱、壁などの境界での見え方は端末実機での確認が必要です。
  • v38では、線・柱を小規模データ時は約25〜30cmの区間へ分けて判定します。大量データ時は負荷を抑えるため自動的に粗い空間グループへ切り替わります。
  • 点・選択点・GeoTIFFは複数箇所の深度を調べますが、各要素の不透明度をまとめて変える方式です。カメラ画素と完全に一致する輪郭マスクではありません。
  • 深度が取得できない場所や信頼度が低い場所は通常表示になります。
  • 深度解像度、距離、光沢面、透明物、細い物、動く物体、照明条件によって境界がずれることがあります。
  • 処理負荷を抑えるため、深度判定の頻度と対象数を制限し、不透明度を緩やかに変化させます。
  • LiDAR非対応端末では自動的に無効になり、OFF時は関連処理を停止します。

写真

  • カメラ映像、点、線、柱、GeoTIFF、点名、画地名、選択点を保存します。
  • 上部状態表示、位置合わせなどの操作案内、下部メニュー、撮影・設定ボタンは保存画像に含めません。
  • 初回は「写真への追加」権限が必要です。拒否した場合はiOSの設定アプリから変更してください。
  • 撮影中と保存中は進行状態を表示します。画像作成が完了しない場合はタイムアウトし、再撮影できる状態へ戻します。

動画

  • 録画開始前に通常の操作UIを隠し、カメラ映像とAR要素を録画します。
  • 画面上の停止ボタンで終了し、iOSの保存・共有画面を表示します。
  • 保存・共有画面を閉じると通常UIを復元します。
  • ReplayKitとiOSが表示する録画インジケーターなどは完全に非表示にできない場合があります。
  • ReplayKitの可否や保存動作はシミュレータではなく実機で確認してください。

ビルド

  1. AR境界簡易表示.xcodeprojをXcodeで開きます。
  2. Signing & CapabilitiesでTeamとBundle Identifierを設定します。
  3. iOS 18以降の実機iPhoneを選択してビルドします。
  4. 初回起動時にカメラと位置情報を許可します。写真保存を使う場合は、撮影時に「写真への追加」も許可します。
  5. 「AR」画面でカメラ映像と追跡状態を確認します。

シミュレータではARカメラ、LiDAR、ReplayKitを十分に確認できません。実機確認項目はXCODE_TEST_CHECKLIST.mdを参照してください。このパッケージの生成環境にはXcodeがないため、最終的なビルドと実機動作の確認は未実施です。

主な表示設定

  • 点、線、点名、距離、柱、GeoTIFFの表示切替
  • 表示半径と最大表示数
  • 点、選択点、線幅の固定サイズ
  • 点・線・平面図のサイズをまとめて調整する表示サイズ倍率
  • 表示半径・点名表示距離をまとめて調整する表示範囲倍率
  • 距離による自動サイズ調整と遠方の最小サイズ
  • GeoTIFF不透明度
  • 境界線のDEM地形追従とサンプリング間隔(1〜50m)
  • 点名・画地名の表示距離と件数
  • 標高による概略上下表示
  • 方位安定化
  • LiDARの奥側不透明度

設定値は端末内に保存され、次回起動時も維持されます。大量データでは表示範囲と件数を制限し、立ち位置に近い要素を優先します。

以下のv38〜v40.4は、App Storeの公開バージョンとは別の内部開発履歴です。

内部開発版 v40.4の修正

  • 旧版と同じ「中心を更新」ボタンを、AR画面のドラッグパッド内へ復活
  • 表示中心を新しい立ち位置に反映した後、水平調整値を0へ戻す旧版の挙動を維持
  • 上段を「微/大」と「中心を更新」、下段を感度表示と「0」にし、旧版に近い操作配置へ変更
  • パッドの常時表示・非表示保存、UI一括非表示を維持

v40.3の修正

  • AR画面左下の前後左右調整を、矢印タップから丸いノブのドラッグ操作へ変更
  • ドラッグ中はノブを指に追従させ、終了後は中央へ戻しつつ補正値を維持
  • 微調整1cm/大移動8cmの感度切替を、横スライドを使わない1回タップ式で維持
  • 常時表示・非表示の保存、リセット、UI一括非表示を維持

v40.2の修正

  • ContentView.bodyに集中していたタブ、ファイル読込、各シート、状態監視を小さなView式へ分割
  • コンパイラの型推論時間切れエラーを回避
  • 画面操作、読込、写真、動画、LiDAR、DEMの処理内容は変更なし

v40.1の修正

  • GeoTIFFの「背景画像/標高DEM」ボタンを正しい画面構造へ配置
  • geoTIFFPurposeButtonpurposeが見つからないコンパイルエラーを解消
  • 旧形式の1引数版onChangeを全17か所でiOS 18向けAPIへ更新

v40の主な変更

  • AR画面左下に、表示を見ながら使える小型の前後左右パッドを追加
  • パッドを1cm/8cm単位のタップ操作と長押し連続操作へ変更
  • パッドの表示状態を保存し、×・「表示項目」・右上メニューから表示を切替可能に変更
  • タブバーを含む操作UIの一括非表示と、小さな復帰ボタンを追加
  • 写真と動画を独立した直接操作ボタンへ変更し、大きな下部パネルを廃止
  • 撮影方法、移動量、CSV座標形式、設定区分、GeoTIFF用途からセグメント型UIを廃止

v39の主な変更

  • 標高付きGeoTIFFを「標高DEM」として読み込む機能を追加
  • 国土地理院の基盤地図情報DEMをXMLまたはZIPから読み込む機能を追加
  • 表示中のDEMを使い、境界線・画地外周を細分化して地形に沿わせる表示を追加
  • DEMレイヤーの非表示・削除、地形追従OFFで元の境界表示へ戻る非破壊方式を採用
  • DEMの0mを有効値として扱い、欠測セルの局所補間と複数DEMへのフォールバックを追加
  • サンプリング間隔、生成区間数、セル数、ZIP展開量に負荷・安全上限を追加

v38の主な変更

  • 主画面を「AR」「地図」「データ」の3画面に整理
  • AR画面を、状態表示・位置合わせ・撮影・表示項目を中心に再構成
  • 写真撮影に撮影中/保存中/成功/失敗の状態表示、タイムアウト復旧、要求ID管理を追加
  • LiDARによる奥側表示を、線全体の一括切替ではなく部分単位の判定へ改善
  • 詳細な状態値と専門的な設定を常時表示せず、必要なときに開く構成へ変更

既存のファイル読込、レイヤー、平面図、点名検索、名称の色分け、概略標高、軽量メッシュ、スワイプ補正、GeoTIFF不透明度、ライト、画面遷移中のカメラ停止は維持しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - early277/ARCoordinateViewer · GitHub
Skip to content

Repository files navigation

ARCoordinateViewer 1.5.5

KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを読み込み、測量点・境界線・画地・画像をiPhoneのカメラ映像に重ねて確認するSwiftUI / ARKitアプリです。現場で迷いにくいよう、操作を「AR」「地図」「データ」の3画面に整理しています。

バージョン1.5.5では、ゲームの移動操作のように使えるドラッグ式パッドを採用し、方位・高さ・前後左右を調整した状態での「中心を更新」を改善しました。標高GeoTIFFと基盤地図情報DEMによる地形追従、AR写真・動画撮影、LiDAR表示にも対応しています。

できること

  • 点を球体、境界線・画地外周・柱を軽量な結合メッシュでAR表示
  • 点名と画地名を色分けし、選択した点を強調表示
  • 読み込んだデータを平面図で確認し、目標点または立ち位置を選択
  • ファイル単位のレイヤー表示・非表示・削除
  • GeoTIFFを半透明の水平画像として表示
  • 標高付きGeoTIFFまたは基盤地図情報DEMを使い、境界線を地形に沿わせてAR表示
  • 方位、高さ、前後左右の表示位置を現場で微調整
  • 距離に応じて点と線の見やすさを自動調整
  • コンパスを補助に使い、森林・草地での方位ドリフトを緩やかに補正
  • LiDAR対応端末で、現実物体の後ろにあるAR表示を部分単位で薄く表示
  • 操作UIを写さずにAR写真を写真アプリへ保存
  • ReplayKitでAR動画を録画し、録画後に保存・共有

本アプリの表示は現地確認を補助するための概略表示です。境界の確定、測量成果の検証、位置精度の保証を行うものではありません。

最初の3ステップ

  1. 下部の「データ」を開き、「データを追加」から境界データを読み込みます。地形追従を使う場合は、続けて標高GeoTIFFまたは基盤地図情報DEMも追加します。基盤地図情報DEMは、先に読み込んだ点・線・画地の周辺だけを自動選別します。
  2. 「AR」に戻り、上部の「立ち位置を設定してください」を押して、現在立っている位置を設定します。
  3. 必要に応じて「地図」で目標点を選び、「AR」で現地と重ねて確認します。

AR画面上部の状態表示は、次に必要な操作へつながるボタンです。データ未読込なら「データ」、立ち位置未設定なら設定方法を開き、準備後は詳しい追跡状態を表示します。

3つの画面

AR

  • カメラ映像に点・線・柱・GeoTIFF・名称を重ねて表示します。
  • 左下の丸い小型パッドを現在位置を移動したい方向へ倒し、AR表示を見ながら前後左右を調整します。
  • 調整後はパッド内の「中心を更新」で、現在の表示中心と高さを新しい基準に反映できます。
  • 右下の白いカメラボタンで写真、赤い動画ボタンで録画を開始します。
  • 右上の目に斜線が付いたボタンで、AR要素を残したまま操作UIをまとめて隠せます。
  • 「位置合わせ」で立ち位置、補正値のリセット・基準反映、方位、高さを調整します。
  • 「表示項目」で点、線、点名、距離、柱、GeoTIFF、LiDARを切り替えます。
  • 右上の「…」から立ち位置、詳細設定、ライト、ヘルプを開きます。
  • AR画面の横スワイプで方位、縦スワイプで高さを微調整できます。斜め操作は一方の調整だけに固定されます。

地図

  • 読み込んだ点、線、画地、GeoTIFFを平面表示します。
  • 点をタップして、ARで強調する目標点または現在の立ち位置として適用できます。
  • GeoTIFFだけを読み込んだ場合も画像上の位置を選択できます。

データ

  • KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを追加します。
  • GeoTIFFは読込時に「背景画像」または「標高DEM」の用途を選択します。
  • 読み込んだファイルをレイヤーとして管理します。
  • 不要なレイヤーを非表示または削除できます。
  • 表示制限、地図、AR表示、境界線の地形追従は表示中のレイヤーだけを対象にします。

対応形式

形式主な対応内容注意点
KML / KMZPoint、LineString、Polygon、名称、標高KMZは一般的なdeflate / store方式を対象とします。
CSV点名、緯度・経度・高さ、または点名・X・Y・Z読込時に列と座標系を指定します。
SIMAA01座標、D00〜D99画地座標は指定した平面直角座標系として扱います。派生仕様は読めない場合があります。
GeoTIFF(背景画像)緯度経度または平面直角座標系1〜19系簡易対応です。座標系は読込時に指定します。
GeoTIFF(標高DEM)単一バンドの数値標高、緯度経度または平面直角座標系1〜19系標高値の単位はmを想定します。画像としては表示しません。
基盤地図情報DEM国土地理院の数値標高モデルXML、またはXMLを格納したZIPDEM1A / 5A / 5B / 5C / 10A / 10B、JGD2011 / JGD2024を対象とします。

背景画像と標高DEMのGeoTIFFは、ModelPixelScaleTag + ModelTiepointTagまたはModelTransformationTagに対応します。EPSG情報からの座標系自動決定は行わず、読込時に緯度経度または平面直角座標系1〜19系を指定します。

背景画像として読み込んだGeoTIFFは、端末負荷を抑えるため最大辺2048px程度へ縮小し、同時表示は1枚です。白・黒・明るさによる画素別透過は行わず、画像全体の不透明度を設定します。初期値は35%です。標高DEMとして読み込んだGeoTIFFは縮小せず、数値セルとして扱います。

標高GeoTIFFの対応範囲

項目対応
TIFF構造通常のClassic TIFF(リトルエンディアン/ビッグエンディアン)
バンド単一バンド、SamplesPerPixel=1
数値型8 / 16 / 32 / 64bitの符号なし整数・符号付き整数、32 / 64bit浮動小数点
格納方法ストリップ、タイル
圧縮無圧縮、LZW、Deflate、旧Deflate、PackBits
位置情報ModelPixelScaleTag + ModelTiepointTag、またはModelTransformationTag
画素基準PixelIsArea、PixelIsPoint
欠測値GDAL_NODATA、NaN、非有限値

BigTIFF、複数バンドのRGB画像、バンド別平面配置、左上起点以外のOrientation、JPEG・ZSTD等の未対応圧縮、浮動小数点への水平差分Predictor、位置情報タグがないTIFF、ワールドファイルだけの画像には対応していません。単一バンドのパレット画像は色ではなく画素番号を数値標高として解釈してしまうため、標高DEMには使用しないでください。COGはローカルファイルとして通常のClassic TIFF構造と上表の条件を満たす範囲だけを読み、COG固有の通信・部分読込最適化は行いません。GeoTIFF内の標高単位やScale / Offset、鉛直基準面は自動変換しません。

DEMによる境界線の地形追従

  • 標高GeoTIFFまたは基盤地図情報DEMを読み込むと、そのファイルは標高DEMレイヤーとして追加されます。
  • 「境界線をDEMの地形に沿わせる」をONにすると、表示中のDEMと重なる線・画地外周を細分化し、各位置の標高をAR表示へ適用します。
  • 同じ設定がONのときは、DEM範囲内の点にもDEM標高を補間してAR表示へ適用します。点は線のような細分化を行わず、元の点位置で高さだけを更新します。
  • 元の境界座標や標高は変更しません。DEMレイヤーを非表示または削除した場合、地形追従をOFFにした場合は、境界線が元の表示へ戻ります。再表示すると再びDEMを適用します。
  • 複数のDEMが重なる場所では、表示中のDEMを細かい解像度から調べます。範囲外または欠測の場合だけ次のDEMへ進みます。
  • DEMの標高0mは海抜0mの有効値です。KML / CSV / SIMAの従来の「標高0・標高なしの概略補完」とは分けて扱い、DEMでは0mを欠測にしません。
  • 標高は周囲4セルの有効値を距離に応じて補間します。一部が欠測なら残った有効セルだけで補間し、4セルすべてが欠測の場合だけ周囲2セルまでの最も近い有効値を使用します。そこにも値がなければ、その位置では元の境界標高を使用します。
  • 境界線のDEMサンプリング間隔は1〜50mで設定できます。初期値は5mです。ただし、DEM自体のセル間隔より細かくはせず、大量データでは処理負荷を抑えるため自動的に粗くします。
  • 細分化で生成する境界区間は、通常は表示対象全体で約5,000区間以内を目安に調整します。元の境界線がすでに5,000区間を超える場合は、元の区間を欠落させないことを優先します。
  • 地形追従はAR上の概略確認用です。DEMの測量精度、作成時期、植生下の補間、異なるDEMの継ぎ目などにより、現地地盤と一致しない場合があります。

基盤地図情報DEMは、先に読み込んだ点・線・画地の全座標から外周100mの対象範囲を作り、1m DEMの標準ファイル名に含まれる3次メッシュ番号で重なるXMLだけを選別してから展開します。DEMを先に選ぶと対象範囲を作れないため、先に別の点・線データを読み込むよう案内します。対象範囲が離れた場所に複数ある場合は、それらを含む範囲のXMLが選ばれます。

基盤地図情報DEMでは、XML単体と通常ZIP内のXMLを受け付けます。JPGISのtupleListstartPoint、北西から東方向へ進む走査順を解釈し、「データなし」と-9999を欠測として扱います。1つのXMLに1つのDEM・coverageがある国土地理院の通常配布形式を対象とし、複数coverageを1ファイルへまとめた派生XMLは誤適用を避けるため拒否します。JGD2000は座標変換未実装のため対象外です。ZIPは無圧縮またはDeflateに対応し、CRCを確認します。ZIP内のDEMが1件でも壊れている場合は部分読込せず、全体をエラーにします。ZIP64、暗号化ZIP、その他の圧縮方式には対応していません。

DEM読込時の安全上限

異常に大きいファイルや展開爆弾でアプリが停止しないよう、次の上限を設けています。上限を超えた場合は読込を中止し、範囲を分けるようメッセージを表示します。

  • 基盤地図情報DEM:1グリッド最大2,000,000セル、1回の読込合計最大48,000,000セル
  • 基盤地図情報DEMのZIP:最大512項目、展開後合計最大512MB
  • 標高GeoTIFF:最大8,000,000セル
  • 標高GeoTIFFのストリップ/タイル:最大100,000ブロック
  • 数値標高の安全範囲:-12,000〜20,000m

位置合わせと表示精度

立ち位置は次の方法で設定できます。

  • iPhoneの現在位置を使う
  • 読み込んだ点を現在位置として使う
  • 緯度経度を入力する
  • 日本の平面直角座標系1〜19系でX・Yを入力する

前後左右の水平移動は、AR画面左下の丸いパッドを、現在位置を移動したい方向へ倒して調整します。ノブは指に追従し、指を離すと中央へ戻りますが、調整値は維持されます。「微/大」で感度を切り替え、位置と高さが合ったら「中心を更新」を押します。現在の表示中心と高さが新しい基準へ反映され、表示位置を保ったまま水平調整値が0へ戻ります。「0」は立ち位置を変更せず、水平調整だけをリセットします。パッドは×で隠せ、「表示項目」または右上の「…」から再表示できます。

画面をほかの人に見せる場合は、右上の目に斜線が付いたボタンで、状態表示、タブバー、位置調整、撮影、設定などの操作UIを一括非表示にできます。右上に残る小さな目のボタンで通常表示へ戻します。

「方位安定化(コンパス補助)」は、コンパスがほぼ変化していないのにARKitの推定方位だけが動いた場合、表示を急に戻さず緩やかに補正します。磁気の乱れる場所ではOFFにしてください。読込、設定、地図などでARカメラを止めている間は、方位更新も停止します。

高さ情報は初期状態では使用しません。「高さ情報を使う(概略)」をONにした場合だけ、KML / CSV / SIMAの標高を現在地付近からの概略的な上下差として表示します。KML / CSV / SIMAの標高0または標高なしは、読込時に近い有効標高から概略補完します。DEMを読み込むと、この高さ表示と境界線の地形追従がONになります。DEM内の標高0mは有効値です。

位置精度は、入力座標、iPhoneの現在位置、コンパス、周囲の磁気環境、ARKitの追跡状態に依存します。LiDARをONにしてもGPS座標や方位の絶対精度は向上しません。

LiDAR・写真・動画の制限

LiDAR

  • LiDAR対応端末で「LiDARを使用」と「物体の後ろを薄く表示」をONにした場合だけ動作します。
  • 現実物体の後ろにある点・線などを部分単位で薄く表示します。手、柱、壁などの境界での見え方は端末実機での確認が必要です。
  • v38では、線・柱を小規模データ時は約25〜30cmの区間へ分けて判定します。大量データ時は負荷を抑えるため自動的に粗い空間グループへ切り替わります。
  • 点・選択点・GeoTIFFは複数箇所の深度を調べますが、各要素の不透明度をまとめて変える方式です。カメラ画素と完全に一致する輪郭マスクではありません。
  • 深度が取得できない場所や信頼度が低い場所は通常表示になります。
  • 深度解像度、距離、光沢面、透明物、細い物、動く物体、照明条件によって境界がずれることがあります。
  • 処理負荷を抑えるため、深度判定の頻度と対象数を制限し、不透明度を緩やかに変化させます。
  • LiDAR非対応端末では自動的に無効になり、OFF時は関連処理を停止します。

写真

  • カメラ映像、点、線、柱、GeoTIFF、点名、画地名、選択点を保存します。
  • 上部状態表示、位置合わせなどの操作案内、下部メニュー、撮影・設定ボタンは保存画像に含めません。
  • 初回は「写真への追加」権限が必要です。拒否した場合はiOSの設定アプリから変更してください。
  • 撮影中と保存中は進行状態を表示します。画像作成が完了しない場合はタイムアウトし、再撮影できる状態へ戻します。

動画

  • 録画開始前に通常の操作UIを隠し、カメラ映像とAR要素を録画します。
  • 画面上の停止ボタンで終了し、iOSの保存・共有画面を表示します。
  • 保存・共有画面を閉じると通常UIを復元します。
  • ReplayKitとiOSが表示する録画インジケーターなどは完全に非表示にできない場合があります。
  • ReplayKitの可否や保存動作はシミュレータではなく実機で確認してください。

ビルド

  1. AR境界簡易表示.xcodeprojをXcodeで開きます。
  2. Signing & CapabilitiesでTeamとBundle Identifierを設定します。
  3. iOS 18以降の実機iPhoneを選択してビルドします。
  4. 初回起動時にカメラと位置情報を許可します。写真保存を使う場合は、撮影時に「写真への追加」も許可します。
  5. 「AR」画面でカメラ映像と追跡状態を確認します。

シミュレータではARカメラ、LiDAR、ReplayKitを十分に確認できません。実機確認項目はXCODE_TEST_CHECKLIST.mdを参照してください。このパッケージの生成環境にはXcodeがないため、最終的なビルドと実機動作の確認は未実施です。

主な表示設定

  • 点、線、点名、距離、柱、GeoTIFFの表示切替
  • 表示半径と最大表示数
  • 点、選択点、線幅の固定サイズ
  • 点・線・平面図のサイズをまとめて調整する表示サイズ倍率
  • 表示半径・点名表示距離をまとめて調整する表示範囲倍率
  • 距離による自動サイズ調整と遠方の最小サイズ
  • GeoTIFF不透明度
  • 境界線のDEM地形追従とサンプリング間隔(1〜50m)
  • 点名・画地名の表示距離と件数
  • 標高による概略上下表示
  • 方位安定化
  • LiDARの奥側不透明度

設定値は端末内に保存され、次回起動時も維持されます。大量データでは表示範囲と件数を制限し、立ち位置に近い要素を優先します。

以下のv38〜v40.4は、App Storeの公開バージョンとは別の内部開発履歴です。

内部開発版 v40.4の修正

  • 旧版と同じ「中心を更新」ボタンを、AR画面のドラッグパッド内へ復活
  • 表示中心を新しい立ち位置に反映した後、水平調整値を0へ戻す旧版の挙動を維持
  • 上段を「微/大」と「中心を更新」、下段を感度表示と「0」にし、旧版に近い操作配置へ変更
  • パッドの常時表示・非表示保存、UI一括非表示を維持

v40.3の修正

  • AR画面左下の前後左右調整を、矢印タップから丸いノブのドラッグ操作へ変更
  • ドラッグ中はノブを指に追従させ、終了後は中央へ戻しつつ補正値を維持
  • 微調整1cm/大移動8cmの感度切替を、横スライドを使わない1回タップ式で維持
  • 常時表示・非表示の保存、リセット、UI一括非表示を維持

v40.2の修正

  • ContentView.bodyに集中していたタブ、ファイル読込、各シート、状態監視を小さなView式へ分割
  • コンパイラの型推論時間切れエラーを回避
  • 画面操作、読込、写真、動画、LiDAR、DEMの処理内容は変更なし

v40.1の修正

  • GeoTIFFの「背景画像/標高DEM」ボタンを正しい画面構造へ配置
  • geoTIFFPurposeButtonpurposeが見つからないコンパイルエラーを解消
  • 旧形式の1引数版onChangeを全17か所でiOS 18向けAPIへ更新

v40の主な変更

  • AR画面左下に、表示を見ながら使える小型の前後左右パッドを追加
  • パッドを1cm/8cm単位のタップ操作と長押し連続操作へ変更
  • パッドの表示状態を保存し、×・「表示項目」・右上メニューから表示を切替可能に変更
  • タブバーを含む操作UIの一括非表示と、小さな復帰ボタンを追加
  • 写真と動画を独立した直接操作ボタンへ変更し、大きな下部パネルを廃止
  • 撮影方法、移動量、CSV座標形式、設定区分、GeoTIFF用途からセグメント型UIを廃止

v39の主な変更

  • 標高付きGeoTIFFを「標高DEM」として読み込む機能を追加
  • 国土地理院の基盤地図情報DEMをXMLまたはZIPから読み込む機能を追加
  • 表示中のDEMを使い、境界線・画地外周を細分化して地形に沿わせる表示を追加
  • DEMレイヤーの非表示・削除、地形追従OFFで元の境界表示へ戻る非破壊方式を採用
  • DEMの0mを有効値として扱い、欠測セルの局所補間と複数DEMへのフォールバックを追加
  • サンプリング間隔、生成区間数、セル数、ZIP展開量に負荷・安全上限を追加

v38の主な変更

  • 主画面を「AR」「地図」「データ」の3画面に整理
  • AR画面を、状態表示・位置合わせ・撮影・表示項目を中心に再構成
  • 写真撮影に撮影中/保存中/成功/失敗の状態表示、タイムアウト復旧、要求ID管理を追加
  • LiDARによる奥側表示を、線全体の一括切替ではなく部分単位の判定へ改善
  • 詳細な状態値と専門的な設定を常時表示せず、必要なときに開く構成へ変更

既存のファイル読込、レイヤー、平面図、点名検索、名称の色分け、概略標高、軽量メッシュ、スワイプ補正、GeoTIFF不透明度、ライト、画面遷移中のカメラ停止は維持しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - early277/ARCoordinateViewer · GitHub
Skip to content

Repository files navigation

ARCoordinateViewer 1.5.5

KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを読み込み、測量点・境界線・画地・画像をiPhoneのカメラ映像に重ねて確認するSwiftUI / ARKitアプリです。現場で迷いにくいよう、操作を「AR」「地図」「データ」の3画面に整理しています。

バージョン1.5.5では、ゲームの移動操作のように使えるドラッグ式パッドを採用し、方位・高さ・前後左右を調整した状態での「中心を更新」を改善しました。標高GeoTIFFと基盤地図情報DEMによる地形追従、AR写真・動画撮影、LiDAR表示にも対応しています。

できること

  • 点を球体、境界線・画地外周・柱を軽量な結合メッシュでAR表示
  • 点名と画地名を色分けし、選択した点を強調表示
  • 読み込んだデータを平面図で確認し、目標点または立ち位置を選択
  • ファイル単位のレイヤー表示・非表示・削除
  • GeoTIFFを半透明の水平画像として表示
  • 標高付きGeoTIFFまたは基盤地図情報DEMを使い、境界線を地形に沿わせてAR表示
  • 方位、高さ、前後左右の表示位置を現場で微調整
  • 距離に応じて点と線の見やすさを自動調整
  • コンパスを補助に使い、森林・草地での方位ドリフトを緩やかに補正
  • LiDAR対応端末で、現実物体の後ろにあるAR表示を部分単位で薄く表示
  • 操作UIを写さずにAR写真を写真アプリへ保存
  • ReplayKitでAR動画を録画し、録画後に保存・共有

本アプリの表示は現地確認を補助するための概略表示です。境界の確定、測量成果の検証、位置精度の保証を行うものではありません。

最初の3ステップ

  1. 下部の「データ」を開き、「データを追加」から境界データを読み込みます。地形追従を使う場合は、続けて標高GeoTIFFまたは基盤地図情報DEMも追加します。基盤地図情報DEMは、先に読み込んだ点・線・画地の周辺だけを自動選別します。
  2. 「AR」に戻り、上部の「立ち位置を設定してください」を押して、現在立っている位置を設定します。
  3. 必要に応じて「地図」で目標点を選び、「AR」で現地と重ねて確認します。

AR画面上部の状態表示は、次に必要な操作へつながるボタンです。データ未読込なら「データ」、立ち位置未設定なら設定方法を開き、準備後は詳しい追跡状態を表示します。

3つの画面

AR

  • カメラ映像に点・線・柱・GeoTIFF・名称を重ねて表示します。
  • 左下の丸い小型パッドを現在位置を移動したい方向へ倒し、AR表示を見ながら前後左右を調整します。
  • 調整後はパッド内の「中心を更新」で、現在の表示中心と高さを新しい基準に反映できます。
  • 右下の白いカメラボタンで写真、赤い動画ボタンで録画を開始します。
  • 右上の目に斜線が付いたボタンで、AR要素を残したまま操作UIをまとめて隠せます。
  • 「位置合わせ」で立ち位置、補正値のリセット・基準反映、方位、高さを調整します。
  • 「表示項目」で点、線、点名、距離、柱、GeoTIFF、LiDARを切り替えます。
  • 右上の「…」から立ち位置、詳細設定、ライト、ヘルプを開きます。
  • AR画面の横スワイプで方位、縦スワイプで高さを微調整できます。斜め操作は一方の調整だけに固定されます。

地図

  • 読み込んだ点、線、画地、GeoTIFFを平面表示します。
  • 点をタップして、ARで強調する目標点または現在の立ち位置として適用できます。
  • GeoTIFFだけを読み込んだ場合も画像上の位置を選択できます。

データ

  • KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを追加します。
  • GeoTIFFは読込時に「背景画像」または「標高DEM」の用途を選択します。
  • 読み込んだファイルをレイヤーとして管理します。
  • 不要なレイヤーを非表示または削除できます。
  • 表示制限、地図、AR表示、境界線の地形追従は表示中のレイヤーだけを対象にします。

対応形式

形式主な対応内容注意点
KML / KMZPoint、LineString、Polygon、名称、標高KMZは一般的なdeflate / store方式を対象とします。
CSV点名、緯度・経度・高さ、または点名・X・Y・Z読込時に列と座標系を指定します。
SIMAA01座標、D00〜D99画地座標は指定した平面直角座標系として扱います。派生仕様は読めない場合があります。
GeoTIFF(背景画像)緯度経度または平面直角座標系1〜19系簡易対応です。座標系は読込時に指定します。
GeoTIFF(標高DEM)単一バンドの数値標高、緯度経度または平面直角座標系1〜19系標高値の単位はmを想定します。画像としては表示しません。
基盤地図情報DEM国土地理院の数値標高モデルXML、またはXMLを格納したZIPDEM1A / 5A / 5B / 5C / 10A / 10B、JGD2011 / JGD2024を対象とします。

背景画像と標高DEMのGeoTIFFは、ModelPixelScaleTag + ModelTiepointTagまたはModelTransformationTagに対応します。EPSG情報からの座標系自動決定は行わず、読込時に緯度経度または平面直角座標系1〜19系を指定します。

背景画像として読み込んだGeoTIFFは、端末負荷を抑えるため最大辺2048px程度へ縮小し、同時表示は1枚です。白・黒・明るさによる画素別透過は行わず、画像全体の不透明度を設定します。初期値は35%です。標高DEMとして読み込んだGeoTIFFは縮小せず、数値セルとして扱います。

標高GeoTIFFの対応範囲

項目対応
TIFF構造通常のClassic TIFF(リトルエンディアン/ビッグエンディアン)
バンド単一バンド、SamplesPerPixel=1
数値型8 / 16 / 32 / 64bitの符号なし整数・符号付き整数、32 / 64bit浮動小数点
格納方法ストリップ、タイル
圧縮無圧縮、LZW、Deflate、旧Deflate、PackBits
位置情報ModelPixelScaleTag + ModelTiepointTag、またはModelTransformationTag
画素基準PixelIsArea、PixelIsPoint
欠測値GDAL_NODATA、NaN、非有限値

BigTIFF、複数バンドのRGB画像、バンド別平面配置、左上起点以外のOrientation、JPEG・ZSTD等の未対応圧縮、浮動小数点への水平差分Predictor、位置情報タグがないTIFF、ワールドファイルだけの画像には対応していません。単一バンドのパレット画像は色ではなく画素番号を数値標高として解釈してしまうため、標高DEMには使用しないでください。COGはローカルファイルとして通常のClassic TIFF構造と上表の条件を満たす範囲だけを読み、COG固有の通信・部分読込最適化は行いません。GeoTIFF内の標高単位やScale / Offset、鉛直基準面は自動変換しません。

DEMによる境界線の地形追従

  • 標高GeoTIFFまたは基盤地図情報DEMを読み込むと、そのファイルは標高DEMレイヤーとして追加されます。
  • 「境界線をDEMの地形に沿わせる」をONにすると、表示中のDEMと重なる線・画地外周を細分化し、各位置の標高をAR表示へ適用します。
  • 同じ設定がONのときは、DEM範囲内の点にもDEM標高を補間してAR表示へ適用します。点は線のような細分化を行わず、元の点位置で高さだけを更新します。
  • 元の境界座標や標高は変更しません。DEMレイヤーを非表示または削除した場合、地形追従をOFFにした場合は、境界線が元の表示へ戻ります。再表示すると再びDEMを適用します。
  • 複数のDEMが重なる場所では、表示中のDEMを細かい解像度から調べます。範囲外または欠測の場合だけ次のDEMへ進みます。
  • DEMの標高0mは海抜0mの有効値です。KML / CSV / SIMAの従来の「標高0・標高なしの概略補完」とは分けて扱い、DEMでは0mを欠測にしません。
  • 標高は周囲4セルの有効値を距離に応じて補間します。一部が欠測なら残った有効セルだけで補間し、4セルすべてが欠測の場合だけ周囲2セルまでの最も近い有効値を使用します。そこにも値がなければ、その位置では元の境界標高を使用します。
  • 境界線のDEMサンプリング間隔は1〜50mで設定できます。初期値は5mです。ただし、DEM自体のセル間隔より細かくはせず、大量データでは処理負荷を抑えるため自動的に粗くします。
  • 細分化で生成する境界区間は、通常は表示対象全体で約5,000区間以内を目安に調整します。元の境界線がすでに5,000区間を超える場合は、元の区間を欠落させないことを優先します。
  • 地形追従はAR上の概略確認用です。DEMの測量精度、作成時期、植生下の補間、異なるDEMの継ぎ目などにより、現地地盤と一致しない場合があります。

基盤地図情報DEMは、先に読み込んだ点・線・画地の全座標から外周100mの対象範囲を作り、1m DEMの標準ファイル名に含まれる3次メッシュ番号で重なるXMLだけを選別してから展開します。DEMを先に選ぶと対象範囲を作れないため、先に別の点・線データを読み込むよう案内します。対象範囲が離れた場所に複数ある場合は、それらを含む範囲のXMLが選ばれます。

基盤地図情報DEMでは、XML単体と通常ZIP内のXMLを受け付けます。JPGISのtupleListstartPoint、北西から東方向へ進む走査順を解釈し、「データなし」と-9999を欠測として扱います。1つのXMLに1つのDEM・coverageがある国土地理院の通常配布形式を対象とし、複数coverageを1ファイルへまとめた派生XMLは誤適用を避けるため拒否します。JGD2000は座標変換未実装のため対象外です。ZIPは無圧縮またはDeflateに対応し、CRCを確認します。ZIP内のDEMが1件でも壊れている場合は部分読込せず、全体をエラーにします。ZIP64、暗号化ZIP、その他の圧縮方式には対応していません。

DEM読込時の安全上限

異常に大きいファイルや展開爆弾でアプリが停止しないよう、次の上限を設けています。上限を超えた場合は読込を中止し、範囲を分けるようメッセージを表示します。

  • 基盤地図情報DEM:1グリッド最大2,000,000セル、1回の読込合計最大48,000,000セル
  • 基盤地図情報DEMのZIP:最大512項目、展開後合計最大512MB
  • 標高GeoTIFF:最大8,000,000セル
  • 標高GeoTIFFのストリップ/タイル:最大100,000ブロック
  • 数値標高の安全範囲:-12,000〜20,000m

位置合わせと表示精度

立ち位置は次の方法で設定できます。

  • iPhoneの現在位置を使う
  • 読み込んだ点を現在位置として使う
  • 緯度経度を入力する
  • 日本の平面直角座標系1〜19系でX・Yを入力する

前後左右の水平移動は、AR画面左下の丸いパッドを、現在位置を移動したい方向へ倒して調整します。ノブは指に追従し、指を離すと中央へ戻りますが、調整値は維持されます。「微/大」で感度を切り替え、位置と高さが合ったら「中心を更新」を押します。現在の表示中心と高さが新しい基準へ反映され、表示位置を保ったまま水平調整値が0へ戻ります。「0」は立ち位置を変更せず、水平調整だけをリセットします。パッドは×で隠せ、「表示項目」または右上の「…」から再表示できます。

画面をほかの人に見せる場合は、右上の目に斜線が付いたボタンで、状態表示、タブバー、位置調整、撮影、設定などの操作UIを一括非表示にできます。右上に残る小さな目のボタンで通常表示へ戻します。

「方位安定化(コンパス補助)」は、コンパスがほぼ変化していないのにARKitの推定方位だけが動いた場合、表示を急に戻さず緩やかに補正します。磁気の乱れる場所ではOFFにしてください。読込、設定、地図などでARカメラを止めている間は、方位更新も停止します。

高さ情報は初期状態では使用しません。「高さ情報を使う(概略)」をONにした場合だけ、KML / CSV / SIMAの標高を現在地付近からの概略的な上下差として表示します。KML / CSV / SIMAの標高0または標高なしは、読込時に近い有効標高から概略補完します。DEMを読み込むと、この高さ表示と境界線の地形追従がONになります。DEM内の標高0mは有効値です。

位置精度は、入力座標、iPhoneの現在位置、コンパス、周囲の磁気環境、ARKitの追跡状態に依存します。LiDARをONにしてもGPS座標や方位の絶対精度は向上しません。

LiDAR・写真・動画の制限

LiDAR

  • LiDAR対応端末で「LiDARを使用」と「物体の後ろを薄く表示」をONにした場合だけ動作します。
  • 現実物体の後ろにある点・線などを部分単位で薄く表示します。手、柱、壁などの境界での見え方は端末実機での確認が必要です。
  • v38では、線・柱を小規模データ時は約25〜30cmの区間へ分けて判定します。大量データ時は負荷を抑えるため自動的に粗い空間グループへ切り替わります。
  • 点・選択点・GeoTIFFは複数箇所の深度を調べますが、各要素の不透明度をまとめて変える方式です。カメラ画素と完全に一致する輪郭マスクではありません。
  • 深度が取得できない場所や信頼度が低い場所は通常表示になります。
  • 深度解像度、距離、光沢面、透明物、細い物、動く物体、照明条件によって境界がずれることがあります。
  • 処理負荷を抑えるため、深度判定の頻度と対象数を制限し、不透明度を緩やかに変化させます。
  • LiDAR非対応端末では自動的に無効になり、OFF時は関連処理を停止します。

写真

  • カメラ映像、点、線、柱、GeoTIFF、点名、画地名、選択点を保存します。
  • 上部状態表示、位置合わせなどの操作案内、下部メニュー、撮影・設定ボタンは保存画像に含めません。
  • 初回は「写真への追加」権限が必要です。拒否した場合はiOSの設定アプリから変更してください。
  • 撮影中と保存中は進行状態を表示します。画像作成が完了しない場合はタイムアウトし、再撮影できる状態へ戻します。

動画

  • 録画開始前に通常の操作UIを隠し、カメラ映像とAR要素を録画します。
  • 画面上の停止ボタンで終了し、iOSの保存・共有画面を表示します。
  • 保存・共有画面を閉じると通常UIを復元します。
  • ReplayKitとiOSが表示する録画インジケーターなどは完全に非表示にできない場合があります。
  • ReplayKitの可否や保存動作はシミュレータではなく実機で確認してください。

ビルド

  1. AR境界簡易表示.xcodeprojをXcodeで開きます。
  2. Signing & CapabilitiesでTeamとBundle Identifierを設定します。
  3. iOS 18以降の実機iPhoneを選択してビルドします。
  4. 初回起動時にカメラと位置情報を許可します。写真保存を使う場合は、撮影時に「写真への追加」も許可します。
  5. 「AR」画面でカメラ映像と追跡状態を確認します。

シミュレータではARカメラ、LiDAR、ReplayKitを十分に確認できません。実機確認項目はXCODE_TEST_CHECKLIST.mdを参照してください。このパッケージの生成環境にはXcodeがないため、最終的なビルドと実機動作の確認は未実施です。

主な表示設定

  • 点、線、点名、距離、柱、GeoTIFFの表示切替
  • 表示半径と最大表示数
  • 点、選択点、線幅の固定サイズ
  • 点・線・平面図のサイズをまとめて調整する表示サイズ倍率
  • 表示半径・点名表示距離をまとめて調整する表示範囲倍率
  • 距離による自動サイズ調整と遠方の最小サイズ
  • GeoTIFF不透明度
  • 境界線のDEM地形追従とサンプリング間隔(1〜50m)
  • 点名・画地名の表示距離と件数
  • 標高による概略上下表示
  • 方位安定化
  • LiDARの奥側不透明度

設定値は端末内に保存され、次回起動時も維持されます。大量データでは表示範囲と件数を制限し、立ち位置に近い要素を優先します。

以下のv38〜v40.4は、App Storeの公開バージョンとは別の内部開発履歴です。

内部開発版 v40.4の修正

  • 旧版と同じ「中心を更新」ボタンを、AR画面のドラッグパッド内へ復活
  • 表示中心を新しい立ち位置に反映した後、水平調整値を0へ戻す旧版の挙動を維持
  • 上段を「微/大」と「中心を更新」、下段を感度表示と「0」にし、旧版に近い操作配置へ変更
  • パッドの常時表示・非表示保存、UI一括非表示を維持

v40.3の修正

  • AR画面左下の前後左右調整を、矢印タップから丸いノブのドラッグ操作へ変更
  • ドラッグ中はノブを指に追従させ、終了後は中央へ戻しつつ補正値を維持
  • 微調整1cm/大移動8cmの感度切替を、横スライドを使わない1回タップ式で維持
  • 常時表示・非表示の保存、リセット、UI一括非表示を維持

v40.2の修正

  • ContentView.bodyに集中していたタブ、ファイル読込、各シート、状態監視を小さなView式へ分割
  • コンパイラの型推論時間切れエラーを回避
  • 画面操作、読込、写真、動画、LiDAR、DEMの処理内容は変更なし

v40.1の修正

  • GeoTIFFの「背景画像/標高DEM」ボタンを正しい画面構造へ配置
  • geoTIFFPurposeButtonpurposeが見つからないコンパイルエラーを解消
  • 旧形式の1引数版onChangeを全17か所でiOS 18向けAPIへ更新

v40の主な変更

  • AR画面左下に、表示を見ながら使える小型の前後左右パッドを追加
  • パッドを1cm/8cm単位のタップ操作と長押し連続操作へ変更
  • パッドの表示状態を保存し、×・「表示項目」・右上メニューから表示を切替可能に変更
  • タブバーを含む操作UIの一括非表示と、小さな復帰ボタンを追加
  • 写真と動画を独立した直接操作ボタンへ変更し、大きな下部パネルを廃止
  • 撮影方法、移動量、CSV座標形式、設定区分、GeoTIFF用途からセグメント型UIを廃止

v39の主な変更

  • 標高付きGeoTIFFを「標高DEM」として読み込む機能を追加
  • 国土地理院の基盤地図情報DEMをXMLまたはZIPから読み込む機能を追加
  • 表示中のDEMを使い、境界線・画地外周を細分化して地形に沿わせる表示を追加
  • DEMレイヤーの非表示・削除、地形追従OFFで元の境界表示へ戻る非破壊方式を採用
  • DEMの0mを有効値として扱い、欠測セルの局所補間と複数DEMへのフォールバックを追加
  • サンプリング間隔、生成区間数、セル数、ZIP展開量に負荷・安全上限を追加

v38の主な変更

  • 主画面を「AR」「地図」「データ」の3画面に整理
  • AR画面を、状態表示・位置合わせ・撮影・表示項目を中心に再構成
  • 写真撮影に撮影中/保存中/成功/失敗の状態表示、タイムアウト復旧、要求ID管理を追加
  • LiDARによる奥側表示を、線全体の一括切替ではなく部分単位の判定へ改善
  • 詳細な状態値と専門的な設定を常時表示せず、必要なときに開く構成へ変更

既存のファイル読込、レイヤー、平面図、点名検索、名称の色分け、概略標高、軽量メッシュ、スワイプ補正、GeoTIFF不透明度、ライト、画面遷移中のカメラ停止は維持しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - early277/ARCoordinateViewer · GitHub
Skip to content

Repository files navigation

ARCoordinateViewer 1.5.5

KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを読み込み、測量点・境界線・画地・画像をiPhoneのカメラ映像に重ねて確認するSwiftUI / ARKitアプリです。現場で迷いにくいよう、操作を「AR」「地図」「データ」の3画面に整理しています。

バージョン1.5.5では、ゲームの移動操作のように使えるドラッグ式パッドを採用し、方位・高さ・前後左右を調整した状態での「中心を更新」を改善しました。標高GeoTIFFと基盤地図情報DEMによる地形追従、AR写真・動画撮影、LiDAR表示にも対応しています。

できること

  • 点を球体、境界線・画地外周・柱を軽量な結合メッシュでAR表示
  • 点名と画地名を色分けし、選択した点を強調表示
  • 読み込んだデータを平面図で確認し、目標点または立ち位置を選択
  • ファイル単位のレイヤー表示・非表示・削除
  • GeoTIFFを半透明の水平画像として表示
  • 標高付きGeoTIFFまたは基盤地図情報DEMを使い、境界線を地形に沿わせてAR表示
  • 方位、高さ、前後左右の表示位置を現場で微調整
  • 距離に応じて点と線の見やすさを自動調整
  • コンパスを補助に使い、森林・草地での方位ドリフトを緩やかに補正
  • LiDAR対応端末で、現実物体の後ろにあるAR表示を部分単位で薄く表示
  • 操作UIを写さずにAR写真を写真アプリへ保存
  • ReplayKitでAR動画を録画し、録画後に保存・共有

本アプリの表示は現地確認を補助するための概略表示です。境界の確定、測量成果の検証、位置精度の保証を行うものではありません。

最初の3ステップ

  1. 下部の「データ」を開き、「データを追加」から境界データを読み込みます。地形追従を使う場合は、続けて標高GeoTIFFまたは基盤地図情報DEMも追加します。基盤地図情報DEMは、先に読み込んだ点・線・画地の周辺だけを自動選別します。
  2. 「AR」に戻り、上部の「立ち位置を設定してください」を押して、現在立っている位置を設定します。
  3. 必要に応じて「地図」で目標点を選び、「AR」で現地と重ねて確認します。

AR画面上部の状態表示は、次に必要な操作へつながるボタンです。データ未読込なら「データ」、立ち位置未設定なら設定方法を開き、準備後は詳しい追跡状態を表示します。

3つの画面

AR

  • カメラ映像に点・線・柱・GeoTIFF・名称を重ねて表示します。
  • 左下の丸い小型パッドを現在位置を移動したい方向へ倒し、AR表示を見ながら前後左右を調整します。
  • 調整後はパッド内の「中心を更新」で、現在の表示中心と高さを新しい基準に反映できます。
  • 右下の白いカメラボタンで写真、赤い動画ボタンで録画を開始します。
  • 右上の目に斜線が付いたボタンで、AR要素を残したまま操作UIをまとめて隠せます。
  • 「位置合わせ」で立ち位置、補正値のリセット・基準反映、方位、高さを調整します。
  • 「表示項目」で点、線、点名、距離、柱、GeoTIFF、LiDARを切り替えます。
  • 右上の「…」から立ち位置、詳細設定、ライト、ヘルプを開きます。
  • AR画面の横スワイプで方位、縦スワイプで高さを微調整できます。斜め操作は一方の調整だけに固定されます。

地図

  • 読み込んだ点、線、画地、GeoTIFFを平面表示します。
  • 点をタップして、ARで強調する目標点または現在の立ち位置として適用できます。
  • GeoTIFFだけを読み込んだ場合も画像上の位置を選択できます。

データ

  • KML / KMZ / CSV / SIMA / GeoTIFF / 基盤地図情報DEMを追加します。
  • GeoTIFFは読込時に「背景画像」または「標高DEM」の用途を選択します。
  • 読み込んだファイルをレイヤーとして管理します。
  • 不要なレイヤーを非表示または削除できます。
  • 表示制限、地図、AR表示、境界線の地形追従は表示中のレイヤーだけを対象にします。

対応形式

形式主な対応内容注意点
KML / KMZPoint、LineString、Polygon、名称、標高KMZは一般的なdeflate / store方式を対象とします。
CSV点名、緯度・経度・高さ、または点名・X・Y・Z読込時に列と座標系を指定します。
SIMAA01座標、D00〜D99画地座標は指定した平面直角座標系として扱います。派生仕様は読めない場合があります。
GeoTIFF(背景画像)緯度経度または平面直角座標系1〜19系簡易対応です。座標系は読込時に指定します。
GeoTIFF(標高DEM)単一バンドの数値標高、緯度経度または平面直角座標系1〜19系標高値の単位はmを想定します。画像としては表示しません。
基盤地図情報DEM国土地理院の数値標高モデルXML、またはXMLを格納したZIPDEM1A / 5A / 5B / 5C / 10A / 10B、JGD2011 / JGD2024を対象とします。

背景画像と標高DEMのGeoTIFFは、ModelPixelScaleTag + ModelTiepointTagまたはModelTransformationTagに対応します。EPSG情報からの座標系自動決定は行わず、読込時に緯度経度または平面直角座標系1〜19系を指定します。

背景画像として読み込んだGeoTIFFは、端末負荷を抑えるため最大辺2048px程度へ縮小し、同時表示は1枚です。白・黒・明るさによる画素別透過は行わず、画像全体の不透明度を設定します。初期値は35%です。標高DEMとして読み込んだGeoTIFFは縮小せず、数値セルとして扱います。

標高GeoTIFFの対応範囲

項目対応
TIFF構造通常のClassic TIFF(リトルエンディアン/ビッグエンディアン)
バンド単一バンド、SamplesPerPixel=1
数値型8 / 16 / 32 / 64bitの符号なし整数・符号付き整数、32 / 64bit浮動小数点
格納方法ストリップ、タイル
圧縮無圧縮、LZW、Deflate、旧Deflate、PackBits
位置情報ModelPixelScaleTag + ModelTiepointTag、またはModelTransformationTag
画素基準PixelIsArea、PixelIsPoint
欠測値GDAL_NODATA、NaN、非有限値

BigTIFF、複数バンドのRGB画像、バンド別平面配置、左上起点以外のOrientation、JPEG・ZSTD等の未対応圧縮、浮動小数点への水平差分Predictor、位置情報タグがないTIFF、ワールドファイルだけの画像には対応していません。単一バンドのパレット画像は色ではなく画素番号を数値標高として解釈してしまうため、標高DEMには使用しないでください。COGはローカルファイルとして通常のClassic TIFF構造と上表の条件を満たす範囲だけを読み、COG固有の通信・部分読込最適化は行いません。GeoTIFF内の標高単位やScale / Offset、鉛直基準面は自動変換しません。

DEMによる境界線の地形追従

  • 標高GeoTIFFまたは基盤地図情報DEMを読み込むと、そのファイルは標高DEMレイヤーとして追加されます。
  • 「境界線をDEMの地形に沿わせる」をONにすると、表示中のDEMと重なる線・画地外周を細分化し、各位置の標高をAR表示へ適用します。
  • 同じ設定がONのときは、DEM範囲内の点にもDEM標高を補間してAR表示へ適用します。点は線のような細分化を行わず、元の点位置で高さだけを更新します。
  • 元の境界座標や標高は変更しません。DEMレイヤーを非表示または削除した場合、地形追従をOFFにした場合は、境界線が元の表示へ戻ります。再表示すると再びDEMを適用します。
  • 複数のDEMが重なる場所では、表示中のDEMを細かい解像度から調べます。範囲外または欠測の場合だけ次のDEMへ進みます。
  • DEMの標高0mは海抜0mの有効値です。KML / CSV / SIMAの従来の「標高0・標高なしの概略補完」とは分けて扱い、DEMでは0mを欠測にしません。
  • 標高は周囲4セルの有効値を距離に応じて補間します。一部が欠測なら残った有効セルだけで補間し、4セルすべてが欠測の場合だけ周囲2セルまでの最も近い有効値を使用します。そこにも値がなければ、その位置では元の境界標高を使用します。
  • 境界線のDEMサンプリング間隔は1〜50mで設定できます。初期値は5mです。ただし、DEM自体のセル間隔より細かくはせず、大量データでは処理負荷を抑えるため自動的に粗くします。
  • 細分化で生成する境界区間は、通常は表示対象全体で約5,000区間以内を目安に調整します。元の境界線がすでに5,000区間を超える場合は、元の区間を欠落させないことを優先します。
  • 地形追従はAR上の概略確認用です。DEMの測量精度、作成時期、植生下の補間、異なるDEMの継ぎ目などにより、現地地盤と一致しない場合があります。

基盤地図情報DEMは、先に読み込んだ点・線・画地の全座標から外周100mの対象範囲を作り、1m DEMの標準ファイル名に含まれる3次メッシュ番号で重なるXMLだけを選別してから展開します。DEMを先に選ぶと対象範囲を作れないため、先に別の点・線データを読み込むよう案内します。対象範囲が離れた場所に複数ある場合は、それらを含む範囲のXMLが選ばれます。

基盤地図情報DEMでは、XML単体と通常ZIP内のXMLを受け付けます。JPGISのtupleListstartPoint、北西から東方向へ進む走査順を解釈し、「データなし」と-9999を欠測として扱います。1つのXMLに1つのDEM・coverageがある国土地理院の通常配布形式を対象とし、複数coverageを1ファイルへまとめた派生XMLは誤適用を避けるため拒否します。JGD2000は座標変換未実装のため対象外です。ZIPは無圧縮またはDeflateに対応し、CRCを確認します。ZIP内のDEMが1件でも壊れている場合は部分読込せず、全体をエラーにします。ZIP64、暗号化ZIP、その他の圧縮方式には対応していません。

DEM読込時の安全上限

異常に大きいファイルや展開爆弾でアプリが停止しないよう、次の上限を設けています。上限を超えた場合は読込を中止し、範囲を分けるようメッセージを表示します。

  • 基盤地図情報DEM:1グリッド最大2,000,000セル、1回の読込合計最大48,000,000セル
  • 基盤地図情報DEMのZIP:最大512項目、展開後合計最大512MB
  • 標高GeoTIFF:最大8,000,000セル
  • 標高GeoTIFFのストリップ/タイル:最大100,000ブロック
  • 数値標高の安全範囲:-12,000〜20,000m

位置合わせと表示精度

立ち位置は次の方法で設定できます。

  • iPhoneの現在位置を使う
  • 読み込んだ点を現在位置として使う
  • 緯度経度を入力する
  • 日本の平面直角座標系1〜19系でX・Yを入力する

前後左右の水平移動は、AR画面左下の丸いパッドを、現在位置を移動したい方向へ倒して調整します。ノブは指に追従し、指を離すと中央へ戻りますが、調整値は維持されます。「微/大」で感度を切り替え、位置と高さが合ったら「中心を更新」を押します。現在の表示中心と高さが新しい基準へ反映され、表示位置を保ったまま水平調整値が0へ戻ります。「0」は立ち位置を変更せず、水平調整だけをリセットします。パッドは×で隠せ、「表示項目」または右上の「…」から再表示できます。

画面をほかの人に見せる場合は、右上の目に斜線が付いたボタンで、状態表示、タブバー、位置調整、撮影、設定などの操作UIを一括非表示にできます。右上に残る小さな目のボタンで通常表示へ戻します。

「方位安定化(コンパス補助)」は、コンパスがほぼ変化していないのにARKitの推定方位だけが動いた場合、表示を急に戻さず緩やかに補正します。磁気の乱れる場所ではOFFにしてください。読込、設定、地図などでARカメラを止めている間は、方位更新も停止します。

高さ情報は初期状態では使用しません。「高さ情報を使う(概略)」をONにした場合だけ、KML / CSV / SIMAの標高を現在地付近からの概略的な上下差として表示します。KML / CSV / SIMAの標高0または標高なしは、読込時に近い有効標高から概略補完します。DEMを読み込むと、この高さ表示と境界線の地形追従がONになります。DEM内の標高0mは有効値です。

位置精度は、入力座標、iPhoneの現在位置、コンパス、周囲の磁気環境、ARKitの追跡状態に依存します。LiDARをONにしてもGPS座標や方位の絶対精度は向上しません。

LiDAR・写真・動画の制限

LiDAR

  • LiDAR対応端末で「LiDARを使用」と「物体の後ろを薄く表示」をONにした場合だけ動作します。
  • 現実物体の後ろにある点・線などを部分単位で薄く表示します。手、柱、壁などの境界での見え方は端末実機での確認が必要です。
  • v38では、線・柱を小規模データ時は約25〜30cmの区間へ分けて判定します。大量データ時は負荷を抑えるため自動的に粗い空間グループへ切り替わります。
  • 点・選択点・GeoTIFFは複数箇所の深度を調べますが、各要素の不透明度をまとめて変える方式です。カメラ画素と完全に一致する輪郭マスクではありません。
  • 深度が取得できない場所や信頼度が低い場所は通常表示になります。
  • 深度解像度、距離、光沢面、透明物、細い物、動く物体、照明条件によって境界がずれることがあります。
  • 処理負荷を抑えるため、深度判定の頻度と対象数を制限し、不透明度を緩やかに変化させます。
  • LiDAR非対応端末では自動的に無効になり、OFF時は関連処理を停止します。

写真

  • カメラ映像、点、線、柱、GeoTIFF、点名、画地名、選択点を保存します。
  • 上部状態表示、位置合わせなどの操作案内、下部メニュー、撮影・設定ボタンは保存画像に含めません。
  • 初回は「写真への追加」権限が必要です。拒否した場合はiOSの設定アプリから変更してください。
  • 撮影中と保存中は進行状態を表示します。画像作成が完了しない場合はタイムアウトし、再撮影できる状態へ戻します。

動画

  • 録画開始前に通常の操作UIを隠し、カメラ映像とAR要素を録画します。
  • 画面上の停止ボタンで終了し、iOSの保存・共有画面を表示します。
  • 保存・共有画面を閉じると通常UIを復元します。
  • ReplayKitとiOSが表示する録画インジケーターなどは完全に非表示にできない場合があります。
  • ReplayKitの可否や保存動作はシミュレータではなく実機で確認してください。

ビルド

  1. AR境界簡易表示.xcodeprojをXcodeで開きます。
  2. Signing & CapabilitiesでTeamとBundle Identifierを設定します。
  3. iOS 18以降の実機iPhoneを選択してビルドします。
  4. 初回起動時にカメラと位置情報を許可します。写真保存を使う場合は、撮影時に「写真への追加」も許可します。
  5. 「AR」画面でカメラ映像と追跡状態を確認します。

シミュレータではARカメラ、LiDAR、ReplayKitを十分に確認できません。実機確認項目はXCODE_TEST_CHECKLIST.mdを参照してください。このパッケージの生成環境にはXcodeがないため、最終的なビルドと実機動作の確認は未実施です。

主な表示設定

  • 点、線、点名、距離、柱、GeoTIFFの表示切替
  • 表示半径と最大表示数
  • 点、選択点、線幅の固定サイズ
  • 点・線・平面図のサイズをまとめて調整する表示サイズ倍率
  • 表示半径・点名表示距離をまとめて調整する表示範囲倍率
  • 距離による自動サイズ調整と遠方の最小サイズ
  • GeoTIFF不透明度
  • 境界線のDEM地形追従とサンプリング間隔(1〜50m)
  • 点名・画地名の表示距離と件数
  • 標高による概略上下表示
  • 方位安定化
  • LiDARの奥側不透明度

設定値は端末内に保存され、次回起動時も維持されます。大量データでは表示範囲と件数を制限し、立ち位置に近い要素を優先します。

以下のv38〜v40.4は、App Storeの公開バージョンとは別の内部開発履歴です。

内部開発版 v40.4の修正

  • 旧版と同じ「中心を更新」ボタンを、AR画面のドラッグパッド内へ復活
  • 表示中心を新しい立ち位置に反映した後、水平調整値を0へ戻す旧版の挙動を維持
  • 上段を「微/大」と「中心を更新」、下段を感度表示と「0」にし、旧版に近い操作配置へ変更
  • パッドの常時表示・非表示保存、UI一括非表示を維持

v40.3の修正

  • AR画面左下の前後左右調整を、矢印タップから丸いノブのドラッグ操作へ変更
  • ドラッグ中はノブを指に追従させ、終了後は中央へ戻しつつ補正値を維持
  • 微調整1cm/大移動8cmの感度切替を、横スライドを使わない1回タップ式で維持
  • 常時表示・非表示の保存、リセット、UI一括非表示を維持

v40.2の修正

  • ContentView.bodyに集中していたタブ、ファイル読込、各シート、状態監視を小さなView式へ分割
  • コンパイラの型推論時間切れエラーを回避
  • 画面操作、読込、写真、動画、LiDAR、DEMの処理内容は変更なし

v40.1の修正

  • GeoTIFFの「背景画像/標高DEM」ボタンを正しい画面構造へ配置
  • geoTIFFPurposeButtonpurposeが見つからないコンパイルエラーを解消
  • 旧形式の1引数版onChangeを全17か所でiOS 18向けAPIへ更新

v40の主な変更

  • AR画面左下に、表示を見ながら使える小型の前後左右パッドを追加
  • パッドを1cm/8cm単位のタップ操作と長押し連続操作へ変更
  • パッドの表示状態を保存し、×・「表示項目」・右上メニューから表示を切替可能に変更
  • タブバーを含む操作UIの一括非表示と、小さな復帰ボタンを追加
  • 写真と動画を独立した直接操作ボタンへ変更し、大きな下部パネルを廃止
  • 撮影方法、移動量、CSV座標形式、設定区分、GeoTIFF用途からセグメント型UIを廃止

v39の主な変更

  • 標高付きGeoTIFFを「標高DEM」として読み込む機能を追加
  • 国土地理院の基盤地図情報DEMをXMLまたはZIPから読み込む機能を追加
  • 表示中のDEMを使い、境界線・画地外周を細分化して地形に沿わせる表示を追加
  • DEMレイヤーの非表示・削除、地形追従OFFで元の境界表示へ戻る非破壊方式を採用
  • DEMの0mを有効値として扱い、欠測セルの局所補間と複数DEMへのフォールバックを追加
  • サンプリング間隔、生成区間数、セル数、ZIP展開量に負荷・安全上限を追加

v38の主な変更

  • 主画面を「AR」「地図」「データ」の3画面に整理
  • AR画面を、状態表示・位置合わせ・撮影・表示項目を中心に再構成
  • 写真撮影に撮影中/保存中/成功/失敗の状態表示、タイムアウト復旧、要求ID管理を追加
  • LiDARによる奥側表示を、線全体の一括切替ではなく部分単位の判定へ改善
  • 詳細な状態値と専門的な設定を常時表示せず、必要なときに開く構成へ変更

既存のファイル読込、レイヤー、平面図、点名検索、名称の色分け、概略標高、軽量メッシュ、スワイプ補正、GeoTIFF不透明度、ライト、画面遷移中のカメラ停止は維持しています。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages