ghettovoice/vuelayers

Access feature in drawFinsihCondition?

iboates opened this issue · 2 comments

How can I access the geometry of the feature just drawn in a :raw-finish-condition function?

I have a draw interaction:

      <vl-interaction-draw
        v-if="isDraw"
        :active="isDrawOrModify"
        :source="activeLayerIdent"
        :type="activeLayerType"
        :finish-condition="drawFinishCondition"
        @drawend="handleDrawFeature"
      />

And the method:

    drawFinishCondition(e) {

      if (["demander", "producer"].includes(this.activeLayerIdent)) {
        let clickPoint = point(e.coordinate);
        for (const feature of this.restrictedAreaCollection.features) {
          if (booleanContains(feature, clickPoint)) {
            return false
          }
        }
      } else if (this.activeLayerIdent === "restrictedArea") {
        console.log(e);
      }

      return true
    },

If this.activeLayerIdent === "restrictedArea", then I am unable to get the geometry of the just-drawn feature from e. I need to check it against some other data to see if it is valid before allowing it to be drawn. How can I do this?

Hello @iboates ,
you can store a ref to the current drawing ol/Feature instance in drawstart event.

<vl-interaction-draw @drawstart="onDrawStart" />

onDrawStart (evt) {
  this.drawingFeature = evt.feature // instance of ol/Feature
}

Then in the finish condition callback you can access current drawing feature geometry via getGeometry() method. https://openlayers.org/en/v6.15.1/apidoc/module-ol_Feature-Feature.html#getGeometry
Take a note that openlayers geometry objects will have coordinates in map view projection (EPSG:3857 by default)

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.