Хочу визуализировать файл .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 показывается красными линиями.)