Geospatial Osint

v1.0.0

Open-source geospatial intelligence gathering and visualization dashboard. Use when building Worldview-style spy thriller dashboards, monitoring geopolitical...

0· 333·1 current·1 all-time
byimjohnathan@imjohnathanblog-spec

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for imjohnathanblog-spec/geospatial-osint.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Geospatial Osint" (imjohnathanblog-spec/geospatial-osint) from ClawHub.
Skill page: https://clawhub.ai/imjohnathanblog-spec/geospatial-osint
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Canonical install target

openclaw skills install imjohnathanblog-spec/geospatial-osint

ClawHub CLI

Package manager switcher

npx clawhub@latest install geospatial-osint
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The name/description align with the instructions: the SKILL.md provides code and references for building a Cesium-based geospatial dashboard that aggregates satellites, flights, ships, CCTV, seismic data, and rendering effects. That capability set is coherent with the stated purpose.
!
Instruction Scope
The runtime instructions direct fetching and embedding of many external data sources (ADS‑B Exchange including a military endpoint, OpenSky, MarineTraffic, Insecam CCTV snapshots, CelesTrak TLEs, n2yo, USGS, GPSJam). They also suggest using paid imagery providers and a Cesium Ion token. The doc instructs collecting and displaying potentially privacy-sensitive live camera feeds and military aircraft data; it does not limit or contextualize legal/ethical constraints. The instructions do not ask to read local files or hidden system state, but they give broad discretion to poll many external endpoints and embed camera snapshots, which materially expands the skill's data access surface.
Install Mechanism
Instruction-only skill with no install spec or code files to execute on disk. This minimizes install-time risk; nothing is downloaded or installed by the registry metadata itself.
!
Credentials
The skill declares no required env vars or primary credential, but the documentation and example code explicitly reference multiple API keys/tokens (ADS‑B Exchange API key, MarineTraffic, Cesium.Ion token, Planet/Maxar/Capella credentials, n2yo API, Space‑Track login). That mismatch is an inconsistency: the skill will need secrets to use some sources, yet none are declared in metadata. Requiring credentials from multiple commercial providers would be reasonable for full functionality, but the skill should declare them and justify their need. Additionally, the skill suggests scraping public CCTV (Insecam) which involves aggregating content that may be privacy-sensitive even without credentials.
Persistence & Privilege
always is false and there is no install script or code that persists state or modifies other skills. The skill does not request elevated registry-level privileges in the metadata.
What to consider before installing
This skill is an instruction-only blueprint for building a powerful surveillance-style dashboard; that in itself is not illegal, but it has real privacy, legal, and operational implications. Before installing or using it: (1) verify the publisher and provenance (no homepage, unknown source raises risk); (2) expect to supply multiple API keys/tokens for ADS‑B Exchange, MarineTraffic, Cesium Ion, n2yo, or commercial imagery — do not paste secrets into untrusted UIs; (3) consider removing or disabling the Insecam/CCTV scraping and any military-tracking features if you need to avoid privacy/legal exposure; (4) check terms-of-service and local laws for each data provider (and for bulk scraping of public camera sites); (5) run experiments in an isolated environment (separate account or sandbox) and audit any code generated by agents before pushing to production. If you want, I can list the exact API credentials the code samples reference and show how to scope and store them safely (eg. per-service env vars, least-privilege tokens).

Like a lobster shell, security has layers — review code before you run it.

latestvk97b31q3brtpx9yy3d85fdrch582c36w
333downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

Geospatial OSINT / Worldview Dashboard

This skill covers building real-time geospatial intelligence dashboards inspired by Bilawal Sidhu's Worldview project.

Quick Start

Core Data Sources (Free)

SourceAPI/URLUse Case
ADS-B ExchangeAPI, free keyCommercial flights
ADS-B Exchange MilitaryAPIMilitary aircraft
OpenSky NetworkFree APIFlight data
MarineTrafficFree tierShip positions
CelesTrakTLE filesSatellite orbits
n2yo.comFree APISatellite passes
GPSJamStaticGPS jamming heatmaps
EarthquakesGeoJSONSeismic data
InsecamPublic camsCCTV cameras
OpenStreetMapOverpass APIRoad networks

Paid Options (Optional)

  • Planet Labs (daily imagery)
  • Maxar (high-res)
  • Capella Space (SAR)
  • MarineTraffic Pro

Architecture

Stack

Frontend:      Cesium.js (3D globe) + Three.js (effects)
Data Layer:    Polling APIs → WebSocket → Entity updates
Visual:        Post-processing (bloom, CRT, NVG, thermal)
Development:   Multi-agent CLI (OpenClaw, Claude, etc.)

Visual Modes

Worldview supports multiple rendering modes:

// Effect pipeline examples
const effects = {
  // Night Vision Goggles (green tint + scanlines)
  nvg: {
    colorMatrix: [0,1,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1],
    scanlines: true,
    vignette: 0.3
  },
  
  // Thermal (heat map coloring)
  thermal: {
    colorMap: 'inferno',
    threshold: true
  },
  
  // CRT (scanlines + curvature + glow)
  crt: {
    scanlines: 0.5,
    curvature: 0.02,
    bloom: 0.5
  },
  
  // Fluor (high contrast military green)
  fluor: {
    colorMatrix: [0,0.5,0,0, 0,1,0,0, 0,0.5,0,0, 0,0,0,1],
    contrast: 1.5
  }
};

Data Layers

LayerSourceUpdate Freq
SatellitesCelesTrak TLEPeriodic refresh
Commercial flightsADS-B / OpenSky~5 sec
Military flightsADS-B Exchange military~5 sec
ShipsMarineTraffic~1 min
CCTVInsecam~1 min
Road trafficOSM + simulationStatic + particles
EarthquakesUSGSReal-time
GPS jammingGPSJamStatic/daily

Dashboard Template

Basic Cesium Setup

import * as Cesium from 'cesium';

const viewer = new Cesium.Viewer('container', {
  terrainProvider: Cesium.createWorldTerrain(),
  baseLayerPicker: false,
  timeline: true,
  animation: true,
  sceneMode: Cesium.SceneMode.SCENE3D
});

// Enable 3D buildings
viewer.scene.primitives.add(Cesium.createOsmBuildings());

// Clock settings for replay
viewer.clock.shouldAnimate = true;
viewer.clock.multiplier = 60; // 60x speed

Loading Flight Data

async function loadFlights(bounds) {
  const response = await fetch(
    `https://opensky-network.org/api/states/all?lamin=${bounds.minLat}&lomin=${bounds.minLon}&lamax=${bounds.maxLat}&lomax=${bounds.maxLon}`
  );
  const data = await response.json();
  
  data.states.forEach(flight => {
    const [icao, callsign, .., lat, lon, alt, .., velocity, heading] = flight;
    // Add entity to viewer
    viewer.entities.add({
      id: icao,
      position: Cesium.Cartesian3.fromDegrees(lon, lat, alt),
      point: { pixelSize: 5, color: getFlightColor(callsign) },
      label: { text: callsign, font: '10px monospace' }
    });
  });
}

Satellite Tracking

// Load TLE and calculate positions
const satellites = await fetch('https://celestrak.org/NORAD/elements/gp.php?GROUP=visual&FORMAT=tle')
  .then(r => r.text());

// Use satellite.js to propagate
import { propagate, eciToEcf } from 'satellite.js';

function updateSatellite(satrec, time) {
  const position = propagate(satrec, time);
  const gmst = satellite.gstime(time);
  const positionEcf = eciToEcf(position.position, gmst);
  
  return {
    x: positionEcf.x * 1000,
    y: positionEcf.y * 1000,
    z: positionEcf.z * 1000
  };
}

CCTV Camera Overlay

// Insecam - public cameras
async function loadCameras(bounds) {
  const response = await fetch(
    `https://www.insecam.org/en/by-country/XX/?page=1` // Filter by country
  );
  // Parse camera list, add as entities with video texture
}

// Project camera onto 3D geometry
cameraEntities.forEach(cam => {
  viewer.entities.add({
    position: cam.location,
    billboard: {
      image: cam.snapshot,
      width: 320,
      height: 240,
      pixelOffset: new Cesium.Cartesian2(0, -120)
    }
  });
});

Post-Processing Effects

// Using Cesium's PostProcessStage
const bloom = viewer.scene.postProcessStages.bloom;
bloom.enabled = true;
bloom.threshold = 0.5;
bloom.strength = 0.5;

// Custom shader for CRT effect
const crtEffect = new Cesium.PostProcessStage({
  name: 'crt',
  fragmentShader: `
    uniform sampler2D colorTexture;
    varying vec2 v_textureCoord;
    void main() {
      vec4 color = texture2D(colorTexture, v_textureCoord);
      // Scanlines
      float scanline = sin(v_textureCoord.y * 800.0) * 0.04;
      // Vignette
      float vignette = 1.0 - length(v_textureCoord - 0.5) * 0.5;
      gl_FragColor = vec4(color.rgb * (1.0 - scanline) * vignette, 1.0);
    }
  `
});

Workflow: Building with AI Agents

Multi-Agent Setup

Run multiple terminals in parallel:

Terminal 1: Core 3D globe + Cesium setup
Terminal 2: Data integration (flights, satellites)  
Terminal 3: Visual effects (shaders, post-processing)
Terminal 4: UI controls + camera systems

Prompt Template

Build a [feature] for my Cesium.js geospatial dashboard.
Requirements:
- [specific behavior]
- Integration with existing data layer
- Performance: handle [N] entities without lag
- Visual style: [CRT/NVG/thermal/none]

Performance Tips

// Sequential loading for large datasets
async function loadSequential(data, chunkSize = 1000) {
  for (let i = 0; i < data.length; i += chunkSize) {
    const chunk = data.slice(i, i + chunkSize);
    chunk.forEach(addEntity);
    await new Promise(r => setTimeout(r, 100)); // Yield to UI
  }
}

// Use PointPrimitiveCollection for 10k+ points
const points = viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection());
points.add({ position: ..., color: ... });

Region Monitoring

Automated Polling

import requests
import schedule
from datetime import datetime

REGIONS = {
  'iran': {'lat': 32.0, 'lon': 52.0, 'radius': 500},
  'gulf': {'lat': 26.0, 'lon': 52.0, 'radius': 300},
}

def monitor():
    for name, bounds in REGIONS.items():
        flights = get_flights(bounds)
        military = get_military(bounds)
        if detect_anomaly(flights, military):
            alert(f"Anomaly in {name}: {details}")

schedule.every(5).minutes.do(monitor)

Alert Conditions

  • Sudden flight rerouting
  • New no-fly zones
  • Unusual military activity
  • Satellite coverage of area of interest

References

Comments

Loading comments...