Radiating Lines and Points
Summary
Generates evenly spaced lines radiating outward from every input point, and/or a point feature class of the origins and line endpoints — regularly spaced sampling locations around points of interest. Give the number of lines or the bearing interval, and a line length in real units; the first bearing points north or is randomized (seed-reproducible), the rest follow clockwise. Lines can be blocked by any number of barrier polyline and polygon feature classes — a line stops at its first crossing of a barrier line or polygon boundary (an origin inside a barrier polygon still radiates), with a Blocked flag. A modernized port of Jeff Jenness's classic ArcView Radiating Lines and Points extension, originally written for the study published as Ekebom, Laihonen and Suominen (2003).
A fan of lines from every point
Many field designs begin the same way: stand at a point and look outward in every direction, at regular angles. A ring of vegetation plots at a fixed distance around each station; transect start-lines laid out around a colony or a nest; exposure rays cast from a shoreline site to ask how much open water faces it in each direction; distance-to-edge measured from a den site along every bearing of the compass. All of these reduce to the same geometry — a fan of evenly spaced lines of known length radiating from every input point — and building that fan by hand, at dozens of stations, is exactly the kind of tedium a tool should absorb.
That is what this tool has done since its first life as an ArcView 3.x extension, which Jeff Jenness originally wrote for Jan Ekebom, Pasi Laihonen and Tapio Suominen at the University of Turku, for their assessment of physical wave exposure across Finland's fragmented Baltic archipelagos (published as Ekebom, Laihonen and Suominen 2003). Their problem was the exposure-ray version: from each shore site, how far does open water extend along each bearing before an island intervenes? Twenty years later the same fan, now with true geodesic distances and built-in barriers, answers the same family of questions in ArcGIS Pro.
The classic design, kept intact
Give either the number of lines or the bearing interval — they are two views of one choice, and typing either fills in the other (13 lines means one every 27.6923°). The interval is snapped so the lines divide the circle evenly. The first line points due north unless Randomize the first bearing spins the fan by a random fraction of the interval — each point's fan gets its own independent spin, so no bearing is systematically favored across the study area, and the optional seed makes the spins exactly reproducible. The remaining lines follow clockwise at the regular interval. A layer selection on the input points is honored.
Modernized distances
The original extension worked in raw map units and advised projecting your data first. Here the line length is given in real units — meters, kilometers, feet or miles — and geographic (latitude–longitude) points each get their own azimuthal-equidistant working projection, so every radial distance is a true geodesic and every bearing a true azimuth, at any latitude. Output length fields are always in meters.
Barriers
Any number of barrier polyline and polygon feature classes can stop the lines: a radiating line ends at its first crossing of a barrier line or polygon boundary, its Length_m records the truncated distance, and Blocked = 1 marks it. Shorelines, roads, fences and habitat edges all serve — barriers turn a plain fan into a line-of-open-passage analysis, using the same ray casting that powers the Longest Line in Polygon (Fetch) tool's directional mode.
One semantic is worth stating precisely: it is the polygon boundary that blocks, not the polygon's interior. An origin point sitting inside a barrier polygon still gets its full fan of lines, each one stopping where it reaches the boundary from the inside — which is exactly what you want when the “barrier polygons” are the habitat patches or islands the stations themselves sit on. By the same rule, a line that merely starts on a barrier is not blocked until it actually crosses it. Selections on the barrier layers are honored, the barriers may be in any mix of coordinate systems, and true-curve boundaries (geodatabase circles and arcs) are densified automatically.
What you get
Ask for the lines, the points, or both. The lines feature class carries Src_FID (the origin point's Object ID), Origin_N (the line's number around its origin, 1..k clockwise), Bearing, Length_m, Blocked, and both ends' coordinates (Org_X/Org_Y/End_X/End_Y), plus any transferred attribute fields (reserved names arrive under a Src_ prefix). The points feature class holds every origin (Location = “Origin”, with null distance and bearing — written as −999 in shapefiles, the classic convention) and every line endpoint (Location = “End Point”, with its distance and bearing), plus the same transferred fields — ready-made sampling stations on a ring around every input point.
A tour of the dialog
A basic run needs the points, a line count or bearing interval, a line length with its units, and at least one output. The barrier parameters each accept any number of feature classes. The filled pane appears beside each of the runs pictured above: the spotted owl survey shows the simplest case — a count, a length, both outputs, and a transferred Station field — while the Lake Powell runs add the lake polygon in the barrier-polygons box and the randomized first bearing.
ModelBuilder
Both outputs chain onward in a model. The endpoint feature class is the natural handoff when the fan is a sampling design — feed the “End Point” rows to an extraction or summary tool to sample rasters on a ring around every station — while the lines themselves, with Length_m and Blocked, feed openness and exposure summaries directly.
Parameters
| Label | Explanation | Data type |
|---|---|---|
| Input pointsRequired · points | The origin points the lines radiate from. A layer selection is honored. | Feature Layer |
| Attribute fields to transferOptional · transfer_fields | Fields whose values ride along onto every line and point, next to the automatic Src_FID; reserved names arrive under a Src_ prefix. | Field (multiple) |
| Number of radiating linesOptional · n_lines | How many lines radiate from each point, evenly spaced around the compass. Typing a count fills in the interval below, and vice versa — give either. | Long |
| Bearing interval between linesOptional · bearing_interval | The angle between successive lines, in degrees; snapped so the lines divide the circle evenly. | Double |
| Line lengthRequired · line_length | Every line's length, in the units below — true geodesic distances even for latitude–longitude points. Barriers can shorten individual lines. | Double |
| Units for the line lengthOptional · linear_units | Meters, Kilometers, Feet or Miles. Output length fields are always meters. | String |
| Randomize the first bearingOptional · randomize_first | Spin each point's whole fan by a random fraction of the interval instead of starting due north. | Boolean |
| Random seedOptional · random_seed | The same seed with the same inputs reproduces the same randomized bearings exactly. | Long |
| Barrier polylinesOptional · block_lines | One or more polyline feature classes that stop the lines — shorelines, roads, fences. Selections honored. | Feature Layer (multiple) |
| Barrier polygonsOptional · block_polygons | One or more polygon feature classes whose boundaries stop the lines; an origin inside still gets its full fan. Selections honored. | Feature Layer (multiple) |
| Output radiating linesOptional · out_lines | Src_FID, Origin_N, Bearing, Length_m, Blocked, both ends' coordinates, plus transferred fields. Give this, the points, or both. | Feature Class |
| Output origin and end pointsOptional · out_points | Every origin and every endpoint, told apart by Location, with distance and bearing on the endpoints. | Feature Class |
Python
Sixteen 500 m sampling rays around each station, blocked at the shoreline, with both outputs:
import arcpy
arcpy.ImportToolbox(r"C:\path\to\JennessEnterprisesTools.pyt") # your install path
# linear_units: "Meters" / "Kilometers" / "Feet" / "Miles"
arcpy.jenness.RadiatingLines(
points=r"D:\data\survey.gdb\stations",
transfer_fields="Station_Name",
n_lines=16,
line_length=500.0, linear_units="Meters",
randomize_first=True, random_seed=42,
block_lines=r"D:\data\survey.gdb\shoreline",
out_lines=r"D:\data\survey.gdb\station_rays",
out_points=r"D:\data\survey.gdb\station_ray_points")
Recommended citation
Credits and references
By Jeff Jenness, Jenness Enterprises (www.jennessent.com). A modernized port of the author's ArcView 3.x Radiating Lines and Points extension (rad_lines.avx), originally developed for Jan Ekebom, Pasi Laihonen and Tapio Suominen (University of Turku) and cited in their study of physical exposure in Finland's archipelagos.
- Ekebom, J., P. Laihonen, and T. Suominen. 2003. A GIS-based step-wise procedure for assessing physical exposure in fragmented archipelagos. Estuarine, Coastal and Shelf Science 57:887–898. doi.org/10.1016/S0272-7714(02)00419-5
Licensing information
Works at every ArcGIS Pro license level (Basic, Standard, Advanced). No extension licenses are required.
Related tools and pages
- Longest Line in Polygon (Fetch) — the same radial casting specialized to open water: directional fetch rays with shoreline termination, and exact longest lines.
- Random Sample Array Generator — arrays of sample points (grids, triangles, circles) around locations; the ring of endpoints this tool produces is the polar cousin of its circle arrangements.