Я предполагает, что вы используете ol.source.serversource для ваших данных. Трюк состоит в том, чтобы проверить все ваши функции, чтобы быть полигоном. Если это так, вы создаете функцию точки, которую вы добавляете в свой источник.
Сначала создайте источник и слой:
var avlVectorSource = new ol.source.ServerVector({
format: new ol.format.GeoJSON(),
loader: function(extent, resolution, projection) {
myLoader(resolution);
}
});
var myLayer = new ol.layer.Vector({
source: myVectorSource,
style: myStyleFunction
});
слой имеет функцию стиль, чтобы установить правильный значок.
Главное погрузчик:
var myLoader = function(resolution){
$.ajax({
url: "http://myJsonSource.com",
timeout: 1000,
success: function(response) {
var layerJSONString = $.parseJSON(response);
var newFeatures = [];
j= 0;
var size=layerJSONString.features.length;
for (i = 0; i < size; i++){
var feat = layerJSONString.features[i];
var geom = feat.geometry;
var type = geom.type;
if(type == "Polygon")
{
var poly = new ol.geom.Polygon(geom.coordinates);
var extent = poly.getExtent();
var coord = [];
coord[0] = (extent[2]-extent[0])/2 + extent[0];
coord[1] = (extent[3]-extent[1])/2 + extent[1];
var point = new ol.geom.Point(coord);
newFeatures[j++] = new ol.Feature({
geometry : point,
StyleName : feat.properties.StyleName
});
}
}
avlVectorSource.addFeatures(myVectorSource.readFeatures(response));
avlVectorSource.addFeatures(newFeatures);
},
error: myLoadError
});
}
};
В документации сказано, что ol.geom.Polygon имеет метод getInteriorPoint(). У меня есть, но я могу заставить его работать. Поэтому я вычисляю центральную точку протяженности многоугольника.
Я использую «StyleName» для установки значка справа в моей функции стиля.
Геометрия многоугольника имеет метод getInteriorPoint'? Рассматривали ли вы его использование? См.. Вам не нужно использовать отдельный слой для отображения внутренних точек. –
erilem