Стоп, чтобы добавить точки в многоугольнике с открытыми слоями 5.3.0 - PullRequest
1 голос
/ 08 апреля 2019

На моей веб-странице пользователи могут нарисовать многоугольник, а затем изменить его. Однако я бы хотел, чтобы пользователи могли перетаскивать нарисованные углы, а не добавлять новые точки в многоугольник при изменении многоугольника.

В приведенном ниже примере я создал многоугольник с четырьмя углами и хотел бы сохранить четыре угла во время изменения (перетаскивать только углы).

Я думаю, что мы должны использовать condition в функции modify, но не уверены, как узнать разницу между щелчком по углу или краю многоугольника.

<!DOCTYPE html>
<html>
  <head>
    <title>Draw Features</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v5.3.0/css/ol.css" type="text/css">
      <script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>
      var raster = new ol.layer.Tile({
        source: new ol.source.OSM()
      });


      var source = new ol.source.Vector({wrapX: false});
      var offset = 1000000;
      var ply = new ol.geom.Polygon([[
        [-11000000 - offset, 4600000 - offset], 
        [-11000000 + offset, 4600000 - offset], 
        [-11000000 + offset, 4600000 + offset], 
        [-11000000 - offset, 4600000 + offset]]]);
      var feature = new ol.Feature(ply);
      source.addFeatures([feature]);
      var vector = new ol.layer.Vector({
        source: source
      });

      var map = new ol.Map({
        layers: [raster, vector],
        target: 'map',
        view: new ol.View({
          center: [-11000000, 4600000],
          zoom: 4
        })
      });

      var modify = new ol.interaction.Modify({source: source})
      map.addInteraction(modify);
    </script>
  </body>
</html>

1 Ответ

2 голосов
/ 08 апреля 2019
 var modify = new ol.interaction.Modify({
     source: source,
     insertVertexCondition: ol.events.condition.never
 });
...