2

次のような OpenLayers.Layer.Vector レイヤーがあります。

layer = new OpenLayers.Layer.Vector("zzzzz", {
  strategies: [
    new OpenLayers.Strategy.Fixed(),
  ],
  // styleMap: new OpenLayers.StyleMap({
  //   'default': { .. layer styles here ..}
  //   'select': { .. selected styles here ..}
  // }),
  protocol: new OpenLayers.Protocol.HTTP({
    url: "/kml/zzzzzz.kml",
    renderers: ['Canvas','SVG'],
    format: new OpenLayers.Format.KML({
      extractStyles: false, 
      extractAttributes: true,
      maxDepth: 0
    })
  })
});

次に、次のような OpenLayers.Controls.SelectFeature コントロールがあります。

selectFeature = new OpenLayers.Control.SelectFeature(
    [layer],
    {
      renderIntent: "select",
      clickout: true,
      toggle: true
    }
);

次に、次のようにマップに追加します。

map = new OpenLayers.Map('map');
map.addLayer(layer);
map.addControl(selectFeature);
selectFeature.activate();

これらの styleMap 行のコメントを外した瞬間に、すべての機能がクリックできなくなり、応答しなくなります。スタイルが状態を反映していないだけでなく、状態がまったく変化していないように見えます。

カスタム スタイルを維持し、レイヤーをホバー可能またはクリック可能にするにはどうすればよいですか?

4

1 に答える 1

1

インテントをどのようにスタイリングしていますか? あなたのシンボライザーハッシュの値は何ですか'default': { .. layer styles here ..}???

「空の」オブジェクトを作成し、デフォルトおよび選択スタイルのいくつかのプロパティのみを設定していると思います。次に例を示します。

default: {
    strokeColor: "red"
}

これは、1 つの属性のみを持ち、lineWidth、strokeOpacity などを持たないスタイルを生成します。

次のコードは私にとってはうまくいきます。またrenderers、プロトコルではなくレイヤーで指定する必要があることに注意してください。

    var map = new OpenLayers.Map("map");

    // Create an OpenStreeMap raster layer and add to the map
    var osm = new OpenLayers.Layer.OSM();
    map.addLayer(osm);

    // Set view to zoom maximum map extent
    map.zoomToMaxExtent();

    // Create symbolizers inherited from the predefined styles and change only some properties.
    var defaultStyleSymbolizer = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
    defaultStyleSymbolizer.strokeColor = "green";
    var selectStyleSymbolizer = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['select']);
    selectStyleSymbolizer.strokeColor = "red";

    // Create a vector layer
    var layer = new OpenLayers.Layer.Vector("zzzzz", {
      strategies: [
        new OpenLayers.Strategy.Fixed(),
      ],
      // Set the renderers
      renderers: ['Canvas','SVG'],
      // Apply the style map
      styleMap: new OpenLayers.StyleMap({
        'default': defaultStyleSymbolizer,
        'select': selectStyleSymbolizer
      }),
      protocol: new OpenLayers.Protocol.HTTP({
        url: "./global_undersea.kml",
        format: new OpenLayers.Format.KML({
          extractStyles: false, 
          extractAttributes: true,
          maxDepth: 0
        })
      })
    });

    // The select control
    var selectFeature = new OpenLayers.Control.SelectFeature([layer], {
      renderIntent: "select",
      clickout: true,
      toggle: true
    });

    // Add layer and control
    map.addLayer(layer);
    map.addControl(selectFeature);
    selectFeature.activate();
于 2013-06-17T20:23:20.157 に答える