Wanneer een bepaalde staalname moet gebeuren in het midden van een perceel kunnen we als volgt te werk gaan.


Eerst en vooral moet het uitvoeringsplan een stap bevatten waarbij de staalnemer de locatie van de staalname vastlegt.

Dit doen we door:

  • maak een property aan van het type GPS coördinaat 
  • voeg die property ook toe aan het staalnametype, zodat je de locatie ook kan zien in het staalnameoverzicht. (Strictgenomen is dit niet noodzakelijk voor de werking van de validatie)
  • voeg een stap toe in het uitvoeringsplan waar die property wordt ingevuld


Eenmaal dit er is, kunnen een Executable aanmaken die de afstand meet tussen deze coördinaat en het midden van het perceel.


//Deze Executable valideert het of de staalname een property bevat met een GPS punt op minder dan 
//5m van het center van het perceel
//returns true als er inderdaad zo'n locatie gevonden is, anders false


//haal alle properties op die een GPS coordinaat bevatten
def gpsProperties = sampleRequest.getDynaProperties().findAll( { dp -> dp.spec.type == DynaPropertyType.GPS_COORDINATE && dp.point != null})


//als er geen properties zijn met gps locaties dan is het resultaat is sowieso false
if (gpsProperties.size() == 0) return false;


//kijk nu of in die gevonden GPS locaties een punt zit die op minder dan 5 meter van het midden ligt van de locatie.
for (DynaProperty property : gpsProperties) {
    def point = property.point
    def distance = distanceBetweenPoints(point, sampleRequest.location.center);
    def distanceInMeters = distance.convertTo(DistanceUnit.METERS).value
    
    if (distanceInMeters < 5) return true;
}

//geen punt gevonden waarvoor de gemeten afstand kleiner is dan 5m --> false
return false