Объект не отображается на карте

Я пробовал новую версию (3) Open Layers. Я немного изменил пример функции значка, чтобы он отображал многоугольник. Я искал, читал и пробовал пару часов, но не могу понять, что я делаю неправильно.

Я не хочу использовать geoJSON, потому что хочу динамически добавлять и удалять объекты.

Это код, который у меня есть до сих пор:

<script type="text/javascript"> 
  var point1 = ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857');
  var point2 = ol.proj.transform([35.41, 9.82], 'EPSG:4326', 'EPSG:3857');
  var point3 = ol.proj.transform([33.41, 11.82], 'EPSG:4326', 'EPSG:3857');
  var polyFeat = new ol.Feature({
    geometry: new ol.geom.Polygon([point1, point2, point3])
  });

  var polyStyle = new ol.style.Style({
    fill: new ol.style.Fill({
      color: 'blue'
    }),
    stroke: new ol.style.Stroke({
      color: 'red',
      width: 2
    })
  });

  polyFeat.setStyle(polyStyle);

  var vectorSource = new ol.source.Vector({
    features: [polyFeat]
  });

  var vectorLayer = new ol.layer.Vector({
    source: vectorSource
  });

  var rasterLayer = new ol.layer.Tile({
    source: new ol.source.TileJSON({
      url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp'
    })
  });

  var map = new ol.Map({
    layers: [rasterLayer, vectorLayer],
    target: document.getElementById('map'),
    view: new ol.View({
      center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
      zoom: 3
    })
  });
</script>

Почему полигон не отображается?


person GijsjanB    schedule 30.10.2014    source источник


Ответы (1)


Две маленькие вещи, чтобы решить вашу проблему:

Во-первых, рекомендуется замкнуть многоугольник, поэтому объявите четвертую точку с теми же координатами, что и первая.

var point4 = ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857');

Тогда ваша геометрия new ol.geom.Polygon([point1, point2, point3]) должна быть new ol.geom.Polygon([[point1, point2, point3, point4]])

Важным фактом здесь является не добавление точки4, а преобразование вашей точки массива в массив массивов точек. См. API, в котором говорится, что конструктор ol.geom.Polygon OpenLayers 3 ожидает Array.<Array.<ol.Coordinate>> ожидается.

person Thomas Gratier    schedule 01.11.2014