一般に、マップ アプリケーションには次の 2 つのタイプがあります。
A)ナビゲーションシステムのように経路を計算する必要なく、(ユーザーの位置の有無にかかわらず)地図を表示します(ポイントBを参照)
B) マップのベクトルを使用して何かを計算するアプリケーション: たとえば、最適なパスを見つけるため。最短の接続、例えばナビゲーションシステムなど
A) のアプリケーションは通常、B) のアプリケーションほど複雑ではありません。これは、ベクトルが多少不正確である、接続がない、小さなギャップがある、エッジ間にロジックがないなどの場合があるためです。
1) 建物の地図のみを表示するには、エッジのリストのみが必要です。(エッジは座標 (x1,y1) - (x2,y2) のペアです。どのように取得しますか。たとえば、MapInfo Professional 形式の mif/mid。
または、建物の地図を含む pdf を表示することもできます。組み込みの PDF ビュー (これも SVG を使用しますが、より困難です)。
相対マップではなく、緯度/経度 (WGS84) などの参照座標系で配置されたマップの場合、事態はさらに複雑になります。
その場合、ツール (mapInfoProfessional) を使用して AutoCad DXF ファイルをインポートし、GPS で測定された 3 つの参照ポイントを家の隅に適用し、それを LatLong WGS84 座標系に変換します。iOS では、
その 3 つのポイントを測定できません。位置を平均化することはできません.家の隅に静止していると、ios は送信を停止します.Google 衛星写真の解像度が高い地域に住んでいる場合は、Google Earth 衛星写真から位置を抽出することができます.(ただし、これは、その衛星写真プロバイダーのライセンス条件に違反する可能性があります (トピック: 派生データ))
最後に、Lat Lon 座標系のエッジのリストができました。
表示については、個人的には 1) OpenGL) または 2) Quartz2D のいずれかを使用します。
今度はパス検索の部分です。
おそらく、建物内の可能なパスを定義する 2 番目の「マップ」が必要です。この構造は、接続グラフ (接続された隣接点を持つポイント) でなければなりません。コンピュータゲームはそのようにします。(開発者モードでそのパスを表示できるものもあります)
パスは、フロア プランの別のレイヤーに描画できます。しかし、このパスにはより高い要件があります。ギャップは許されず、すべてが完全に接続されている必要があります。
そのレイヤーを「パス」と呼び、独自のプランとしてエクスポートします。
ここで、このパス レイヤーのみを使用してインポートし、隣接ノードを含むノードのグラフを作成します。
Dijkstra Algo を使用して最短経路を検索します。