Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Does the Shape_Length attribute take into account the elevation? For instance, if I have 3 points: A, B, and C

A.X = 10
A.Y = 10
A.Z = 10
B.X = 10
B.Y = 10
B.Z = 50
C.X = 0
C.Y = 0
C.Z = 10

Then I create two lines: L1, and L2.

L1.fromPoint = A
L1.toPoint = C
L2.fromPoint = B
L2.toPoint = C

What I am observing in the results is that the SHAPE_Length attribute is the same for both L1 and L2. I have verified that all the points and all the polylines are ZAware.

So, am I wrong to assume the SHAPE_Length attribute takes into account the Z of the shapes?

I have no problem storing the Z Values or manipulating them. I am using IPolyline.

From what I’ve been hearing, SHAPE_Length is 2D only and isn’t editable.

share|improve this question
It depends on the Shapefile [shape type] - if it is a PolylineZ – Mapperz Jul 29 '11 at 14:19
@Mapperz SHAPE_Length is not automatically computed for shapefiles. – whuber Jul 29 '11 at 17:15
Correct but from will create the correct length – Mapperz Jul 29 '11 at 17:20
up vote 5 down vote accepted

I have been working with PolylineZ, PolygonZ, and PointZ feature classes for a long time now, and my experience is that the SHAPE_Length field is strictly XY. Because I do not have 3D Analyst (My employer has not seen fit to get it), I have had to do some fancy geometry to work with elevations. (Yes, vector equations would theoretically be easier, but I'm not up to that right now.) So, without 3D Analyst, it would appear that SHAPE_Length is XY only. Now, 3D Analyst may or may not figure these automatic fields in 3D. I wouldn't know. Do any lucky 3D Analyst users out there know the scoop?

share|improve this answer
+1, Hmmm. That is very interesting. That changes my question. – Chris Jul 29 '11 at 15:27
This answers my original question, and put me on track to realizing everything I needed to know to move on. Thanks! – Chris Jul 29 '11 at 15:42

Convert to PolylineZ for Elevation can be stored as a Z Value in PolylineZ Shapefile shape types:

   PolylineZ    Mandatory: MBR, Number of parts, Number of points, Parts, Points, Z range, Z array
    Optional: M range, M array



The variable length record contents depend on the shape type. The following are the possible shape types:

ET GeoWizard can convert Polyline to PolylineZ quickly.

share|improve this answer
But what is the answer to the question? – whuber Jul 29 '11 at 14:57
I have no problem storing or manipulating the Z values. I am using IPolyline. – Chris Jul 29 '11 at 15:10

If you are using using an ArcSDE or an RDBMS based on the Open GIS Consortium Simple Feature Specification, then length is 2D. Even at the 1.2.1 spec, Z values are still ordinate values only; X and Y are the only coordinates for normalized geometry. Binary geometry still does not include Z or M as part o the spec.
Refer to section 6.1.5:
Doing a check of several implementations of the spec, they all specify that ST_LENGTH for curves does not take into account Z-Values at this time, and it does not look like the specification tests take Z values into account.

I am not certain if a file-geodatabase would implement Z coordinates. Unlike ArcSDE, filegeodatabases use true curves instead of densified curves and do not follow the OGC SFS. So, it is possible that filegeodatabases are doing Z aware length calculations.

share|improve this answer

It is 2D. If you want to calculate the 3D length for 3D lines, use ICurve3D::Length3D

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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