Как изменить стиль OpenLayers?

Я очень, очень новичок в веб-картографии. У меня есть карта OpenLayers, созданная из файла формы из базы данных PostGis, векторный слой и стиль по умолчанию (GeoServer SLD), но я хочу изменить стиль векторного слоя, когда пользователь нажимает кнопку обновления. Я искал в Интернете, и я не нашел простых и понятных примеров для этого. Кто-нибудь, пожалуйста, помогите мне, или, может быть, кто-то, кто хотел сделать то же самое и нашел для этого простой учебник? Любая помощь очень ценится.

<script type="text/javascript">
    var map;
    function init() {
    var bounds = new OpenLayers.Bounds(
        68.089442, 6.752729,
        97.407576, 37.072537);

    var options = {
            controls: [ new OpenLayers.Control.Navigation(),
            new OpenLayers.Control.PanZoom()
        ],

        maxExtent: bounds,
        maxResolution: 0.11843675,
        projection: "EPSG:4326",
        units: 'degrees'
    };


    map = new OpenLayers.Map ("map", options );

    var india = new OpenLayers.Layer.WMS(
        "cite:india_state - Tiled", 
        "http://localhost:8080/geoserver/cite/wms",
        {LAYERS: 'cite:india_state',STYLES: 'style',
        //format: format,
        tiled: true,
        tilesOrigin: map.maxExtent.left + ',' + map.maxExtent.bottom
        },
        {buffer: 0, displayOutsideMaxExtent: true,
        isBaseLayer: true,
        yx: {'EPSG:4326' : true}
        }
    );

    var style = new OpenLayers.Style();
    //rule used for all polygons
    var rule_fsa = new OpenLayers.Rule({
        symbolizer: {
            fillColor: "#ff9a9a",
            fillOpacity: 0.5,
            strokeColor: "#000000",
            strokeWidth: 1,
            strokeDashstyle: "dash",
            label: "${name}",
            labelAlign: "cc",
            fontColor: "#333333",
            fontOpacity: 0.9,
            fontFamily: "Arial",
            fontSize: 14
        }
    });

    var rule_highlight = new OpenLayers.Rule({
        filter: new OpenLayers.Filter.Comparison({
            type: OpenLayers.Filter.Comparison.EQUAL_TO,
            property: "classification",
            value: "1",
        }),

        symbolizer: {
            fillColor: "#FF7144",
            fillOpacity: 0.6,
            strokeColor: "#FF0000",
            strokeWidth: 2,
            strokeDashstyle: "solid",
            label: " ${name}",
            labelAlign: "cc",
            fontColor: "#000000",
            fontOpacity: 1,
            fontFamily: "Arial",
            fontSize: 16,
            fontWeight: "600"
        }
    });

    style.addRules([rule_fsa, rule_highlight]);

    var polygon = new OpenLayers.Layer.Vector("Polygon", {
        Style: 'style',
        rendererOptions: {zIndexing: true}
    });

    map.addLayers([india,polygon]);

    map.zoomToMaxExtent();
}
</script>

person user2189282    schedule 20.03.2013    source источник


Ответы (1)


векторный слой может иметь связанный StyleMap, который может определять, как ваши объекты отображаются в разных целях: стиль по умолчанию, когда объект выбран, когда вы редактируете и т. д.

Взгляните на образцы по адресу: http://acanimal.github.io/Openlayers-Cookbook/ См. Главу 7. Игра с StyleMap и код намерения рендеринга. Этот код создает пустой векторный слой, в который вы можете добавлять функции, а также переопределяет значения по умолчанию и выбирает намерения.

Также я рекомендую вам Поваренную книгу OpenLayers http://www.packtpub.com/openlayers-create-gis-web-applications-cookbook/book

Ваше здоровье.

person EricSonaron    schedule 18.06.2013