1

サーバーからシェープファイルをロードしていて、OpenLayersで描画しています。シェープファイルには、不透明度が異なる400,000を超えるマルチポリゴンが含まれています。不透明度と塗りつぶしの色を設定する必要がありますが、OpenLayersはそれを無視し、代わりにオレンジ色の正方形を描画しているようです。属性を変更する前と変更した後、console.log()を実行すると、割り当てた内容が表示されます。なぜそれをしているのか誰か教えてもらえますか?

var green = {
    fill: true,
    fillColor: "#006633",
    fillOpacity: 1
};

var features = wkt.read(element);
if (featureNumber == 0){
 document.getElementById('result').innerHTML=element;
}
features = element.toString();
var bounds;
var b = features.indexOf('MULTIPOLYGON', 0);


var c = features.indexOf('MULTIPOLYGON', 40);
if (c == -1) {
    c = element.indexOf(':',b+1);
}

leftovers = features.substring(c,100000000000000000);

features = features.substring(b,c);


features = wkt.read(features);

if(features) {
    if(features.constructor != Array) {
        features = [features];
    }
    for(var i=0; i<features.length; ++i) {
        if (!bounds) {
            bounds = features[i].geometry.getBounds();
        } else {
            bounds.extend(features[i].geometry.getBounds());
        }

    }

    pointLayer.addFeatures(features);
    console.log(pointLayer.features[featureNumber].attributes );

    pointLayer.features[featureNumber].attributes = green;
    console.log(pointLayer.features[featureNumber].attributes );

    featureNumber++

     map.zoomToExtent(bounds);
    var plural = (features.length > 1) ? 's' : '';
    console.log('Feature' + plural + ' added');
    console.log('feature number: '+featureNumber)

    if (leftovers.indexOf('MULTIPOLYGON',0) != -1) {
        parseWKT(leftovers,shapefile);
    }

} else {
   final(leftovers, shapefile);
}

}

4

1 に答える 1

4

スタイルは、機能のプロパティで.styleはなく、プロパティに属し.attributesます。redraw()すでに地図上にある場合は、電話する必要もあります。

pointLayer.features[featureNumber].style = green;
pointLayer.redraw();

デフォルトのスタイルから始めて、いくつかのことを変更したい場合は、次のようにすることができます。

var green = OpenLayers.Util.applyDefaults(green, OpenLayers.Feature.Vector.style['default']);
green.fill = true;
green.fillColor = "#006633";
green.fillOpacity = 1;
pointLayer.features[featureNumber].style = green;
pointLayer.redraw();
于 2012-11-28T21:18:09.953 に答える