0

こんにちは、私は openlayers の初心者です。openlayers が提供する例から次のコードを取得しました。1 回のクリックで 4 つのポリゴンを作成し、それぞれを新しい位置にドラッグ アンド ドロップしようとしています。これは可能ですか?

助けてくれてありがとう。

コード:

<script type="text/javascript">
    var map, vectors, controls;
    function init(){
        map = new OpenLayers.Map('map');
        var options = {numZoomLevels: 3};
        var graphic = new OpenLayers.Layer.Image(
            'some title',
            'image.png',
            new OpenLayers.Bounds(-180, -88.759, 180, 88.759),
            new OpenLayers.Size(800, 200),
            options
        );
        graphic.events.on({
            loadstart: function() {
                OpenLayers.Console.log("loadstart");
            },
            loadend: function() {
                OpenLayers.Console.log("loadend");
            }
        });
        var jpl_wms = new OpenLayers.Layer.WMS( "title",
            "http://t1.hypercube.telascience.org/cgi-bin/landsat7", 
            {layers: "landsat7"}, options);
            vectors = new OpenLayers.Layer.Vector("Vector Layer");
            map.addLayers([graphic, vectors]);
            map.addControl(new OpenLayers.Control.LayerSwitcher());
            map.addControl(new OpenLayers.Control.MousePosition());
            controls = {
                point: new OpenLayers.Control.DrawFeature(vectors,
                            OpenLayers.Handler.Point),
                shape: 
 //*************This is what i'm trying to   do***************************************************
                for (i=0; i<5; i++)
                {    
                new OpenLayers.Control.DrawFeature(vectors,
                        OpenLayers.Handler.RegularPolygon,
                        {handlerOptions: {radius: 5, sides: 4, snapAngle: 45 }}),
                }

                drag: new OpenLayers.Control.DragFeature(vectors)
            };
            for(var key in controls) {
                map.addControl(controls[key]);
            }
            map.setCenter(new OpenLayers.LonLat(0, 0), 3);
            document.getElementById('noneToggle').checked = true;
        }
        function toggleControl(element) {
            for(key in controls) {
                var control = controls[key];
                if(element.value == key && element.checked) {
                    control.activate();
                } else {
                    control.deactivate();
                }
            }
        }
</script>
4

1 に答える 1

0

ランダムな線形リングを作成する必要があります (ポリゴンをランダムにするかどうかはわかりません)。線形リングは、ポリゴンが必要とするすべてのポイントを持つオブジェクトです。

var polygonFeatures = new Array();
for (i = 0; i < 4; i++) {

  var site_points = new Array();

  // Whatever points you want to us in site points
  // A point is an OpenLayers.Geometry.Point
  var linear_ring = new OpenLayers.Geometry.LinearRing(site_points);

  // Create a feature for the polygon(s) to be in
  polygonFeatures[i] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linear_ring]);
}

// Add the features to the vector layer
vectors.addFeatures([polygonFeatures]);

これは、ポリゴンをマップに追加する必要がある方法であり、コントロールで定義するべきではありません。dragfeature は既に正しいですが、site_points について何かを把握してください。

于 2012-06-20T14:24:16.577 に答える