@jjlmoya/utils-drones 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +61 -0
- package/src/category/i18n/en.ts +107 -0
- package/src/category/i18n/es.ts +106 -0
- package/src/category/i18n/fr.ts +107 -0
- package/src/category/index.ts +15 -0
- package/src/category/seo.astro +92 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +11 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +22 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +146 -0
- package/src/pages/[locale].astro +251 -0
- package/src/pages/index.astro +4 -0
- package/src/tests/faq_count.test.ts +19 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/seo_length.test.ts +22 -0
- package/src/tests/seo_section_types.test.ts +75 -0
- package/src/tests/tool_validation.test.ts +17 -0
- package/src/tool/antenna-length-calculator/AntennaLengthCalculator.css +684 -0
- package/src/tool/antenna-length-calculator/bibliography.astro +14 -0
- package/src/tool/antenna-length-calculator/component.astro +360 -0
- package/src/tool/antenna-length-calculator/i18n/en.ts +204 -0
- package/src/tool/antenna-length-calculator/i18n/es.ts +204 -0
- package/src/tool/antenna-length-calculator/i18n/fr.ts +204 -0
- package/src/tool/antenna-length-calculator/index.ts +27 -0
- package/src/tool/antenna-length-calculator/seo.astro +39 -0
- package/src/tool/drone-flight-time/FlightTimeCalculator.css +363 -0
- package/src/tool/drone-flight-time/bibliography.astro +14 -0
- package/src/tool/drone-flight-time/component.astro +262 -0
- package/src/tool/drone-flight-time/components/AutonomyChart.astro +13 -0
- package/src/tool/drone-flight-time/components/BatterySpecs.astro +46 -0
- package/src/tool/drone-flight-time/components/ConsumptionStats.astro +33 -0
- package/src/tool/drone-flight-time/components/FlightDashboard.astro +33 -0
- package/src/tool/drone-flight-time/i18n/en.ts +200 -0
- package/src/tool/drone-flight-time/i18n/es.ts +200 -0
- package/src/tool/drone-flight-time/i18n/fr.ts +200 -0
- package/src/tool/drone-flight-time/index.ts +27 -0
- package/src/tool/drone-flight-time/seo.astro +31 -0
- package/src/tool/gps-coordinates-converter/GpsCoordinatesConverter.css +310 -0
- package/src/tool/gps-coordinates-converter/bibliography.astro +14 -0
- package/src/tool/gps-coordinates-converter/component.astro +355 -0
- package/src/tool/gps-coordinates-converter/components/GpsHistory.astro +36 -0
- package/src/tool/gps-coordinates-converter/components/GpsInputs.astro +92 -0
- package/src/tool/gps-coordinates-converter/components/GpsMap.astro +18 -0
- package/src/tool/gps-coordinates-converter/components/GpsResults.astro +50 -0
- package/src/tool/gps-coordinates-converter/i18n/en.ts +201 -0
- package/src/tool/gps-coordinates-converter/i18n/es.ts +201 -0
- package/src/tool/gps-coordinates-converter/i18n/fr.ts +201 -0
- package/src/tool/gps-coordinates-converter/index.ts +27 -0
- package/src/tool/gps-coordinates-converter/seo.astro +39 -0
- package/src/tools.ts +16 -0
- package/src/types.ts +72 -0
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jjlmoya/utils-drones",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./src/index.ts",
|
|
6
|
+
"types": "./src/index.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./src/index.ts",
|
|
9
|
+
"./data": "./src/data.ts"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"src"
|
|
13
|
+
],
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"dev": "astro dev",
|
|
19
|
+
"start": "astro dev",
|
|
20
|
+
"build": "astro build",
|
|
21
|
+
"preview": "astro preview",
|
|
22
|
+
"astro": "astro",
|
|
23
|
+
"lint": "eslint src/ --max-warnings 0 && stylelint \"src/**/*.{css,astro}\"",
|
|
24
|
+
"check": "astro check",
|
|
25
|
+
"type-check": "astro check",
|
|
26
|
+
"test": "vitest run",
|
|
27
|
+
"preversion": "npm run lint && npm run test",
|
|
28
|
+
"postversion": "git push && git push --tags",
|
|
29
|
+
"patch": "npm version patch",
|
|
30
|
+
"minor": "npm version minor",
|
|
31
|
+
"major": "npm version major"
|
|
32
|
+
},
|
|
33
|
+
"lint-staged": {
|
|
34
|
+
"*.{ts,tsx,astro}": [
|
|
35
|
+
"eslint --fix"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@iconify-json/mdi": "^1.2.3",
|
|
40
|
+
"@jjlmoya/utils-shared": "1.0.2",
|
|
41
|
+
"astro": "^6.1.2",
|
|
42
|
+
"astro-icon": "^1.1.0",
|
|
43
|
+
"chart.js": "^4.5.1"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@astrojs/check": "^0.9.8",
|
|
47
|
+
"eslint": "^9.39.4",
|
|
48
|
+
"eslint-plugin-astro": "^1.6.0",
|
|
49
|
+
"eslint-plugin-no-comments": "^1.1.10",
|
|
50
|
+
"husky": "^9.1.7",
|
|
51
|
+
"lint-staged": "^16.4.0",
|
|
52
|
+
"postcss-html": "^1.8.1",
|
|
53
|
+
"schema-dts": "^1.1.2",
|
|
54
|
+
"stylelint": "^17.6.0",
|
|
55
|
+
"stylelint-config-standard": "^40.0.0",
|
|
56
|
+
"stylelint-declaration-strict-value": "^1.11.1",
|
|
57
|
+
"typescript": "^5.4.0",
|
|
58
|
+
"typescript-eslint": "^8.58.0",
|
|
59
|
+
"vitest": "^4.1.2"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const content: CategoryLocaleContent = {
|
|
4
|
+
slug: 'drones',
|
|
5
|
+
title: 'Drone and Ham Radio Tools and Calculators',
|
|
6
|
+
description: 'Optimize your flight and communications with free online tools. Flight time calculators, battery life estimations, GPS coordinate converters, and antenna length for radio frequency.',
|
|
7
|
+
seo: [
|
|
8
|
+
{
|
|
9
|
+
type: 'title',
|
|
10
|
+
text: 'RF Engineering and Precision Flight: Tools for Pilots and Radio Operators',
|
|
11
|
+
level: 2,
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
type: 'paragraph',
|
|
15
|
+
html: 'Amateur radio and drone flight in 2026 are fields where skill meets radio frequency (RF) engineering. In this section, we offer a suite of <strong>free online tools</strong> designed for FPV enthusiasts, commercial RPAS pilots, and radio band operators. Understanding the limits of your equipment and the laws of wave propagation is the difference between a successful mission and a costly technical failure.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
type: 'paragraph',
|
|
19
|
+
html: 'From flight endurance planning to building custom antennas and precise geo-navigation, our utilities provide the data-driven confidence needed to take your projects into the air or onto the waves.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: 'title',
|
|
23
|
+
text: 'Flight Planning: Flight Time and Battery Endurance (mAh / Amps)',
|
|
24
|
+
level: 2,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: 'paragraph',
|
|
28
|
+
html: 'Knowing your drone\'s real-world operational window is vital for safety. Our <strong>flight time calculator</strong> estimates total endurance based on battery milliamp-hours (mAh) and average motor consumption. Don\'t let critical voltage telemetry catch you off guard far from home.',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'title',
|
|
32
|
+
text: 'Antenna Engineering: Wavelength and Radio Frequency',
|
|
33
|
+
level: 2,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'paragraph',
|
|
37
|
+
html: 'Transmission efficiency depends on resonance. The <strong>antenna calculator</strong> determines the exact physical length required for dipoles, 1/2, and 1/4 wave whips based on the desired operating frequency (VHF, UHF, ISM bands). Maximize range and reduce SWR (Standing Wave Ratio) in your communication systems.',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'title',
|
|
41
|
+
text: 'Precision Navigation: GPS Coordinate Converter',
|
|
42
|
+
level: 2,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'paragraph',
|
|
46
|
+
html: 'Essential for search missions, mapping, or radio direction finding. The <strong>coordinate converter</strong> translates between Decimal and DMS (Degrees, Minutes, Seconds) formats bi-directionally, providing a map preview to confirm the accuracy of your point of interest before takeoff.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
items: [
|
|
51
|
+
'<strong>RPAS Safety:</strong> Prevent emergency landings caused by unforeseen battery cycle depletion.',
|
|
52
|
+
'<strong>RF Optimization:</strong> Build your own high-performance antennas with precise physical measurements based on the speed of light in the conductor.',
|
|
53
|
+
'<strong>Geo-referenced Missions:</strong> Seamlessly work with various map standards and international coordinate systems.',
|
|
54
|
+
'<strong>Airborne Privacy:</strong> Your flight plans and coordinates are processed locally; we do not upload sensitive data to third-party clouds.',
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'title',
|
|
59
|
+
text: 'Aviation Regulation and Operator Certification',
|
|
60
|
+
level: 2,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'paragraph',
|
|
64
|
+
html: 'Flying a drone today requires an understanding of regulation. In the USA, the FAA (Federal Aviation Administration) requires a Part 107 license. In Europe, EASA (European Union Aviation Safety Agency) sets the standards for certification. Each jurisdiction has altitude limits, restricted zones (NOTAMs), insurance requirements, and registration rules.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: 'paragraph',
|
|
68
|
+
html: 'Our planning tools allow you to verify endurance, viewing angles for mapping, and flight times. When combined with restricted zone data (which you can verify on B4UFLY in the US or ENAIRE in Spain), you can plan missions that are both technically optimal AND legal. Operating without regulation is costly (fines of €1000+ in Europe), so rigorous planning is mandatory.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'title',
|
|
72
|
+
text: 'Commercial Applications: Photogrammetric Mapping and Inspection',
|
|
73
|
+
level: 2,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html: 'Drones have revolutionized industrial inspection and surveying. A roof inspector can use a drone to identify damage without risking their life. An agricultural engineer uses drones to map water stress in crops using thermal cameras. A construction company uses drone photogrammetry to document project progress in 3D.',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: 'paragraph',
|
|
81
|
+
html: 'Each application requires different endurance, payload, and operating ranges. A photogrammetry mission at 100 meters over 10 hectares may require 20+ minutes of autonomous flight. Our endurance calculators let you model: payload weight (camera, sensor), number of batteries, and flight cycles per day. From there, you calculate ROI: if you need 5 batteries of 4500 mAh at €50 each, your initial battery investment is €250. Does the mission justify it? Our tools help you make that calculation.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'title',
|
|
85
|
+
text: 'Amateur Radio Community: HF, VHF, UHF Bands and Satellites',
|
|
86
|
+
level: 2,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'paragraph',
|
|
90
|
+
html: 'Amateur radio (HAM radio) is a global community of 2+ million operators who communicate without the internet. They use frequency bands allocated by international bodies (IARU - International Amateur Radio Union). VHF (144-146 MHz in the 2-meter band) is the most accessible entry point, with typical ranges of 20-100 km depending on the antenna.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
type: 'paragraph',
|
|
94
|
+
html: 'Understanding how to calculate antennas for your band is essential. An amateur wishing to operate on 2 meters (144-146 MHz) needs a half-wave antenna of approximately 1 meter. Our generator calculates this: simply enter the frequency, specify whether you want 1/4, 1/2, or full wavelength, and get the exact dimension. Build your antenna, tune it, and connect with the world using just a radio and a homebuilt antenna. It is accessible, humble technology that survives wars, disasters, and blackouts.',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'title',
|
|
98
|
+
text: 'The Future of Personal Aerial Mobility in 2026',
|
|
99
|
+
level: 2,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'paragraph',
|
|
103
|
+
html: 'By 2026, the integration of drones into shared airspace is a regulated reality. The ability of hobbyists to operate under professional maintenance and technical planning standards is key to coexistence. These tools are part of the commitment to excellence and safety that every pilot and radio operator must maintain.',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
};
|
|
107
|
+
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const content: CategoryLocaleContent = {
|
|
4
|
+
slug: 'drones',
|
|
5
|
+
title: 'Herramientas y Calculadoras para Drones y Radioaficionados',
|
|
6
|
+
description: 'Optimiza tus vuelos y tus comunicaciones con herramientas gratuitas online. Calculadoras de tiempo de vuelo, autonomía batería, conversores de coordenadas GPS y longitudes de antena para radiofrecuencia.',
|
|
7
|
+
seo: [
|
|
8
|
+
{
|
|
9
|
+
type: 'title',
|
|
10
|
+
text: 'Ingeniería RF y Vuelo de Precisión: Herramientas para Pilotos y Radiooperadores',
|
|
11
|
+
level: 2,
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
type: 'paragraph',
|
|
15
|
+
html: 'La radioafición y el vuelo de drones en 2026 son campos donde la destreza se une con la ingeniería de radiofrecuencia (RF). En esta sección, ofrecemos una suite de <strong>herramientas gratuitas online</strong> diseñadas para entusiastas del FPV, pilotos comerciales de RPAS y operadores de bandas de radio. Entender los límites de tu equipo móvil y las leyes de propagación de ondas es la diferencia entre una misión exitosa y un fallo técnico costoso.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
type: 'paragraph',
|
|
19
|
+
html: 'Desde la planificación de la autonomía de vuelo hasta la construcción de antenas personalizadas y la navegación geo-precisa, nuestras utilidades te dan la confianza de los datos para llevar tus proyectos al aire o a las ondas.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: 'title',
|
|
23
|
+
text: 'Planificación de Vuelo: Tiempo y Autonomía de Batería (mAh / Amps)',
|
|
24
|
+
level: 2,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: 'paragraph',
|
|
28
|
+
html: 'Conocer la ventana de operación real de tu dron es vital para la seguridad. Nuestra <strong>calculadora de tiempo de vuelo</strong> estima la autonomía total basándose en los miliamperios hora (mAh) de la batería y el consumo medio de los motores. No dejes que la telemetría te sorprenda con el voltaje crítico lejos de casa.',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'title',
|
|
32
|
+
text: 'Ingeniería de Antenas: Longitud de Onda y Frecuencia de Radio',
|
|
33
|
+
level: 2,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'paragraph',
|
|
37
|
+
html: 'La eficiencia de transmisión depende de la resonancia. El generador de <strong>calculadora de antena</strong> determina la longitud física exacta necesaria para dipolos, látigos de 1/2 y 1/4 de onda según la frecuencia de operación deseada (VHF, UHF, Bandas ISM). Maximiza el alcance y reduce la ROE (Relación de Ondas Estacionarias) de tus sistemas de comunicación.',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'title',
|
|
41
|
+
text: 'Navegación Geo-precisa: Conversor de Coordenadas GPS',
|
|
42
|
+
level: 2,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'paragraph',
|
|
46
|
+
html: 'Indispensable para misiones de búsqueda, cartografía o radio-localización. El <strong>conversor de coordenadas</strong> traduce formatos Decimales a GMS (Grados, Minutos, Segundos) de forma bidireccional, ofreciendo una visualización en mapa para confirmar la exactitud de tu punto de interés antes de despegar.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
items: [
|
|
51
|
+
'<strong>Seguridad de RPAS:</strong> Evita aterrizajes de emergencia por agotamiento de ciclos de batería imprevistos.',
|
|
52
|
+
'<strong>Optimización de RF:</strong> Construye tus propias antenas de alto rendimiento con medidas físicas precisas basadas en la velocidad de la luz en el conductor.',
|
|
53
|
+
'<strong>Misiones Geo-referenciadas:</strong> Trabaja con diferentes estándares de mapas y coordenadas internacionales con total fluidez.',
|
|
54
|
+
'<strong>Privacidad en el Aire:</strong> Tus planes de vuelo y coordenadas se procesan localmente; no subimos datos sensibles a nubes de terceros.',
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'title',
|
|
59
|
+
text: 'Regulación Aeronáutica y Certificación de Operadores',
|
|
60
|
+
level: 2,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'paragraph',
|
|
64
|
+
html: 'Volar un dron hoy requiere comprensión de la regulación. En España, la AESA (Agencia Estatal de Seguridad Aérea) requiere certificación para vuelos profesionales. En EE.UU., la FAA (Federal Aviation Administration) requiere licencia de Part 107. Cada jurisdicción tiene límites de altitud, zonas restringidas (NOTAM), requisitos de seguros y registros.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: 'paragraph',
|
|
68
|
+
html: 'Nuestras herramientas de planificación te ayudan a verificar autonomía, ángulos de visión para mapeo, y tiempos de vuelo. Cuando combinas esto con datos de zonas restringidas (que puedes verificar en LUPRA en España o B4UFLY en EE.UU.), puedes planificar misiones que sean técnicamente óptimas Y legales. No volar bajo regulación es costoso (multas de 1000€+ en Europa), por lo que la planificación rigurosa es obligatoria.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'title',
|
|
72
|
+
text: 'Aplicaciones Comerciales: Mapeo Fotogramétrico e Inspección',
|
|
73
|
+
level: 2,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html: 'Los drones han revolucionado la inspección industrial y la topografía. Un inspector de tejados puede usar un dron para identificar daños sin arriesgar su vida. Un ingeniero agrícola usa drones para mapear estrés hídrico en cultivos mediante cámaras térmicas. Una empresa de construcción usa fotogrametría de drones para documentar estados de progreso de obra en 3D.',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: 'paragraph',
|
|
81
|
+
html: 'Cada aplicación requiere diferente autonomía, carga útil y rangos de operación. Una misión de fotogrametría a 100 metros sobre un terreno de 10 hectáreas puede requerir 20+ minutos de vuelo autónomo. Nuestras calculadoras de autonomía te permiten modelar: peso de la carga (cámara, sensor), número de baterías, ciclos de vuelo por día. De ahí, calculas ROI: si necesitas 5 baterías de 4500 mAh a 50€ cada una, tu inversión inicial en baterías es 250€. ¿La misión la justifica? Nuestras herramientas te ayudan a hacer ese cálculo.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'title',
|
|
85
|
+
text: 'Comunidad Radioaficionada: Bandas HF, VHF, UHF y Satélites',
|
|
86
|
+
level: 2,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'paragraph',
|
|
90
|
+
html: 'Los radioaficionados (HAM radio) son una comunidad global de 2+ millones operadores que se comunican sin internet. Usan bandas de frecuencia asignadas por organismos internacionales (IARU - International Amateur Radio Union). VHF (144-146 MHz en el band de 2 metros) es la banda más accesible para comenzar, con alcances típicos de 20-100 km depende de la antena.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
type: 'paragraph',
|
|
94
|
+
html: 'Entender cómo calcular antenas para tu banda es esencial. Un amateur que quiere operar en 2 metros (144-146 MHz) necesita una antena de media onda de aproximadamente 1 metro. Nuestro generador calcula esto: simplemente introduces la frecuencia, especifica si quieres 1/4, 1/2 o full wavelength, y obtienes la dimensión exacta. Construye tu antena, sintoniza, y te conectas con el mundo usando solo una radio y una antena casera. Es tecnología accesible y humilde que sobrevive guerras, desastres y apagones.',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'title',
|
|
98
|
+
text: 'El futuro de la movilidad aérea personal 2026',
|
|
99
|
+
level: 2,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'paragraph',
|
|
103
|
+
html: 'En 2026, la integración de drones en el espacio aéreo compartido es una realidad reglamentada. La capacidad de los aficionados para operar bajo estándares profesionales de mantenimiento y planificación técnica es clave para la convivencia. Estas herramientas son parte del compromiso con la excelencia y la seguridad que todo piloto y radioaficionado debe mantener.',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { CategoryLocaleContent } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const content: CategoryLocaleContent = {
|
|
4
|
+
slug: 'drones',
|
|
5
|
+
title: 'Outils et Calculateurs pour Drones et Radioamateurs',
|
|
6
|
+
description: 'Optimisez vos vols et vos communications avec des outils en ligne gratuits. Calculateurs de temps de vol, autonomie de batterie, convertisseurs de coordonnées GPS et longueurs d\'antenne pour la radiofréquence.',
|
|
7
|
+
seo: [
|
|
8
|
+
{
|
|
9
|
+
type: 'title',
|
|
10
|
+
text: 'Ingénierie RF et Vol de Précision : Outils pour Pilotes et Radio-opérateurs',
|
|
11
|
+
level: 2,
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
type: 'paragraph',
|
|
15
|
+
html: 'La radioamateur et le vol de drones en 2026 sont des domaines où le savoir-faire rencontre l\'ingénierie des radiofréquences (RF). Dans cette section, nous proposons une suite d\'<strong>outils en ligne gratuits</strong> conçus pour les passionnés de FPV, les pilotes commerciaux d\'UAS (RPAS) et les opérateurs de bandes radio. Comprendre les limites de votre équipement et les lois de propagation des ondes fait la différence entre une mission réussie et une défaillance technique coûteuse.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
type: 'paragraph',
|
|
19
|
+
html: 'De la planification de l\'autonomie de vol à la construction d\'antennes personnalisées et à la géo-navigation précise, nos utilitaires vous apportent la confiance des données pour propulser vos projets dans les airs ou sur les ondes.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: 'title',
|
|
23
|
+
text: 'Planification de Vol : Temps de Vol et Autonomie de Batterie (mAh / Amps)',
|
|
24
|
+
level: 2,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: 'paragraph',
|
|
28
|
+
html: 'Connaître la fenêtre opérationnelle réelle de votre drone est vital pour la sécurité. Notre <strong>calculateur de temps de vol</strong> estime l\'autonomie totale en fonction des milliampères-heures (mAh) de la batterie et de la consommation moyenne des moteurs. Ne laissez pas la télémétrie vous surprendre avec une tension critique loin de votre point de départ.',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: 'title',
|
|
32
|
+
text: 'Ingénierie d\'Antenne : Longueur d\'Onde et Fréquence Radio',
|
|
33
|
+
level: 2,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: 'paragraph',
|
|
37
|
+
html: 'L\'efficacité de la transmission dépend de la résonance. Le <strong>calculateur d\'antenne</strong> détermine la longueur physique exacte requise pour les dipôles et les fouets 1/2 et 1/4 d\'onde selon la fréquence de fonctionnement souhaitée (VHF, UHF, bandes ISM). Maximisez la portée et réduisez le TOS (Taux d\'Ondes Stationnaires) de vos systèmes de communication.',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'title',
|
|
41
|
+
text: 'Navigation de Précision : Convertisseur de Coordonnées GPS',
|
|
42
|
+
level: 2,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'paragraph',
|
|
46
|
+
html: 'Indispensable pour les missions de recherche, de cartographie ou de radiolocalisation. Le <strong>convertisseur de coordonnées</strong> traduit les formats Décimaux en DMS (Degrés, Minutes, Secondes) de manière bidirectionnelle, offrant une prévisualisation sur carte pour confirmer l\'exactitude de votre point d\'intérêt avant le décollage.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
items: [
|
|
51
|
+
'<strong>Sécurité UAS :</strong> Évitez les atterrissages d\'urgence causés par un épuisement imprévu des cycles de batterie.',
|
|
52
|
+
'<strong>Optimisation RF :</strong> Construisez vos propres antennes haute performance avec des mesures physiques précises basées sur la vitesse de la lumière dans le conducteur.',
|
|
53
|
+
'<strong>Missions Géo-référencées :</strong> Travaillez avec différents standards de cartes et de systèmes de coordonnées internationaux en toute fluidité.',
|
|
54
|
+
'<strong>Confidentialité Aérienne :</strong> Vos plans de vol et coordonnées sont traités localement ; nous ne téléchargeons pas de données sensibles sur des serveurs tiers.',
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'title',
|
|
59
|
+
text: 'Réglementation Aéronautique et Certification des Opérateurs',
|
|
60
|
+
level: 2,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'paragraph',
|
|
64
|
+
html: 'Piloter un drone aujourd\'hui nécessite une compréhension de la réglementation. En France, la DGAC (Direction Générale de l\'Aviation Civile) encadre les vols professionnels et de loisir. En Europe, l\'EASA (Agence Européenne de la Sécurité Aérienne) définit les standards de certification. Chaque juridiction a des limites d\'altitude, des zones restreintes (NOTAM), des exigences d\'assurance et des règles d\'enregistrement.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: 'paragraph',
|
|
68
|
+
html: 'Nos outils de planification vous aident à vérifier l\'autonomie, les angles de vue pour la cartographie et les temps de vol. En combinant cela avec les données de zones restreintes (que vous pouvez vérifier sur Géoportail en France), vous pouvez planifier des missions techniquement optimales ET légales. Voler sans respecter la réglementation est coûteux (amendes de plus de 1000 € en Europe), une planification rigoureuse est donc obligatoire.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'title',
|
|
72
|
+
text: 'Applications Commerciales : Cartographie Photogrammétrique et Inspection',
|
|
73
|
+
level: 2,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
html: 'Les drones ont révolutionné l\'inspection industrielle et la topographie. Un inspecteur de toiture peut utiliser un drone pour identifier des dommages sans risquer sa vie. Un ingénieur agronome utilise des drones pour cartographier le stress hydrique des cultures via des caméras thermiques. Une entreprise de construction utilise la photogrammétrie par drone pour documenter l\'état d\'avancement des travaux en 3D.',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: 'paragraph',
|
|
81
|
+
html: 'Chaque application nécessite une autonomie, une charge utile et des plages de fonctionnement différentes. Une mission de photogrammétrie à 100 mètres sur un terrain de 10 hectares peut nécessiter plus de 20 minutes de vol autonome. Nos calculateurs d\'autonomie vous permettent de modéliser : le poids de la charge (caméra, capteur), le nombre de batteries et les cycles de vol par jour. De là, vous calculez le ROI : si vous avez besoin de 5 batteries de 4500 mAh à 50 € chacune, votre investissement initial en batteries est de 250 €. La mission le justifie-t-elle ? Nos outils vous aident à faire ce calcul.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'title',
|
|
85
|
+
text: 'Communauté Radioamateur : Bandes HF, VHF, UHF et Satellites',
|
|
86
|
+
level: 2,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'paragraph',
|
|
90
|
+
html: 'La radioamateur (HAM radio) est une communauté mondiale de plus de 2 millions d\'opérateurs qui communiquent sans Internet. Ils utilisent des bandes de fréquences attribuées par des organismes internationaux (IARU - International Amateur Radio Union). La VHF (144-146 MHz dans la bande des 2 mètres) est la bande la plus accessible pour débuter, avec des portées typiques de 20 à 100 km selon l\'antenne.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
type: 'paragraph',
|
|
94
|
+
html: 'Comprendre comment calculer les antennes pour votre bande est essentiel. Un amateur souhaitant opérer sur 2 mètres (144-146 MHz) a besoin d\'une antenne demi-onde d\'environ 1 mètre. Notre générateur calcule cela : il vous suffit de saisir la fréquence, de préciser si vous souhaitez un quart d\'onde, une demi-onde ou une onde complète, et vous obtenez la dimension exacte. Construisez votre antenne, accordez-la et connectez-vous avec le monde en utilisant simplement une radio et une antenne artisanale. C\'est une technologie accessible et résiliente qui survit aux conflits, aux catastrophes et aux pannes de courant.',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'title',
|
|
98
|
+
text: 'L\'avenir de la mobilité aérienne personnelle en 2026',
|
|
99
|
+
level: 2,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'paragraph',
|
|
103
|
+
html: 'En 2026, l\'intégration des drones dans l\'espace aérien partagé est une réalité réglementée. La capacité des amateurs à opérer selon des standards professionnels de maintenance et de planification technique est la clé de la coexistence. Ces outils font partie de l\'engagement envers l\'excellence et la sécurité que chaque pilote et radioamateur doit maintenir.',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
};
|
|
107
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DronesCategoryEntry } from '../types';
|
|
2
|
+
import { droneFlightTime } from '../tool/drone-flight-time/index';
|
|
3
|
+
import { antennaLengthCalculator } from '../tool/antenna-length-calculator/index';
|
|
4
|
+
import { gpsCoordinatesConverter } from '../tool/gps-coordinates-converter/index';
|
|
5
|
+
|
|
6
|
+
export const dronesCategory: DronesCategoryEntry = {
|
|
7
|
+
icon: 'mdi:drone',
|
|
8
|
+
tools: [droneFlightTime, antennaLengthCalculator, gpsCoordinatesConverter],
|
|
9
|
+
i18n: {
|
|
10
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
11
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
12
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
import {
|
|
3
|
+
SEOArticle,
|
|
4
|
+
SEOTitle,
|
|
5
|
+
SEOList,
|
|
6
|
+
SEOTable,
|
|
7
|
+
SEOTip,
|
|
8
|
+
SEOCard,
|
|
9
|
+
SEOStats,
|
|
10
|
+
SEOGlossary,
|
|
11
|
+
SEOCode,
|
|
12
|
+
SEOComparative,
|
|
13
|
+
SEODiagnostic,
|
|
14
|
+
SEOProsCons,
|
|
15
|
+
SEOSummary,
|
|
16
|
+
SEOGrid,
|
|
17
|
+
SEOMessageTemplate,
|
|
18
|
+
} from '@jjlmoya/utils-shared';
|
|
19
|
+
import { dronesCategory } from './index';
|
|
20
|
+
import type { KnownLocale } from '../types';
|
|
21
|
+
|
|
22
|
+
interface Props {
|
|
23
|
+
locale?: KnownLocale;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const { locale = 'es' } = Astro.props;
|
|
27
|
+
const content = await dronesCategory.i18n[locale]?.();
|
|
28
|
+
if (!content) return null;
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
<SEOArticle>
|
|
32
|
+
{content.seo.map((section: any) => {
|
|
33
|
+
if (section.type === 'title') {
|
|
34
|
+
return <SEOTitle title={section.text} level={section.level ?? 2} />;
|
|
35
|
+
}
|
|
36
|
+
if (section.type === 'paragraph') {
|
|
37
|
+
return <p set:html={section.html} />;
|
|
38
|
+
}
|
|
39
|
+
if (section.type === 'list') {
|
|
40
|
+
return <SEOList items={section.items} icon={section.icon} />;
|
|
41
|
+
}
|
|
42
|
+
if (section.type === 'table') {
|
|
43
|
+
return (
|
|
44
|
+
<SEOTable headers={section.headers}>
|
|
45
|
+
{section.rows.map((row: any) => (
|
|
46
|
+
<tr>
|
|
47
|
+
{row.map((cell: string) => <td set:html={cell} />)}
|
|
48
|
+
</tr>
|
|
49
|
+
))}
|
|
50
|
+
</SEOTable>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
if (section.type === 'tip') {
|
|
54
|
+
return <SEOTip title={section.title}><div set:html={section.html} /></SEOTip>;
|
|
55
|
+
}
|
|
56
|
+
if (section.type === 'card') {
|
|
57
|
+
return <SEOCard icon={section.icon} title={section.title}><div set:html={section.html} /></SEOCard>;
|
|
58
|
+
}
|
|
59
|
+
if (section.type === 'stats') {
|
|
60
|
+
return <SEOStats stats={section.items} columns={section.columns} />;
|
|
61
|
+
}
|
|
62
|
+
if (section.type === 'glossary') {
|
|
63
|
+
return <SEOGlossary items={section.items} />;
|
|
64
|
+
}
|
|
65
|
+
if (section.type === 'code') {
|
|
66
|
+
return <SEOCode code={section.code} ariaLabel={section.ariaLabel} />;
|
|
67
|
+
}
|
|
68
|
+
if (section.type === 'comparative') {
|
|
69
|
+
return <SEOComparative items={section.items} columns={section.columns} />;
|
|
70
|
+
}
|
|
71
|
+
if (section.type === 'diagnostic') {
|
|
72
|
+
return (
|
|
73
|
+
<SEODiagnostic title={section.title} icon={section.icon} type={section.variant} badge={section.badge}>
|
|
74
|
+
<div set:html={section.html} />
|
|
75
|
+
</SEODiagnostic>
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
if (section.type === 'proscons') {
|
|
79
|
+
return <SEOProsCons title={section.title} items={section.items} proTitle={section.proTitle} conTitle={section.conTitle} />;
|
|
80
|
+
}
|
|
81
|
+
if (section.type === 'summary') {
|
|
82
|
+
return <SEOSummary title={section.title} items={section.items} />;
|
|
83
|
+
}
|
|
84
|
+
if (section.type === 'grid') {
|
|
85
|
+
return <SEOGrid columns={section.columns} />;
|
|
86
|
+
}
|
|
87
|
+
if (section.type === 'message') {
|
|
88
|
+
return <SEOMessageTemplate title={section.title} ariaLabel={section.ariaLabel}><div set:html={section.html} /></SEOMessageTemplate>;
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
})}
|
|
92
|
+
</SEOArticle>
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
interface NavItem {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
href: string;
|
|
6
|
+
isActive?: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
categoryTitle: string;
|
|
11
|
+
tools?: NavItem[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const { categoryTitle, tools = [] } = Astro.props;
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
<nav class="preview-nav-sidebar">
|
|
18
|
+
<div class="sidebar-header">
|
|
19
|
+
<h3>{categoryTitle}</h3>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<ul class="tools-list">
|
|
23
|
+
{tools.map((tool) => (
|
|
24
|
+
<li>
|
|
25
|
+
<a
|
|
26
|
+
href={tool.href}
|
|
27
|
+
class:list={['tool-link', { active: tool.isActive }]}
|
|
28
|
+
>
|
|
29
|
+
<span class="tool-title">{tool.title}</span>
|
|
30
|
+
</a>
|
|
31
|
+
</li>
|
|
32
|
+
))}
|
|
33
|
+
</ul>
|
|
34
|
+
</nav>
|
|
35
|
+
|
|
36
|
+
<style>
|
|
37
|
+
.preview-nav-sidebar {
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
height: 100%;
|
|
41
|
+
background: var(--bg-surface, #0f172a);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.sidebar-header {
|
|
45
|
+
padding: 2rem 1.5rem 1.5rem;
|
|
46
|
+
border-bottom: 1px solid var(--border-color, #1e293b);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.sidebar-header h3 {
|
|
50
|
+
margin: 0;
|
|
51
|
+
font-size: 0.75rem;
|
|
52
|
+
font-weight: 900;
|
|
53
|
+
text-transform: uppercase;
|
|
54
|
+
letter-spacing: 0.1em;
|
|
55
|
+
color: var(--text-muted, #94a3b8);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.tools-list {
|
|
59
|
+
list-style: none;
|
|
60
|
+
margin: 0;
|
|
61
|
+
padding: 0.5rem 0;
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: column;
|
|
64
|
+
gap: 0.25rem;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.tools-list li {
|
|
68
|
+
margin: 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.tool-link {
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
padding: 0.75rem 1.5rem;
|
|
75
|
+
color: var(--text-muted, #94a3b8);
|
|
76
|
+
text-decoration: none;
|
|
77
|
+
font-size: 0.9375rem;
|
|
78
|
+
font-weight: 500;
|
|
79
|
+
transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
|
|
80
|
+
border-left: 3px solid transparent;
|
|
81
|
+
position: relative;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.tool-link:hover {
|
|
85
|
+
color: var(--text-base, #f1f5f9);
|
|
86
|
+
background: rgba(255, 255, 255, 0.08);
|
|
87
|
+
padding-left: 1.75rem;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.tool-link.active {
|
|
91
|
+
color: var(--accent, #f43f5e);
|
|
92
|
+
background: rgba(244, 63, 94, 0.15);
|
|
93
|
+
border-left-color: var(--accent, #f43f5e);
|
|
94
|
+
font-weight: 600;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.tool-link.active::before {
|
|
98
|
+
content: '';
|
|
99
|
+
position: absolute;
|
|
100
|
+
left: 0;
|
|
101
|
+
top: 50%;
|
|
102
|
+
transform: translateY(-50%);
|
|
103
|
+
width: 3px;
|
|
104
|
+
height: 24px;
|
|
105
|
+
background: var(--accent, #f43f5e);
|
|
106
|
+
border-radius: 0 2px 2px 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.tool-title {
|
|
110
|
+
display: block;
|
|
111
|
+
overflow: hidden;
|
|
112
|
+
text-overflow: ellipsis;
|
|
113
|
+
white-space: nowrap;
|
|
114
|
+
}
|
|
115
|
+
</style>
|
|
116
|
+
|