Global Mapper 25.1 Viewshed - ArcGIS Pro toolbox

Install
1. Extract the complete archive to a folder ArcGIS Pro can read. Keep
   toolboxes, backend, docs, requirements-arcgis.txt, and sample_data together.
2. In ArcGIS Pro, open Project > Package Manager > Environment Manager.
   Clone the installed version's arcgispro-py3 environment as
   modernviewshed-py3. Preserve the default environment.
3. Open ArcGIS Pro's Python Command Prompt. Install the versions declared in
   requirements-arcgis.txt into the clone, retaining its ArcGIS package pins:

   conda install --name modernviewshed-py3 -c esri "rasterio>=1.3" "numpy>=1.26" "numba>=0.60,<0.66" "pyproj>=3.6"

4. Return to Project > Package Manager. Select modernviewshed-py3 under
   Activate Environment, then restart ArcGIS Pro.
5. Add toolboxes/GlobalMapper251Viewshed.pyt to the ArcGIS Pro Catalog.
   Open Global Mapper Viewshed and run the supplied sample before project data.

Sample run
Add sample_data/dtm.tif and sample_data/dsm.tif. Add
sample_data/transmitter.shp as a point layer and select its one point. The
sample rasters use EPSG:32618, metre horizontal and elevation units, and 1 m
cells. Set DTM Elevation Units and DSM Elevation Units to Meters (m). Choose
Above Ground for Transmitter Elevation Relative To, 10 Meters for Transmitter
Elevation, 1 Meters for Receiver Elevation (height above ground), and 8 Meters
for View Radius. Leave Environments > Cell Size unset to use DTM sample
spacing. Choose an output format, then set a writable Output Folder and
Viewshed Name.

Global Mapper terminology
Base Elevation Layer (DTM) supplies ground elevations for the transmitter
and receivers. Obstruction Surface (DSM) supplies terrain, buildings, and
vegetation that block the view. In visual-impact work, Transmitter Location
(project point) is the tower or other project point, and Receiver Elevation
(height above ground) is the viewer's eye height. Sample Spacing is set in
Environments > Cell Size. Elevation Layer Sampling (interpolation) is a
separate choice of nearest neighbor or bilinear sampling.

Keep GlobalMapper251Viewshed.DTMDSMViewshed.pyt.xml beside the .pyt file
for field help. See docs/global-mapper-25-1-gui.md for the control comparison
and the supported options.

Runtime and dependencies
The form uses ArcPy and the Python standard library. It launches the included
backend through ArcGIS Pro's installed propy.bat, which selects the active
environment. Each run reports the backend Python executable. The maintained
form explicitly requests parallel Numba execution. Automatic raster elevation
units select unit detection; advanced interfaces expose a separate AUTO
backend setting.

The retained package sample passed on ArcGIS Pro 3.7.2 with Python 3.13.13 and
Numba 0.65.1 in the gmviewshed-py3 clone. Small-grid controls establish compiled
execution and sample correctness; they do not establish large-DEM or
end-to-end performance. The included workflow guides cover licensing, units,
and run paths. The public download contains the operational toolbox and synthetic examples.
It does not contain the landscape study inputs. No project software license
has been declared; the website illustration has separate license terms.

Package contents
PACKAGE-MANIFEST.json records each payload path, role, origin, byte count, and
SHA-256. The manifest excludes its own hash. The sample files are synthetic
qualification inputs.

Current instructions and research
https://testing-lidar-viewsheds.netlify.app/toolbox/
https://testing-lidar-viewsheds.netlify.app/article/
