2014-11-23 2 views
2

В настоящее время я работаю над проектом openlayers 3 и для лучшей визуализации я должен показать оба. Форма Polygon (цвет, основанный на атрибутах), который отлично работает и значок в позиции многоугольника. Я знаю, что многоугольник содержит несколько координат, поэтому его не так просто определить позицию для значка. Теперь у меня есть какое-то обходное решение, которое создает отдельный оверлей с внутренними точками полигона, чтобы отметить положение значков. Чтобы сделать проект более простым, я хочу объединить эти два стиля. Кто-нибудь знает, возможно ли это?Можно ли добавить символ значка в многоугольник

С наилучшими пожеланиями

+0

Геометрия многоугольника имеет метод getInteriorPoint'? Рассматривали ли вы его использование? См. . Вам не нужно использовать отдельный слой для отображения внутренних точек. – erilem

ответ

1

Я предполагает, что вы используете 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» для установки значка справа в моей функции стиля.