新機能:写真エクスプローラー · 登録された旅行写真の検索

Engineering journal

エンジニアリング: Photo CoordinatesからLand Coverageまで

表面的な美しさの裏には、証拠の量子化、オフラインデバイスの統合、土地の測定(一度だけ)、およびプライベートソース履歴をサーバーから分離するための、決定論的なプロセスがあります。

によって。 6 分の読書時間
Maplightは、プライベートなMapsakeの旅行履歴によって表される世界のさまざまな地域を照らします。

Maplight の背後にある製品の課題。

訪問国の地図は、有用な二値の質問に答えます。それは、「その場所はあなたの歴史の一部ですか?」という質問です。Maplightは、位置情報付きの写真やその他の旅行の証拠に基づいて、その場所からどの範囲までがあなたの記憶に及んでいますか、という別の質問をします。

それは、点を中心に半透明の円を描くように聞こえます。本番環境の機能は、より難しい問題を解決する必要があります。点が重なり、円が海岸線や国境を越え、地球は丸く、ソースデータが複数のシステムから到着し、古いデバイスがオフラインになっている可能性があり、そして、ライフタイムライブラリは、インタラクティブに探索できるほど高速である必要があります。

Maplightの実装では、これらの要素を、小さなポータブルな起源モデル、決定論的なカバレッジエンジン、およびレンダリングレイヤーに分割しています。同じ入力は、履歴が1つのデバイスで作成された場合でも、iCloudを通じて複数のデバイスでマージされた場合でも、同じカバレッジを生成する必要があります。

データを永続化する前に、汎用化します。

生の入力は、写真の座標、インポートされた旅行、パスポートのスタンプ、または手動で記録された場所として開始できます。 Maplight の起源が永続化される前に、Mapsake はその緯度と経度を 6 文字のジオハッシュセルに量子化します。 保存された起源には、そのジオハッシュ、貢献元の種類を説明するビットマスク、および既知の最も早い日付が含まれます。

これは3つの便利な機能を提供します。

最初に、同じ小さな地理的セル内で繰り返される証拠は、1つの元の場所に統合される可能性があります。次に、ポータブルな記録はコンパクトで決定論的です。3つ目として、Maplightモデルは、照明を再現するために、すべての元の写真座標を保持する必要はありません。

最も早い日付は、履歴ビューで使用されます。 日付のないソースは、依然として全体の集計結果に含まれますが、アプリが確立できない年に属していると見なされることはありません。

2021年に、照らされた土地、国、および起源の合計を表示するMaplightの履歴

マージを累積的に行う。

iCloud 同期は単一の順序付けられたストリームではありません。2つのデバイスがオフラインで動作し、関連するレコードを書き込み、その後、異なる順序で重複したデータを受信する可能性があります。最後の書き込みが優先される方式では、正当な履歴が失われる可能性があります。

代わりに、起源はジオハッシュでマージされます。ソースフラグは結合され、最も早い有効な日付が優先されます。起源は、プロファイル、世代、および地理的タイルによって識別される論理チャンク内に、ソートされた順序でエンコードされます。リコンシリエーションユニオンは、チャンクの内容を複製します。

生成識別子は、再構築時に重要です。新しい出力は準備でき、以前の世代からの古いデータが現在のデータとして扱われることはありません。これにより、部分的な同期や中断された計算によって、古いデータと新しいデータが混在することを防ぎます。

マージルールは、意図的に単純です。証拠を結合します。単純で決定論的なルールは、同じプライベート履歴がiPhone、iPad、およびMacで収束する必要がある場合に役立ちます。

カバー範囲は、等面積グリッドで測定されます。

緯度と経度の数値は、場所によって同じ距離を表しません。経度は極に向かって小さくなるため、通常の地図ピクセルや度単位のセルを数えると、場所によって結果が偏ります。

Maplightは、約2キロメートルの等面積グリッドで、土地の範囲を評価します。各行は、比較可能な物理的な領域を表し、照らされた範囲は、その行にわたる間隔として保存されます。ソース半径は、候補となるセルの範囲となり、次に、それらのセルがテストされ、累積されます。

インターバルにより、オーバーラップが安価になります。近くの複数の写真が同じセルを照らす場合、エンジンは実行をマージし、同じ土地を繰り返しカウントするのではなく、最終的な数値は照らされた土地の和集合を表し、すべての円の合計ではありません。

これが、カバレッジの数値が、数学的な円の面積にソースの数を掛けた値と一致しない理由でもあります。海洋セルは削除され、重複は解消され、境界の帰属は、結果を国々に分割する可能性があります。

海を合計から除外します。

飛行写真や海岸の訪問では、半径を水上に配置できます。Maplightは陸地を照らした状態として定義されているため、水域を過剰に含めることはできません。

カバー範囲エンジンは、バンドルされた境界ジオメトリを使用して、候補となるセルが陸地にあるかどうか、およびどの国に含まれているかを判断します。 Mapsakeのオフラインマップおよび Gazetteer 機能で利用されている同じ基本的なソースファミリーにより、ウェブマッピングAPIにライフタイム座標セットを送信することなく、この計算を実行できます。

海岸線は、内陸の場所よりも複雑な場合があります。島、狭い半島、囲い込み、および境界に関する紛争は、すべて特殊なケースを生み出します。したがって、このエンジンは、グリッド解像度における範囲を、測量データではなく、有用な推定値として扱います。

重複を避けた属性の網羅性。

国ごとの合計は、グローバル合計と同じ範囲のセルから派生しています。セルは、境界包含を使用して割り当てられますが、グローバルな結合は、それを一度だけカウントします。これにより、国ごとの内訳が説明可能になり、国境に隣接するソースが、実際の地図の範囲よりも多くの陸地を占めることがないようにします。

ソースの分類は、エリアの属性とは異なります。ジオハッシュの起源は、写真と手動で追加された場所の両方が関連していることを記憶できますが、そのマージされた起源の周囲のハイライト表示されたセルは、依然として単一のグループに属します。この区別により、インターフェースは、証拠の出所を説明できますが、重複する証拠を重複した土地として扱わないようにします。

過去の旅行記録から、タイムラインを作成します。

歴史は「この年にMaplightはどのような姿だったのか」という問いに答える必要があります。スライダーを動かすたびに、毎回最初から再計算すると、バッテリーが消費され、アニメーションが途切れる原因になります。

モデルは、現在の世代と半径に関連付けられた年ごとのスナップショットを記録します。各スナップショットは、開始日がそのカットオフ日以前の起源を表します。日付のない起源は、すべての期間のビューで使用可能であり、架空の歴史的な年に挿入されることはありません。

インターフェースは、準備された合計とジオメトリを処理しながら、マップの応答速度を維持できます。基になる元のセット、選択された半径、または世代が変更された場合に再構築が行われますが、通常の再生は安定したシーケンスを読み取ります。

多数の円の代わりに、ぼやけ効果をレンダリングします。

ユーザーはグリッドセルではなく、明るさを見ます。レンダリングレイヤーは、計算された範囲をオーバーレイに変換し、このオーバーレイは地図と連動して移動およびズームします。世界全体を単一の超高解像度テクスチャとして扱うと、メモリを使いすぎるため、各原点を個別のライブ形状としてレンダリングすると、すべてのフレームで重複する作業が発生します。

そのため、Maplightは、高価な地理的結合をフレームループの外に保持し、準備されたカバレッジを管理可能なチャンクでレンダリングします。オーバーレイは、色、不透明度、ズーム、およびトランジションなど、プレゼンテーションに集中でき、カバレッジエンジンは地理的な回答を担当します。

この境界線は、テストにも役立ちます。SwiftUIビューなしで、カバレッジのスナップショットを確認でき、マージのセマンティクスを変更せずにレンダリングを調整できます。

プライバシーがアーキテクチャの設計に影響を与えました。

写真の座標をサーバーにアップロードして、そこでカバレッジを計算する方が簡単です。Mapsakeは、そのようなアーキテクチャを必要としません。量子化はMaplightの永続化の前に発生し、カバレッジはバンドルされた土地のジオメトリを使用してデバイス上で構築でき、パブリック共有は、プライベートの元のコレクションではなく、一般化された結果をエクスポートします。

その選択は、処理をユーザーのハードウェアに移行させ、同期設計をより複雑にします。また、システムがオフラインでも使用可能になり、ウェブサイトが個人的な写真の場所の倉庫にならないこと、およびデータの削除またはエクスポートがユーザーのMapsakeの記録と関連付けられることを意味します。

Maplight Settingsでは、半径の表示、プライベートな友達の合計、再構築、および消去のコントロールを表示します。

私たちが学んだこと。

重要な教訓は、各レイヤーが1つの明確な質問に答えるようにすることでした。

  • 「起源」は、一般的にどのような証拠が存在し、それがいつ最初に現れたかを説明します。
  • マージルールは、複数のデバイスがどのようにして追加を失うことなく統合されるかについて説明します。
  • カバー範囲は、等面積の陸地セルがどれだけ表示されているかを示します。
  • スナップショットは、その集合が時間とともにどのように変化するかを示します。
  • レンダリングは、結果に生き生きとした印象を与える方法です。

Maplightは、その下にある仕組みが意図的に抑制されているため、遊び心があるように見えるかもしれません。コンパクトな入力、加算同期、等面積測定、区間結合、バインドされた境界線、および準備されたスナップショットにより、インターフェースは感情的な部分に集中できます。つまり、写真を通して人生が地図上で明るくなるのを見ることを可能にします。

Mapsake アプリのアイコン

Mapsakeの開発者によるものです。このアプリの背後にある製品、地図、プライバシー、およびAppleプラットフォームに関する情報を提供します。

あなただけの旅行地図を作成しましょう。

すでに持っている旅行履歴から開始します。

Mapsakeは無料で、コア機能の利用にはMapsakeのアカウントは不要で、サポートされている写真のマッチングはすべてデバイス上で行われます。

Mapsakeを無料でダウンロード