OpenLayers.Style

Хочу визуализировать файл .osm с дорогами (не существующими, а проектируемыми, и не нарисованными на ОСМ). Есть ли где-нибудь уже существующие правила для OpenLayers, чтобы нарисовать это?

В смысле визуализировать? Если просто нарисовать данные из осм-файла, то делается так:


            var losm = new OpenLayers.Layer.GML("Data.OSM", "data.osm", {
                format: OpenLayers.Format.OSM,
                style: {strokeColor: "blue", strokeWidth: 1, strokeOpacity: 0.5},
                projection: new OpenLayers.Projection("EPSG:4326")
            });
            map.addLayer(losm);

Это я уже сделал. Хочу больше - rule-based style. Непонятно, есть ли оно где-нибудь или надо будет самому.

Нашёл одно описание принципов с примерами
http://workshops.opengeo.org/openlayers-intro/vector/style.html

я как-то так делал - кривовато, в смысле кода, но работает:


            var defaultStyle = new OpenLayers.Style({
                fillOpacity: 1,
                pointRadius: 10,
                strokeWidth: 1,
                strokeColor: 'gray',
                fillColor: 'white',
                fillOpacity: 0.5
            });

            var temporaryStyle = new OpenLayers.Style({
                strokeWidth: 2,
                strokeColor: 'red'
            });

            
            var styleMap = new OpenLayers.StyleMap({'default': defaultStyle,
                         'temporary': temporaryStyle});
            var lookup = {};
            lookup['TOPO'] = {fillColor: "red"};
            lookup['B_HOLE'] = {fillColor: "yellow"};
            lookup['BL_OVERLAP'] = {fillColor: "green"};
            lookup['B_BAD_LEVEL'] = {fillColor: "gray"};
            lookup['NONAME'] = {fillColor: "pink"};
            lookup['S_OVERLAP'] = {fillColor: "blue"};
            lookup['S_WITHIN'] = {fillColor: "cyan"};
            lookup['SB_OVERLAP'] = {fillColor: "magenta"};
            
            var lookup2 = {};
            lookup2['2'] = {pointRadius: 14};
            lookup2['3'] = {pointRadius: 12};
            lookup2['4'] = {pointRadius: 10};
            lookup2['5'] = {pointRadius: 8};
            lookup2['6'] = {pointRadius: 6};
            lookup2['7'] = {pointRadius: 5};
            lookup2['8'] = {pointRadius: 4};
            lookup2['9'] = {pointRadius: 3};
            lookup2['10'] = {pointRadius: 1};
            styleMap.addUniqueValueRules("default", "error_type", lookup, context);
            styleMap.addUniqueValueRules("default", "error_scale", lookup2, context);
           
            wfs = new OpenLayers.Layer.WFS(
                "Маркеры ошибок",
                "../cgi-bin/mapserv?MAP=/home/osm/cgi-bin/bc.map&SERVICE=WFS&",
                {typename: 'error', srs: 'EPSG:4326'},
                {
                    typename: "error",
                    featureNS: "http://www.openplans.org/topp",
                    extractAttributes: true,
                    commitReport: function(str) {
                        OpenLayers.Console.log(str);
                    },
                    styleMap: styleMap
                }
            );

             map.addLayer(wfs);
             

Это для точек на валидаторе рек?

Не совсем, в самом первом варианте проверялки границ. Потом мне показалось проще использовать WMS + GetFeatureInfo, и в реках сделано так.

Понятно, спасибо. Я сделал простую пару правил. Думал, что можно сделать толстую линию, обведённую контуром. Выходит, что нет.

вот оно:
http://stroyki.ryba4.com
(можно включить слой “Оловозаводской мост”, там кусок OSM показывается красными линиями.)