Страница 1 из 1
OpenLaers 3 + KML - изменить стиль Polygon
Добавлено: 14 окт 2015, 01:41
Kot137
Всем привет!
Помогите пожалуйста разобраться, как изменить стиль полигона подгруженного по KML?
В KML уже прописанны стили PolyStyle, но как к ним подобраться из ol не понимаю.
Что уже пробовал: перебором всех фигур слоя layer.getSource().getFeatures() холось найти у фигуры свойства связанные со стилем, но увы. По .getKeys() , применимо к каждому полигону, получил такой расклад: geometry,name,description...
Есть идеи?
Re: OpenLaers 3 + KML - изменить стиль Polygon
Добавлено: 14 окт 2015, 01:49
ericsson
Re: OpenLaers 3 + KML - изменить стиль Polygon
Добавлено: 14 окт 2015, 02:22
Kot137
Спасибо за ссылку. Тут я еще не был. Я на их сайте без "dev." в разделе API читаю.
Правильно ли я общий принцип понял:
у меня есть векторный слой на основе источника KML. Мне нужно создать парсер ol.Format.KML. Скормить парсеру при помощи readFeatures с моего слоя Source. Далее при помощи Вашего хелпа найти нужные свойства(цвета и т.д.), отредактировать и залить это обратно: получить из парсера при помощи writeFeatures и передать его в Source моего слоя.
Или нужен какой-то другой подход?
Re: OpenLaers 3 + KML - изменить стиль Polygon
Добавлено: 14 окт 2015, 03:02
Kot137
На сколько я понял - это не OpenLayers 3. В третьем какая-то другая идеалогия, а объект ol.format.KML нужен только для записи и чтения KML и у него всего 7 методов.
Или я ошибаюсь?
Re: OpenLaers 3 + KML - изменить стиль Polygon
Добавлено: 14 окт 2015, 04:38
Kot137
Вопрос решен. Всем спасибо!
1) Чтобы применить свой силь при загрузке, надо отключить чтение родных стилей KML
extractStyles:false
Код: Выделить всё
vector = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'geogate2.php/kot_areya/wms?service=WMS&version=1.1.0&request=GetMap&layers=kot_areya:kotosloy&styles=&bbox=102.13638143867644,49.30909161619354,113.83729997857279,56.68329990038404&width=768&height=484&srs=EPSG:4728&format=application%2Fvnd.google-earth.kml%2Bxml',
format: new ol.format.KML({extractStyles:false})
}),
style: styleFunction
});
2) Для замены стиля конкретного полигона (либо др. фигуры) есть метод
setStyle
Код: Выделить всё
vector.getSource().forEachFeature(function(feature){
style = new ol.style.Style({
fill: new ol.style.Fill({
color: [rand(0,255), rand(0,255), rand(0,255), 0.7]//opacity] 0xff
}),
stroke: new ol.style.Stroke({ color: [rand(0,255), rand(0,255), rand(0,255), 1] }),
text: new ol.style.Text({
fill: new ol.style.Fill({
color: [rand(0,255), rand(0,255), rand(0,255), 0.7]//opacity] 0xff
}),
stroke: new ol.style.Stroke({
color: [rand(0,255), rand(0,255), rand(0,255), 1], width: rand(1,4)
})
})
});
feature.setStyle(style);
});