3

I'd like to create new points or move existing points at specific individual distances (according to a field in the attribute table), perpendicular to a line. The points are evenly spaced out at 100 m.

This image shows more clearly I hope about what I'm aiming to do.

  • 1
    Welcome to GIS SE! Thank you for having taken the Tour to learn about our focussed Q&A format. At the moment your pictures contain some text explanation that is not also available within the text of your question body, which makes it unavailable for searching. By addressing this I think it will be more likely that your question can attract potential answerers. – PolyGeo Apr 18 '18 at 21:31
  • I don't have access to arcpy at the moment (which you will almost certainly need for this), so I won't write this up as a full answer, but I believe you should convert your coastline to a polyline, then use a combination of pointAlongLine (every 100m) and pointFromAngleAndDistance (perpendicular angle and distance from table) to make your new points. The tricky part is figuring out the current angle on the coastline, but it can be done. – phloem Apr 18 '18 at 21:58
  • Little modification of gis.stackexchange.com/questions/201867/… will solve it – FelixIP Apr 19 '18 at 0:17
  • My python skills are very limited... Can you suggest a way to understand how to modify the code to suit my situation? Thank you – Irene S. Apr 19 '18 at 0:29
  • Simply replace [leftP, rightP] with [leftP, ptX] at the end of expression and fixed number in call by field name where you store required distance. This will create perpendicular s. You can convert them to vertices. If points on a wrong side flip original line. – FelixIP Apr 19 '18 at 20:14
1

I applied workflow referenced in my comment with slightly modified field calculator expression:

def RotateExtend(plyP,sLength):
 l=plyP.length
 ptX=plyP.positionAlongLine (l/2).firstPoint
 ptX0=plyP.firstPoint
 ptX1=plyP.lastPoint
 dX=float(ptX1.X)-float(ptX0.X)
 dY=float(ptX1.Y)-float(ptX0.Y)
 lenV=math.sqrt(dX*dX+dY*dY)
 sX=-dY*sLength/lenV;sY=dX*sLength/lenV
 leftP=arcpy.Point(ptX.X+sX,ptX.Y+sY)
 rightP=arcpy.Point(ptX.X-sX, ptX.Y-sY)
 array = arcpy.Array([leftP,ptX])
 section=arcpy.Polyline(array)
 return section
#-----------------
RotateExtend( !Shape!, ! !SHIFT!)

to go from that:

enter image description here

to that:

enter image description here

You can use feature vertices to point tool (Start) on "directions" to derive shifted points of interest.

If you'll find that points are on the wrong side of the line, the simplest solution for you due to lack of Python knowledge is flipping original line(s).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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