6

ですから、常に明るいオレンジ色のデフォルトの正多角形を見るのにうんざりして、OpenLayersのスタイルを学ぼうとしています。

私はいくつかの成功を収めました:

     var layer_style = OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style['default']);
  layer_style.fillColor = "#000000";
 layer_style.strokeColor = "#000000";
 polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer");
 polygonLayer.style = layer_style;

しかし、DrawFeatureを使用してポリゴンを描画しているのですが、私のスタイルは描画が終了した後にのみ有効になり、明るいオレンジ色から灰色にスナップするのを見るのはちょっと戸惑います。それで、私は一時的なスタイルについて学び、試しました:

 var layer_style =  new OpenLayers.Style({"default": {fillColor: "#000000"}, "temporary": {fillColor: "#000000"}})
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer");
polygonLayer.style = layer_style;

これにより、まだオレンジ色の正方形になりました。描画を停止するまで、完全に不透明な黒にスナップしました。たぶん、fillOpacityを明示的に設定する必要があると思いました...サイコロはありません。両方の塗りつぶしの色をそれぞれピンクと青に変更しても、オレンジと不透明な黒しか見えませんでした。

スタイルマップをいじってみました。スタイルマップにスタイルを1つだけ追加すると、一時的なスタイルを含むすべてにデフォルトのスタイルが使用されることを読みました。

var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
var style_map = new OpenLayers.StyleMap(layer_style);
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer");
polygonLayer.style = style_map;

それは私にも黒い不透明な正方形を手に入れました。(そのレイヤースタイルは、マップに指定されていない場合でも機能します)。次のように、マップをレイヤー自体に渡します。

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", style_map);

何も得られなかった。描いた後もずっとオレンジ。

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", {styleMap: style_map});

はるかに成功しています:描画中はオレンジ、描画中は黒の輪郭を持つ半透明の黒。地図を使わなかったときと同じように。問題は、まだ一時的なものではありません...

そこで、次のようにマップを初期化してみました。

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style});

不透明な正方形はありませんが、一時的なサイコロもありません...それでもオレンジは黒の透明にスナップします。新しいスタイル(layer_style2)を作成し、それに一時的に設定しても、運がありません。また、「選択」スタイルを設定しても運がありません。

私は何が間違っているのですか?現在スケッチされているものをスタイリングするための一時的なISですよね?drawFeatureコントローラーに固有の方法は他にありますか?

編集:extendDefaultをtrueに設定しても、役に立たないようです...

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}, {"extendDefault": "true"});
4

2 に答える 2

12

この問題に対して 2 つの解決策を見つけました。どちらのソリューションでも、必要な機能を得るには、DrawFeature のいくつかのパラメーターを変更する必要があります。

1.DrawFeature のハンドラー スタイルを変更します。OpenLayers.Handler.Polygon の関数 drawFeature は、フィーチャーのハンドラーのパラメーター スタイルを使用します。したがって、このスタイルを変更する必要があります。

機能の使用を作成する場合:

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, {handlerOptions:{style:myStyle}});

後で、次の方法で変更できます。

drawPolygon.handler.style = myStyle;

2.DrawFeature の create コールバックを変更します。create コールバックで、新しく作成された一時フィーチャのスタイルを変更します。

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, {
        callbacks:{create: function(vertex, feature) {
            feature.style = myStyle;
            this.layer.events.triggerEvent("sketchstarted", {vertex:vertex,feature:feature})
}}});

同様に、後でコールバックを変更できます。

于 2010-05-01T23:56:09.067 に答える
4

すべてのベクトルを一定のスタイルにしたいが、退屈なオレンジ色にしたくない場合は、これを試してください:

vecLayer = new OpenLayers.Layer.Vector(
    "Route Layer",  //layer name
    {styleMap: new OpenLayers.StyleMap({
        pointRadius: "6", 
        fillColor: "#666666" 
    }),
    renderers:renderer}
);

あなたが混乱させることができるプロパティがたくさんあります。これらのページを見てください:

于 2012-04-23T01:25:27.810 に答える