0

私は独特の設定に苦労しています:MapServer文字列を呼び出すOpenLayers(GeoExt Webインターフェイス内)にWMSレイヤーがあります(例:http://mydomain/cgi-bin/mapserv.exe?map = someMapFile.map&etcetc) 。

次に、データセットをいくつかのレイヤーに分割する必要があります。n個の個別のWMSレイヤーをインスタンス化することで試行しましたが、速度が遅すぎるため、必要なレイヤーのみを含むカスタムmapFileを生成するという非常に単純なソリューションを試行しています。この動的マップファイルは、サービスによって返されます。

カスタムマップファイルへのパスを返すhttp:// mydomain / myservice / get?layers = listoflayers、otherparamsなど。このソリューションは非常にシンプルで効率的です。

したがって、ページ全体をリロードせずに、このマップファイルをその場で置き換えるために、WMSレイヤーを更新する必要があります。

だから私の質問は:

  • これは可能ですか?

  • 別のレイヤーリスト(OpenLayersが提供するデフォルトのものではない)を用意して、イベント「changeLayers」をトリガーしても大丈夫ですか?この設定の例はありますか?

ヒントを事前に感謝します!

ムローン

4

2 に答える 2

4

これには動的マップファイルは必要ありません。GetMap リクエストにはパラメータ LAYERS があります。

LAYERS=layer_list: 1 つ以上のマップ レイヤーのカンマ区切りリスト。SLD パラメータが存在する場合はオプションです。( http://mapserver.org/ogc/wms_server.html )

それとも、レイヤーのサブセットを選択する以外のことをしていますか?

于 2010-09-21T15:50:58.630 に答える
0

私の意見では、あなたが言及したような場合、WMS マップファイルをいくつかのレイヤーに分解するのが良いでしょう。場合によっては、データがまったく同じソースからのものであっても、何らかのフィルターを適用して WMS に複数のレイヤーを含めることができます。

たとえば、データベースのテーブルに保存されている場所に 100 万本の道路があり、道路フィーチャを公開するために、このデータセットに複数のレイヤーを含めることができます。レイヤーは、属性または空間関係に基づいて、年別、タイプ別、または必要に応じてフィルター処理できます。これは、レイヤーブロックまたはレイヤーファイルでフィルターを使用して、データベース接続を介してクエリする文字列を解析するときに発生します。レイヤー名は、リクエスト文字列を生成するときに動的になる可能性があるため、おそらくそれが探しているものだと思います。

したがって、この後、たとえば州間道路のみに関心がある場合は、WMS リクエストで一連のレイヤー全体に WMS エンドポイントを使用する代わりに、リクエストで「layer=interstate_road」を使用して州間レイヤーに対してのみクエリを実行できます。 . 次に、データセット全体を徹底的にスキャン/レンダリングするのではなく、州間道路のみが返されます。

よろしければ、もう少し詳しくお読みください。MapServer には、空間フィルターと非空間フィルターもあります。たとえば、フィルタ エンコーディングは、フィーチャ レベルで空間/非空間クエリを提供します。また、フィルターは動的に変更できるリクエスト URL 内にあるため、動的でもあります。

于 2016-09-08T19:23:50.750 に答える