簡體   English   中英

openlayers3移動功能,如果不低於3.14版本則不起作用

[英]openlayers3 move feature, does not work if not less than 3.14 versions

我有版本3.14和更高Openlayers3的問題這個例子移動功能如果不低於3.14版本不起作用,我該怎么做才能使用新版本?

我試圖在我的項目中移動類型圈的特征,我找到了一個如何做的例子但是不能使用最新版本的openlayers3。

希望你的幫助謝謝!

var map = new ol.Map({
  target: 'map',
  layers: [new ol.layer.Tile({//Capas
                title: 'OSM',
                type: 'base',
                visible: true,
                source: new ol.source.OSM()
            })],
  view: new ol.View({
    center: [-9777389, 5058721],
    zoom: 5
  })
});

function onDrawend() {
  setTimeout(function() {
    setActiveEditing(true);
    activeInteraction.setActive(false);
    document.getElementById('draw').value = 'select';
  }, 200);
}

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

var pointInteraction = new ol.interaction.Draw({
  type: 'Point',
  source: vectorLayer.getSource()
});
pointInteraction.setActive(false);
pointInteraction.on('drawend', onDrawend);

var lineInteraction = new ol.interaction.Draw({
  type: 'LineString',
  source: vectorLayer.getSource()
});
lineInteraction.setActive(false);
lineInteraction.on('drawend', onDrawend);

var polygonInteraction = new ol.interaction.Draw({
  type: 'Polygon',
  source: vectorLayer.getSource()
});
polygonInteraction.setActive(false);
polygonInteraction.on('drawend', onDrawend);

var circleInteraction = new ol.interaction.Draw({
  type: 'Circle',
  source: vectorLayer.getSource()
});
circleInteraction.setActive(false);
circleInteraction.on('drawend', onDrawend);

var rectangleInteraction = new ol.interaction.Draw({
  type: 'LineString',
  source: vectorLayer.getSource(),
  maxPoints: 2,
  geometryFunction: function(coordinates, geometry) {
    if (!geometry) {
      geometry = new ol.geom.Polygon(null);
    }
    var start = coordinates[0];
    var end = coordinates[1];
    geometry.setCoordinates([
      [start, [start[0], end[1]], end, [end[0], start[1]], start]
    ]);
    return geometry;
  }
});
rectangleInteraction.setActive(false);
rectangleInteraction.on('drawend', onDrawend);

var selectInteraction = new ol.interaction.Select({
  condition: ol.events.condition.click,
  wrapX: false
});
var modifyInteraction = new ol.interaction.Modify({
  features: selectInteraction.getFeatures()
});
var translateInteraction = new ol.interaction.Translate({
  features: selectInteraction.getFeatures()
});
var setActiveEditing = function(active) {
  selectInteraction.getFeatures().clear();
  selectInteraction.setActive(active);
  modifyInteraction.setActive(active);
  translateInteraction.setActive(active);
};
setActiveEditing(true);

var snapInteraction = new ol.interaction.Snap({
  source: vectorLayer.getSource()
});

map.getInteractions().extend([
    pointInteraction, lineInteraction, polygonInteraction,
    circleInteraction, rectangleInteraction,
    selectInteraction, modifyInteraction, translateInteraction,
    snapInteraction]);

var activeInteraction;
document.getElementById('draw').addEventListener('change', function(e) {
  var value = e.target.value;
  if (activeInteraction) {
    activeInteraction.setActive(false);
  }
  if (value == 'point') {
    activeInteraction = pointInteraction;
  } else if (value == 'line') {
    activeInteraction = lineInteraction;
  } else if (value == 'polygon') {
    activeInteraction = polygonInteraction;
  } else if (value == 'circle') {
    activeInteraction = circleInteraction;
  } else if (value == 'rectangle') {
    activeInteraction = rectangleInteraction;
  } else {
    activeInteraction = undefined;
  }
  setActiveEditing(!activeInteraction);
  if (activeInteraction) {
    activeInteraction.setActive(true);
  }
});
html, body {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
        font-family: "Montserrat", Verdana, sans-serif;
      }
      div.full {
        width: 100%;
        height: 100%;
        /*background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF7/r+////JvYf4gAAAAJ0Uk5T/wDltzBKAAAAGElEQVR42mJgwAoYYQCJNWQEh5uPAAIMAP2AAUUBpXchAAAAAElFTkSuQmCC");*/
      }
      .ol-zoom a:hover,
      .ol-zoom a:focus {
        color: white;
        text-decoration: none;
      };
      #draw {
        position: absolute;
        top: 10px;
        right: 45px;
        padding: 4px;
        border-radius: 4px;
      }
      #edit {
        position: absolute;
        top: 10px;
      }
<link href="https://cdnjs.cloudflare.com/ajax/libs/ol3/3.14.0/ol.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ol3/3.14.0/ol.min.js"></script>
<!--script src="https://cdnjs.cloudflare.com/ajax/libs/ol3/3.13.1/ol.min.js"></script-->
<!--  version 3.13.1 change library to compare
https://cdnjs.cloudflare.com/ajax/libs/ol3/3.13.1/ol.min.js --this WORK's!!!

https://cdnjs.cloudflare.com/ajax/libs/ol3/3.14.0/ol.min.js This NOT WORK and higher
-->
<select id="draw">
      <option value="select">Select to draw…</option>
      <option value="point">Point</option>
      <option value="line">Line</option>
      <option value="polygon">Polygon</option>
      <option value="circle">Circle</option>
      <option value="rectangle">Rectangle</option>
    </select>
    <div id="map" class="full"></div>

您是否在Internet Explorer 9或更早版本的Android中看到此問題? 如果是這樣,那么您需要為requestAnimationFrame添加一個polyfill,如v3.14.0 發行說明中所述

為了確保您擁有OpenLayers所需的一切,即使在舊瀏覽器中,您也應該在頁面上包含以下polyfill:

<!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>

以上片段取自其中一個官方示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM