I have been struggling with a problem in ArcGIS for some time now and wanted to check if someone else have come across a similar issue. I have read posts that come close to what I want, but not exactly. I'll try to explain:

I have extracted XYZ point-data for multiple, superimposed layers in the subsurface along a 2D profile. I wanted to use Arc in order to create graphs/profiles where x-values (length between points) are common for all my layers, while keeping y-values variable for depth. Essentially converting UTM xy to M values and thereby giving my layers a common reference length that can be plotted along the x-axis. Each layer is originally a separate point shapefile with XYZ (UTM).

The point profile tool provides me with exactly what i want (see attached figure), but herein lies the problem:

  • If I construct a point profile for all my layers, there's (seemingly) no way to separate between the different layers. On the upside, the M-values (or length on the x-axis) is correct for each layer relative to the next in this scenario.

  • If I on the other hand construct point profiles for each layer separately, I cannot be sure that the M-values are correct relative to the other layers. The results are often close to correct, but for my purposes I need to be sure.

Ideally I would like either a permanent point profile where I simply change the input (i.e. point shapefile), or to be able to distinguish between the different point shapefile that are displayed within the point profile (not just colour them differently, but have them as separate datasets).

Disappointingly, I have not been able to extract the xyz point data information onto a permanent polyline. Probably due to the XYZ data being stored as points rather than a surface. Since they are from a 2D profile, it is not ideal (I think) to rasterize.

My brute alternative would be to create arbitrary points at either end of the profile and use these as targets or anchor points between which to project my point profile, but I'm sure there's a more sophisticated way of doing this.

In the figure, depth values are positive.

enter image description here

1 Answer 1


Can be done with linear referencing. Faster way:

  1. Create new field in point file, type double.
  2. Make your line uppermost layer in mxd

Use field calculator, python on new field in point table:

def Chainage(shp):
 mxd = arcpy.mapping.MapDocument("CURRENT")
 with arcpy.da.SearchCursor(lr, 'Shape@') as cursor:
  for row in cursor:
 L=geom.measureOnLine (shp)
 return L


Chainage( !Shape!)

This will populate new field by distances from line start. Works for 10.2 and higher

  • Thank you so much for taking the time to answer Felix! This does the trick for individual layers, but the length is still conditioned to the specific layers rather than being universal and applicable to all. I have resorted to using dummy anchor-points at the end points of the combined length of the layers, and will use these to give the relative distances for individual layers.
    – Tore Katt
    Mar 3, 2016 at 8:14
  • Next time show your lines on the map. OP truly misleading, it gives impression of you having single line\profile
    – FelixIP
    Mar 3, 2016 at 8:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.