Skip to main content
Question

Return XY coordinate of certain Z value along polyline Z

  • November 19, 2016
  • 7 replies
  • 13 views

setld_solutions
Contributor
Forum|alt.badge.img+7

Return XY coordinate of certain Z value along polyline Z

This is not a measure along the line. Measure might be 11200', but z is 10900'. Also, vertices are every 100' or so -- not easy to interpolate to the exact Z via converting the line to vertices. I want to avoid going too complex with this solution -- is there an easy way that is escaping me?

7 replies

david_r
Celebrity
  • November 21, 2016

If you can, I think the easiest would be to set the Z-values as measures and use the linear referencing transformers from there.


redgeographics
Celebrity
Forum|alt.badge.img+49

Close, but no cigar I think... I tried generating contours from the line, then selecting the contour at the Z-value I want and doing a NeighborFinder between that contour and the original line. But the coordinates would be a bit off compared to what I would expect in this case. I expect (5,5) and get (5.02,5.02)

Posting this anyway, maybe it helps.


setld_solutions
Contributor
Forum|alt.badge.img+7
redgeographics wrote:

Close, but no cigar I think... I tried generating contours from the line, then selecting the contour at the Z-value I want and doing a NeighborFinder between that contour and the original line. But the coordinates would be a bit off compared to what I would expect in this case. I expect (5,5) and get (5.02,5.02)

Posting this anyway, maybe it helps.

Thanks! Looks like the road I was about to travel.

 

 


mark2atsafe
Safer
Forum|alt.badge.img+44
  • Safer
  • November 21, 2016

Hi @setld_solutions

The other thought I had was to cut the line at the elevation that you want the XY of. So I did this:

Basically you have a Creator that creates a polygon covering the x/y area of interest. I made it with a Z value but you could create it with zero Z and use a 3DForcer (publishing the 3DForcer parameter so you get to choose each time where to cut)

The LineOnAreaOverlayer won't work in 3D mode. So... use CoordinateSwappers to swap the X and Z coordinates to get 2D. Do the overlay, switch the coordinates back.

Now I have two lines. The point at which they meet is the X/Y location of the chosen Z value.

If there was a transformer that did 3D intersection the CoordinateSwappers wouldn't be necessary. Sadly I couldn't find one. But it's still a fairly simple solution.

Hope that helps. An interesting problem. I like it.

Mark


setld_solutions
Contributor
Forum|alt.badge.img+7
mark2atsafe wrote:

Hi @setld_solutions

The other thought I had was to cut the line at the elevation that you want the XY of. So I did this:

Basically you have a Creator that creates a polygon covering the x/y area of interest. I made it with a Z value but you could create it with zero Z and use a 3DForcer (publishing the 3DForcer parameter so you get to choose each time where to cut)

The LineOnAreaOverlayer won't work in 3D mode. So... use CoordinateSwappers to swap the X and Z coordinates to get 2D. Do the overlay, switch the coordinates back.

Now I have two lines. The point at which they meet is the X/Y location of the chosen Z value.

If there was a transformer that did 3D intersection the CoordinateSwappers wouldn't be necessary. Sadly I couldn't find one. But it's still a fairly simple solution.

Hope that helps. An interesting problem. I like it.

Mark

Very nice, thank you Mark!

 

 


erik_jan
Contributor
Forum|alt.badge.img+17
  • Contributor
  • November 21, 2016

How about this:

Use a Chopper (number of vertices = 2) to create line segments.

Use two MeasureSetter transformers (for start and end point) and set a measure with value @ZValue().

The use the Snipper transfomer with mode Measure(value) to snip at the required Z value.

Finally use the CoordinateExtractor on the End point (index -1) of the Snipped line segment (if needed test for @ZValue = <required value>).


setld_solutions
Contributor
Forum|alt.badge.img+7
erik_jan wrote:

How about this:

Use a Chopper (number of vertices = 2) to create line segments.

Use two MeasureSetter transformers (for start and end point) and set a measure with value @ZValue().

The use the Snipper transfomer with mode Measure(value) to snip at the required Z value.

Finally use the CoordinateExtractor on the End point (index -1) of the Snipped line segment (if needed test for @ZValue = <required value>).

Thanks Eric. Here's a pic from ArcScene. The dots currently rendered are indeed done with Snipper as a measurement along line (it was provided). For another dataset, the source only provides TVD (a depth at which the item occurs). See pic.

 

 


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