2016-10-28 2 views
0

При создании параметра ol.style.Style для ol.layer.Vector требуется штрих, необходимый для правильной рендеринга MultiPolygon?Openlayers 3.19.0, кажется, требует стиля штриха для правильной рендеринга мультиполигонов

Это модифицированная версия примера кода, взятого из here. Когда параметр stroke закомментирован, многоугольник отображается как трехгранный многоугольник. При раскомментировании параметра stroke многоугольник корректно отображает 4-сторонний многоугольник. This - пример jsfiddle. В приведенном ниже коде предполагается, что есть элемент html <div> с идентификационной картой.

var styleFunction = (function() { 
    var styles = {}; 
    styles['MultiPolygon'] = new ol.style.Style({ 
    /*stroke: new ol.style.Stroke({ 
     color: 'rgba(255, 255, 0, 1)', 
     width: 1 
    }),*/ 
    fill: new ol.style.Fill({ 
     color: 'rgba(255, 255, 0, 0.3)' 
    }) 
    }); 
    return function(feature) { 
    return styles[feature.getGeometry().getType()] || styles['default']; 
    }; 
})(); 

var geojsonObject = { 
    'type': 'FeatureCollection', 
    'crs': { 
    'type': 'name', 
    'properties': { 
     'name': 'EPSG:3857' 
    } 
    }, 
    'features': [{ 
    'type': 'Feature', 
    'geometry': { 
     'type': 'MultiPolygon', 
     'coordinates': [[[[841605, 6482619], [841599, 6482618], [841598, 6482623], [841600, 6482624]]]] 
    } 
    }] 
}; 

var source = new ol.source.Vector({ 
    features: (new ol.format.GeoJSON()).readFeatures(geojsonObject) 
}); 

var layer = new ol.layer.Vector({ 
    source: source, 
    style: styleFunction 
}); 

var map = new ol.Map({ 
    layers: [layer], 
    target: 'map', 
    view: new ol.View({ 
    center: [841599.9364198849, 6482619.123901887], 
    zoom: 21 
    }) 
}); 
+0

Вы можете попробовать с 3.19.1? – bartvde

+0

@bartvde [Здесь] (https://jsfiddle.net/6n6kfbLp/4/) - это обновленный пример с использованием 3.19.1 ... Проблема все еще существует. – bberry

+0

Мне кажется, что это ошибка, напишите GitHub вопрос – bartvde

ответ

0

Это не ошибка. Координаты в фрагменте кода выше недействительны. Согласно GeoJSON specification, "The first and last positions are equivalent, and they MUST contain identical values;". Для приведенного выше фрагмента правильная матрица координат будет

'coordinates': [[[[841605, 6482619], [841599, 6482618], [841598, 6482623], [841600, 6482624], [841605, 6482619]]]]