swisseph-wasm
Version:
High-precision Swiss Ephemeris WebAssembly library for astronomical calculations in JavaScript
240 lines (197 loc) • 5.62 kB
Markdown
# SwissEph Examples
This directory contains practical examples demonstrating how to use the SwissEph WebAssembly library for various astronomical and astrological calculations.
## Examples Overview
### 1. `basic-usage.js`
Fundamental operations and core functionality:
- Basic planetary position calculations
- Multiple planet calculations
- Time zone handling
- Sidereal vs tropical comparisons
- Date conversion functions
- Degree utilities
- Library information
**Run with:**
```bash
node examples/basic-usage.js
```
### 2. `birth-chart.js`
Complete birth chart calculation system:
- Full birth chart calculator class
- Planetary positions with zodiac signs
- House calculations
- Additional astrological points (nodes, Lilith, Chiron)
- Aspect calculations
- Professional-grade chart interpretation
**Run with:**
```bash
node examples/birth-chart.js
```
### 3. `advanced-features.js` *(Coming Soon)*
Advanced astronomical calculations:
- Eclipse predictions
- Rise/set/transit times
- Fixed star positions
- Topocentric calculations
- Atmospheric refraction
- Coordinate transformations
### 4. `web-integration.js` *(Coming Soon)*
Browser integration examples:
- HTML/JavaScript integration
- Real-time calculations
- Interactive charts
- Performance optimization
- Error handling in web environments
## Quick Start
### Basic Planetary Position
```javascript
import SwissEph from '../src/swisseph.js';
const swe = new SwissEph();
await swe.initSwissEph();
const jd = swe.julday(2023, 6, 15, 12.0);
const sunPos = swe.calc_ut(jd, swe.SE_SUN, swe.SEFLG_SWIEPH);
console.log(`Sun longitude: ${sunPos[0]}°`);
swe.close();
```
### Birth Chart Calculation
```javascript
import { BirthChartCalculator } from './examples/birth-chart.js';
const calculator = new BirthChartCalculator();
const chart = await calculator.calculateBirthChart({
year: 1990, month: 5, day: 15,
hour: 14, minute: 30, timezone: -5,
latitude: 40.7128, longitude: -74.0060
});
console.log(chart.planets);
calculator.destroy();
```
## Example Output
### Basic Planetary Positions
```
=== Basic Planetary Position ===
Julian Day: 2460110.0
Sun Position:
Longitude: 84.123456°
Latitude: 0.000123°
Distance: 1.015678 AU
Speed: 0.958765°/day
Zodiac: 24.12° Gemini
```
### Birth Chart
```
PLANETARY POSITIONS:
===================
☉ Sun : 24.12° Taurus (54.12°)
☽ Moon : 15.67° Scorpio (225.67°)
☿ Mercury : 8.45° Gemini (68.45°)
♀ Venus : 2.89° Cancer (92.89°)
♂ Mars : 18.34° Virgo (168.34°)
♃ Jupiter : 12.78° Pisces (342.78°)
♄ Saturn : 25.91° Capricorn (295.91°)
♅ Uranus : 7.23° Capricorn (277.23°)
♆ Neptune : 11.45° Capricorn (281.45°)
♇ Pluto : 16.78° Scorpio (226.78°)
MAJOR ASPECTS:
==============
Sun ☌ Mercury: Conjunction (orb: 2.34°)
Moon ☍ Venus: Opposition (orb: 3.21°)
Mars △ Jupiter: Trine (orb: 1.87°)
```
## Common Patterns
### Error Handling
```javascript
async function safeCalculation() {
let swe = null;
try {
swe = new SwissEph();
await swe.initSwissEph();
// calculations here
return result;
} catch (error) {
console.error('Calculation failed:', error);
return null;
} finally {
if (swe) swe.close();
}
}
```
### Batch Processing
```javascript
async function calculateMultipleDates(dates) {
const swe = new SwissEph();
await swe.initSwissEph();
const results = [];
for (const date of dates) {
const jd = swe.julday(date.year, date.month, date.day, date.hour);
const pos = swe.calc_ut(jd, swe.SE_SUN, swe.SEFLG_SWIEPH);
results.push({ date, position: pos[0] });
}
swe.close();
return results;
}
```
### Reusable Calculator Class
```javascript
class AstrologyCalculator {
constructor() {
this.swe = null;
this.initialized = false;
}
async init() {
if (!this.initialized) {
this.swe = new SwissEph();
await this.swe.initSwissEph();
this.initialized = true;
}
}
async calculate(params) {
await this.init();
// calculations here
}
destroy() {
if (this.swe) {
this.swe.close();
this.swe = null;
this.initialized = false;
}
}
}
```
## Running Examples
### Prerequisites
- Node.js 14+ or modern browser
- ES6 modules support
### Command Line
```bash
# Run basic usage examples
node examples/basic-usage.js
# Run birth chart example
node examples/birth-chart.js
# Run specific function
node -e "import('./examples/basic-usage.js').then(m => m.basicPlanetaryPosition())"
```
### Browser
```html
<script type="module">
import { runAllExamples } from './examples/basic-usage.js';
runAllExamples();
</script>
```
## Tips for Development
1. **Always initialize**: Call `await swe.initSwissEph()` before calculations
2. **Clean up**: Always call `swe.close()` when done
3. **Handle time zones**: Convert to UTC before calculations
4. **Validate inputs**: Check date ranges and parameter validity
5. **Use constants**: Use library constants instead of magic numbers
6. **Batch operations**: Reuse SwissEph instance for multiple calculations
7. **Error handling**: Wrap calculations in try-catch blocks
## Performance Considerations
- Initialize once, calculate many times
- Use appropriate calculation flags
- Clean up resources properly
- Consider WebWorkers for heavy calculations
- Cache results when appropriate
## Further Reading
- [Main Documentation](../DOCUMENTATION.md)
- [Quick Reference](../QUICK_REFERENCE.md)
- [Test Suite](../tests/README.md)
- [Swiss Ephemeris Documentation](https://www.astro.com/swisseph/swephprg.htm)