地図データを保存するための理想的なデータ構造ですか?


12

私はインタビューテストでこれを尋ねられました。私はテストで大丈夫でしたが、この質問に答えるのに十分な知識がありませんでした。データをすばやく照会するために使用できるデータ構造を知りたいです。

基本的には、ある種のデータ構造に格納された道路セクション(ライン、ポイントで構成される)があるという考えです。どの道路セクション(またはポイント)がポイント(半径)から特定の距離内にあるかをすばやく照会する必要があります。


:本当に多くを学ぶために、私は上に読んでいましたcgal.org:これらのプロジェクトを見て、その後、cgal.org/projects.html#gis、似ているが何をしたいというものを見つけ、その後、最終的にはAPIとの使用を検討しますAPIの構成。
ジョブ

回答:


16

地理データを保存する一般的な方法は、Rツリー(またはR +ツリー、R *ツリーなどのバリアント)などの空間データ構造を使用することです。これは、地理データタイプがGIS対応で通常実装される方法です。 RDBMS。(MicrosoftのSQL Server 2008とPostGISの両方が地理タイプにRツリーを使用していることを知っています。)これらは、あなたが説明したすべての基本要件を満たし、交差、位置、距離、およびその他のクエリタイプを簡単にサポートします。

データのタイプによっては、kDツリー、クアッドツリー、オクトツリー、バウンディングボリューム階層(軸に沿ったバウンディングボックスツリーを含む)なども一般的に使用される場合があります。オブジェクトのサイズと形状は交差クエリにより関連しているため、これは実際には3Dゲームでははるかに一般的です。RツリーよりもGISに使用される頻度は少ないです。


0

最適な結果を得るには、マップデータに対するさまざまな種類の操作で異なるストレージ形式が必要になります。たとえば、次の3つのタスクを検討してください。

  1. ポイントが与えられたら、そのポイントに最も近い道路を見つけます
  2. 特定のサイズの地理的エリアがある場合、そのエリア内にあるすべての道路を見つけます。
  3. 2つの道路がある場合、それらの間の最短ルートを見つけます。

要件の違いは十分に大きいため、マップの「ライブ」変更に対応する必要がない限り、上記のタスクのいずれかに最適化されたデータの3つの別々のコピーを保存する方がよいでしょう。 3つのタスクすべてを適切に処理できる形式を考え出すために。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.