GIS Spatial Join

David Tennant 8 years ago in General updated by Yan 8 years ago 4
It would be great if one could do a spatial query whereby attributes from any given file can be joined with attributes of another file based on XYZ coordinates.  This is not only useful for exploration but also for geotechnical applications.  I currently use the ArcGIS Spatial Join function to perform these queries on triangle orientations so as to calculate apparent dips of various lithologies in relation to   triangle orientations of design pit shells.   
Satisfaction mark by David Tennant 8 years ago
Under review
@David, there are a couple of ways you can do this.

  1. Use IDW to do the 3D equivalent of a point-in-polygon operation
  2. Create grid surfaces of dip and direction and then use Generate Z Values to estimate the orientations for the unknown locations
Assuming you have separate triangle orientation files for your lithologies and pit shells, and you are assigning the lithology triangle orientations to the pit shell triangles, here is how the two techniques would work:

Technique 1:

  1. Convert the pit shell triangle (target) orientations file to a fake block model by creating temporary dimension fields. For example, if the coordinate fields are labelled X, Y and Z, the dimension fields would be _X, _Y and _Z. Fill them all with a small number such as 0.1.
  2. Set up Modelling | 3D Block Estimate | Inverse Distance Weighting so that the input file is your lithology (source) orientations file and the input and output block model files are the modified pit shell (target) orientations file.
  3. Set the "grade" fields to dip and direction.
  4. Use a really large search neighbourhood and set max points per sector to 1, with ONE sector. The power is irrelevant because there is only ever one point per neighbourhood.
  5. Delete the temporary dimension fields once you are done.
This technique will essentially copy the the nearest lithology triangle orientation to each pit shell triangle orientation. It is the closest approximation to an ArcGIS spatial join in Micromine, and has the advantage of being able to work with true 3D data.

Technique 2:

This technique is only appropriate if your data complies with the basic rule for DTMs and grid surfaces: that there is only ever one Z value at any X-Y location.

  1. Use Grid | Create to produce a grid surface of the dip of the lithology triangles.
  2. Use it again to create a grid surface of the direction of the triangles.
  3. Use Grid | Generate Z Values to assign the lithology dip to the pit shell triangles.
  4. Use it again to assign the lithology direction to the pit shell triangles.
Assuming your data meets the DTM/grid requirement this technique will assign the interpolated lithology triangle orientations (which vary continuously across each grid surface). It is a bit simpler to set up than the IDW method, but because the grid surfaces are interpolated it won't honour the strict "join" of attributes (unless you use nearest neighbour when you create the grid surfaces).

If this is a recurring task then both methods are classic candidates for automation via a macro or Python script.

Hope this helps.

That's exactly what I wanted.  Thanks so much for your help.