2013-05-07 114 views
0

我已經構建了一個應用程序,允許用戶在另一個多邊形內繪製多邊形。出於某些應用特定原因,這兩個多邊形位於不同的圖層中。用戶繪製多邊形後,調用layer.events.register函數來檢查多邊形是否完全位於較大的多邊形內部。現在我想要修改應用程序,並且我有以下問題:如何在用戶在Openlayers中繪製多邊形後繪製轉換框?

Q1)如何將變換框添加到用戶繪製的多邊形中?我希望用戶能夠在繪製後旋轉或縮放多邊形。 Q2)如何在轉換(旋轉或縮放)後檢查多邊形是否仍在較大的多邊形內?

**用戶繪製的多邊形實際上是另一個矩形內的矩形。

我在下面粘貼了一些代碼。請注意,名爲「BaseLayer」的圖層是添加用戶生成的矩形的位置。

var renderer = OpenLayers.Util.getParameters(window.location.href).renderer; 
var baseLayer = new OpenLayers.Layer.Vector("BaseLayer", { 
      styleMap: new OpenLayers.StyleMap({ 
       "transform": new OpenLayers.Style({ 
        display:"${getDisplay}", 
        cursor: "${role}", 
        pointRadius: 3, 
        fillColor: "white", 
        fillOpacity: 1, 
        strokeColor: "black" 
        },{ 
       context:{ 
        getDisplay: function(feature){ 
         return feature.attributes.role === "se-resive" ? "none": ""; 
         } 
        } 
       }) 
      }), 
      renderers: renderer 
}); 

var transformControl = new OpenLayers.Control.TransformFeature(baseLayer, { 
       renderIntent: "transform", 
       rotationHandleSymbolizer: "rotate" 
}); 
var drawPolygonFeature = new OpenLayers.Control.DrawFeature(baseLayer, OpenLayers.Handler.RegularPolygon, 
      {'displayClass':'olControlDrawFeaturePolygon', 
       handlerOptions:{sides: 4, 
       irregular:true, 
       style: polygonStyle, 
       id: "processingPolygon" 
       } 
      }); 
baseLayer.events.register("featureadded", feature, function(evt){ 
    // DOES SOME ERROR CHECKING HERE. 
    // transformControl.setFeature(evt.feature); 
}); 

我試過到目前爲止: 我嘗試使用control.setFeature功能(代碼中倒數第二線以上)將變換框的功能的events.register()函數內,但是這沒有奏效。添加轉換框還會調用events.register函數,該函數會添加另一個轉換框,並因此再次調用events.register()。這導致無限循環!

任何幫助,非常感謝。謝謝!

編輯: 這裏是我想變換框的類型的例子: http://openlayers.org/dev/examples/transform-feature.html

回答

0

Q1:您需要添加TransformFeature和DrawFeature控制的層使用它們。

Q2較爲複雜,檢查當前變換後的內側多邊形還在裏面,我想你需要:改造

  1. 處理事件,
  2. 取消他們,如果在檢查3)失敗,
  3. 在OpenLayers.Geometry.Polygon類型中,有方法「containsPoint」,通過它可以檢查,如果內部多邊形的點仍在外部多邊形的內部。我不知道其他方法,它可以讓你檢查功能是否在另一個功能中。