Google マップを使用して開発中のアプリケーションについてアドバイスを求めています。
概要: ユーザーは、基準を満たすストリート セグメントを検索するための基準のリストを持っています。道路セグメントは、平均以下、平均、平均以上の 3 色で表示されます。次に、ユーザーが道路セグメントをクリックすると、その特定のセグメントのプロパティを示す情報ウィンドウが表示され、ウィンドウを閉じて他のポリラインが再び表示されるまで、選択されていないセグメントが非表示になります。これはハズブロが数ヶ月前に作ったモノポリー シティ ストリート ゲームによく似ていますが、私は Flash を使用しておらず、ストリート セグメントをリストしていないため、オープン ストリート マップを使用できません。とにかく同じ)、Google スケッチの構築を表示する必要はありません。
情報: ID、ポリライン ポイント、重心を持つ道路セグメントのデータベースがあります。データベースには、6,000,000 のストリート セグメント レコードが含まれています。生成されたデータを少し絞り込むために、都市に注目します。表示しなければならない最大の都市には、250,000 通りのセグメントがあります。これは、250,000 線分のポリラインを表示することを意味します。
最も長いポリラインは、SQL Server 2008 の 2 つの 8000 varchar 列に格納されている 9600 文字を使用しています。
API v2 より高速で、アプリケーションを iPhone に移植するため、API v3 を使用する必要があります。今のところ、SQl Server 2008 アプリケーションを使用した ASP.NET 3.5 です。パフォーマンスが優先されます。
問題: これを行うデモ プロジェクトのほとんどは、API v2 で作成されています。したがって、Google API v3 リファレンス ページのチュートリアル以外に、目標を達成するためのパフォーマンスやテクノロジの使用を比較するものは何もありません。API v3 用の .NET ラッパーはまだありません。
250,000 線分のポリラインを生成すると、重いファイルが作成され、転送と解析に時間がかかります。(390,000 ポイントの 1 つのポリラインのデモを見つけました。ポイントが少ないポリラインが多いと、丸みが少なくなるため、エンコーダの効率が大幅に低下すると思います。) 道路セグメントは基準に基づいて表示されるため、ポリラインは動的に作成する必要があります。キャッシュは使用できません。
いくつかの考え:
KML/KMZ:
長所: 標準であるため、Bing マップ、Yahoo! マップ、Google マップ、Google Earth、同じ KML ファイル。データ生成は同じです。
短所: KML の LineString は、Google マップ API が処理できるようにポリラインをエンコードできません。したがって、おそらく大きくなり、表示が遅くなります。このサイズでファイルを圧縮すると、処理時間が長くなり、クライアント側でデータを圧縮解除する必要があります。250,000 個のデータで、iPhone がこれをどのように処理し、サーバーが 40 人のユーザーの同時ブラウジングをどのように処理するかはよくわかりません。
JavaScript ファイル:
長所: JavaScript ファイルにはエンコードされたポリラインを含めることができ、転送するファイルが大幅に削減されます。
短所: オーバーレイを追加したり、ポリラインを作成したりするために、独自のストリップ バージョンの API v3 を作成する必要があります。単に KML ファイルを作成してソースを指すよりも複雑です。
GeoRSS: このオプションは私のニーズには合っていないと思いますが、間違っている可能性があります。
MapServer: MapServer を使用してオーバーレイを生成することを提案する投稿を見ました。データベースとの接続とそれがもたらすパフォーマンスについてはよくわかりません. さらに、KML を生成するためのプラグインが必要です。独自の KML ファイルまたは JavaScript ファイルを作成するよりも良い結果が得られるとは思えません。メンテナンスはなくても簡単です。
モノポリー シティ ストリート: ゲームは終了しましたが、モノポリー シティ ストリートは最大ズーム レベルで重心がウィンドウの境界内にある通りのみを表示していました。マップを移動すると、新しい通りを表示するようにサーバーに要求が送信されました。これは独創的だと思いますが、同様のものを実装する方法がわかりません。私が考えた唯一のことは、long がマップ エリア X の境界内にあり、Y と同じであるかどうかを比較することでした。これにより、高ズーム レベルでパフォーマンスが大幅に向上する可能性がありますが、都市全体を表示する場合は何も得られません。
クラスタリング: クラスターはマーカーには最適ですが、ポリラインをクラスター化することはできないようです。ポリライン用のMarkerClustererのようなものが好きで、3 つのポリラインの色でクラスタリングできるようにしたいと思います。これはおそらく、「すごいことになっていただろうが、それを忘れる」というままになるでしょう.
矢印: ポリラインの方向を示す将来のバージョンがあり、重心に矢印を表示する必要があります。画像またはマーカーをロードしてもデータが 2 倍になるだけなので、カスタム オーバーレイを作成することがおそらく唯一の選択肢になるでしょう。私が達成したい同様のデモを見つけました残念ながら、デモは非常に遅いですが、デモのように複数ではなく、ポリラインごとに 1 つの矢印のみを表示したいと考えています。KML はカスタム オーバーレイをサポートしていないと思うので、この機能はデータの形式に依存します。
基準: アプリケーションは ASP.NET 3.5 で作成されますが、iPhone へのポートはアプリケーションを表示するために Web を使用せず、基準を選択するための画面サイズが制限されます。これが、パラメーターで渡された基準に基づいてファイルを生成するサービスまたはページをより重視していた理由です。サービスは、マップ上にポリラインを表示するために必要なファイルを生成します。これを行う aspx ページを作成することもできます。aspx ページは、サービスの方法よりも詳細に文書化されています。理由があるはずです。
質問:
- 道路セグメント ファイルを返す Web サービスを作成するか、ファイルを返す aspx ページを作成する必要がありますか?
- 最大経度/緯度ポリラインには 9600 文字があり、最大 250,000 の線分ポリラインをレンダリングする必要があるという事実に基づいて、エンコードされたポリラインまたは経度/緯度を含む KML を含む JavaScript ファイルを作成する必要があります。または、オーバーレイを生成する MapServer を使用する必要がありますか?
- 次のバージョンでポリライン上にシンプルな矢印を表示できるようになるでしょうか。
- KML 生成の場合
XDocument
、XmlDocumentを使用してファイルを作成しXmlWriter
、これを手動で作成するか、ストリーム内のストリート セグメントを単にシリアル化する方が高速ですか?
これは、実際のコードの問題というよりは、ブレインストーミング スタック オーバーフローの質問です。可能性を狭めるのに役立つ答えは、より良い選択を指摘するすべての知識を持っている人と同じくらい良い.