OpenLayers.Strategy.Cluster
-
- Интересующийся
- Сообщения: 38
- Зарегистрирован: 19 май 2011, 16:27
- Репутация: 0
OpenLayers.Strategy.Cluster
Пытаюсь реализовать стратегию кластера. Пример с openlayers работает отлично. Когда в качестве слоя для кластерезации подставляю векторный слой wfs, кластер работает. Но проблема в том что не могу получить feature объекта. Как создать openlayers.feature.vector на слой wfs?
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers.Strategy.Cluster
Не понятно, что такое feature объекта, объясните что вы хотите сделать.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 38
- Зарегистрирован: 19 май 2011, 16:27
- Репутация: 0
Re: OpenLayers.Strategy.Cluster
Я создаю векторный слой использую стратегию кластер опенлаерс.
не могу получить значения объекта feature , хотя кластер сам работает отлично.
Код: Выделить всё
var firms_final = new OpenLayers.Layer.Vector("firms_final", {
strategies: [
new OpenLayers.Strategy.BBOX(),
new OpenLayers.Strategy.Cluster({distance: 100, threshold: 3})
],
protocol: new OpenLayers.Protocol.WFS({
version: "1.1.0",
url: "http://xxx.ru/geoserver/wfs",
featureType: "xxx",
featureNS: "http://geomap.by:8080/geoserver/web/",
srsName: "EPSG:900913"
}),
styleMap: new OpenLayers.StyleMap({
pointRadius: "${radius}",
fillColor: "#ffcc66",
fillOpacity: 0.1,
label:"${label}",
fontSize:10,
strokeColor: "#cc6633",
strokeWidth: "${width}",
strokeOpacity: 0.8
}, {
context: {
label: function(feature) {
return ((firms_final.feature).attributes.count) ;
},
width: function(feature) {
return ((firms_final.feature).cluster) ? 2 : 1;
},
radius: function(feature) {
var pix = 2;
if((firms_final.feature).cluster) {
pix = Math.min((firms_final.feature).attributes.count, 7) + 2;
}
return pix;
}
}
})});
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers.Strategy.Cluster
А зачем вы пишите:
нужно же так:?
Код: Выделить всё
return ((firms_final.feature).attributes.count)
Код: Выделить всё
return (feature.attributes.count)
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 38
- Зарегистрирован: 19 май 2011, 16:27
- Репутация: 0
Re: OpenLayers.Strategy.Cluster
Ну просто я много разных вариантов пробовала , поставила так всё равно undefined.
Код: Выделить всё
return (feature.attributes.count)
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers.Strategy.Cluster
Много разных вариантов - это конечно хорошо, но лучше читать документацию и делать сразу правильно. Ваш пример не работает, потому что у объекта StyleMap нет свойства context, а есть оно у объекта Style. Вот вам полностью работоспособный пример, который я протестировал на своих данных:
name - имя атрибута в моём слое, замените на имя поля, присутствующее в ваших данных. Вот пример результата:
Код: Выделить всё
vector = new OpenLayers.Layer.Vector("vector", {
strategies: [
new OpenLayers.Strategy.BBOX(),
new OpenLayers.Strategy.Cluster({distance: 100, threshold: 3})
],
protocol: new OpenLayers.Protocol.WFS({
url: "***",
featureType: "church18",
featureNS: "http://nextgis.org/sf",
geometryName: "wkb_geometry",
projection: new OpenLayers.Projection("EPSG:4326")
}),
styleMap: new OpenLayers.StyleMap(
{
"default": new OpenLayers.Style({
pointRadius: 20,
fillColor: "#ffcc66",
fillOpacity: 0.1,
label:"${label}",
fontSize:10,
strokeColor: "#cc6633",
strokeWidth: "${width}",
strokeOpacity: 0.8
}, {
context: {
label: function(feature) {
var name = feature.attributes.name;
return name ? name: "This is CLUSTER!";
},
width: function(feature) {
return feature.cluster ? 2 : 1;
}
}
})
})
});
name - имя атрибута в моём слое, замените на имя поля, присутствующее в ваших данных. Вот пример результата:
- Вложения
-
- cluster.png (93.81 КБ) 7299 просмотров
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 38
- Зарегистрирован: 19 май 2011, 16:27
- Репутация: 0
Re: OpenLayers.Strategy.Cluster
Спасибо большое теперь буду более внимательно читать документацию!
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers.Strategy.Cluster
У Вас заработало?
[Сообщение с мобильного устройства]
[Сообщение с мобильного устройства]

Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 38
- Зарегистрирован: 19 май 2011, 16:27
- Репутация: 0
Re: OpenLayers.Strategy.Cluster
Да получилось. Привожу код :
Код: Выделить всё
firms_layer = new OpenLayers.Layer.Vector("firms_final", {
strategies: [
new OpenLayers.Strategy.BBOX(),
new OpenLayers.Strategy.Cluster({distance: 20, threshold: 2})
],
protocol: new OpenLayers.Protocol.WFS({
version: "1.1.0",
url: "http://infomap.by/geoserver/wfs",
featureType: "final_firms_2",
featureNS: "http://geomap.by:8080/geoserver/web/",
srsName: "EPSG:900913",
defaultFilter: filt
}),
styleMap: new OpenLayers.StyleMap({
"default": mystyle
})
});
var mystyle = new OpenLayers.Style({
pointRadius: 15,
externalGraphic: "${externalGraphic}",
label:"${label}",
fontSize:10,
strokeColor: "#cc6633",
strokeWidth: "${widths}",
strokeOpacity: 0.8
}, {
context: {
label: function(feature) {
var ret=(feature).attributes.count;
return ret ? ret: ""; ;
},
externalGraphic: function(feature) {
var ret1=(feature).attributes.count;
if (ret1==null) {return "index.jpg"}
else {return "cluster.png"}
},
width: function(feature) {
return ((feature).cluster) ? 2 : 1;
},
radius: function(feature) {
var pix = 2;
if((feature).cluster) {
pix = Math.min((feature).attributes.count, 7) + 2;
}
return pix;
}
}
});
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя