A WPF desktop application for locating PLSS tax panel sections on a high-resolution county base map.
Enter a 4-digit panel number → the app highlights the exact section on the map and runs an OCR readout.
Repository: https://github.com/band72/TaxPanelApp
- Go to the Releases page
- Download
MapSearchApp.1.0.3.exe - Run the installer — no .NET runtime required (fully self-contained)
- A shortcut is created in the Start Menu; optional Desktop shortcut during install
- Launch MapSearchApp from the Start Menu or Desktop
git clone https://github.com/band72/TaxPanelApp.git
cd TaxPanelApp
dotnet publish -c Release -r win-x64 --self-contained true /p:PublishSingleFile=true
# Executable will be at: bin\Release\net8.0\win-x64\publish\MapSearchApp.exeRequirements (source build only): .NET 8 SDK, Windows 10 build 19041+
On first launch the app automatically loads the Tile Map Index PDF bundled in the Tax-Maps\ folder.
To load a different map:
- Click Base Map in the toolbar
- Select any
.pdf,.png, or.jpgfile - Large PDFs are rendered at 4000px wide for maximum optical zoom
| Step | Action |
|---|---|
| Type a 4-digit panel number into the Panel Number box | e.g. 6307 |
| Press Enter or click Search | |
| A red bounding box highlights the section on the map | |
| A detail window opens showing a zoomed crop + OCR text |
Panel numbers follow the PLSS grid coding used by the county:
R T SS
│ │ └─ Section (01–36)
│ └─── Township (1=T2N, 2=T1N, 3=T1S, 4=T2S, 5=T3S, 6=T4S)
└───── Range (3=R23E, 4=R24E, 5=R25E, 6=R26E, 7=R27E, 8=R28E, 9=R29E)
Example: 6307 → Range R26E, Township T1S, Section 7
| First digit (R) | Range |
|---|---|
| 3 | R23E |
| 4 | R24E |
| 5 | R25E |
| 6 | R26E |
| 7 | R27E |
| 8 | R28E |
| 9 | R29E |
| Second digit (T) | Township |
|---|---|
| 1 | T2N |
| 2 | T1N |
| 3 | T1S |
| 4 | T2S |
| 5 | T3S |
| 6 | T4S |
If the red highlight box doesn't align perfectly with your map, use the Calibration Offsets sliders in the toolbar:
| Slider | Effect |
|---|---|
| Left | Moves the grid origin right |
| Top | Moves the grid origin down |
| Right | Shrinks the grid from the right edge |
| Bottom | Shrinks the grid from the bottom edge |
Offsets are automatically saved to offsets.txt on close and reloaded on next launch.
Check Show Reference Grid to draw a visual township/section grid over the map.
- Blue thick lines = Township boundaries (every 6 sections)
- Faint lines = Individual section boundaries
Click ⚙ Settings to point the app at a folder containing .TIF map files for advanced lookups.
The path is saved to tif_directory.txt in the app directory.
Click ↑ Updates in the toolbar to check for a newer version.
- The app fetches
version.jsonfrom the GitHub repository - If a newer version is available you'll be prompted to open the download page
- The button shows Checking… while the request is in flight and never freezes the UI
The update checker reads:
https://raw.githubusercontent.com/band72/TaxPanelApp/main/version.json
Current version.json at the repo root:
{
"version": "1.0.3",
"url": "https://github.com/band72/TaxPanelApp/releases/latest"
}dotnet publish -c Release -r win-x64 --self-contained true /p:PublishSingleFile=true& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" MapSearchApp.iss
# Output: Installer\MapSearchApp.1.0.3.exe-
MapSearchApp.iss→AppVersionandOutputBaseFilename -
MainWindow.xaml.cs→CurrentVersionconstant -
version.json→versionfield - Git tag + GitHub Release
Unhandled exceptions are automatically POSTed (fire-and-forget) to the configured back-end endpoint in ErrorReporter.cs:
private const string ErrorEndpoint = "https://api.yourdomain.com/errors";Payload includes: version, context, message, stack trace, OS, machine name, and UTC timestamp.
| Change | Detail |
|---|---|
| App Icon | Custom 256×256 .ico — embedded in exe, installer wizard, shortcuts, and Add/Remove Programs |
| Installer | No .NET prereq check — fully self-contained bundle |
| ↑ Updates button | Toolbar button; HTTP manifest check; never blocks UI (Task.Run offload) |
| Error Reporting | Global DispatcherUnhandledException + UnhandledException + UnobservedTaskException hooks |
| version.json | Committed to repo root for live update notifications |