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 form uses AUTO execution to select serial Numba for small jobs and parallel Numba for sufficiently large jobs. The run JSON records the selected mode, configured threads, and estimated ray work. Automatic raster elevation units control unit detection separately. First use may include compilation. For large constant-elevation obstruction surfaces, an exact clear-ray shortcut can avoid unnecessary sampling. Mixed surfaces and uncertain rays use the ordinary calculation. This does not establish a general speed advantage over Global Mapper or resolve the known four-cell radius exception. The retained package sample passed on ArcGIS Pro 3.7.2 with Python 3.13.13 and Numba 0.65.1 in a clone named gmviewshed-py3. An environment name is only a local label; the installation steps above create modernviewshed-py3. 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. The current packaged sample also passed on ArcGIS Pro 3.7.3 with zero status differences from the packaged API. It does not contain the landscape study inputs. No project software license has been declared; the website illustration has separate license terms. Supported comparison profile Captured classifications match Global Mapper Pro 25.1.1 build b030624 for the recorded inputs and settings. Agreement means equal visible/hidden cells on the same eligible grid, including a separate check for native visible cells outside that domain. It does not mean identical files, complete feature parity, or verified agreement for other builds. See the included GUI guide for the tested profile, evidence links, runtime limits, and troubleshooting. A larger 1,024 m flat-surface control has four differing radius-edge cells. General native parity and a speed advantage over Global Mapper remain unestablished. The GUI guide links the retained counterexample. 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/