2016-05-30 7 views
3

私はGoogle検索を使い果たして、ここに助けを求めました。現在、クライアント側でgeoXml3を使用してKMLファイルを処理しています。しかし理想的には、私はサーバー側でそれを前処理し、クライアント側でploygonsを送信したいと思うでしょう。 KMLファイルは18MBファイルなので、クライアント側でダウンロードするのは永遠になり、クライアントはそれを解析してGoogleマップ上にポリゴンを描画します。NodejsでKML/GeoJSONを処理する方法は?

KMLファイルをGeoJSONに変更し、サイズを縮小して圧縮しました。サーカス全体の応答時間はまだまだ順調ではありません。私はちょうどこれを行うことができるノードの方法/ライブラリがあるかどうかを知りたい。

+1

あなたはgeojsonにkmlファイルを変換するライブラリをお探しですか? – Dario

+0

リクエストごとにファイルを処理する必要がありますか、これはサーバー側で1回限りの処理ですか? – HeadCode

+0

@HeadCodeこれはロードレイヤーで1回です。リクエストごとにpostgisがあります –

答えて

1

あなたがファイルを圧縮していると言ったら、どういう意味ですか?あなたがzipやlhaのようなアルゴリズムを意味するなら、それは必ずしもファイルのサイズをそれほど減らさないでしょう。あなたがしたいのは、KMLファイルから線分を削除することです。いくつかの地理情報を削減するにあたり、直線から1フィート足らずに変化する長さがあることがわかりました。データポイントは数フィートごとに配置されていたため、KMLファイルのポイントの大部分は、ジオメトリの外観を大幅に変更することなく削除できました。直線セグメントを探すことは比較的簡単です。

また、表示されている地図の縮尺やKMLファイル内のデータポイントの間隔にも注意してください。ラインが複雑な曲線であっても、フィーチャのセグメントをカーブフィッティングし、このようにしてデータのサイズを小さくすることによって、多数のポイントを削除することは可能です。

サーバーからクライアントへのデータのダウンロードには、サーバー上のデータを処理するよりも時間がかかります。これが正しければ、点数を減らすことが最も効率的な方法です。

+0

gzipを使って圧縮するダウンロードポイントと時間が120秒から15秒に短縮されました。それでも遅いですね!私はこのための解決策はないとは思わない。 –

+0

おそらく簡単な解決策ではないか、一般に適用可能な解決策ではない。 1つのアプローチは、KMLファイルを使用してすべての点をプロットし、さまざまな倍率でそれを見ることです。 –

0

KMLポリゴンファイルのダウンロード時間を短縮するために、多くの方法があります。&レンダリング時間。

以前の回答で既に提案したように、キーはデータのサイズを小さくすることです。

  • 各行セグメント/ポリゴン境界が構成されている点の数を減らしてください。これには多くのアルゴリズムがあり、Douglas-Peuckerライン簡素化アルゴリズムが最もよく知られています。
  • データポイントの精度を下げます。座標が高い精度(緯度/経度、小数点以下の桁数)で保存されている場合は、小数点以下の小数点以下を丸めることができます。あなたがあまりにも遠くに行くならば、あなたのポリゴンの境界線が不安定になるか/ギザギザになるので、これで遊ばなければならないかもしれないことに注意してください。
  • 圧縮。すでにこれを実験したように見えます。 Gzip圧縮は、KMLのワイヤペイロードサイズを大幅に減らすことができるはずです。
  • 最後に、まだ結果が得られない場合は、小さい/重要でないポリゴンを削除してデータをさらに一般化することを検討してください。繰り返しますが、これはあなたのユースケースに依存します
+0

Thanks Aengusの場合、縮小ファイルは1.6 MBになりました。しかし、依然として使用可能性から少し不満を抱いている15秒かかる。 –

+0

はい、まだかなり遅いです。あなたはその15sがどこに行くのか調べましたか?例えばネットワーク、読み取り、レンダリング。さらに最適化は、クライアント上のポリゴンで何をしようとしているかによって異なります。あなたはサーバー側のレンダリングを見ましたか? – aengus

関連する問題