1

Can I not generate point features where a line feature intersects itself by using the Intersect tool?

I try using it with just one line input but when I run it I get a warning saying the output generated is empty. There are visible intersections in the GPS data so it should produce some sort of output.

I'm only using a basic license so unfortunately I can't use topology rules to find these intersections.

6

Unless you are prepared to script in python or ArcObjects to process the individual geometry the tools that could answer this problem are only available at a higher license level. Otherwise you need to get creative with the tools that are available at the license level you have.

Now as soon as you hit a problem like this (no tool available at your license level) the first place you should be going is not here but ArcGIS Code Sharing, a place where kind members of the community have uploaded their tools. Suggest you spend some quality time exploring this...

It took almost no effort to find the split line at vertices tool.

  1. Download that, it's a python script packaged up as a geoprocessing tool.
  2. Run it to segment your line
  3. Dissolve the segmented lines but make sure you untick create multipart and tick on unsplit lines. Don't know what these do, read the help file.
  4. Run the Intersect tool on the dissolved data with output set to POINT.

Result

  1. The result will be stacked points. If you want only ONE point at the intersection then run the dissolve tool on the output of step (4) and make sure to untick multipart.

Et voila!

  • 1
    Thanks for the help and referring me to that site! I was able to find a couple other tools that I needed. – S. Price Mar 23 '18 at 16:11
  • What tools shall I use if I have advanced license? Thank – AndrewLebron Oct 24 '18 at 15:41
2

Basic dissolve (no multi-parts) achieves it in no time. You can then run intersect with one parameter, to find intersection points after this:

Example

  • This method knocks out one step compared to my approach, which is good but it is worth mentioning that the result of the intersection creates stacked points, as does mine, so if they want a single point another dissolve is required. – Hornbydd Mar 23 '18 at 12:31
  • 1
    I think that using scripts, add-ins is last resource. It is hard to keep track of them. I often struggle to find relevant one in my own toolboxes. Would be nice to know if someone came up with search algorithm of non system tools. – FelixIP Mar 24 '18 at 2:38
  • That sounds like a good candidate for an "esri idea"! – Hornbydd Mar 24 '18 at 16:37
0

Create a Topology with the target feature class and set rules for a self intersection.

http://desktop.arcgis.com/en/arcmap/10.3/manage-data/editing-topology/geodatabase-topology-rules-and-topology-error-fixes.htm#GUID-2154EDB0-E9C2-4B76-8F8D-94B81FE13D7B

0

By running the test below I can confirm that attempting to Intersect using a feature class containing one self-intersecting polyline will result in a feature class with 0 features.

import arcpy

arcpy.CreateFeatureclass_management(
    r"C:\Temp\test.gdb", "testFC", "POLYLINE")

cursor = arcpy.da.InsertCursor(
    r"C:\Temp\test.gdb\testFC", ["SHAPE@"])
array = arcpy.Array([arcpy.Point(0,0),
                     arcpy.Point(1,1),
                     arcpy.Point(0,1),
                     arcpy.Point(1,0)])
polyline = arcpy.Polyline(array)
cursor.insertRow([polyline])
del cursor

arcpy.Intersect_analysis("C:/Temp/test.gdb/testFC #",
                         "C:/Temp/test.gdb/testFC2",
                         output_type="POINT")

numFeats = arcpy.GetCount_management("C:/Temp/test.gdb/testFC2")[0]
print("testFC2 has {0} feature(s)")

If you run the Intersect tool from its tool dialog then you get the following warning:

WARNING 000117: Warning empty output generated.

enter image description here

Interestingly, the polyline created above seems to be overlooked by both the Check Geometry and Repair Geometry tools.

@Vince has confirmed:

That is the correct behavior. Intersection requires that the result be less than the input shape (some part of the shape must NOT intersect). The way to determine the crossing pair of segments is to construct an array of two-point segments from the vertices of the linestring, the[n] use a double-nested loop to search for crossing segments (intersect at other than the endpoints).

  • 1
    That is the correct behavior. Intersection requires that the result be less than the input shape (some part of the shape must NOT intersect). The way to determine the crossing pair of segments is to construct an array of two-point segments from the vertices of the linestring, the use a double-nested loop to search for crossing segments (intersect at other than the endpoints). – Vince Mar 22 '18 at 23:23

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.