よく私はそれらのアドレスとそれらの座標で場所の名前を保存するために使用するxmlファイルを持っています。地図上で場所を特定するために、このデータが必要です。大量のデータが含まれているため、xmlファイルは巨大になりました。モバイルプラットフォーム(AndroidとiPhone)にアプリをデプロイするため、検索時間を短縮したいと思います。私が正確に行うことは、ユーザーの現在の場所を取得してから、xmlを1つずつ解析し、座標を取得して、場所とユーザーの間の距離を計算し、距離が半径未満の場合は画面に印刷することです。したがって、ユーザーの現在の位置座標にあるソートまたは検索アルゴリズムをここに実装できますか?
4 に答える
XMLはデータにとって悪い選択のようです。データの保存方法を管理している場合は、データをデータベースに保存し(私が知る限り、Phonegapはそれをサポートしています)、最初に長方形の半径で検索することを検討してください。本当にXMLを使用する必要がある場合は、それを並べ替えてもあまり役に立ちません(座標は2次元セットからのものです)。たぶんそれを2つのファイル(座標ごとに1つ)に分割して並べ替えることができますが、それは本当に非常に醜い解決策です。並べ替えはXSLTを介して実行できます。たとえば、ここを参照してください。
あなたは基本的に、何百/何千ものデータベースエンジニアがすでに取り組んできたものを再現しようとしています。何十万人ものオタクがソート方法と最適なものとそうでないものを学びました。次に、これらの中で最も賢いものが大企業に採用され、これらのアルゴリズムをデータベースに配置しました。
あなたのソリューションはあまり堅牢に聞こえません。XMLは、あなたがしていることを意図したものではありません。そうは言っても、XMLの使用を主張する場合は...
少なくとも2つのxmlファイルがあります。1つは人工キーでソートされたデータを含み、もう1つは検索するパラメーターを含みます。次に、後者のファイルをシークしてから、前者のファイルを検索する必要があります。偶然にも、これは大まかにデータベースが行うことです。
ルックアップ/計算を行うWebサービスを心からお勧めします。既存のものを使用することも、独自に作成することもできます。とにかくアプリを機能させるには接続が必要なようです。
そのXMLファイルの使用には制約があります。しかし、データベースをまったく使用しないという制約もありますか?XMLとデータベースの両方を維持することに対して?
そうでない場合は、座標とキーを保存して、XMLファイルをデータベースにすぐに検索できます。これにより、検索が高速になり、XMLファイルからの読み取りが遅くなります(ただし最小限に抑えられます)。
データベースも使用できない場合は、XMLファイルの座標と(再度)キーを別のファイルに保存してみてください。このファイルははるかに小さく、その中で何らかのツリーの順序付けやパーティション化を整理できます。
最後に、1つのXMLファイルのみを使用できる場合は、ファイルをすばやく解析して、関連する座標情報を抽出する必要があります。これは、メモリ検索バッファに常に完全なレコードがあるように十分なデータを定期的に読み取ることで、おそらく正規表現で実行できます(これを行うには、最大レコードサイズの見積もりが必要です)。しかし、それはすべての地獄のように高価に見えます。私はこれを行うために他の方法を強く求めたいと思います。
XMLの上でそれを行うのは非常に悪い選択です。SpatiaLiteをアプリケーションにバンドルします。これは空間機能のSQLite拡張であるため、地理位置データに対してさまざまなクエリを実行できます...最も近い地理ポイントまたはすべての半径内の検索を含みます。SQLクエリによる。XMLデータを解析してSpatiaLiteDBファイルに保存します...元のXMLよりも確実に小さくなります。