You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***

#1 2010-11-17 17:55:21

siberiano
Moderator
From: Novosibirsk
Registered: 2010-02-25
Posts: 1,006
Website

OpenLayers.Style

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

Offline

#2 2010-11-17 18:07:39

Stud555
Member
From: г.Истра, МО
Registered: 2010-07-05
Posts: 572
Website

Re: OpenLayers.Style

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

            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);

Мапим прям с дивана город Дедовск
Валидаторы: Почта России, Как проехать в деревню . Разработка ОСМ.РУ, вики

Offline

#3 2010-11-17 18:17:19

siberiano
Moderator
From: Novosibirsk
Registered: 2010-02-25
Posts: 1,006
Website

Re: OpenLayers.Style

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

Offline

#4 2010-11-17 18:25:06

siberiano
Moderator
From: Novosibirsk
Registered: 2010-02-25
Posts: 1,006
Website

Re: OpenLayers.Style

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

Offline

#5 2010-11-18 00:09:17

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: OpenLayers.Style

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

            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);
             

[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#6 2010-11-18 22:01:49

siberiano
Moderator
From: Novosibirsk
Registered: 2010-02-25
Posts: 1,006
Website

Re: OpenLayers.Style

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

Offline

#7 2010-11-19 15:55:57

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: OpenLayers.Style

siberiano wrote:

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

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


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#8 2010-11-19 18:50:32

siberiano
Moderator
From: Novosibirsk
Registered: 2010-02-25
Posts: 1,006
Website

Re: OpenLayers.Style

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

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

Offline

Board footer

Powered by FluxBB