2010-12-27 9 views
4

私は通りを定義するノードのセットを持っています。各ノードには緯度と経度があります。また、私は緯度と経度を持つユーザーの場所を持っています。私の意図は、ノードの各ペアによって定義されたセグメントのボロノイ図を作成し、次にどのノードのユーザーの位置が最も近いかを見つけることです。iOSのCGAL置換

このタスクのように見えるのは、CGALライブラリで実現できます。私はiOS環境用にコンパイルする途中ですが、おそらく皆さんは既にiOSに対してコンパイルされたlibsへのリンクを提供することができます。あるいは、Objective C環境で最初から使用することを意図しています。

CGALが私のためにコンパイルされても、使用すると困るかもしれません。ありがとう!

P.Sまた、おそらくあなたはより良い解決策を考えているでしょう。ここで私達の綴りを自由に覚えてください。

答えて

3

私は決してCGALを使用していないので、私の解決策が良いかどうかについてはコメントできません。

しかし、私はspatialiteライブラリを使って同様のことを行っています。 Spatialiteはsqliteの上で動作します。あなたがそれを使用するときは、iPhoneに付属のsqliteライブラリを使用しない方が良いですが、spatialiteが含まれているものからすべてを最初から再コンパイルするだけです。データベースにデータを格納したら、ST_Distanceなどの単純な関数を使用してクローズ・セグメントを見つけることができます。

Spatialiteは空間索引付けにR * -Treesを使用します。ルックアップは非常に高速です。

+0

トムありがとうございます。私は今、この図書館を勉強しています。それが本当に合うなら、あなたの返事を「回答」とマークします。私はそれが望んでいる、私は正確にノードのデータをSQLiteのDBに保管しているので。 –

+0

あなたは私に適切なベクトルを与えたように見えます。ここでも似たような質問とアドバイスがあります:http://stackoverflow.com/questions/4373730/is-there-an-offline-geocoding-framework-library-or-database-for-iosそれを以前に見ましたが、理由はVoronoi algoによって吸収されています。 :) –

0

CGALは混乱(委員会設計とC++、常に危険です)、IMHOです。それは浸透するのが難しいです。

しかし、デバイス上のボロノイ図を計算する必要はありますか?あなたのデータセットが通りデータであれば、あまり変わらないかもしれませんし、あなたはそれをオフデバイスとして事前に構築することができます。

最後に、ボロノイダイアグラムは強力な構造ですが、ここでは過剰です。大きなライブラリを含めたくない場合は、単純なヒューリスティックで十分です。ストリートセグメントに沿ってポイントを配置します。ユーザーの位置が分かれば、最も近い通りの点を見つけることができます(たとえば、kd-treeを使用して簡単に実装できます、速く、多くの実装が利用可能です)。それらを使用して、セグメントの候補セットをテストして、最も近いものを見つける。

+0

実際に私がやったことは、iOS用のSpatialite libをコンパイルしてから、ジオメトリカラムと空間インデックスを持つMySQLデータベースに変換し、libに残りをさせました。 –