Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I need to find out how to move/create a series of points which are already on a line perpendicular left or right to intersect with a second line which runs parallel to the first.

The distance between each of the output points does not need to be the same as the original, but the up/down relationship needs to stay in tact.

An example of this is that if I had a grid line running exactly north/south with points evenly spaced along it, I would need the new output points to be exactly east or west of the original line but sitting right on the second line

This may sound pretty complicated the way Im explaining it but maybe the picture attached may make it clearer.

When offsetting I need to be able to specify a maximum offset distance and would like the new points feature class to contain the same information as the original. I would also like to be able to do it on a mass scale

I was thinking along the lines of: Input Feature Point Class Input Feature Line Class: Bearing reference lines Input Feature Line Class 2: Intersect lines for new points Output Feature Point Class: with original attributes

Please note I have the following software at my disposal: * ArcGIS 10.1 * Global Mapper V15 * AutoCAD 2014

Any help or guidance would be greatly appreciated

Cheersenter image description here

share|improve this question
    
I think you should look at Linear Referencing to create point events at your offset distances. These can be converted to point features and then points joined up into polylines. –  PolyGeo May 10 at 1:41

1 Answer 1

In your case I would draw lines perpendicularly to the red lines for each point, then intersect those lines with the green lines to find the new points.

With your line running exactly north/south, you can use the "bearing distance to line" tool with the coordinates of each point as origin (e.g. computed using "add XY coordinates")

EDIT : here is a small code snippets, assuming you created "distance" (your maximum offset distance) and "bearing" (direction of the perpendicular). bearing should be filled with 90 , the run again for 270 to look on the other side. (in degrees)

import arcpy

fc_point = "path_to_points"
fc_perp = "path_to_perpendiculars"
fc_greenline = "path_to_green_line"

arcpy.BearingDistanceToLine_management (fcp, fc_perp, "POINT_X, POINT_Y, "distance", "METERS", "bearing", "DEGREE")
arcpy.Intersect_analysis ([ fcgreenline , fc_perp ], "path_out", "ALL" , "" , "POINT")

note that if you have several orientation with your straight lines (in red), you can compute their orientation with PYTHON in the field calculator, then extract the value for each point using spatial join (adding 90 for the perpendicular direction)

180 + math.atan2((!Shape.lastpoint.X! - !Shape.firstpoint.X!),(!Shape.lastpoint.Y! - !Shape.firstpoint.Y!)) * (180 / math.pi)
share|improve this answer
    
Thank you for the quick reply, but my problem is that there is approximately 30000 points on the job spread over a grid with approximately 40 - 50 lines. The North south lines and points are in seperate layers to the lines and points running east west but the intersect layer runs north south and east west in one layer. Your method would be perfect if the job was only a couple hundred points but it would take a very long time to input manually those cross lines to the intersect lines. –  user30070 May 9 at 21:12
    
I am a bit confused with your comment. From my understanding, your 30000 points are located on the NS straight lines the red line on the figure) and you want to locate the point on the green lines. With this question my method is fully automated, but maybe there is something I missed. I added a chunk of code to help. –  radouxju May 11 at 18:42

Your Answer

 
discard

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.