A professional Python library for PlanetScope satellite imagery analysis, providing comprehensive tools for scene discovery, metadata analysis, spatial-temporal density calculations, asset management, and data export using Planet's Data API.
Current Status: Enhanced Metadata Processing & Serialization Fixes
Version: 4.1.0 (Metadata & Serialization Fix Release)
Test Coverage: 349 tests passing
API Integration: Fully functional with real Planet API
Spatial Analysis: Multi-algorithm density calculations with coordinate system fixes
Temporal Analysis: Grid-based temporal pattern analysis with enhanced turbo colormap visualizations
Asset Management: Quota monitoring, downloads, progress tracking
GeoPackage Export: Scene polygons with imagery support
Metadata Processing: Enhanced scene ID extraction from all Planet API endpoints
JSON Serialization: Complete metadata export without truncation
Python Support: 3.10+
License: MIT
- Multi-Source Scene ID Extraction: Robust scene ID detection from various Planet API response formats
- Planet API Compatibility: Works with Search, Stats, Orders, and other API endpoints
- Fallback ID Detection: Comprehensive checking of properties.id, top-level id, item_id, and scene_id fields
- Complete JSON Export: Fixed truncated metadata files with proper numpy type serialization
- Error Recovery: Graceful handling of missing or malformed scene identifiers
- Numpy Type Conversion: Comprehensive conversion of numpy types to JSON-compatible formats
- Complete Metadata Export: No more truncated analysis_metadata.json files
- Type Safety: Handles numpy.int64, numpy.float64, numpy.ndarray, and numpy.nan values
- Nested Object Support: Recursive conversion of complex data structures
- Memory Efficiency: Optimized handling of large arrays during serialization
- Turbo Colormap: Improved temporal analysis visualizations with better color contrast
- Consistent Summary Tables: Temporal summary tables now match spatial density format
- Professional Presentation: Enhanced visual consistency across all analysis types
- Better Data Interpretation: Improved visibility and data understanding in temporal plots
- Shapefile Input: Direct
.shpfile support with automatic CRS reprojection to WGS84 - GeoJSON Files: Support for
.geojsonfile input with FeatureCollection handling - WKT Support: WKT string input and
.wktfile support - Multi-Feature Handling: Automatic union of multiple features in shapefiles and GeoJSON files
- Universal Compatibility: All analysis functions support file-based ROI input
- Grid-Based Temporal Pattern Analysis: Complete temporal analysis using coordinate-corrected grid approach
- Multiple Temporal Metrics: Coverage days, mean/median intervals, temporal density, and frequency analysis
- Performance Optimization: FAST and ACCURATE methods with automatic selection
- Professional Outputs: GeoTIFF export with QGIS styling and comprehensive metadata
- ROI Integration: Full integration with coordinate system fixes and flexible input formats
- Multi-Algorithm Density Calculation: Rasterization, vector overlay, and adaptive grid methods
- Automatic Method Selection: Intelligent algorithm selection based on dataset characteristics
- High-Resolution Support: 3m to 1000m grid resolutions with sub-pixel accuracy
- Performance Optimization: Memory-efficient processing with configurable limits
- Coordinate System Fixes: Proper north-to-south orientation with corrected transforms
- Intelligent Quota Monitoring: Real-time tracking of Planet subscription usage
- Async Download Management: Parallel downloads with retry logic and progress tracking
- ROI Clipping Integration: Automatic scene clipping during download process
- User Confirmation System: Interactive prompts with quota impact calculations
- Download Verification: Integrity checking for downloaded assets
- GeoPackage Creation: Comprehensive GeoPackage files with metadata integration
- Multi-Layer Support: Vector polygons and raster imagery in standardized files
- GIS Software Integration: Direct compatibility with QGIS, ArcGIS, and other tools
- Comprehensive Metadata: Rich attribute schemas with quality metrics
- Flexible Schemas: Support for minimal, standard, and comprehensive attribute schemas
PlanetScope-py is designed for remote sensing researchers, GIS analysts, and Earth observation professionals who need reliable tools for working with PlanetScope satellite imagery. The library provides a robust foundation for scene inventory management, sophisticated spatial-temporal analysis workflows, and professional data export capabilities.
- Enhanced scene ID extraction - Now works with all Planet API response formats (Search, Stats, Orders)
- Fixed JSON serialization - Complete metadata export without truncation issues
- Improved temporal visualizations - Turbo colormap for better data interpretation
- Summary table consistency - Temporal tables now match spatial density format
- Interactive manager integration - Enhanced preview and interactive manager configuration
- Fixed critical import issues -
quick_planet_analysisand visualization functions now work correctly - Resolved module availability detection - Fixed
_WORKFLOWS_AVAILABLEand_VISUALIZATION_AVAILABLEflags - Enhanced error messages - Clear installation instructions when dependencies are missing
- Improved debugging - Added success confirmations for module loading
- Complete temporal analysis with grid-based approach and performance optimization
- Enhanced spatial analysis with coordinate system fixes and multi-algorithm support
- Advanced data export with professional GeoPackage creation
- Asset management with quota monitoring and async downloads
from planetscope_py import PlanetScopeQuery
# Initialize query system (automatically detects API key)
query = PlanetScopeQuery()
# Define area of interest (example: Milan, Italy)
milan_geometry = {
"type": "Point",
"coordinates": [9.1900, 45.4642] # [longitude, latitude]
}
# Search for scenes
results = query.search_scenes(
geometry=milan_geometry,
start_date="2025-01-01",
end_date="2025-01-31",
cloud_cover_max=0.2, # 20% maximum cloud cover
item_types=["PSScene"]
)
# Check results
print(f"Found {len(results['features'])} scenes")
# v4.1.0 Enhancement: Metadata processing now handles all API response formats
for scene in results['features'][:3]:
metadata = query.metadata_processor.extract_scene_metadata(scene)
print(f"Scene ID: {metadata['scene_id']}") # Now works reliably!from planetscope_py import PlanetScopeQuery
# Initialize query system (automatically detects API key)
query = PlanetScopeQuery()
# Use shapefile directly as ROI
results = query.search_scenes(
geometry=r'C:\path\to\study_area.shp', # Direct file path support
start_date="2025-01-01",
end_date="2025-01-31",
cloud_cover_max=0.2, # 20% maximum cloud cover
item_types=["PSScene"]
)
print(f"Found {len(results['features'])} scenes")from planetscope_py import SpatialDensityEngine, DensityConfig, DensityMethod
from shapely.geometry import box
# Define region of interest
roi = box(9.04, 45.40, 9.28, 45.52) # Milan bounding box
# Configure spatial analysis
config = DensityConfig(
resolution=30.0, # 30m grid resolution
method=DensityMethod.AUTO # Automatic method selection
)
# Initialize spatial analysis engine
engine = SpatialDensityEngine(config)
# Calculate spatial density
density_result = engine.calculate_density(
scene_footprints=results['features'],
roi_geometry=roi
)
print(f"Analysis completed using {density_result.method_used.value} method")
print(f"Grid size: {density_result.grid_info['width']}×{density_result.grid_info['height']}")
print(f"Density range: {density_result.stats['min']}-{density_result.stats['max']} scenes per cell")
# v4.1.0 Enhancement: Complete metadata export without truncation
print(f"Complete metadata saved to analysis_metadata.json")from planetscope_py import TemporalAnalyzer, TemporalConfig, TemporalMetric
# Configure temporal analysis
config = TemporalConfig(
spatial_resolution=100.0,
metrics=[TemporalMetric.COVERAGE_DAYS, TemporalMetric.MEAN_INTERVAL],
optimization_method="auto" # FAST or ACCURATE method selection
)
analyzer = TemporalAnalyzer(config)
# Analyze temporal patterns
temporal_result = analyzer.analyze_temporal_patterns(
scene_footprints=results['features'],
roi_geometry=roi,
start_date="2025-01-01",
end_date="2025-01-31"
)
print(f"Analysis completed in {temporal_result.computation_time:.1f} seconds")
print(f"Mean coverage days: {temporal_result.temporal_stats['mean_coverage_days']:.1f}")
print(f"Temporal metrics calculated: {len(temporal_result.metric_arrays)}")
# v4.1.0 Enhancement: Visualizations now use turbo colormap for better contrast
print("Enhanced temporal visualizations with turbo colormap available")from planetscope_py import analyze_roi_temporal_patterns
# Complete temporal analysis with shapefile input
result = analyze_roi_temporal_patterns(
r'C:\path\to\milan_roi.shp', # Shapefile input
"2025-01-01/2025-03-31",
spatial_resolution=500,
optimization_level="fast", # Use FAST vectorized method
clip_to_roi=True,
cloud_cover_max=0.3,
create_visualizations=True # Creates comprehensive 4-panel summary with turbo colormap
)
print(f"Found {result['scenes_found']} scenes")
print(f"Mean coverage days: {result['temporal_result'].temporal_stats['mean_coverage_days']:.1f}")
print(f"Computation time: {result['temporal_result'].computation_time:.1f} seconds")
print(f"Output directory: {result['output_directory']}")
# v4.1.0 Enhancement: Complete JSON metadata export
print("Complete temporal analysis metadata exported successfully")from planetscope_py import AssetManager
# Initialize asset manager
asset_manager = AssetManager()
# Check quota information
quota_info = await asset_manager.get_quota_info()
print(f"Available area: {quota_info.remaining_area_km2:.1f} km²")
# Download assets with ROI clipping
if quota_info.remaining_area_km2 > 100:
downloads = await asset_manager.activate_and_download_assets(
scenes=results['features'][:10],
asset_types=["ortho_analytic_4b"],
clip_to_roi=roi # Optional ROI clipping
)
print(f"Downloaded {len(downloads)} assets")from planetscope_py import GeoPackageManager, GeoPackageConfig
# Configure GeoPackage export
geopackage_config = GeoPackageConfig(
include_imagery=True, # Include downloaded imagery
clip_to_roi=True, # Clip images to ROI
attribute_schema="comprehensive" # Full metadata attributes
)
# Initialize GeoPackage manager
geopackage_manager = GeoPackageManager(config=geopackage_config)
# Create comprehensive GeoPackage
output_path = "milan_analysis.gpkg"
layer_info = geopackage_manager.create_scene_geopackage(
scenes=results['features'],
output_path=output_path,
roi=roi,
downloaded_files=downloads if 'downloads' in locals() else None
)
print(f"Created GeoPackage: {output_path}")
print(f"Vector layer: {layer_info.feature_count} scene polygons")
if geopackage_config.include_imagery:
print(f"Raster layers: Included downloaded imagery")
# v4.1.0 Enhancement: Enhanced scene metadata in GeoPackage attributes
print("GeoPackage includes enhanced scene metadata from all API sources")# Complete analysis workflow with all features and v4.1.0 enhancements
from planetscope_py import (
PlanetScopeQuery, SpatialDensityEngine, TemporalAnalyzer,
AssetManager, GeoPackageManager
)
async def complete_analysis_workflow():
# 1. Scene discovery with enhanced metadata processing
query = PlanetScopeQuery()
# Option A: Use shapefile directly
roi_shapefile = r'C:\GIS\study_areas\milan_area.shp'
results = query.search_scenes(
geometry=roi_shapefile, # Direct shapefile support
start_date="2024-01-01",
end_date="2024-12-31",
cloud_cover_max=0.3
)
# v4.1.0: Enhanced metadata processing for all scenes
print("Processing scene metadata with enhanced ID extraction...")
valid_scenes = []
for scene in results['features']:
metadata = query.metadata_processor.extract_scene_metadata(scene)
if metadata['scene_id']: # Now reliably extracts scene IDs
valid_scenes.append(scene)
print(f"Successfully processed {len(valid_scenes)} scenes with valid metadata")
# 2. Spatial analysis with enhanced JSON export
spatial_engine = SpatialDensityEngine()
spatial_result = spatial_engine.calculate_density(valid_scenes, roi_shapefile)
print("Spatial analysis completed with complete metadata export")
# 3. Temporal analysis with enhanced visualizations
temporal_result = analyze_roi_temporal_patterns(
roi_shapefile, # Same shapefile for consistency
"2024-01-01/2024-12-31",
spatial_resolution=100,
optimization_level="auto", # Automatic FAST/ACCURATE selection
clip_to_roi=True,
create_visualizations=True, # Enhanced turbo colormap visualizations
export_geotiffs=True
)
print("Temporal analysis completed with enhanced turbo colormap visualizations")
# 4. Asset management (with file-based ROI clipping)
asset_manager = AssetManager(query.auth)
quota_info = await asset_manager.get_quota_info()
if quota_info.remaining_area_km2 > 100: # Check available quota
downloads = await asset_manager.activate_and_download_assets(
scenes=valid_scenes[:20], # Download subset
clip_to_roi=roi_shapefile # ROI clipping with file support
)
else:
downloads = None
print("Insufficient quota for downloads")
# 5. Export to GeoPackage with enhanced metadata
geopackage_manager = GeoPackageManager()
geopackage_manager.create_scene_geopackage(
scenes=valid_scenes,
output_path="complete_analysis_v4_1_0.gpkg",
roi=roi_shapefile, # File-based ROI support
downloaded_files=downloads
)
return {
'scenes': len(valid_scenes),
'spatial_analysis': spatial_result,
'temporal_analysis': temporal_result,
'downloads': len(downloads) if downloads else 0,
'metadata_enhancements': 'v4.1.0 - Complete scene ID extraction and JSON export'
}
# Run complete workflow
# results = await complete_analysis_workflow()from planetscope_py import PlanetAuth
# Automatic API key discovery
auth = PlanetAuth()
# Check authentication status
if auth.is_authenticated:
print("Successfully authenticated with Planet API")
# Get session for API requests
session = auth.get_session()from planetscope_py import PlanetScopeQuery
query = PlanetScopeQuery()
# Advanced scene search with comprehensive filtering
results = query.search_scenes(
geometry=geometry,
start_date="2025-01-01",
end_date="2025-01-31",
cloud_cover_max=0.2,
sun_elevation_min=30,
item_types=["PSScene"]
)
# v4.1.0: Enhanced metadata extraction works with all API endpoints
for scene in results['features']:
metadata = query.metadata_processor.extract_scene_metadata(scene)
print(f"Reliable Scene ID: {metadata['scene_id']}") # Now always works!
# Get scene statistics
stats = query.get_scene_stats(geometry, "2025-01-01", "2025-01-31")
# Batch search across multiple geometries
batch_results = query.batch_search([geom1, geom2, geom3], "2025-01-01", "2025-01-31")from planetscope_py import SpatialDensityEngine, DensityConfig, DensityMethod
# Configure analysis with automatic method selection
config = DensityConfig(
resolution=100.0, # 100m grid cells
method=DensityMethod.AUTO, # Auto-select optimal method
max_memory_gb=8.0,
parallel_workers=4
)
engine = SpatialDensityEngine(config)
result = engine.calculate_density(scene_footprints=scenes, roi_geometry=roi)
# v4.1.0: Complete metadata export without truncation
print("Complete analysis metadata exported successfully")
# Performance benchmarks (Milan dataset: 43 scenes, 355 km²)
# - Rasterization: 0.03-0.09s for 100m-30m resolutions
# - Vector Overlay: 53-203s with highest precision
# - Adaptive Grid: 9-15s with memory efficiencyfrom planetscope_py import TemporalAnalyzer, TemporalConfig, TemporalMetric
# Configure temporal analysis
config = TemporalConfig(
spatial_resolution=100.0,
metrics=[
TemporalMetric.COVERAGE_DAYS,
TemporalMetric.MEAN_INTERVAL,
TemporalMetric.TEMPORAL_DENSITY
],
optimization_method="auto"
)
analyzer = TemporalAnalyzer(config)
result = analyzer.analyze_temporal_patterns(scenes, roi, start_date, end_date)
# Export temporal results with enhanced visualizations
analyzer.export_temporal_geotiffs(result, "temporal_analysis", roi)
# v4.1.0: Enhanced turbo colormap visualizations
print("Temporal analysis visualizations now use turbo colormap for better contrast")- Authentication System: Hierarchical API key detection with secure credential management
- Configuration Management: Multi-source configuration with environment variable support
- Input Validation: Comprehensive geometry, date, and parameter validation
- Exception Handling: Professional error hierarchy with detailed context and troubleshooting guidance
- Security: API key masking, secure session management, and credential protection
- Cross-Platform: Full compatibility with Windows, macOS, and Linux environments
- Scene Discovery: Robust search functionality with advanced filtering capabilities
- Enhanced Metadata Processing: Multi-source scene ID extraction from all Planet API endpoints
- Comprehensive Error Recovery: Graceful handling of missing or malformed scene identifiers
- Rate Limiting: Intelligent rate limiting with exponential backoff and retry logic
- API Response Handling: Optimized response caching and pagination support
- Date Formatting: Planet API compliant date formatting with end-of-day handling
- Geometry Validation: Multi-format geometry support (GeoJSON, Shapely, WKT)
- Batch Operations: Support for multiple geometry searches with parallel processing
- Quality Assessment: Scene filtering based on cloud cover, sun elevation, and quality metrics
- Preview Support: Scene preview URL generation for visual inspection
- Real-World Testing: Verified with actual Planet API calls and data retrieval
- Multi-Algorithm Calculation: Three computational methods (rasterization, vector overlay, adaptive grid)
- Automatic Method Selection: Intelligent algorithm selection based on dataset characteristics
- High-Resolution Analysis: Support for 3m to 1000m grid resolutions with sub-pixel accuracy
- Performance Optimization: Memory-efficient processing with adaptive chunking
- Coordinate System Fixes: Proper CRS handling and transformation accuracy
- Professional Visualization: Four-panel summary plots with comprehensive statistics
- Enhanced JSON Export: Complete metadata files without truncation issues
- GeoTIFF Export: GIS-compatible export with automatic QGIS styling
- Cross-Platform Compatibility: Standardized grid structures and coordinate handling
- Grid-Based Pattern Analysis: Temporal analysis using same grid approach as spatial density
- Multiple Temporal Metrics: Coverage days, interval statistics, temporal density, frequency
- Performance Optimization: FAST (vectorized) and ACCURATE (cell-by-cell) methods
- Temporal Statistics: Comprehensive statistical analysis and gap detection
- Enhanced Visualizations: Turbo colormap for better data interpretation and contrast
- Professional Export: GeoTIFF files with QML styling and complete metadata
- Consistent Summary Tables: Temporal summary tables match spatial density format
- ROI Integration: Full integration with coordinate system fixes
- Complete JSON Export: Fixed serialization issues for comprehensive metadata
- Intelligent Quota Monitoring: Real-time tracking of Planet subscription usage
- Asset Activation & Download: Automated asset processing with progress tracking
- Download Management: Parallel downloads with retry logic and error recovery
- User Confirmation System: Interactive prompts for download decisions
- ROI Clipping Support: Automatic scene clipping to regions of interest
- Data Usage Warnings: Proactive alerts about subscription limits
- Professional Scene Polygons: Comprehensive GeoPackage export with enhanced metadata
- Multi-Layer Support: Vector polygons and raster imagery in single file
- Enhanced Attribute Schema: Rich metadata tables with reliable scene IDs from all sources
- GIS Software Integration: Direct compatibility with QGIS, ArcGIS, and other tools
- Cross-Platform Standards: Standardized schemas for maximum compatibility
- Imagery Integration: Optional inclusion of downloaded scene imagery
- Enhanced Temporal Visualizations: Turbo colormap for better data interpretation
- Professional Visualization: Multi-panel summary plots with comprehensive statistics
- Consistent Formatting: Temporal summary tables match spatial density format
- Complete JSON Export: Fixed serialization issues for all metadata files
- GeoTIFF Export: GIS-compatible export with automatic QGIS styling
- Statistical Analysis: Comprehensive statistics for all analysis types
- Multiple Export Formats: NumPy arrays, CSV, and GeoPackage formats
- Cross-Platform Standards: Standardized file formats and metadata schemas
pip install planetscope-pypip install planetscope-py[all]If you're upgrading from previous versions to get the metadata and serialization fixes:
pip install --upgrade planetscope-py# Clone the repository
git clone https://github.com/Black-Lights/planetscope-py.git
cd planetscope-py
# Create virtual environment
python -m venv planetscope_env
source planetscope_env/bin/activate # Linux/macOS
# or
planetscope_env\Scripts\activate # Windows
# Install development dependencies
pip install -e .
pip install -r requirements-dev.txtPlanetScope-py supports multiple authentication methods with automatic discovery in order of priority:
# Linux/macOS
export PL_API_KEY="your_planet_api_key_here"
# Windows Command Prompt
set PL_API_KEY=your_planet_api_key_here
# Windows PowerShell
$env:PL_API_KEY="your_planet_api_key_here"Create ~/.planet.json in your home directory:
{
"api_key": "your_planet_api_key_here"
}from planetscope_py import PlanetAuth
auth = PlanetAuth(api_key="your_planet_api_key_here")Get your Planet API key from Planet Account Settings.
# Run all tests
python -m pytest tests/ -v
# Run with coverage report
python -m pytest tests/ --cov=planetscope_py --cov-report=html
# Run specific component tests
python -m pytest tests/test_temporal_analysis.py -v
python -m pytest tests/test_asset_manager.py -v
python -m pytest tests/test_geopackage_manager.py -vCurrent test coverage: 349 tests passing (100%)
| Component | Tests | Status |
|---|---|---|
| Authentication | 24 | All passing |
| Configuration | 21 | All passing |
| Exceptions | 48 | All passing |
| Utilities | 54 | All passing |
| Planet API Query | 45+ | All passing |
| Metadata Processing | 30+ | All passing (Enhanced in v4.1.0) |
| Rate Limiting | 25+ | All passing |
| Spatial Analysis | 35+ | All passing |
| Temporal Analysis | 23 | All passing (Enhanced in v4.1.0) |
| Asset Management | 23 | All passing |
| GeoPackage Export | 21 | All passing |
Total: 349 tests with 100% success rate
- Robust authentication system with hierarchical API key detection
- Advanced configuration management with environment support
- Comprehensive exception handling with detailed error context
- Complete utility functions with geometry and date validation
- Cross-platform compatibility testing and validation
- Full Planet API integration with all major endpoints
- Enhanced scene ID extraction from all Planet API response formats
- Comprehensive metadata processing with error recovery
- Intelligent rate limiting and error recovery
- Real-world testing with actual Planet API data
- Multi-algorithm spatial density calculations
- Performance optimization with automatic method selection
- High-resolution analysis capabilities (3m-1000m)
- Professional visualization and export tools
- Complete JSON metadata export without truncation
- Memory-efficient processing for large datasets
- Grid-based temporal pattern analysis
- Multiple temporal metrics and statistics
- Performance optimization with FAST/ACCURATE methods
- Enhanced turbo colormap visualizations for better data interpretation
- Consistent summary table formatting with spatial analysis
- Complete JSON metadata export
- Integration with existing spatial analysis framework
- Intelligent quota monitoring and usage tracking
- Automated asset activation and download management
- Parallel downloads with progress tracking and retry logic
- User confirmation workflows with impact assessment
- ROI-based clipping and processing capabilities
- Professional GeoPackage creation with enhanced metadata
- Multi-layer support with vector and raster integration
- Enhanced scene ID attributes from all API sources
- GIS software compatibility and styling
- Flexible schema support for different use cases
- Cross-platform file format standards
- Python 3.10 or higher
- Active internet connection for Planet API access
- Valid Planet API key
- requests: HTTP client with session management
- shapely: Geometric operations and validation
- pyproj: Coordinate transformations and CRS handling
- numpy: Numerical computations
- pandas: Data manipulation and analysis
- python-dateutil: Date parsing and operations
- Spatial Analysis: rasterio, geopandas (for coordinate fixes and export)
- Temporal Analysis: xarray, scipy (for data structures and statistical analysis)
- Asset Management: aiohttp (for async downloads)
- GeoPackage Export: geopandas, rasterio, fiona (for GIS data export)
- Visualization: matplotlib (for plotting and enhanced visualizations)
- Optional Interactive: ipywidgets (for Jupyter notebook integration)
PlanetAuth: Authentication management with multiple methodsPlanetScopeQuery: Scene discovery and enhanced metadata processingSpatialDensityEngine: Multi-algorithm spatial analysis with complete exportTemporalAnalyzer: Grid-based temporal pattern analysis with enhanced visualizationsAssetManager: Quota monitoring and download managementGeoPackageManager: Professional data export system with enhanced metadata
DensityConfig: Spatial analysis configurationTemporalConfig: Temporal analysis configuration with visualization optionsGeoPackageConfig: Export configuration with enhanced schema supportAssetConfig: Asset management configuration
DensityResult: Spatial analysis results with complete JSON exportTemporalResult: Temporal analysis results with enhanced metrics and visualizationsAssetStatus: Asset activation and download statusQuotaInfo: Real-time quota information
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Project Wiki
- Scene ID Extraction: Now works reliably with all Planet API endpoints (Search, Stats, Orders)
- Multi-Source ID Detection: Checks properties.id, top-level id, item_id, and scene_id fields
- Error Recovery: Graceful handling of missing or malformed scene identifiers
- API Compatibility: Enhanced compatibility across different Planet API response formats
- Complete Metadata Export: Fixed truncated analysis_metadata.json files
- Numpy Type Conversion: Proper handling of numpy.int64, numpy.float64, numpy.ndarray types
- Memory Efficiency: Optimized serialization of large data structures
- Nested Object Support: Recursive conversion of complex metadata dictionaries
- Turbo Colormap: Improved visualization contrast and data interpretation
- Summary Table Consistency: Temporal tables now match spatial density format
- Professional Presentation: Enhanced visual consistency across analysis types
- Better Color Schemes: Standardized color palettes for all visualizations
- Interactive Manager: Enhanced preview and interactive manager configuration
- Module Loading: Improved module availability detection and reporting
- Error Messages: Clear feedback about component status and missing dependencies
If you use this library in your research, please cite:
@software{planetscope_py_2025,
title = {PlanetScope-py: Professional Python library for PlanetScope satellite imagery analysis},
author = {Ammar and Umayr},
year = {2025},
version = {4.1.0},
url = {https://github.com/Black-Lights/planetscope-py},
note = {Enhanced metadata processing and serialization fixes with complete temporal analysis}
}This project is licensed under the MIT License. See the LICENSE file for details.
- Planet Labs PBC for providing the Planet API and PlanetScope imagery
- Dr. Daniela Stroppiana - Project Advisor
- Prof. Giovanna Venuti - Project Supervisor
- Politecnico di Milano - Geoinformatics Engineering Program
Ammar & Umayr
Geoinformatics Engineering Students
Politecnico di Milano
Note: This project is independently developed and is not officially affiliated with Planet Labs PBC. It is designed to work with Planet's publicly available APIs following their terms of service.