Understanding the 100-Mile Zone
The U.S. Border Patrol operates under 1953 Department of Justice regulations granting extraordinary authority within 100 air miles of any external U.S. boundary.
What This Means
| Authority | Within 100 Miles |
|---|---|
| Checkpoints | Permanent and roving |
| Vehicle searches | Without warrant or probable cause |
| Property entry | Within 25 miles of border |
| Reasonable suspicion | Lower standard than interior |
Population Impact
| Statistic | Value |
|---|---|
| Population affected | ~200 million people |
| Percentage of U.S. | Approximately 2/3 |
| Major cities | All coastal, border states |
| States entirely covered | FL, ME, NH, VT, MA, CT, RI, NJ, DE, HI |
Data Sources Required
U.S. Boundaries
Source: Census Bureau MAF/TIGER
| Dataset | Purpose |
|---|---|
| cb_2023_us_nation_5m | National boundary |
| cb_2023_us_state_5m | State boundaries |
| cb_2023_us_county_5m | County boundaries |
Download: https://www.census.gov/geographies/mapping-files/time-series/geo/cartographic-boundary.html
Maritime Baselines
Source: NOAA Office of Coast Survey
| Dataset | Purpose |
|---|---|
| Maritime Limits and Boundaries | Official territorial sea baselines |
| Coastal baseline data | Accurate coastline for buffering |
Download: https://nauticalcharts.noaa.gov/data/us-maritime-limits-702and-boundaries.html
The Projection Problem
Why This Matters
Census boundary files use Geographic Coordinate System (GCS) - specifically WGS84 (EPSG:4326). This system uses decimal degrees, not linear units.
Critical Error: Buffering by "100" on a WGS84 layer creates a 100-DEGREE buffer, not 100 miles - producing a hemisphere-sized polygon.
Solution: Reproject First
Before buffering, convert to a Projected Coordinate System (PCS) that uses meters.
| Projection | EPSG | Use Case |
|---|---|---|
| Albers Equal Area | 5070 | Continental U.S. (best for area) |
| US National Atlas | 2163 | Alternative equal area |
| Web Mercator | 3857 | If matching web tiles |
QGIS Workflow
Step 1: Load Boundary Data
- Layer → Add Layer → Add Vector Layer
- Load Census national boundary shapefile
- Load NOAA maritime baseline
Step 2: Reproject to Equal Area
- Vector → Data Management Tools → Reproject Layer
- Source: EPSG:4326 (WGS84)
- Target: EPSG:5070 (Albers Equal Area Conic)
- Output:
us_boundary_5070.shp
Step 3: Create 100-Mile Buffer
100 miles = 160,934 meters
- Vector → Geoprocessing Tools → Buffer
- Input:
us_boundary_5070.shp - Distance:
160934(meters) - Segments:
25(smooth curves) - End cap style:
Round - Output:
100_mile_zone_raw.shp
Step 4: Handle Great Lakes
The 100-mile zone does not extend through international waters like the Great Lakes.
- Load international boundary layer
- Vector → Geoprocessing Tools → Clip
- Clip the buffer by U.S. territory
- Output:
100_mile_zone_clipped.shp
Step 5: Simplify for Web
The raw buffer has millions of vertices (every coastal inlet).
- Vector → Geometry Tools → Simplify
- Tolerance:
1000meters (adjust for quality) - Check: Maintain topology
- Output:
100_mile_zone_simplified.shp
Step 6: Export to GeoJSON
- Right-click layer → Export → Save Features As
- Format: GeoJSON
- CRS: EPSG:4326 (reproject back for web)
- Coordinate precision: 5 decimal places
- Output:
100_mile_zone.geojson
Population Analysis
Spatial Join with Census Data
Determine how many people live within the zone:
- Load Census block or tract population data
- Vector → Data Management → Join Attributes by Location
- Join: Census blocks to 100-mile zone
- Summary: Sum population fields
- Export results
Key Demographic Fields
| Field | Description |
|---|---|
| TOTPOP | Total population |
| HISP | Hispanic/Latino population |
| FOREIGN | Foreign-born population |
Web Display Implementation
Leaflet Example
// Load and display 100-mile zone
fetch('/data/100-mile-zone.geojson')
.then(response => response.json())
.then(data => {
L.geoJSON(data, {
style: {
fillColor: '#ff6b6b',
fillOpacity: 0.2,
color: '#c92a2a',
weight: 2
}
}).bindPopup(`
<strong>100-Mile Border Zone</strong><br>
Extended Border Patrol jurisdiction
`).addTo(map);
});
MapLibre Example
map.on('load', () => {
map.addSource('border-zone', {
type: 'geojson',
data: '/data/100-mile-zone.geojson'
});
map.addLayer({
id: 'border-zone-fill',
type: 'fill',
source: 'border-zone',
paint: {
'fill-color': '#ff6b6b',
'fill-opacity': 0.2
}
});
map.addLayer({
id: 'border-zone-line',
type: 'line',
source: 'border-zone',
paint: {
'line-color': '#c92a2a',
'line-width': 2
}
});
});
Client-Side Detection
Check if a user is within the zone without sending their location to servers:
import * as turf from '@turf/turf';
// Pre-loaded zone boundary
let borderZone;
fetch('/data/100-mile-zone.geojson')
.then(r => r.json())
.then(data => { borderZone = data; });
function checkIfInZone(lat, lng) {
// All processing happens locally
const userPoint = turf.point([lng, lat]);
const isInZone = turf.booleanPointInPolygon(userPoint, borderZone);
if (isInZone) {
showWarning('You are within the 100-mile border zone');
}
// Coordinates never transmitted - privacy preserved
return isInZone;
}
Visualization Best Practices
Color Choices
| Element | Color | Reason |
|---|---|---|
| Zone fill | Semi-transparent red | Indicates restriction |
| Zone border | Darker red | Clear boundary |
| Inside label | High contrast | Legibility |
Interactive Features
- Toggle zone visibility
- Show/hide population statistics
- Click for local Know Your Rights info
- Link to checkpoint locations
Legend Design
<div class="map-legend">
<div class="legend-item">
<span class="swatch" style="background: rgba(255,107,107,0.2); border: 2px solid #c92a2a;"></span>
<span>100-Mile Border Zone</span>
</div>
<div class="legend-note">
Extended CBP/Border Patrol jurisdiction
</div>
</div>
File Size Optimization
GeoJSON Compression
| Method | Reduction |
|---|---|
| Simplification | 80-90% |
| Coordinate precision | 10-20% |
| TopoJSON conversion | 50-70% |
| Gzip compression | 70-80% |
TopoJSON Conversion
# Convert GeoJSON to TopoJSON
geo2topo zone=100_mile_zone.geojson > 100_mile_zone.topojson
# Simplify further
toposimplify -p 0.01 100_mile_zone.topojson > 100_mile_zone_simple.topojson
Accuracy Considerations
Buffer Precision
| Factor | Impact |
|---|---|
| Projection choice | Area distortion affects distance |
| Coastline detail | More vertices = larger file |
| International boundaries | Legal nuances with Canada/Mexico |
Legal Nuances
The 100-mile zone is measured from:
- International land borders
- Territorial sea baselines (not coastline)
- Includes internal waters in some cases
Note: Consult legal experts for precise jurisdictional determinations in specific locations.
Related Resources
- Checkpoint Mapping - Facility and checkpoint locations
- QGIS Workflows - General data preparation
- Privacy Features - Client-side location detection
- Know Your Rights - Checkpoints - Rights within the zone