Emergency Hotline: Call 1-844-363-1423 (United We Dream Hotline)
ICE Encounter

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

  1. Layer → Add Layer → Add Vector Layer
  2. Load Census national boundary shapefile
  3. Load NOAA maritime baseline

Step 2: Reproject to Equal Area

  1. Vector → Data Management Tools → Reproject Layer
  2. Source: EPSG:4326 (WGS84)
  3. Target: EPSG:5070 (Albers Equal Area Conic)
  4. Output: us_boundary_5070.shp

Step 3: Create 100-Mile Buffer

100 miles = 160,934 meters

  1. Vector → Geoprocessing Tools → Buffer
  2. Input: us_boundary_5070.shp
  3. Distance: 160934 (meters)
  4. Segments: 25 (smooth curves)
  5. End cap style: Round
  6. 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.

  1. Load international boundary layer
  2. Vector → Geoprocessing Tools → Clip
  3. Clip the buffer by U.S. territory
  4. Output: 100_mile_zone_clipped.shp

Step 5: Simplify for Web

The raw buffer has millions of vertices (every coastal inlet).

  1. Vector → Geometry Tools → Simplify
  2. Tolerance: 1000 meters (adjust for quality)
  3. Check: Maintain topology
  4. Output: 100_mile_zone_simplified.shp

Step 6: Export to GeoJSON

  1. Right-click layer → Export → Save Features As
  2. Format: GeoJSON
  3. CRS: EPSG:4326 (reproject back for web)
  4. Coordinate precision: 5 decimal places
  5. Output: 100_mile_zone.geojson

Population Analysis

Spatial Join with Census Data

Determine how many people live within the zone:

  1. Load Census block or tract population data
  2. Vector → Data Management → Join Attributes by Location
  3. Join: Census blocks to 100-mile zone
  4. Summary: Sum population fields
  5. 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