2016-07-26 13 views
1

私は、サーバー側に用意されているKMLからいくつかの等高線をプロットしています。私は何をしたいのは、以下のビューごとに、ビューポートのエッジ付近の各輪郭のラベルを追加します:開いているレイヤーの輪郭にラベルを付ける3.17.1

enter image description here

私の現在のアプローチは、各マップのエッジと使用を歩くことです輪郭/特徴が[x、y]にあるかどうかを判断するためにforEachFeatureAtPixelを使用します。輪郭が見つかった場合、ラベルは現在のピクセルを基準にして追加され、輪郭/フィーチャごとに1つのラベルだけが追加されるように、フィーチャの「hasLabel」プロパティが追加され(trueに設定されます。

ユーザーがズームまたは翻訳でビューポートを変更すると、ラベルが削除され、同じプロセスが再度実行されて、ラベルが正しい位置に追加されます。

輪郭が描かれてからラベルが追加されるまでにかなりの遅延(〜10秒)があると訴えている顧客もいます。私はこれを私の開発マシンでは観察しませんが、かなり高い仕様です。

私の質問は、ラベルの位置を計算するより速い方法がありますか? (いくつかはビルトインおそらく現在のビューを越えて延びるすべての機能を一覧表示しますOpenLayersを機能?)

追加:

https://lqsts.blob.core.windows.net/temp/DayContours.kml:私が利用可能輪郭の二組のためのKMLソースを作った

https://lqsts.blob.core.windows.net/temp/MinuteContours.kml

+0

これは 'jsts' libを使って行うことができます。現在のmbrとあなたの等高線との交点を走らせ、交点にラベルを置きます。もちろん、これはjstsライブラリをインクルードする必要があることを意味します。輪郭を生成するためのコードを提供すれば、私はdemostrateするためのフィドルを作成します。 – pavlos

+0

本当にオファーのために多くの感謝!私は2つの輪郭(緑と青)のセットのKMLソースファイルへのリンクを追加しました。 JSTSを使用して設定されたいずれかのフィドルは、実際には非常に役に立ちます。 – ProfNimrod

答えて

2

私が提供するソリューションにはjstsライブラリを使用する必要があります。 これを行うには、jsts.jsファイルを含めます。これは最新のバージョンであり、正直に言うと私がテストして初めてうまく動作するようです。

ここにあなたのfiddle 最終的ではありませんが、仕事の大部分が完了しているので、あなたがすでに持っている解決策よりも速いかどうかをテストできます。

+0

これは私が必要としたものです。私はちょうどそれを私のソリューションに実装し終わりました。私のアプローチよりも速く動作します。確かに多くのありがとう! – ProfNimrod

+0

私の友人を助けることはうれしい!!!!!! – pavlos

関連する問題