私はインタビューテストでこれを尋ねられました。私はテストで大丈夫でしたが、この質問に答えるのに十分な知識がありませんでした。データをすばやく照会するために使用できるデータ構造を知りたいです。
基本的には、ある種のデータ構造に格納された道路セクション(ライン、ポイントで構成される)があるという考えです。どの道路セクション(またはポイント)がポイント(半径)から特定の距離内にあるかをすばやく照会する必要があります。
私はインタビューテストでこれを尋ねられました。私はテストで大丈夫でしたが、この質問に答えるのに十分な知識がありませんでした。データをすばやく照会するために使用できるデータ構造を知りたいです。
基本的には、ある種のデータ構造に格納された道路セクション(ライン、ポイントで構成される)があるという考えです。どの道路セクション(またはポイント)がポイント(半径)から特定の距離内にあるかをすばやく照会する必要があります。
回答:
地理データを保存する一般的な方法は、Rツリー(またはR +ツリー、R *ツリーなどのバリアント)などの空間データ構造を使用することです。これは、地理データタイプがGIS対応で通常実装される方法です。 RDBMS。(MicrosoftのSQL Server 2008とPostGISの両方が地理タイプにRツリーを使用していることを知っています。)これらは、あなたが説明したすべての基本要件を満たし、交差、位置、距離、およびその他のクエリタイプを簡単にサポートします。
データのタイプによっては、kDツリー、クアッドツリー、オクトツリー、バウンディングボリューム階層(軸に沿ったバウンディングボックスツリーを含む)なども一般的に使用される場合があります。オブジェクトのサイズと形状は交差クエリにより関連しているため、これは実際には3Dゲームでははるかに一般的です。RツリーよりもGISに使用される頻度は少ないです。
最適な結果を得るには、マップデータに対するさまざまな種類の操作で異なるストレージ形式が必要になります。たとえば、次の3つのタスクを検討してください。
要件の違いは十分に大きいため、マップの「ライブ」変更に対応する必要がない限り、上記のタスクのいずれかに最適化されたデータの3つの別々のコピーを保存する方がよいでしょう。 3つのタスクすべてを適切に処理できる形式を考え出すために。