OpenLayers:特定の投影でMAPの解像度を取得する(4326)
-
18-09-2019 - |
質問
OpenLayersを使用してOpenStreetMapマップを表示しています。 (しかし、私はこれがあらゆるマップ製品で働くのに十分な一般的であるべきだと思います...)
私はいくつかの非常に洗練されたベクトルオーバーレイを表示していますが、Geojsonを介してオーバーレイにサーバーから返されている機能の量と解像度は、多くのコンピューターにとってあまりにも多くのことが証明されています。
代わりに今やりたいのは、現在のズームの解像度にふさわしいデータのみを送信することです。これは比較的簡単に使用できます getResolution
と calculateBounds
の方法 Map
物体。 calculateBounds
マップ投影と表示投影の間に変換できるバウンドオブジェクトを返します。
解像度を希望する投影(この場合は4326)に変換するにはどうすればよいですか?これを行う方法はありますか、それとも既知の式に対して解像度を実行する必要がありますか?
解決
使用できます proj4js クライアントの座標システムを変換する。
他のヒント
Geojson Vectorレイヤーが描画するスケールを制限するだけではどうですか?
http://dev.openlayers.org/docs/files/openlayers/layer-js.html#openlayers.layer.maxscale
次に、サーバーへのOpenLayers Ajax要求は、このスケールを超えてのみトリガーする必要があります。ベクトル層を表示するときに対応するOpenSteetMapsスケール /ズームレベルを選択し、それに応じてMaxScaleを設定します。
リクエストは、関連する機能を取得するために、現在のマップディスプレイの境界をサーバーに自動的に送信する必要があります。
私はあなたのジレンマを誤解したかもしれません。解像度式が必要な場合は、この記事で説明しています。
http://msdn.microsoft.com/en-us/library/aa940990.aspx
アップデート
OpenLayersにクラスタリング戦略を実装できます。これにより、レンダリング時間が短縮されるはずだと思いますが、データベースから同じ量のデータが返されると思います。
ここで例をご覧ください:
http://openlayers.org/dev/examples/strategy-cluster.html
さまざまなサイズのポイントを持つことを避けるために、ポイントラディウス:「$ {radius}」を定数に設定する必要があります。
最後に、代替案はGeojsonではなくWMSサービスを使用することです。サーバーは、固定サイズの画像のみを返すことです。