2017-02-15 14 views
0

リーフレットのgetBound()座標をURLの一部として使用するArcGIS WebサーバーからイメージオーバーレイURLを読み取りました(現在のウィンドウの「エクステント」に対してフィルタリングされた大きなマップがあります)。実際のパスを含まないことに謝罪します(私は機密性の高いクライアントデータを扱っています)。例:リーフレットimageOverlayのsetBounds関数がありません

http://myarcgiswebserver.com/MapServer/export/dpi=96&format=png32&bbox=27.119750976562504%2C-31.194007509998823%2C32.39044189453126%2C-29.692824739380754&size=1719%2C434

[BBOX] =現在のimageBounds

imageOverlayのURLが正しく更新されていないが、私のリーフレットウィンドウが最初に追加するときに設定されたimageBound値に合わせ、もはやれる私のマップをドラッグしますスキュー出力になりimageOverlay(これは私の仮定である):

image of skewed results when i drag my map

唯一の回避策は、既存のimageOverlayを削除することです新しいものを追加すると(マップが消えるとユーザーエクスペリエンスが損なわれ、ウィンドウがドラッグまたはズームされるたびに再び表示されます)。

この問題に間違って近づいていますか、現在のimageBoundsを更新する関数を導入するとこれが解決されますか?おそらく新しい機能ではなく、追加のパラメータを持つsetUrlの拡張...?すべてのフィードバックのための

多くのおかげで...

+0

あなたのマップにあなたの 'imageOverlay'をどうやって追加しますか?私が正しく理解していれば、それはマップと一緒に動かないので、ユーザーがドラッグ/ズームすると、それはもはや整列されません。 – ghybs

+0

こんにちは、それはマップと一緒に移動しますが、高画質のimageOverlay(新しいマップエリアに合わせる)を保証するために、ズームまたはドラッグ後に(URL)を更新しています。残念なことにsetUrlを使用するとミスアライメントが発生します。レイヤーを削除して新しいimageOverlayを追加する場合にのみ位置合わせが正しく行われます –

+0

「esriリーフレット」L.esri.dynamicMapLayer http://esri.github.io/esri-leaflet/examples/simple-dynamic-map-layer .html –

答えて

1

、ご利用の場合は、より良いあなたのArcGIS ServerのWMS インタフェースを使用することによって提供される可能性があります。とにかく

、あなたは

唯一の回避策は、既存のimageOverlayを削除し、(マップウィンドウをドラッグやズームするたびに再表示され、その後消えてユーザーエクスペリエンスを台無しに)新しいものを追加することであると言います。画像をネットワーク

  • 待ちから受信されるまで
  • 待ち新しいオーバーレイを追加
  • 古いオーバーレイを削除

  • まあ、グリッチが原因あなたにおそらくのようなものをやっています新しいオーバーレイが表示されるように1フレームです。

    yo Uは次のように何かをする必要があります。

    • 画像をネットワーク
    • から受信されるまで、新たなオーバーレイは
    を示しているように、一つのフレームを待って
  • 古いオーバーレイを削除
  • 待ち新しいオーバーレイを追加します。

    問題は非同期待機と可能な競合状態ですが、一緒にハックするのは簡単です。例:

    var activeOverlay = null; 
    var overlayInRequest = null; 
    
    map.on('moveend zoomend', { 
    
        // If we are already requesting a new overlay, ignore it. 
        // This might need some additional debouncing logic to prevent 
        // lots of concurrent requests 
        if (overlayInRequest) { 
         overlayInRequest.off('load', showOverlay); 
        } 
    
        overlayInRequest = L.imageOverlay(computeUrl(map.getBounds()), myOverlayOptions); 
        overlayInRequest.on('load', showOverlay); 
    }); 
    
    function showOverlay(ev) { 
        activeOverlay.remove(); 
        activeOverlay = overlayInRequest; 
        activeOverlay.addTo(map); 
        overlayInRequest = undefined; 
    } 
    
  • +0

    こんにちはIvan、私たちがARCGISエンタープライズ版を使用しているのを見て、回避策ではなくWMSを推進しようとしています。おそらくもっと持続可能です。 –

    1

    あなたがImageOverlayを使用しますが、動的にurlを変更した場合は、新しいバウンディングボックスを反映した新しいイメージで、その後、確かにそれはあなたが記述挙動の理由であります:新しいbboxを使用して生成されたイメージが表示されますが、最初のbboxに配置されます。イメージのオーバーレイはマップ上の同じ地理的位置にとどまるためです。

    代わりに、TileLayer.WMSを使用する必要があります。

    これは自動的にバウンディングボックスの更新を管理します。ただし、サービスプロバイダに必要なURL構文に合わせて適切なオプションを見つける必要があるかもしれません。

    例:@ghybsが指摘したようにhttp://playground-leaflet.rhcloud.com/yel/1/edit?html,output

    +1

    私は[WMSリーフレットチュートリアル](http://leafletjs.com/examples/wms/wms.html)があると指摘してください。これはおそらくこれに役立ちます。 – IvanSanchez

    +0

    多くのありがとう!試してみましょう。 .. –

    関連する問題