
NAME:
Longest Straight Line, v. 1.3a
(Click Name to Download)
AKA: longline.avx
Last Modified: December 5, 2007
TITLE: Longest Straight Lines
Across the Interior of Polygons, (v. 1.3a)
TOPICS: ArcView 3.x, Fetch, Longest Line, Distance,
Bearing, Azimuth, View,
Analysis
AUTHOR:
Jeff Jenness, Jenness Enterprises
GIS Analysis and Application Design
3020 N. Schevene Blvd.
Flagstaff, AZ 86004
jeffj@jennessent.com
DESCRIPTION: This extension creates a new
button on the VIEW toolbar which allows you to find the longest
straight-line distance across the inside of polygons. Begin by
selecting
an Input theme containing the polygons of interest, and this extension
then calculates the longest straight-line distance that is completely
contained within the polygons. When the polygon represents a body of water, this longest straight
line from shore to shore is called the "fetch".
The extension then creates a results
table (described below) containing various fields such as coordinates of
the endpoints of the longest line and length of this line. CAUTION:
This
is not the same as simply calculating the points on the polygon that are
the farthest apart from each other, or calculating the
"length" or "reach" of a polygon. This extension
specifically calculates the longest straight line that is completely
contained within a polygon. Furthermore, if there are holes in the
polygon, this extension will only consider the longest lines across the
polygon that do not go through those holes.
Optionally,
you can request graphic lines to be drawn that illustrate this
longest straight-line distance.

All or only selected polygons: You can either use all the
polygons in the theme for the analysis or only a selected subset of
polygons. If any polygons in the theme are selected, then only those
selected polygons in that theme will be used in the analysis. If no
polygons in that theme are selected, then all polygons in that theme
will be used in the analysis.
Projected vs. Unprojected Views: If your original data
are in Lat/Long coordinates (the Geographic Projection) and your View has been projected, then
you have the option of calculating
RESULTS data based on either the Geographic Projection or your View Projection. The choice of projections can dramatically affect
distances and edge points, and even which points on the polygon are
considered to be farthest away from each other.
Results Table and/or Polyline Shapefile: Upon completion, you will have
either a polyline shapefile or a results
table containing the following fields:
- ID:
Input theme ID, taken from the Input theme DBF
file. Each Input feature is identified in the result table allowing
it to be linked back to the original Input theme shapefile. The name
of this field is the name of the selected Input ID field.
- X_1:
X-Coordinate of the first point of the longest
line. This point will be located somewhere on the polygon edge.
- Y_1:
Y-Coordinate of the first point of the longest
line. This point will be located somewhere on the polygon edge.
- X_2:
X-Coordinate of the second point of the
longest line. This point will be located somewhere on the polygon
edge.
- Y_2:
Y-Coordinate of the second point of the
longest line. This point will be located somewhere on the polygon
edge.
- Distance:
The distance in map units of the longest
straight line crossing the polygon.
- Azimuth:
The compass bearing between the first and last points.
Optionally, you can request your Results table to be joined with
your input DBF file.
UPDATES: Version 1.3a (December 5, 2007)
includes a minor update that allows the tool to work with PolygonM and
PolygonZ shapes.
REQUIRES: A polygon theme, and lots of time.
This extension also
requires that the Dialog Designer extension be available, which I
believe restricts it’s use to ArcView versions 3.1 and above. Along
with this, the file "avdlog.dll" must be in the ArcView/BIN32
directory (or $AVBIN/avdlog.dll), which it almost certainly is if you
have AV 3.1 or higher. If you are running ArcView 3.0a, you can
download the appropriate files for free from ESRI, at:
http://support.esri.com/index.cfm?fa=downloads.patchesServicePacks.viewPatch&PID=25&MetaID=483
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
General Instructions:
1) Begin by placing the "longline.avx"
file into the ArcView extensions directory
(../../Av_gis30/Arcview/ext32/).
2) After starting ArcView, load the extension by
clicking on File --> Extensions…
, scrolling down through the list of available extensions, and then
clicking on the checkbox next to the extension called "Longest
Straight Line, v. 1.2."
3) From a View, select the
icon from the View
Button bar.
4) Select Polygon Theme and ID Field: You will see the following dialog prompting them to
select the Input Theme and an Input ID Field. Only Polygon themes will
be listed in the list of potential Input Themes.
The INPUT theme is that polygon theme that contains the polygons
of interest. If any of these polygons are selected, then this extension
will only operate on those selected polygons. Otherwise this extension
will work through all polygons in the theme. The Input ID Field should
contain unique ID values for each polygon which will allow you to
identify which polygon is being described in the RESULTS table. Optionally,
you can elect to have the RESULTS table joined with the
Polygon Theme Feature Attribute Table.
After the extension finishes calculating the longest lines, it will
create a table containing the IDs of each polygon, the X and Y
coordinates of the endpoints of the longest line, and the length of this
line. The fields are described in more detail near the top of this
page. This dialog box also gives you the option to join the RESULTS table
with the Input Theme Feature Table. If you choose this option, the
RESULTS table can still always be separated by clicking on "Remove
All Joins" in the table menu. Regardless of whether you join
the tables or not, the table will be saved onto the hard drive.
5) Select Projection for RESULTS data: At this point,
you may possibly be
asked what projection should be used to calculate the RESULTS data. This
option only applies if your original polygons are in
Latitude/Longitude coordinates (i.e. the "Geographic" or
"Unprojected" projection) and your View is set to some
user-specified projection. In this case you have the option of
calculating the longest lines based on either your View
projection or on the original Geographic projection.

This choice can have dramatic differences on distances and edge
coordinates, and even on which parts of the polygons are considered
farthest apart from each other. Remember that distance calculations are
based on the coordinate system of the data and that therefore distances
based on Latitude/Longitude coordinates will come out in units of
"degrees," which are rarely useful to the user. Distances measured in "degrees" become especially
problematic the farther you get from the equator, since longitudinal
degrees are not the same as latitudinal degrees. The author recommends
that you calculate the RESULTS data based on your View Projection
rather than the Geographic projection, unless you have some specific
reason to need the results to be based on latitude and longitude
coordinates.
6)
Add Graphic Connection Lines:
You have the option to create a graphic line on your view that
represents the longest line across the polygon.
You can choose from a number of line colors to display this line:
7) Specify Hard Drive Location to save the RESULTS table: Regardless of whether
you choose to join the RESULTS table with
the Input FeatureTable, you will still be prompted to specify a
location on the hard drive to save the table. This is a standard ArcView
Dialog Box and should be familiar to most users. This table is a
permanent table and will not be deleted when ArcView is shut down.
Calculation Methods:
The strategy this extension uses is to first assume that the longest
line must go through two of the vertices in the polygon. In a square,
for example, the longest line will go through the corners and not the
edges. However, the line may extend past the vertices and still be
inside the polygon if there are inward-pointing vertices in the polygon,
as illustrated below.

In this example, a sample polygon has 16 vertices, labeled A through
P. The longest line across this polygon (represented by the dark green
line), still goes through two vertices (labeled "D" and
"L"), but it extends past both vertices until it hits the
edges of the polygon. Therefore, this script accomplishes it's task by
making a line for every possible pair of vertices in a polygon,
extending that line past the edges of the polygon, then clipping that
line to the polygon borders. It then selects the longest of these lines
that completely lies within the polygon boundary.
CAUTION: This script can take a long time to run! In a polygon
with more than a few dozen vertices, this extension calculates and clips
thousands of lines looking for the longest one. In light of that,
the author rigged this extension so you can either run it on all the polygons in a
theme or, if you select a subset of them, then this script will only
operate on the subset. Also, it'll save the result table after it
finishes each polygon so if it crashes you won't have lost everything.
There's a stop button that'll stop the script after it finishes whatever
polygon it's currently working on and it'll save whatever results have
been calculated to that point. If you have lots of polygons with lots of
vertices, then this extension might be one of those you run at night or
on weekends.
Enjoy! Please contact the author if you have problems or find bugs.
Jeff Jenness
jeffj@jennessent.com
3020 N. Schevene Blvd.
Flagstaff, AZ 86004
USA

Please visit Jenness Enterprises ArcView
Extensions site for more ArcView Extensions and other software by
the author. We also offer customized ArcView-based GIS consultation
services to help you meet your specific data analysis and application
development needs.
