@jjlmoya/utils-nautical 1.17.0 → 1.19.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 +5 -3
- package/src/category/index.ts +2 -1
- package/src/data.ts +0 -6
- package/src/entries.ts +5 -1
- package/src/index.ts +9 -7
- package/src/tests/diacritics_density.test.ts +1 -1
- package/src/tests/inverted_punctuation.test.ts +1 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/pagespeed_best_practices.test.ts +198 -0
- package/src/tests/script_density.test.ts +1 -1
- package/src/tests/title_quality.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/anchorScope/anchorScope.css +507 -0
- package/src/tool/anchorScope/bibliography.astro +6 -0
- package/src/tool/anchorScope/bibliography.ts +14 -0
- package/src/tool/anchorScope/component.astro +219 -0
- package/src/tool/anchorScope/constants.ts +51 -0
- package/src/tool/anchorScope/controller.ts +251 -0
- package/src/tool/anchorScope/dom-views.ts +106 -0
- package/src/tool/anchorScope/entry.ts +31 -0
- package/src/tool/anchorScope/evaluator.ts +61 -0
- package/src/tool/anchorScope/i18n/de.ts +201 -0
- package/src/tool/anchorScope/i18n/en.ts +223 -0
- package/src/tool/anchorScope/i18n/es.ts +223 -0
- package/src/tool/anchorScope/i18n/fr.ts +201 -0
- package/src/tool/anchorScope/i18n/id.ts +201 -0
- package/src/tool/anchorScope/i18n/it.ts +201 -0
- package/src/tool/anchorScope/i18n/ja.ts +201 -0
- package/src/tool/anchorScope/i18n/ko.ts +201 -0
- package/src/tool/anchorScope/i18n/nl.ts +201 -0
- package/src/tool/anchorScope/i18n/pl.ts +201 -0
- package/src/tool/anchorScope/i18n/pt.ts +201 -0
- package/src/tool/anchorScope/i18n/ru.ts +201 -0
- package/src/tool/anchorScope/i18n/sv.ts +201 -0
- package/src/tool/anchorScope/i18n/tr.ts +201 -0
- package/src/tool/anchorScope/i18n/zh.ts +201 -0
- package/src/tool/anchorScope/index.ts +10 -0
- package/src/tool/anchorScope/logic.test.ts +100 -0
- package/src/tool/anchorScope/logic.ts +84 -0
- package/src/tool/anchorScope/presets.ts +12 -0
- package/src/tool/anchorScope/seo.astro +14 -0
- package/src/tool/anchorScope/storage.ts +25 -0
- package/src/tool/anchorScope/types.ts +33 -0
- package/src/tool/anchorScope/ui.ts +63 -0
- package/src/tool/endurance/component.astro +10 -10
- package/src/tool/endurance/index.ts +2 -1
- package/src/tool/nauticalConverter/component.astro +15 -15
- package/src/tool/sailArea/component.astro +13 -13
- package/src/tool/tideCalculator/component.astro +5 -5
- package/src/tool/underKeel/component.astro +7 -7
- package/src/tools.ts +3 -0
- package/src/types.ts +3 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { AnchorCalculationResult, AnchorInputs } from './types';
|
|
2
|
+
|
|
3
|
+
export interface EvaluationReport {
|
|
4
|
+
statusTitleKey: string;
|
|
5
|
+
statusDescKey: string;
|
|
6
|
+
holdingAdviceKey: string;
|
|
7
|
+
catenaryEffectKey: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function evaluateAnchorSecurity(
|
|
11
|
+
inputs: AnchorInputs,
|
|
12
|
+
result: AnchorCalculationResult,
|
|
13
|
+
): EvaluationReport {
|
|
14
|
+
return {
|
|
15
|
+
statusTitleKey: getStatusTitleKey(result.safetyLevel),
|
|
16
|
+
statusDescKey: getStatusDescKey(result.safetyLevel),
|
|
17
|
+
holdingAdviceKey: getHoldingAdviceKey(inputs.seabedType),
|
|
18
|
+
catenaryEffectKey: getCatenaryEffectKey(inputs.rodeType),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getStatusTitleKey(level: AnchorCalculationResult['safetyLevel']): string {
|
|
23
|
+
if (level === 'optimal') {
|
|
24
|
+
return 'statusOptimalTitle';
|
|
25
|
+
}
|
|
26
|
+
if (level === 'caution') {
|
|
27
|
+
return 'statusCautionTitle';
|
|
28
|
+
}
|
|
29
|
+
return 'statusDangerTitle';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function getStatusDescKey(level: AnchorCalculationResult['safetyLevel']): string {
|
|
33
|
+
if (level === 'optimal') {
|
|
34
|
+
return 'statusOptimalDesc';
|
|
35
|
+
}
|
|
36
|
+
if (level === 'caution') {
|
|
37
|
+
return 'statusCautionDesc';
|
|
38
|
+
}
|
|
39
|
+
return 'statusDangerDesc';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function getHoldingAdviceKey(seabed: AnchorInputs['seabedType']): string {
|
|
43
|
+
const map: Record<AnchorInputs['seabedType'], string> = {
|
|
44
|
+
sand: 'adviceSand',
|
|
45
|
+
mud: 'adviceMud',
|
|
46
|
+
clay: 'adviceClay',
|
|
47
|
+
gravel: 'adviceGravel',
|
|
48
|
+
rock: 'adviceRock',
|
|
49
|
+
weed: 'adviceWeed',
|
|
50
|
+
};
|
|
51
|
+
return map[seabed] ?? 'adviceSand';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function getCatenaryEffectKey(rode: AnchorInputs['rodeType']): string {
|
|
55
|
+
const map: Record<AnchorInputs['rodeType'], string> = {
|
|
56
|
+
'all-chain': 'catenaryAllChain',
|
|
57
|
+
'rope-chain': 'catenaryRopeChain',
|
|
58
|
+
'all-rope': 'catenaryAllRope',
|
|
59
|
+
};
|
|
60
|
+
return map[rode] ?? 'catenaryAllChain';
|
|
61
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { AnchorScopeLocaleContent } from '../entry';
|
|
4
|
+
import type { AnchorScopeUI } from '../ui';
|
|
5
|
+
|
|
6
|
+
const slug = 'anker-kettenlaenge-rechner';
|
|
7
|
+
const title = 'Anker Kettenlänge und Schwoikreis Rechner';
|
|
8
|
+
const description =
|
|
9
|
+
'Berechnen Sie die optimale Ankerkettenlänge, das Kettenverhältnis und den Schwoikreis für sicheres Ankern basierend auf Wassertiefe, Freibord und Seegrund.';
|
|
10
|
+
|
|
11
|
+
const ui: AnchorScopeUI = {
|
|
12
|
+
parametersTitle: 'Parameter',
|
|
13
|
+
waterDepthLabel: 'Kartentiefe',
|
|
14
|
+
bowHeightLabel: 'Bug-Freibord',
|
|
15
|
+
tideRangeLabel: 'Tidenhub',
|
|
16
|
+
boatLengthLabel: 'Bootslänge (LOA)',
|
|
17
|
+
rodeTypeLabel: 'Ankergeschirr',
|
|
18
|
+
windConditionLabel: 'Windstärke',
|
|
19
|
+
seabedTypeLabel: 'Ankergrund',
|
|
20
|
+
presetProtected: 'Ruhige Bucht',
|
|
21
|
+
presetOpen: 'Offene Küste',
|
|
22
|
+
presetStorm: 'Sturmwarnung',
|
|
23
|
+
seabedTag: 'Haltekraft Ankergrund',
|
|
24
|
+
catenaryTag: 'Ketten-Kettenlinie',
|
|
25
|
+
unitM: 'm',
|
|
26
|
+
unitFt: 'ft',
|
|
27
|
+
unitMeters: 'Metrisch (m)',
|
|
28
|
+
unitFeet: 'Imperial (ft)',
|
|
29
|
+
allChainOption: 'Nur Kette (Schwere Kettenlinie)',
|
|
30
|
+
ropeChainOption: 'Leine mit Kettenvorlauf',
|
|
31
|
+
allRopeOption: 'Reine Ankerleine',
|
|
32
|
+
calmWindOption: 'Ruhig / Leichte Brise (< 15 kn)',
|
|
33
|
+
moderateWindOption: 'Mäßige Brise (15 - 25 kn)',
|
|
34
|
+
strongWindOption: 'Starker Wind (25 - 35 kn)',
|
|
35
|
+
stormWindOption: 'Sturmbruch (> 35 kn)',
|
|
36
|
+
sandOption: 'Sand (Optimaler Halt)',
|
|
37
|
+
mudOption: 'Schlick / Schlamm (Guter Halt)',
|
|
38
|
+
clayOption: 'Fester Ton (Sehr Gut)',
|
|
39
|
+
gravelOption: 'Kies / Schotter (Mäßig)',
|
|
40
|
+
rockOption: 'Felsgrund (Verhakungsrisiko)',
|
|
41
|
+
weedOption: 'Seegras / Algen (Geringer Halt)',
|
|
42
|
+
resultsTitle: 'Ankeranalyse und Dimensionen',
|
|
43
|
+
scopeRatioLabel: 'Effektives Verhältnis (Scope)',
|
|
44
|
+
totalDepthLabel: 'Gesamte Vertikalhöhe',
|
|
45
|
+
recommendedRodeLabel: 'Empfohlene Kettenlänge',
|
|
46
|
+
horizontalDistanceLabel: 'Horizontaler Abstand',
|
|
47
|
+
swingRadiusLabel: 'Geschätzter Schwoikreis',
|
|
48
|
+
minSafeRodeLabel: 'Minimum bei Flaute',
|
|
49
|
+
heavyWeatherRodeLabel: 'Sturm-Kettenlänge',
|
|
50
|
+
statusOptimalTitle: 'Sicherer Halt und Horizontalkraft',
|
|
51
|
+
statusOptimalDesc: 'Die berechnete Länge sichert eine dämpfende Kettenlinie und flachen Zug am Ankerschaft.',
|
|
52
|
+
statusCautionTitle: 'Akzeptabel: Wetterlage beobachten',
|
|
53
|
+
statusCautionDesc: 'Günstig für mäßigen Wind. Stecken Sie mehr Kette bei auffrischendem Seegang.',
|
|
54
|
+
statusDangerTitle: 'Zu wenig Kette: Slippgefahr',
|
|
55
|
+
statusDangerDesc: 'Kritisches Verhältnis. Der Ankerschaft wird nach oben gehebelt und kann ausbrechen.',
|
|
56
|
+
adviceSand: 'Sand bietet perfekten Halt für moderne Flügelanker. Anker mit Rückwärtsschub eingraben.',
|
|
57
|
+
adviceMud: 'Weicher Schlamm erfordert große Flügelfläche und mehr Kette für festen Grund.',
|
|
58
|
+
adviceClay: 'Ton hält extrem stark, benötigt jedoch scharfe Ankerspitzen zum Eindringen.',
|
|
59
|
+
adviceGravel: 'Kies gibt unter Last nach. Erhöhen Sie die Kettenlänge um mindestens 25 Prozent.',
|
|
60
|
+
adviceRock: 'Hohes Risiko des Festklemmens. Unbedingt Trippleine mit Boje verwenden.',
|
|
61
|
+
adviceWeed: 'Dichtes Kraut verhindert das Eingraben. Halt mit Rückwärtsschub genau prüfen.',
|
|
62
|
+
catenaryAllChain: 'Das Eigengewicht der Kette bildet einen Bogen, der Ruckdämpfung erzeugt.',
|
|
63
|
+
catenaryRopeChain: 'Eine Mischleine erfordert mindestens ein Verhältnis von 7 zu 1.',
|
|
64
|
+
catenaryAllRope: 'Leinen benötigen ein Verhältnis von 8 zu 1 oder mehr gegen Ausbrechen.',
|
|
65
|
+
resetButton: 'Werte Zurücksetzen',
|
|
66
|
+
visualProfileTitle: 'Kettenlinien-Profil',
|
|
67
|
+
waterlineLabel: 'Wasserlinie',
|
|
68
|
+
seabedLabel: 'Seegrund',
|
|
69
|
+
anchorLabel: 'Anker',
|
|
70
|
+
catenaryCurveLabel: 'Kettenlinie',
|
|
71
|
+
swingCircleLabel: 'Schwoikreis',
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const faq: AnchorScopeLocaleContent['faq'] = [
|
|
75
|
+
{
|
|
76
|
+
question: 'Was bedeutet das Kettenverhältnis Scope beim Ankern?',
|
|
77
|
+
answer: 'Scope bezeichnet das Verhältnis zwischen der ausgesteckten Kettenlänge und der vertikalen Gesamthöhe vom Grund bis zur Bugrolle. Es stellt sicher, dass der Zug flach am Anker anliegt.',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
question: 'Warum müssen Freibord und Tidenhub addiert werden?',
|
|
81
|
+
answer: 'Das Echolot misst nur die Tiefe ab Kiel. Bei hohem Bug und auflaufender Flut steigt die vertikale Höhe drastisch an, was bei Vernachlässigung zum Ausbrechen des Ankers führt.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
question: 'Welches Verhältnis gilt für Kette im Vergleich zu Leine?',
|
|
85
|
+
answer: 'Schwere Kette ermöglicht Verhältnisse von 4:1 bis 5:1 dank Durchhang. Leichte Leine ohne Eigengewicht erfordert 7:1 bis 10:1.',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
question: 'Wie wird der Schwoikreis eines Schiffs berechnet?',
|
|
89
|
+
answer: 'Der Schwoikreis ergibt sich aus der horizontalen Ankerdistanz plus der Schiffserklänge und einer Sicherheitsreserve von 3 bis 5 Metern.',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
question: 'Wie beeinflusst der Seegrund die Haltekraft?',
|
|
93
|
+
answer: 'Sand und fester Ton bieten den besten Halt. Kies und Kraut erfordern deutlich mehr Kettenlänge oder alternative Ankerplätze.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
question: 'Welchen Zweck hat ein Ketten-Snubber oder Ruckdämpfer?',
|
|
97
|
+
answer: 'Ein elastischer Snubber entlastet die elektrische Ankerwinde von Schwell und Schlägen und verhindert Störgeräusche im Vorschiff.',
|
|
98
|
+
},
|
|
99
|
+
];
|
|
100
|
+
|
|
101
|
+
const howTo: AnchorScopeLocaleContent['howTo'] = [
|
|
102
|
+
{
|
|
103
|
+
name: 'Wassertiefe und Bugfreibord ermitteln',
|
|
104
|
+
text: 'Messen Sie die Kartentiefe am Ankerplatz und addieren Sie die Höhe der Bugrolle über Wasser.',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'Tidenhub berücksichtigen',
|
|
108
|
+
text: 'Prüfen Sie den Gezeitenkalender für die maximale Wasserstandserhöhung während der Liegezeit.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'Geschirr und Windstärke wählen',
|
|
112
|
+
text: 'Wählen Sie Ihr Ankergeschirr und die erwartete Windstärke für den Sicherheitsfaktor.',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'Kette stecken und einfahren',
|
|
116
|
+
text: 'Stecken Sie die berechnete Länge und graben Sie das Geschirr mit Rückwärtsgas sauber ein.',
|
|
117
|
+
},
|
|
118
|
+
];
|
|
119
|
+
|
|
120
|
+
const seo: AnchorScopeLocaleContent['seo'] = [
|
|
121
|
+
{
|
|
122
|
+
type: 'title',
|
|
123
|
+
text: 'Kettenlänge und Schwoikreis für sicheres Ankern',
|
|
124
|
+
level: 2,
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'paragraph',
|
|
128
|
+
html: 'Sicheres Ankern ist eine Kernkompetenz der Seemannschaft. Eine zu kurze Ankerkette ist die häufigste Ursache für slippende Anker und Kollisionen in engen Buchten. Mit dem korrekten <strong>Kettenverhältnis</strong> liegt das Schiff auch bei Starkwind stabil.',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: 'Vertikale Gesamthöhe richtig bestimmen',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'list',
|
|
137
|
+
items: [
|
|
138
|
+
'<strong>Wassertiefe am Platz:</strong> Tiefe des Echolots zuzüglich Tiefgang.',
|
|
139
|
+
'<strong>Bug-Freibord:</strong> Vertikaler Abstand von der Wasseroberfläche zur Bugrolle.',
|
|
140
|
+
'<strong>Maximaler Tidenhub:</strong> Zusätzliche Wassertiefe bei Hochwasser.',
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
type: 'title',
|
|
145
|
+
text: 'Empfohlene Anker-Verhältnisse',
|
|
146
|
+
level: 3,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
type: 'table',
|
|
150
|
+
headers: ['Geschirrtyp', 'Ruhiges Wetter (<15 kn)', 'Frische Brise (15-25 kn)', 'Starkwind (>30 kn)'],
|
|
151
|
+
rows: [
|
|
152
|
+
['<strong>Reine Kette</strong>', 'Verhältnis 4:1', 'Verhältnis 5:1', 'Verhältnis 7:1'],
|
|
153
|
+
['<strong>Kette mit Leine</strong>', 'Verhältnis 5:1', 'Verhältnis 7:1', 'Verhältnis 8:1 bis 10:1'],
|
|
154
|
+
['<strong>Reine Leine</strong>', 'Verhältnis 7:1', 'Verhältnis 8:1', 'Verhältnis 10:1 bis 12:1'],
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
type: 'tip',
|
|
159
|
+
title: 'Ankerwinde entlasten',
|
|
160
|
+
html: 'Legen Sie die Last niemals dauerhaft auf die Kettennuss der Winde. Verwenden Sie stets eine elastische Hahnepot oder Kettengabel auf der Bugklampe.',
|
|
161
|
+
},
|
|
162
|
+
];
|
|
163
|
+
|
|
164
|
+
const schemas: AnchorScopeLocaleContent['schemas'] = [
|
|
165
|
+
{
|
|
166
|
+
'@context': 'https://schema.org',
|
|
167
|
+
'@type': 'SoftwareApplication',
|
|
168
|
+
name: title,
|
|
169
|
+
description,
|
|
170
|
+
applicationCategory: 'UtilityApplication',
|
|
171
|
+
operatingSystem: 'Web',
|
|
172
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
173
|
+
} as WithContext<SoftwareApplication>,
|
|
174
|
+
{
|
|
175
|
+
'@context': 'https://schema.org',
|
|
176
|
+
'@type': 'FAQPage',
|
|
177
|
+
mainEntity: faq.map((item) => ({
|
|
178
|
+
'@type': 'Question',
|
|
179
|
+
name: item.question,
|
|
180
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
181
|
+
})),
|
|
182
|
+
} as WithContext<FAQPage>,
|
|
183
|
+
{
|
|
184
|
+
'@context': 'https://schema.org',
|
|
185
|
+
'@type': 'HowTo',
|
|
186
|
+
name: `Anleitung: ${title}`,
|
|
187
|
+
step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
|
|
188
|
+
} as WithContext<HowTo>,
|
|
189
|
+
];
|
|
190
|
+
|
|
191
|
+
export const content: AnchorScopeLocaleContent = {
|
|
192
|
+
slug,
|
|
193
|
+
title,
|
|
194
|
+
description,
|
|
195
|
+
ui,
|
|
196
|
+
seo,
|
|
197
|
+
faq,
|
|
198
|
+
bibliography,
|
|
199
|
+
howTo,
|
|
200
|
+
schemas,
|
|
201
|
+
};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { AnchorScopeLocaleContent } from '../entry';
|
|
4
|
+
import type { AnchorScopeUI } from '../ui';
|
|
5
|
+
|
|
6
|
+
const slug = 'anchor-scope-calculator';
|
|
7
|
+
const title = 'Anchor Scope and Rode Calculator';
|
|
8
|
+
const description =
|
|
9
|
+
'Calculate the optimal anchor chain and rope length, scope ratio, and swing radius for safe anchoring based on water depth, bow height, tidal rise, and seabed conditions.';
|
|
10
|
+
|
|
11
|
+
const ui: AnchorScopeUI = {
|
|
12
|
+
parametersTitle: 'Parameters',
|
|
13
|
+
waterDepthLabel: 'Chart Depth',
|
|
14
|
+
bowHeightLabel: 'Bow Freeboard',
|
|
15
|
+
tideRangeLabel: 'Tidal Rise',
|
|
16
|
+
boatLengthLabel: 'Boat Length (LOA)',
|
|
17
|
+
rodeTypeLabel: 'Rode Configuration',
|
|
18
|
+
windConditionLabel: 'Wind & Forecast',
|
|
19
|
+
seabedTypeLabel: 'Seabed Type',
|
|
20
|
+
presetProtected: 'Calm Cove',
|
|
21
|
+
presetOpen: 'Open Coast',
|
|
22
|
+
presetStorm: 'Gale Warning',
|
|
23
|
+
seabedTag: 'Seabed Holding Factor',
|
|
24
|
+
catenaryTag: 'Catenary Dampening',
|
|
25
|
+
unitM: 'm',
|
|
26
|
+
unitFt: 'ft',
|
|
27
|
+
unitMeters: 'Metric (m)',
|
|
28
|
+
unitFeet: 'Imperial (ft)',
|
|
29
|
+
allChainOption: 'All Chain (Heavy Catenary)',
|
|
30
|
+
ropeChainOption: 'Rope + Chain (Mixed Rode)',
|
|
31
|
+
allRopeOption: 'All Rope / Nylon Line',
|
|
32
|
+
calmWindOption: 'Calm / Light Breeze (< 15 kts)',
|
|
33
|
+
moderateWindOption: 'Moderate Breeze (15 - 25 kts)',
|
|
34
|
+
strongWindOption: 'Strong Wind / Gale (25 - 35 kts)',
|
|
35
|
+
stormWindOption: 'Storm / Heavy Squalls (> 35 kts)',
|
|
36
|
+
sandOption: 'Sand (Optimal Holding)',
|
|
37
|
+
mudOption: 'Mud / Silt (Good Holding)',
|
|
38
|
+
clayOption: 'Clay / Hard Mud (Very Good)',
|
|
39
|
+
gravelOption: 'Gravel / Shingle (Moderate)',
|
|
40
|
+
rockOption: 'Rock / Coral (Foul Risk)',
|
|
41
|
+
weedOption: 'Weed / Grass (Poor Penetration)',
|
|
42
|
+
resultsTitle: 'Anchoring Analysis & Dimensions',
|
|
43
|
+
scopeRatioLabel: 'Effective Scope Ratio',
|
|
44
|
+
totalDepthLabel: 'Total Vertical Height',
|
|
45
|
+
recommendedRodeLabel: 'Recommended Rode Length',
|
|
46
|
+
horizontalDistanceLabel: 'Horizontal Reach',
|
|
47
|
+
swingRadiusLabel: 'Estimated Swing Radius',
|
|
48
|
+
minSafeRodeLabel: 'Minimum Calm Rode',
|
|
49
|
+
heavyWeatherRodeLabel: 'Heavy Weather Rode',
|
|
50
|
+
statusOptimalTitle: 'Secure Anchor Scope',
|
|
51
|
+
statusOptimalDesc: 'The calculated scope provides adequate catenary dampening and a horizontal angle of pull on the anchor shank.',
|
|
52
|
+
statusCautionTitle: 'Moderate Scope: Monitor Conditions',
|
|
53
|
+
statusCautionDesc: 'Scope is acceptable for calm or moderate conditions, but increase rode if wind gusts or wave chop intensify.',
|
|
54
|
+
statusDangerTitle: 'Insufficient Scope: Risk of Dragging',
|
|
55
|
+
statusDangerDesc: 'Scope ratio is critically low. The anchor shank may experience upward vertical pull, breaking out from the seabed.',
|
|
56
|
+
adviceSand: 'Sand provides excellent holding for modern scoop anchors. Set the anchor firmly in reverse.',
|
|
57
|
+
adviceMud: 'Soft mud requires higher fluke surface area and extended scope to reach firm substrate.',
|
|
58
|
+
adviceClay: 'Hard clay requires an anchor with sharp penetrating tips to ensure reliable bedding.',
|
|
59
|
+
adviceGravel: 'Loose gravel can slip under dynamic gusts. Increase rode length by at least 25 percent.',
|
|
60
|
+
adviceRock: 'Rock risks anchor fouling and snagging. Always rig a trip line when anchoring on stone or coral.',
|
|
61
|
+
adviceWeed: 'Dense sea grass prevents anchor flukes from penetrating. Test holding thoroughly before leaving helm.',
|
|
62
|
+
catenaryAllChain: 'All chain catenary absorbs wave shock through weight and ensures parallel seabed pull.',
|
|
63
|
+
catenaryRopeChain: 'Mixed rode requires at least 7:1 scope to compensate for reduced chain catenary weight.',
|
|
64
|
+
catenaryAllRope: 'Nylon rope provides stretch elasticity but requires generous 8:1 to 10:1 scope to keep pull flat.',
|
|
65
|
+
resetButton: 'Reset Defaults',
|
|
66
|
+
visualProfileTitle: 'Elevation Profile & Catenary Arc',
|
|
67
|
+
waterlineLabel: 'Waterline',
|
|
68
|
+
seabedLabel: 'Seabed',
|
|
69
|
+
anchorLabel: 'Anchor',
|
|
70
|
+
catenaryCurveLabel: 'Catenary Rode Arc',
|
|
71
|
+
swingCircleLabel: 'Swing Radius Circle',
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const faq: AnchorScopeLocaleContent['faq'] = [
|
|
75
|
+
{
|
|
76
|
+
question: 'What is anchor scope and why is it crucial for safety?',
|
|
77
|
+
answer: 'Anchor scope is the ratio between the total deployed length of anchor rode (chain or rope) and the total vertical distance from the seabed to your bow roller. A proper scope ensures the pull on the anchor shank remains horizontal, allowing the flukes to dig into the seabed rather than lifting upward.',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
question: 'Why must bow roller height and tide range be added to water depth?',
|
|
81
|
+
answer: 'Water depth alone does not account for the total vertical drop. If your bow roller is 1.5 metres above the water and the tide will rise by 2 metres overnight, your effective depth increases by 3.5 metres. Calculating scope only with sounding depth results in dangerous under-scoping at high tide.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
question: 'What is the difference in recommended scope between all-chain and rope rode?',
|
|
85
|
+
answer: 'All-chain rode is heavy and forms a sag curve called a catenary, which absorbs wave shocks and keeps the pull nearly horizontal at lower scopes (typically 4:1 to 5:1 in moderate conditions). Rope is buoyant and straightens rapidly under tension, requiring 7:1 to 10:1 scope to maintain a safe horizontal angle.',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
question: 'How do you calculate the swing radius of a boat at anchor?',
|
|
89
|
+
answer: 'The swing radius is calculated as the horizontal distance from the anchor to the bow (using the Pythagorean theorem: sqrt(rode^2 - depth^2)) plus the overall length of the vessel and an additional safety buffer for anchor drag or bridal slack.',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
question: 'How do different seabed types affect holding power?',
|
|
93
|
+
answer: 'Firm sand and clay offer the highest holding coefficients. Soft mud requires deeper fluke penetration, gravel reduces friction, while thick sea grass or weeds can prevent flukes from setting. On poor bottoms, increasing scope by 20 to 50 percent is standard seamanship practice.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
question: 'What is the catenary effect in heavy weather?',
|
|
97
|
+
answer: 'In strong winds, extreme tension straightens the catenary curve, lifting chain off the seabed. When gusts exceed 30 knots, all-chain behaves almost like a rigid bar unless sufficient scope (7:1 or greater) and an elastic nylon snubber are deployed.',
|
|
98
|
+
},
|
|
99
|
+
];
|
|
100
|
+
|
|
101
|
+
const howTo: AnchorScopeLocaleContent['howTo'] = [
|
|
102
|
+
{
|
|
103
|
+
name: 'Measure sounder depth and add bow freeboard',
|
|
104
|
+
text: 'Check your depth sounder for current water depth and add the height of the bow roller above the waterline.',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'Add expected tidal rise to high water',
|
|
108
|
+
text: 'Consult tidal tables to determine the maximum water rise expected during your stay at anchor.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'Select your rode configuration and bottom type',
|
|
112
|
+
text: 'Choose whether you are using all chain, mixed rope-chain, or nylon line, and select the seabed substrate.',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'Deploy recommended rode length and verify swing room',
|
|
116
|
+
text: 'Pay out the calculated rode length, set the anchor under reverse engine power, and verify adequate clearance around your swing radius.',
|
|
117
|
+
},
|
|
118
|
+
];
|
|
119
|
+
|
|
120
|
+
const seo: AnchorScopeLocaleContent['seo'] = [
|
|
121
|
+
{
|
|
122
|
+
type: 'title',
|
|
123
|
+
text: 'Mastering Anchor Scope and Rode Calculation',
|
|
124
|
+
level: 2,
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'paragraph',
|
|
128
|
+
html: 'Anchoring is one of the foundational skills of seamanship. Whether securing a yacht in an idyllic Mediterranean cala or riding out an unexpected gale in an Atlantic anchorage, the safety of your vessel rests entirely on the holding power of your ground tackle. The single most controllable factor governing holding power is <strong>anchor scope</strong>.',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: 'Understanding Vertical Height and Total Scope Ratio',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'paragraph',
|
|
137
|
+
html: 'A common mistake made by recreational mariners is calculating anchor rode solely based on the sounder reading. The true vertical distance, known as <strong>total depth</strong>, comprises three distinct components that must be summed together before applying any scope multiplier:',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
type: 'list',
|
|
141
|
+
items: [
|
|
142
|
+
'<strong>Chart Depth at Anchor:</strong> The actual depth of water beneath the hull at low water or current state of tide.',
|
|
143
|
+
'<strong>Bow Roller Freeboard:</strong> The height from the water surface up to the bow roller where the rode leaves the boat.',
|
|
144
|
+
'<strong>Tidal Rise Range:</strong> The maximum expected rise in water level between current time and high water during the anchoring period.',
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'title',
|
|
149
|
+
text: 'Recommended Scope Ratios by Rode Configuration',
|
|
150
|
+
level: 3,
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
type: 'table',
|
|
154
|
+
headers: ['Rode Configuration', 'Calm Weather', 'Moderate Wind (15-25 kts)', 'Gale Force (30+ kts)'],
|
|
155
|
+
rows: [
|
|
156
|
+
['<strong>All Chain</strong>', '4:1 Scope', '5:1 Scope', '7:1 to 8:1 Scope'],
|
|
157
|
+
['<strong>Rope plus Chain</strong>', '5:1 Scope', '7:1 Scope', '8:1 to 10:1 Scope'],
|
|
158
|
+
['<strong>All Rope Line</strong>', '7:1 Scope', '8:1 Scope', '10:1 to 12:1 Scope'],
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'title',
|
|
163
|
+
text: 'The Physics of Catenary Curve and Anchor Holding',
|
|
164
|
+
level: 3,
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'paragraph',
|
|
168
|
+
html: 'Anchor flukes are designed to dig in under pure horizontal tension. When an upward angle of pull is exerted on the shank, the anchor breaks out of the bottom. Chain weight creates a sagging curve called the <strong>catenary arc</strong>. In moderate conditions, this weight keeps the pull perfectly parallel to the seabed. In heavy squalls, the chain straightens out, which is why increasing scope and deploying an elastic nylon snubber bridle is essential to absorb dynamic shock loads.',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: 'title',
|
|
172
|
+
text: 'Managing Swing Radius and Anchorage Congestion',
|
|
173
|
+
level: 3,
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'paragraph',
|
|
177
|
+
html: 'When swinging on the hook, your boat rotates 360 degrees around the anchor position with changing winds and tidal currents. The total <strong>swing radius</strong> is governed by the horizontal Pythagorean distance of the rode plus your boat length and safety buffer. Always ensure that no shoals, underwater hazards, or neighbouring vessels lie within your full swing circle.',
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
type: 'tip',
|
|
181
|
+
title: 'Seamanship Tip for Snubbers',
|
|
182
|
+
html: 'Never let all chain ride directly on the windlass drum. Always attach a rope snubber with a chain hook or rolling hitch to relieve strain and cushion wave shock.',
|
|
183
|
+
},
|
|
184
|
+
];
|
|
185
|
+
|
|
186
|
+
const schemas: AnchorScopeLocaleContent['schemas'] = [
|
|
187
|
+
{
|
|
188
|
+
'@context': 'https://schema.org',
|
|
189
|
+
'@type': 'SoftwareApplication',
|
|
190
|
+
name: title,
|
|
191
|
+
description,
|
|
192
|
+
applicationCategory: 'UtilityApplication',
|
|
193
|
+
operatingSystem: 'Web',
|
|
194
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
195
|
+
} as WithContext<SoftwareApplication>,
|
|
196
|
+
{
|
|
197
|
+
'@context': 'https://schema.org',
|
|
198
|
+
'@type': 'FAQPage',
|
|
199
|
+
mainEntity: faq.map((item) => ({
|
|
200
|
+
'@type': 'Question',
|
|
201
|
+
name: item.question,
|
|
202
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
203
|
+
})),
|
|
204
|
+
} as WithContext<FAQPage>,
|
|
205
|
+
{
|
|
206
|
+
'@context': 'https://schema.org',
|
|
207
|
+
'@type': 'HowTo',
|
|
208
|
+
name: `How to use: ${title}`,
|
|
209
|
+
step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
|
|
210
|
+
} as WithContext<HowTo>,
|
|
211
|
+
];
|
|
212
|
+
|
|
213
|
+
export const content: AnchorScopeLocaleContent = {
|
|
214
|
+
slug,
|
|
215
|
+
title,
|
|
216
|
+
description,
|
|
217
|
+
ui,
|
|
218
|
+
seo,
|
|
219
|
+
faq,
|
|
220
|
+
bibliography,
|
|
221
|
+
howTo,
|
|
222
|
+
schemas,
|
|
223
|
+
};
|