Skip to main content
Question

FME Python Script for Automated DDH Desurveying (Minimum Curvature, Flexible Intervals)


3d_ff
Contributor
Forum|alt.badge.img+6
  • Contributor

@daveatsafe 

 

Dear FME Community,

I am seeking assistance in developing a Python script for use within an FME workspace to automate the desurveying of diamond drill holes (DDH) using the minimum curvature method. I aim to create a flexible solution that allows users to specify a custom desurvey interval (e.g., 1m, 3m, etc.).

Background:

Desurveying a drill hole involves calculating the actual XYZ coordinates along its length based on the collar location and survey data (azimuth and dip at regular downhole distances).

I've researched existing methods and found the following resources helpful:

Desired Functionality:

I need a Python script that can:

  1. Read DDH survey data: Input should include collar coordinates, downhole distance, azimuth, and dip.
    • With any additional attributes: lithology, assays, etc.
  2. Implement the minimum curvature method: This is the preferred desurveying technique.
  3. Allow user-defined desurvey intervals:
    • Users should be able to specify a desired interval (e.g., 1m, 3m, 5m) to resample the data.
    • Users could decide to use the TOP/START, MIDDLE or BOTTOM/END intervals of a chosen qualitative attribute, i.e. lithology
  4. Output XYZ coordinates: The script should generate a table or feature class containing the calculated XYZ coordinates at the specified intervals.

Test Data:

I have attached a spreadsheet containing test data for a single DDH to aid in development and testing.

Specific Questions:

  • Are there existing FME custom transformers or Python libraries that can streamline this process?
  • What is the most efficient way to implement the minimum curvature algorithm within an FME PythonCaller transformer?
  • What is the best way to handle the geoh5py and numpy dependancies within FME?
  • Are there any examples of python scripts that resample data at a user defined interval that can be used as a starting point.

I appreciate any guidance or assistance you can provide.

Thank you for your time and expertise.

Francine

 

Attachments:

  • DDH_Desurvey_FME_transfo_test.xlsx
  • Various open source DDH desurveying python scripts

4 replies

3d_ff
Contributor
Forum|alt.badge.img+6
  • Author
  • Contributor
  • April 8, 2025

We have been wanting to automate our drill hole desurveys using FME since 2022, any insights anyone? 


hkingsbury
Celebrity
Forum|alt.badge.img+53
  • Celebrity
  • April 11, 2025

I’ll be honest, I didn’t look at any of the python you included, just looked at the leapfrog documentation to ensure I understood what desurveying was.

I’ve attached an example that is pure fme (no python). The process first calculates the relative offset of each point, then cumulatively calculates the appropriate xyz. Finally it offsets the result from the starting location.

The example was built in 2024.2


3d_ff
Contributor
Forum|alt.badge.img+6
  • Author
  • Contributor
  • April 11, 2025

@hkingsbury Thank you, I will check it out and get back to you. Much appreciated.


3d_ff
Contributor
Forum|alt.badge.img+6
  • Author
  • Contributor
  • May 1, 2025

@hkingsbury 
Subject: Follow-up: FME DDH Desurveying Workflow - Missing Trace Data and UTM Calculation

Sorry for the delay in my response; we had a rush project that required my immediate attention over the last month.

I've had a chance to test the FME workflow you provided, and it works well and is very easy to set up. Thank you for this.

However, I've identified a couple of areas that need fine-tuning to ensure the complete and accurate trace of the diamond drill hole:

  • Missing Initial Portion of Trace: The depth values in the survey data are relative to the calc_common_elevation from the collar table. This means that a depth of zero corresponds to calc_common_elevation - 0, a depth of 5 corresponds to calc_common_elevation - 5, and so on. Consequently, the initial portion of the drill hole trace is missing.

     

  • Missing Final Portion of Trace: In some cases, the final depth value in the survey data does not match the final_depth value in the collar table. For example, the last measured depth in the survey might be 790, while the final_depth in the collar table is 807. To complete the drill hole trace, we need to add an extra row to the survey data to calculate the xyz_deltas for the remaining interval.

     

  • Automated UTM Coordinate Calculation: It would be highly beneficial to automate the calculation of the real Easting, Northing, and Elevation UTM coordinates within the resulting table. These coordinates can be derived from the collar coordinates in combination with the calculated xyz_deltas.

Any help or suggestions you can offer would be greatly appreciated.

Also, could you provide guidance on how to address these additional issues within the FME workflow, specifically, I'm looking for solutions for:

  • Attribute Assignment: We have an example which is a "lithology" table containing attributes associated with specific depth intervals (depth_from and depth_to). These depth values represent distances along the desurveyed drill hole trace. We need a way to transfer the lithology attributes to the desurveyed points based on which interval along the trace they fall within.

     

Systematic Desurveying by User-Chosen Intervals: We need to have the ability to generate a new set of desurveyed points at a consistent, user-defined interval (e.g., every 1 meter) along the calculated drill hole trace, from the collar to the end of the hole. The lithology attributes assigned in the previous step should also be present on these systematically generated points.

 

Any help or suggestions you can offer would be greatly appreciated.

Thank you for your time and expertise.

Francine

 


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings