Remote Sensing & GIS in Geology
Satellite imagery interpretation, digital terrain analysis, geological mapping techniques, change detection over time, integration with field data.
Remote Sensing & GIS in Geology
Remote sensing and Geographic Information Systems (GIS) have revolutionized geological mapping and analysis. These technologies allow geologists to study Earth's surface and subsurface from a distance, providing unprecedented spatial and temporal coverage that enhances field-based investigations.
Remote Sensing Fundamentals
Electromagnetic Spectrum and Geological Applications
Where is energy, is Planck's constant, is frequency, is speed of light, and is wavelength.
Spectral Ranges for Geological Applications
Visible (VIS): 0.4-0.7 μm
- Applications: Color variations in rocks, vegetation stress
- Sensors: Landsat TM bands 1-3, Sentinel-2 bands 2-4
Near Infrared (NIR): 0.7-1.3 μm
- Applications: Vegetation health, water content in soils
- Sensors: Landsat TM band 4, Sentinel-2 band 8
Shortwave Infrared (SWIR): 1.3-3.0 μm
- Applications: Hydration detection, mineral identification
- Sensors: Landsat TM bands 5-7, Sentinel-2 bands 11-12
Thermal Infrared (TIR): 8-14 μm
- Applications: Heat signatures, thermal inertia, rock identification
- Sensors: Landsat TM band 6, Landsat 8 TIRS bands 10-11
Spectral Signatures
Mineral Absorption Features
Where is reflectance at wavelength , is reference reflectance, is absorption coefficient, and is path length.
Diagnostic Absorption Bands
- OH/H₂O: 1.4, 1.9, 2.2 μm
- Carbonates: 2.3, 2.5 μm
- Clays: 2.2, 2.3 μm
- Ferro-magnesium minerals: 2.0-2.4 μm
Satellite Sensors and Platforms
Optical Sensors
Landsat Series
- Landsat 8/9: Operational Land Imager (OLI) and Thermal Infrared Sensor (TIRS)
- Spatial resolution: 15-30 m (depending on band)
- Spectral bands: 9 optical + 2 thermal
- Temporal resolution: 16 days
Sentinel-2
- Spatial resolution: 10-60 m
- Spectral bands: 13 bands from VIS to SWIR
- Temporal resolution: 5 days (with two satellites)
ASTER (Advanced Spaceborne Thermal Emission Radiometer)
- Spectral coverage: VIS, NIR, SWIR, TIR
- Spatial resolution: 15-90 m
- Applications: Mineral mapping, temperature mapping
Radar Sensors
Synthetic Aperture Radar (SAR)
Where is radar backscatter coefficient, is wavelength, and is incidence angle.
Applications:
- Structural mapping: Penetrates vegetation cover
- Deformation monitoring: Interferometric SAR (InSAR)
- Surface roughness: Texture analysis
Image Processing Techniques
Preprocessing
Atmospheric Correction
Where is surface reflectance, is top-of-atmosphere radiance, is Earth-Sun distance, is solar exoatmospheric irradiance, and is solar zenith angle.
Geometric Correction
- Ground Control Points: Known coordinates for image rectification
- Sensor Model: Mathematical relationship between image and ground coordinates
Enhancement Techniques
Principal Component Analysis (PCA)
Where is principal components, is original data matrix, and is principal component transformation matrix.
Band Ratios
Common geological ratios:
- Fe content: Band 5 / Band 4 (Landsat TM)
- Clay content: Band 5 / Band 7 (Landsat TM)
- Vegetation: (NIR - Red) / (NIR + Red) (NDVI)
Geological Applications
Structural Analysis
Lineament Detection
Techniques:
- Edge detection: Sobel, Canny, Laplacian operators
- Texture analysis: Gray-level co-occurrence matrices (GLCM)
- Frequency domain: Fourier transforms for pattern recognition
Fracture Analysis
- Rose diagrams: Directional analysis of structural features
- Spacing analysis: Statistical distribution of fracture spacing
- Intensity mapping: Density of structural features
Lithological Mapping
Spectral Classification
- Supervised classification: Training sites with known lithology
- Unsupervised classification: Clustering algorithms (K-means, ISODATA)
- Spectral angle mapper: Angular distance in n-dimensional space
Mineral Mapping
Techniques:
- Spectral unmixing: Linear combinations of endmembers
- Continuum removal: Isolate absorption features
- Absorption band analysis: Center wavelength and depth
Hydrothermal Alteration Mapping
Alteration Assemblage Detection
- Alunite/Kaolinite/Aluminum: ASTER bands 6/(5/4)
- Ferrous Iron: ASTER band 4/band 2
- Silica: ASTER band 6 (1.65 μm) depth
Digital Terrain Analysis
Topographic Attributes
Slope and Aspect
Curvature Analysis
Where is direction of maximum slope and is direction perpendicular to .
Terrain Analysis Applications
Structural Geology
- Drainage pattern analysis: Rectangular, trellis, radial patterns
- Valley floor mapping: Identifies potential structural lows
- Escarpment analysis: Identifies resistant rock units
Engineering Geology
- Slope stability: Steepness and aspect analysis
- Landslide susceptibility: Curvature and slope analysis
- Stream gradient analysis: Erosion potential assessment
GIS in Geological Applications
Spatial Analysis
Overlay Analysis
Where is weight of factor and is rating of factor .
Proximity Analysis
- Buffer analysis: Distance zones around features
- Viewshed analysis: Visibility from specific locations
- Cost distance: Minimum cost path analysis
Database Management
Attribute Tables
- Lithology codes: Standardized rock type classification
- Age assignments: Temporal information
- Structural data: Orientation measurements
- Sample information: Geochemical and geochronological data
Change Detection
Multi-Temporal Analysis
Normalized Difference Vegetation Index (NDVI)
Normalized Difference Built-up Index (NDBI)
Landform Evolution Analysis
Integration with Field Data
Ground Truth Validation
Field-to-Satellite Scaling
- Pixel integration: Averaging field measurements over pixel area
- Up-scaling: Extrapolating field observations to satellite scale
- Down-scaling: Refining satellite interpretations with field data
Applications in Mineral Exploration
Target Identification
Exploration Planning
- Accessibility analysis: Route planning from satellite data
- Prioritization: Ranking target areas based on evidence
- Cost optimization: Efficient field campaign planning
Emerging Technologies
Hyperspectral Imaging
- AVIRIS: Airborne Visible/Infrared Imaging Spectrometer
- EnMAP: Environmental Mapping and Analysis Program
- PRISMA: Hyperspectral Precursor and Application Mission
LiDAR Applications
- DEM generation: High-resolution topography
- Vegetation penetration: Sub-canopy mapping
- Deformation monitoring: mm-scale precision
Real-World Application: Structural Mapping Using Remote Sensing
Remote sensing is particularly valuable for mapping geological structures in areas with limited field access.
Lineament Analysis Example
# Structural analysis using remote sensing data
struct_analysis = {
'image_resolution': 15, # meters (pixel size)
'study_area': 1000, # km² (total area)
'lineament_density': 2.5, # km/km² (lineaments per unit area)
'average_length': 1.2, # km (average lineament length)
'dominant_azimuth': 45, # degrees (most common direction)
'preferred_directions': [45, 135, 225, 315], # degrees (common directions)
'confidence_level': 0.85 # unitless (rating of interpretation confidence)
}
# Calculate total lineament length
total_lineament_length = struct_analysis['lineament_density'] * struct_analysis['study_area'] # km
number_of_lineaments = total_lineament_length / struct_analysis['average_length'] # count
# Analyze directional clustering
direction_tolerance = 10 # degrees (acceptable variation from preferred directions)
# Calculate structural index
# Factor in density, length, and clustering around preferred directions
structural_complexity = (struct_analysis['lineament_density'] *
struct_analysis['average_length'] *
len(struct_analysis['preferred_directions']) / 4)
print(f"Structural analysis results:")
print(f" Study area: {struct_analysis['study_area']} km²")
print(f" Lineament density: {struct_analysis['lineament_density']} km/km²")
print(f" Total lineament length: {total_lineament_length} km")
print(f" Estimated number of structures: {number_of_lineaments:.0f}")
print(f" Dominant direction: {struct_analysis['dominant_azimuth']}°")
print(f" Structural complexity index: {structural_complexity:.2f}")
print(f" Confidence level: {struct_analysis['confidence_level']:.2f}")
# Interpret tectonic significance
if structural_complexity > 3:
tectonic_setting = "Highly deformed - complex tectonic environment"
elif structural_complexity > 1.5:
tectonic_setting = "Moderately deformed - multiple deformation events"
else:
tectonic_setting = "Low deformation - stable cratonic setting"
print(f" Tectonic interpretation: {tectonic_setting}")
# Geological implications
if struct_analysis['dominant_azimuth'] in [0, 180] or struct_analysis['dominant_azimuth'] in [90, 270]:
stress_pattern = "Orthogonal stress system (likely maximum compression)"
else:
stress_pattern = "Oblique stress system"
print(f" Stress pattern: {stress_pattern}")
Integration with Field Data
Combining remote sensing with field observations enhances geological understanding.
Your Challenge: Lithological Classification Using Spectral Data
Analyze multispectral satellite data to classify and map different rock types in an area.
Goal: Use spectral analysis techniques to identify and map lithological units from satellite data.
Satellite Data
import math
# Multispectral data for sample areas
# Simulated data for different rock types (reflectance values in different bands)
spectral_data = [
{'name': 'Area A', 'band1': 0.15, 'band2': 0.22, 'band3': 0.32, 'band4': 0.45, 'band5': 0.55, 'band7': 0.65, 'rock_type': 'unknown'},
{'name': 'Area B', 'band1': 0.25, 'band2': 0.35, 'band3': 0.42, 'band4': 0.52, 'band5': 0.75, 'band7': 0.85, 'rock_type': 'unknown'},
{'name': 'Area C', 'band1': 0.12, 'band2': 0.18, 'band3': 0.25, 'band4': 0.35, 'band5': 0.45, 'band7': 0.52, 'rock_type': 'unknown'},
{'name': 'Area D', 'band1': 0.35, 'band2': 0.45, 'band3': 0.58, 'band4': 0.72, 'band5': 0.82, 'band7': 0.88, 'rock_type': 'unknown'},
{'name': 'Area E', 'band1': 0.20, 'band2': 0.30, 'band3': 0.38, 'band4': 0.48, 'band5': 0.68, 'band7': 0.78, 'rock_type': 'unknown'},
]
# Known training sites for supervised classification
training_data = {
'granite': {'band1': 0.22, 'band2': 0.32, 'band3': 0.42, 'band4': 0.55, 'band5': 0.72, 'band7': 0.82},
'basalt': {'band1': 0.15, 'band2': 0.22, 'band3': 0.28, 'band4': 0.38, 'band5': 0.48, 'band7': 0.55},
'sandstone': {'band1': 0.25, 'band2': 0.35, 'band3': 0.45, 'band4': 0.58, 'band5': 0.75, 'band7': 0.85},
'limestone': {'band1': 0.18, 'band2': 0.28, 'band3': 0.35, 'band4': 0.45, 'band5': 0.58, 'band7': 0.68}
}
# Calculate spectral distance for each sample to each training class
classifications = []
for sample in spectral_data:
distances = {}
for rock_type, train_vals in training_data.items():
# Calculate Euclidean distance in spectral space
sum_sq_diff = 0
for band in ['band1', 'band2', 'band3', 'band4', 'band5', 'band7']:
diff = sample[band] - train_vals[band]
sum_sq_diff += diff**2
distance = math.sqrt(sum_sq_diff)
distances[rock_type] = distance
# Assign to closest class
closest_class = min(distances, key=distances.get)
sample['rock_type'] = closest_class
sample['confidence'] = 1.0 / (1.0 + distances[closest_class]) # Higher confidence for smaller distances
classifications.append((sample['name'], closest_class, sample['confidence']))
# Calculate commonly used geological indices
for sample in spectral_data:
# Iron content index
sample['fe_index'] = sample['band5'] / sample['band4']
# Clay content index (albedo ratio for clay minerals)
sample['clay_index'] = sample['band5'] / sample['band7']
# Silica content proxy (band 7 response)
sample['silica_index'] = sample['band7']
# Evaluate quality of classification
avg_confidence = sum([s['confidence'] for s in spectral_data]) / len(spectral_data)
Analyze the spectral data to classify lithologies and identify geological patterns.
Hint:
- Use spectral distance calculations to match unknown samples to known rock types
- Calculate geological indices (Fe, clay, silica) from spectral ratios
- Consider how different rock types have characteristic reflectance patterns
- Assess classification confidence based on spectral similarity
# TODO: Calculate classification results
classification_results = [] # List of (area, rock_type, confidence) tuples
dominant_rock_type = "" # Most common rock type identified
geological_pattern = "" # Pattern of rock distribution
confidence_level = 0 # Average confidence level
# Calculate geological indices for each area
indices_results = []
for sample in spectral_data:
area_name = sample['name']
fe_content = sample['fe_index']
clay_content = sample['clay_index']
silica_content = sample['silica_index']
rock_type = sample['rock_type']
confidence = sample['confidence']
indices_results.append({
'area': area_name,
'rock_type': rock_type,
'fe_index': fe_content,
'clay_index': clay_content,
'silica_index': silica_content,
'confidence': confidence
})
# Determine dominant rock type
rock_type_counts = {}
for sample in spectral_data:
rock_type = sample['rock_type']
rock_type_counts[rock_type] = rock_type_counts.get(rock_type, 0) + 1
dominant_rock_type = max(rock_type_counts, key=rock_type_counts.get)
dominant_percentage = rock_type_counts[dominant_rock_type] / len(spectral_data) * 100
# Calculate average confidence
confidence_level = sum([sample['confidence'] for sample in spectral_data]) / len(spectral_data)
# Assess geological pattern
if len(set([s['rock_type'] for s in spectral_data])) == 1:
geological_pattern = "Homogeneous - single rock type dominates"
elif dominant_percentage > 60:
geological_pattern = f"Moderately heterogeneous - {dominant_rock_type} dominant"
else:
geological_pattern = "Heterogeneous - multiple rock types, no clear dominance"
# Print results
print(f"Classification results:")
for result in indices_results:
print(f" {result['area']}: {result['rock_type']} (conf: {result['confidence']:.2f})")
print(f"\nDominant rock type: {dominant_rock_type} ({dominant_percentage:.1f}%)")
print(f"Average classification confidence: {confidence_level:.2f}")
print(f"Geological pattern: {geological_pattern}")
# Geological interpretation
if 'basalt' in dominant_rock_type:
interpretation = "Mafic igneous terrain - possible volcanic or plutonic mafic rocks"
elif 'granite' in dominant_rock_type:
interpretation = "Felsic igneous terrain - granitic plutonic rocks"
elif 'sandstone' in dominant_rock_type:
interpretation = "Sedimentary terrain - clastic sedimentary rocks"
elif 'limestone' in dominant_rock_type:
interpretation = "Sedimentary carbonate terrain"
else:
interpretation = "Mixed lithologies - complex geological setting"
print(f"Geological interpretation: {interpretation}")
How might the geological setting identified through remote sensing compare with what you might expect from the tectonic setting of the region?
ELI10 Explanation
Simple analogy for better understanding
Self-Examination
How do different spectral bands help identify geological materials?
What are the applications of digital terrain analysis in geological mapping?
How is GIS used to integrate and analyze geological data sets?