Files
remote-sensing/test_planetary_computer.py
T
2026-01-26 13:44:55 +07:00

89 lines
2.8 KiB
Python

"""
Test Microsoft Planetary Computer connectivity và token
"""
import planetary_computer
from pystac_client import Client
from datetime import datetime, timedelta
print("=" * 70)
print("🧪 TESTING MICROSOFT PLANETARY COMPUTER CONNECTION")
print("=" * 70)
# Test 1: Basic connection
print("\n1️⃣ Testing basic connection...")
try:
catalog = Client.open(
"https://planetarycomputer.microsoft.com/api/stac/v1",
modifier=planetary_computer.sign_inplace,
)
print("✅ Successfully connected to Planetary Computer")
print(f" Catalog ID: {catalog.id}")
print(f" Title: {catalog.title}")
except Exception as e:
print(f"❌ Connection failed: {e}")
exit(1)
# Test 2: List collections
print("\n2️⃣ Testing collections access...")
try:
collections = list(catalog.get_collections())
print(f"✅ Found {len(collections)} collections")
sentinel_2 = [c for c in collections if 'sentinel-2' in c.id.lower()]
print(f" Sentinel-2 collections: {[c.id for c in sentinel_2]}")
except Exception as e:
print(f"❌ Collections access failed: {e}")
# Test 3: Small search query (very conservative)
print("\n3️⃣ Testing small search query...")
try:
# Tiny bbox in Vietnam
bbox = [105.8, 10.0, 105.9, 10.1] # ~10km x 10km area
end_date = datetime.now()
start_date = end_date - timedelta(days=7) # Last 7 days only
time_range = f"{start_date.strftime('%Y-%m-%d')}/{end_date.strftime('%Y-%m-%d')}"
print(f" Bbox: {bbox}")
print(f" Time: {time_range}")
print(f" Searching...")
search = catalog.search(
collections=["sentinel-2-l2a"],
bbox=bbox,
datetime=time_range,
limit=5 # Only 5 items
)
items = []
for i, item in enumerate(search.items()):
items.append(item)
if i >= 4: # Stop at 5
break
print(f"✅ Search successful! Found {len(items)} items")
if items:
first_item = items[0]
print(f" First item: {first_item.id}")
print(f" Date: {first_item.datetime}")
# Test token signing
signed_item = planetary_computer.sign(first_item)
print(f"✅ SAS token signing works")
print(f" Asset keys: {list(signed_item.assets.keys())[:5]}")
except Exception as e:
print(f"❌ Search failed: {e}")
import traceback
traceback.print_exc()
print("\n" + "=" * 70)
print("🏁 Test completed!")
print("=" * 70)
print("\n💡 Nếu test này PASS:")
print(" → Planetary Computer hoạt động bình thường")
print(" → Vấn đề là query quá lớn (bbox/time range/max_scenes)")
print("\n💡 Nếu test này FAIL:")
print(" → Kiểm tra internet connection")
print(" → Thử lại sau (server có thể bị quá tải)")
print(" → Xem xét dùng dữ liệu local")