@jjlmoya/utils-drones 1.25.0 → 1.27.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 +1 -1
- package/src/tests/seo_parity.test.ts +60 -0
- package/src/tests/spanish_leakage.test.ts +153 -0
- package/src/tests/translation_copy.test.ts +124 -0
- package/src/tool/gps-coordinates-converter/i18n/de.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/en.ts +6 -1
- package/src/tool/gps-coordinates-converter/i18n/es.ts +6 -1
- package/src/tool/gps-coordinates-converter/i18n/fr.ts +6 -1
- package/src/tool/gps-coordinates-converter/i18n/id.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/it.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/ja.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/ko.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/nl.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/pl.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/pt.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/ru.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/sv.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/tr.ts +12 -0
- package/src/tool/gps-coordinates-converter/i18n/zh.ts +12 -0
package/package.json
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ALL_ENTRIES } from '../entries';
|
|
3
|
+
import type { KnownLocale } from '../types';
|
|
4
|
+
|
|
5
|
+
interface ExpectedCounts {
|
|
6
|
+
seo: number;
|
|
7
|
+
faq: number;
|
|
8
|
+
howTo: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function countItems(arr: unknown[] | undefined): number {
|
|
12
|
+
return arr?.length ?? 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async function verifyLocaleParity(
|
|
16
|
+
entry: typeof ALL_ENTRIES[number],
|
|
17
|
+
loc: KnownLocale,
|
|
18
|
+
expected: ExpectedCounts,
|
|
19
|
+
): Promise<void> {
|
|
20
|
+
const locContent = await entry.i18n[loc]?.();
|
|
21
|
+
expect(locContent, `Locale ${loc} missing content`).toBeDefined();
|
|
22
|
+
|
|
23
|
+
const locSeoCount = countItems(locContent?.seo);
|
|
24
|
+
const locFaqCount = countItems(locContent?.faq);
|
|
25
|
+
const locHowToCount = countItems(locContent?.howTo);
|
|
26
|
+
|
|
27
|
+
expect(
|
|
28
|
+
locSeoCount,
|
|
29
|
+
`Locale ${loc} SEO sections count (${locSeoCount}) must match EN (${expected.seo})`,
|
|
30
|
+
).toBe(expected.seo);
|
|
31
|
+
expect(
|
|
32
|
+
locFaqCount,
|
|
33
|
+
`Locale ${loc} FAQ items count (${locFaqCount}) must match EN (${expected.faq})`,
|
|
34
|
+
).toBe(expected.faq);
|
|
35
|
+
expect(
|
|
36
|
+
locHowToCount,
|
|
37
|
+
`Locale ${loc} HowTo steps count (${locHowToCount}) must match EN (${expected.howTo})`,
|
|
38
|
+
).toBe(expected.howTo);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
describe('SEO & i18n Structural Parity Suite', () => {
|
|
42
|
+
ALL_ENTRIES.forEach((entry) => {
|
|
43
|
+
describe(`Tool: ${entry.id}`, () => {
|
|
44
|
+
it('all 15 locales should have identical SEO section counts and types as English', async () => {
|
|
45
|
+
const enContent = await entry.i18n.en?.();
|
|
46
|
+
expect(enContent).toBeDefined();
|
|
47
|
+
const expected: ExpectedCounts = {
|
|
48
|
+
seo: countItems(enContent?.seo),
|
|
49
|
+
faq: countItems(enContent?.faq),
|
|
50
|
+
howTo: countItems(enContent?.howTo),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const locales = Object.keys(entry.i18n) as KnownLocale[];
|
|
54
|
+
for (const loc of locales) {
|
|
55
|
+
await verifyLocaleParity(entry, loc, expected);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ALL_ENTRIES } from '../entries';
|
|
3
|
+
|
|
4
|
+
const STRUCTURAL_KEYS = new Set([
|
|
5
|
+
'id',
|
|
6
|
+
'slug',
|
|
7
|
+
'url',
|
|
8
|
+
'icon',
|
|
9
|
+
'image',
|
|
10
|
+
'imageUrl',
|
|
11
|
+
'keywords',
|
|
12
|
+
'category',
|
|
13
|
+
'tags',
|
|
14
|
+
'toolId',
|
|
15
|
+
'type',
|
|
16
|
+
'locale',
|
|
17
|
+
'language',
|
|
18
|
+
'direction',
|
|
19
|
+
]);
|
|
20
|
+
|
|
21
|
+
const TRANSLATABLE_KEYS = [
|
|
22
|
+
'title',
|
|
23
|
+
'description',
|
|
24
|
+
'faqTitle',
|
|
25
|
+
'faq',
|
|
26
|
+
'howTo',
|
|
27
|
+
'seo',
|
|
28
|
+
'schemas',
|
|
29
|
+
] as const;
|
|
30
|
+
|
|
31
|
+
const SPANISH_MARKERS = [
|
|
32
|
+
['sangre', /\bsangre\b/gi],
|
|
33
|
+
['molino', /\bmolino\b/gi],
|
|
34
|
+
['grano', /\bgrano\b/gi],
|
|
35
|
+
['paladar', /\bpaladar\b/gi],
|
|
36
|
+
['cuchillas', /\bcuchillas\b/gi],
|
|
37
|
+
['trozos', /\btrozos\b/gi],
|
|
38
|
+
['frescura', /\bfrescura\b/gi],
|
|
39
|
+
['ingresa', /\bingresa\b/gi],
|
|
40
|
+
['selecciona', /\bselecciona\b/gi],
|
|
41
|
+
['herramienta', /\bherramienta\b/gi],
|
|
42
|
+
['según', /\bsegún\b/gi],
|
|
43
|
+
['después', /\bdespués\b/gi],
|
|
44
|
+
['puedes', /\bpuedes\b/gi],
|
|
45
|
+
['debes', /\bdebes\b/gi],
|
|
46
|
+
['tus', /\btus\b/gi],
|
|
47
|
+
['a la vez', /\ba la vez\b/gi],
|
|
48
|
+
['los datos', /\blos datos\b/gi],
|
|
49
|
+
['las opciones', /\blas opciones\b/gi],
|
|
50
|
+
['el resultado', /\bel resultado\b/gi],
|
|
51
|
+
['método de extracción', /\bmétodo de extracción\b/gi],
|
|
52
|
+
['uniformidad del molino', /\buniformidad del molino\b/gi],
|
|
53
|
+
['café recién tostado', /\bcafé recién tostado\b/gi],
|
|
54
|
+
] as const;
|
|
55
|
+
|
|
56
|
+
type UnknownRecord = Record<string, unknown>;
|
|
57
|
+
|
|
58
|
+
function normalize(value: string): string {
|
|
59
|
+
return value
|
|
60
|
+
.replace(/<[^>]*>/g, ' ')
|
|
61
|
+
.replace(/ /gi, ' ')
|
|
62
|
+
.replace(/\s+/g, ' ')
|
|
63
|
+
.trim()
|
|
64
|
+
.toLocaleLowerCase('es');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function isTechnicalInvariant(text: string): boolean {
|
|
68
|
+
return [
|
|
69
|
+
'data:image/svg+xml;base64',
|
|
70
|
+
'background-image: url',
|
|
71
|
+
'.layout-playground {',
|
|
72
|
+
'const samplerate =',
|
|
73
|
+
].some((pattern) => text.includes(pattern)) || (text.includes('presets') && text.includes('hz'));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function collectString(value: string, output: string[]): void {
|
|
77
|
+
const text = normalize(value);
|
|
78
|
+
if (!isTechnicalInvariant(text) && text.length >= 20) output.push(text);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function collectObject(value: UnknownRecord, output: string[]): void {
|
|
82
|
+
Object.entries(value).forEach(([childKey, childValue]) => {
|
|
83
|
+
collectText(childValue, output, childKey);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function collectText(value: unknown, output: string[], key?: string): void {
|
|
88
|
+
if (key && STRUCTURAL_KEYS.has(key)) return;
|
|
89
|
+
if (typeof value === 'string') return collectString(value, output);
|
|
90
|
+
if (Array.isArray(value)) return value.forEach((item) => collectText(item, output));
|
|
91
|
+
if (value && typeof value === 'object') collectObject(value as UnknownRecord, output);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function loadText(loader: unknown): Promise<string[]> {
|
|
95
|
+
if (typeof loader !== 'function') return [];
|
|
96
|
+
const module = await (loader as () => Promise<unknown>)();
|
|
97
|
+
const output: string[] = [];
|
|
98
|
+
if (module && typeof module === 'object') {
|
|
99
|
+
const record = module as UnknownRecord;
|
|
100
|
+
for (const key of TRANSLATABLE_KEYS) {
|
|
101
|
+
collectText(record[key], output, key);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return output;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function findSpanishMarkers(text: string[]): string[] {
|
|
108
|
+
const corpus = text.join(' ');
|
|
109
|
+
return SPANISH_MARKERS.flatMap(([label, pattern]) =>
|
|
110
|
+
pattern.test(corpus) ? [label] : [],
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function findCopiedFragments(spanish: string[], translated: string[]): string[] {
|
|
115
|
+
const corpus = translated.join(' ');
|
|
116
|
+
return spanish
|
|
117
|
+
.filter((fragment) => fragment.length >= 80 && corpus.includes(fragment))
|
|
118
|
+
.sort((a, b) => b.length - a.length)
|
|
119
|
+
.slice(0, 3);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
describe('Locales must not contain copied Spanish content', () => {
|
|
123
|
+
for (const entry of ALL_ENTRIES) {
|
|
124
|
+
it(`${entry.id} has no untranslated Spanish blocks`, async () => {
|
|
125
|
+
const spanish = await loadText(entry.i18n.es);
|
|
126
|
+
const failures: string[] = [];
|
|
127
|
+
|
|
128
|
+
for (const [locale, loader] of Object.entries(entry.i18n)) {
|
|
129
|
+
if (locale === 'es') continue;
|
|
130
|
+
|
|
131
|
+
const translated = await loadText(loader);
|
|
132
|
+
const copiedFragments = findCopiedFragments(spanish, translated);
|
|
133
|
+
const markerHits = findSpanishMarkers(translated);
|
|
134
|
+
|
|
135
|
+
if (copiedFragments.length > 0 || markerHits.length >= 2) {
|
|
136
|
+
const details = [
|
|
137
|
+
copiedFragments.length > 0
|
|
138
|
+
? `copied fragments: ${copiedFragments
|
|
139
|
+
.map((fragment) => JSON.stringify(fragment.slice(0, 120)))
|
|
140
|
+
.join(', ')}`
|
|
141
|
+
: '',
|
|
142
|
+
markerHits.length >= 2 ? `Spanish markers: ${markerHits.join(', ')}` : '',
|
|
143
|
+
]
|
|
144
|
+
.filter(Boolean)
|
|
145
|
+
.join('; ');
|
|
146
|
+
failures.push(`${locale}: ${details}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
expect(failures, failures.join('\n')).toEqual([]);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
});
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ALL_ENTRIES } from '../entries';
|
|
3
|
+
|
|
4
|
+
const COPY_THRESHOLD = 0.9;
|
|
5
|
+
|
|
6
|
+
const STRUCTURAL_KEYS = new Set([
|
|
7
|
+
'@context',
|
|
8
|
+
'@type',
|
|
9
|
+
'applicationCategory',
|
|
10
|
+
'columns',
|
|
11
|
+
'highlight',
|
|
12
|
+
'icon',
|
|
13
|
+
'level',
|
|
14
|
+
'operatingSystem',
|
|
15
|
+
'position',
|
|
16
|
+
'positive',
|
|
17
|
+
'price',
|
|
18
|
+
'priceCurrency',
|
|
19
|
+
'slug',
|
|
20
|
+
'trend',
|
|
21
|
+
'type',
|
|
22
|
+
'url',
|
|
23
|
+
'value',
|
|
24
|
+
'variant',
|
|
25
|
+
]);
|
|
26
|
+
|
|
27
|
+
function normalizeText(value: string): string {
|
|
28
|
+
return value
|
|
29
|
+
.replace(/<[^>]*>/g, ' ')
|
|
30
|
+
.replace(/&(?:amp|lt|gt|quot|apos|nbsp);/gi, ' ')
|
|
31
|
+
.replace(/[\u2018\u2019]/g, "'")
|
|
32
|
+
.replace(/[\u201c\u201d]/g, '"')
|
|
33
|
+
.replace(/\s+/g, ' ')
|
|
34
|
+
.trim()
|
|
35
|
+
.toLocaleLowerCase();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function collectText(value: unknown, path: string, parts: string[]): void {
|
|
39
|
+
if (typeof value === 'string') {
|
|
40
|
+
const normalized = normalizeText(value);
|
|
41
|
+
if (normalized.length >= 2) parts.push(normalized);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (Array.isArray(value)) {
|
|
46
|
+
value.forEach((item, index) => collectText(item, `${path}[${index}]`, parts));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!value || typeof value !== 'object') return;
|
|
51
|
+
|
|
52
|
+
Object.entries(value).forEach(([key, child]) => {
|
|
53
|
+
if (STRUCTURAL_KEYS.has(key)) return;
|
|
54
|
+
collectText(child, `${path}.${key}`, parts);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function localeCorpus(content: unknown): string {
|
|
59
|
+
if (!content || typeof content !== 'object') return '';
|
|
60
|
+
|
|
61
|
+
const record = content as Record<string, unknown>;
|
|
62
|
+
const parts: string[] = [];
|
|
63
|
+
collectText(record.title, 'title', parts);
|
|
64
|
+
collectText(record.description, 'description', parts);
|
|
65
|
+
collectText(record.faqTitle, 'faqTitle', parts);
|
|
66
|
+
collectText(record.faq, 'faq', parts);
|
|
67
|
+
collectText(record.seo, 'seo', parts);
|
|
68
|
+
collectText(record.schemas, 'schemas', parts);
|
|
69
|
+
return parts.join(' ');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function tokenCounts(text: string): Map<string, number> {
|
|
73
|
+
const counts = new Map<string, number>();
|
|
74
|
+
for (const token of text.match(/[\p{L}\p{N}]+/gu) ?? []) {
|
|
75
|
+
counts.set(token, (counts.get(token) ?? 0) + 1);
|
|
76
|
+
}
|
|
77
|
+
return counts;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function copySimilarity(left: string, right: string): number {
|
|
81
|
+
const leftCounts = tokenCounts(left);
|
|
82
|
+
const rightCounts = tokenCounts(right);
|
|
83
|
+
const leftTotal = [...leftCounts.values()].reduce((sum, count) => sum + count, 0);
|
|
84
|
+
const rightTotal = [...rightCounts.values()].reduce((sum, count) => sum + count, 0);
|
|
85
|
+
if (leftTotal === 0 || rightTotal === 0) return 0;
|
|
86
|
+
|
|
87
|
+
let shared = 0;
|
|
88
|
+
for (const [token, count] of leftCounts) {
|
|
89
|
+
shared += Math.min(count, rightCounts.get(token) ?? 0);
|
|
90
|
+
}
|
|
91
|
+
return (2 * shared) / (leftTotal + rightTotal);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
describe('Locales must not copy another locale wholesale', () => {
|
|
95
|
+
ALL_ENTRIES.forEach((entry) => {
|
|
96
|
+
it(`${entry.id} is not at least ${COPY_THRESHOLD * 100}% identical to another locale`, async () => {
|
|
97
|
+
const corpora = new Map<string, string>();
|
|
98
|
+
|
|
99
|
+
for (const [locale, loader] of Object.entries(entry.i18n)) {
|
|
100
|
+
if (!loader) continue;
|
|
101
|
+
corpora.set(locale, localeCorpus(await loader()));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const locales = [...corpora.keys()];
|
|
105
|
+
const violations: string[] = [];
|
|
106
|
+
|
|
107
|
+
for (let leftIndex = 0; leftIndex < locales.length; leftIndex += 1) {
|
|
108
|
+
for (let rightIndex = leftIndex + 1; rightIndex < locales.length; rightIndex += 1) {
|
|
109
|
+
const left = locales[leftIndex];
|
|
110
|
+
const right = locales[rightIndex];
|
|
111
|
+
const similarity = copySimilarity(corpora.get(left) ?? '', corpora.get(right) ?? '');
|
|
112
|
+
|
|
113
|
+
if (similarity >= COPY_THRESHOLD) {
|
|
114
|
+
violations.push(`${left} ↔ ${right}: ${(similarity * 100).toFixed(1)}%`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
expect(violations, `Locale copy threshold exceeded in ${entry.id}`).toEqual([]);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: 'Die meisten Standard-M8N- oder M10-GPS-Module für FPV-Drohnen liefern unter freiem Himmel eine Genauigkeit auf die 5. oder 6. Dezimalstelle (ca. 1-2 Meter). Geben Sie beim Kopieren nach Möglichkeit immer mindestens 6 Stellen an, um eine genaue Wiederauffindung zu gewährleisten.',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: 'Geografische Bezugssysteme', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'Koordinaten beziehen sich immer auf ein Bezugssystem. Für GPS-Daten ist WGS84 der übliche Standard; mische daher Werte aus anderen Datumsangaben nicht ohne vorherige Umrechnung.' },
|
|
201
|
+
{ type: 'title', text: 'Breiten- und Längengrad prüfen', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'Der Breitengrad liegt zwischen 90° Süd und 90° Nord, der Längengrad zwischen 180° West und 180° Ost. Ein Vorzeichen oder eine Himmelsrichtung darf nicht versehentlich doppelt angewendet werden.' },
|
|
203
|
+
{ type: 'title', text: 'Genauigkeit der Ausgabe', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: 'Mehr Dezimalstellen bedeuten nicht automatisch eine genauere Messung. Die sinnvolle Genauigkeit hängt von Gerät, Satellitensignal und dem Zweck der Karte ab.' },
|
|
205
|
+
{ type: 'title', text: 'Koordinaten für Karten verwenden', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: 'Nach der Umwandlung kannst du das Ergebnis in ein Kartenprogramm oder ein GIS übernehmen. Prüfe vor dem Teilen, ob das Zielsystem Dezimalgrad oder Grad-Minuten-Sekunden erwartet.' },
|
|
207
|
+
{ type: 'title', text: 'Vorzeichen und Himmelsrichtungen', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: 'Norden und Osten werden gewöhnlich positiv, Süden und Westen negativ dargestellt. Bei einer Schreibweise mit Buchstaben ersetzt die Richtung das Vorzeichen.' },
|
|
209
|
+
{ type: 'title', text: 'Datenschutz bei GPS-Daten', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: 'Verarbeite sensible Standortdaten möglichst lokal und teile sie nur mit Personen, die sie benötigen. Kontrolliere außerdem, ob Fotos noch versteckte GPS-Metadaten enthalten.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -242,6 +242,11 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
242
242
|
],
|
|
243
243
|
faq: faqItems,
|
|
244
244
|
bibliography,
|
|
245
|
-
howTo: [
|
|
245
|
+
howTo: [
|
|
246
|
+
{ name: 'Identify the format', text: 'Decide whether your coordinate is in decimal degrees, degrees-minutes-seconds, or the hardware-style format.' },
|
|
247
|
+
{ name: 'Enter the coordinate', text: 'Paste or type the value into the matching field. The conversion updates automatically as you edit it.' },
|
|
248
|
+
{ name: 'Check the results', text: 'Review the other two fields and confirm that the latitude, longitude, signs, and hemisphere are correct.' },
|
|
249
|
+
{ name: 'Copy and use the value', text: 'Use the copy button for the format you need, then paste the result into a map, terminal, or mission-planning tool.' },
|
|
250
|
+
],
|
|
246
251
|
schemas,
|
|
247
252
|
};
|
|
@@ -242,6 +242,11 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
242
242
|
],
|
|
243
243
|
faq: faqItems,
|
|
244
244
|
bibliography,
|
|
245
|
-
howTo: [
|
|
245
|
+
howTo: [
|
|
246
|
+
{ name: 'Identifica el formato', text: 'Comprueba si la coordenada está en grados decimales, grados-minutos-segundos o en el formato utilizado por el hardware.' },
|
|
247
|
+
{ name: 'Introduce la coordenada', text: 'Pega o escribe el valor en el campo correspondiente. La conversión se actualiza automáticamente mientras lo editas.' },
|
|
248
|
+
{ name: 'Revisa los resultados', text: 'Comprueba los otros dos campos y verifica la latitud, la longitud, los signos y el hemisferio.' },
|
|
249
|
+
{ name: 'Copia y utiliza el valor', text: 'Pulsa el botón de copiar del formato que necesites y pega el resultado en un mapa, terminal o herramienta de planificación.' },
|
|
250
|
+
],
|
|
246
251
|
schemas,
|
|
247
252
|
};
|
|
@@ -259,6 +259,11 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
259
259
|
},
|
|
260
260
|
],
|
|
261
261
|
bibliography,
|
|
262
|
-
howTo: [
|
|
262
|
+
howTo: [
|
|
263
|
+
{ name: 'Identifier le format', text: 'Vérifiez si la coordonnée est en degrés décimaux, en degrés-minutes-secondes ou dans le format utilisé par le matériel.' },
|
|
264
|
+
{ name: 'Saisir la coordonnée', text: 'Collez ou saisissez la valeur dans le champ correspondant. La conversion se met à jour automatiquement pendant la saisie.' },
|
|
265
|
+
{ name: 'Vérifier les résultats', text: "Contrôlez les deux autres champs et vérifiez la latitude, la longitude, les signes et l'hémisphère." },
|
|
266
|
+
{ name: 'Copier et utiliser la valeur', text: 'Utilisez le bouton de copie du format souhaité, puis collez le résultat dans une carte, un terminal ou un outil de planification.' },
|
|
267
|
+
],
|
|
263
268
|
schemas,
|
|
264
269
|
};
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: 'Kebanyakan alat standar M8N atau Modul Gps seri penerusnya M10 memiliki kapasitas pengunci koordinat dalam kisaran antara level digit ke 5 hingga 6 (di bawah langit yg bersih, yang artinya memiliki ketepatan akurasi radius 1-2 meter saja). Pastikan copy semua minimal s/d digit batas titik ke 6 untuk mempermudah mencari posisi presisi barang anda.',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: 'Sistem Referensi Geografis', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'Setiap koordinat menggunakan sistem referensi tertentu. Data GPS biasanya memakai WGS84, jadi datum yang berbeda harus dikonversi sebelum dibandingkan.' },
|
|
201
|
+
{ type: 'title', text: 'Periksa Lintang dan Bujur', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'Lintang berada antara 90° selatan dan 90° utara, sedangkan bujur berada antara 180° barat dan 180° timur. Jangan menerapkan tanda negatif dan arah mata angin dua kali.' },
|
|
203
|
+
{ type: 'title', text: 'Ketelitian yang Masuk Akal', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: 'Banyak angka desimal tidak selalu berarti pengukuran lebih akurat. Ketelitian yang tepat bergantung pada perangkat GPS, kualitas sinyal, dan kebutuhan peta.' },
|
|
205
|
+
{ type: 'title', text: 'Menggunakan Hasil pada Peta', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: 'Hasil konversi dapat dimasukkan ke aplikasi peta atau GIS. Pastikan sistem tujuan mengharapkan derajat desimal atau derajat-menit-detik.' },
|
|
207
|
+
{ type: 'title', text: 'Arah dan Tanda Koordinat', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: 'Utara dan timur biasanya bernilai positif, sementara selatan dan barat bernilai negatif. Pada format dengan huruf, arah tersebut menggantikan tanda angka.' },
|
|
209
|
+
{ type: 'title', text: 'Lindungi Data Lokasi', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: 'Proses koordinat sensitif secara lokal jika memungkinkan dan bagikan hanya kepada orang yang berwenang. Periksa juga metadata GPS yang mungkin tersimpan dalam foto.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: 'In un buon settaggio FPV che cattura sui vari 14 - oltre a 30 Satelliti vi riporterebbe misurazioni che taglieranno sulle stime ottime a cinque punti (o il grezzo hardware per il sette / 7 e8 interi ). Perciò un bravo pilota di soccorso o d\'indagine aerofotogrammetria a droni copi le minime 6 o settime decimali ',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: 'Sistemi di riferimento geografico', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'Ogni coordinata appartiene a un sistema di riferimento. I dati GPS usano normalmente WGS84; un datum diverso va convertito prima del confronto.' },
|
|
201
|
+
{ type: 'title', text: 'Controllare latitudine e longitudine', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'La latitudine va da 90° sud a 90° nord, mentre la longitudine va da 180° ovest a 180° est. Non applicare due volte il segno e il punto cardinale.' },
|
|
203
|
+
{ type: 'title', text: 'Scegliere la precisione', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: "Un numero maggiore di decimali non garantisce una misura più precisa. La precisione utile dipende dal dispositivo, dal segnale e dall'uso della mappa." },
|
|
205
|
+
{ type: 'title', text: 'Usare il risultato sulle mappe', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: "Il risultato può essere copiato in un'app cartografica o GIS. Verifica se il programma di destinazione richiede gradi decimali oppure gradi, minuti e secondi." },
|
|
207
|
+
{ type: 'title', text: 'Segni e punti cardinali', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: 'Nord ed est sono di solito positivi, sud e ovest negativi. Nei formati con lettere, il punto cardinale sostituisce il segno numerico.' },
|
|
209
|
+
{ type: 'title', text: 'Proteggere i dati di posizione', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: 'Elabora localmente le coordinate sensibili quando possibile e condividile solo con chi deve riceverle. Controlla anche i metadati GPS eventualmente presenti nelle foto.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: '上空が開けた場所において、多くの標準的なM8NまたはM10 GPSモジュールは、小数点第5位から第6位(約1〜2メートル)の精度を達成します。正確な回収を保証するため、コピーする際は可能な限り小数点第6位以上を保持するようにしてください。',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: '地理座標系について', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: '座標は必ず特定の基準系に基づいています。GPSでは通常WGS84を使うため、別の測地系の値と比較する前に変換してください。' },
|
|
201
|
+
{ type: 'title', text: '緯度と経度を確認する', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: '緯度は南90度から北90度、経度は西180度から東180度の範囲です。負号と方位記号を同時に二重適用しないよう注意しましょう。' },
|
|
203
|
+
{ type: 'title', text: '適切な精度を選ぶ', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: '小数点以下の桁数が多くても、測定自体の精度が高いとは限りません。必要な桁数は機器、信号、地図の用途で決まります。' },
|
|
205
|
+
{ type: 'title', text: '地図で結果を使う', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: '変換結果は地図アプリやGISに貼り付けられます。入力先が十進法と度分秒のどちらを要求するか、先に確認してください。' },
|
|
207
|
+
{ type: 'title', text: '符号と方位', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: '北と東は通常正、南と西は負で表します。文字付きの形式では、方位文字が数値の符号に相当します。' },
|
|
209
|
+
{ type: 'title', text: '位置情報を守る', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: '機密性の高い座標は可能な限り端末内で処理し、必要な相手だけに共有してください。写真に残るGPSメタデータも確認しましょう。' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: '개방된 환경에서 대부분의 표준 M8N 또는 M10 GPS 모듈은 소수점 5자리에서 6자리(약 1~2미터)의 정밀도를 제공합니다. 데이터의 손실을 막기 위해 복사할 때는 가능한 한 소수점 6자리 이상을 항상 유지하십시오.',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: '지리 좌표 기준', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: '모든 좌표는 특정 기준 좌표계에 속합니다. GPS는 보통 WGS84를 사용하므로 다른 데이텀의 값과 비교하기 전에 변환해야 합니다.' },
|
|
201
|
+
{ type: 'title', text: '위도와 경도 확인하기', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: '위도는 남쪽 90도에서 북쪽 90도, 경도는 서쪽 180도에서 동쪽 180도까지입니다. 음수 부호와 방향 문자를 중복해서 적용하지 마세요.' },
|
|
203
|
+
{ type: 'title', text: '알맞은 정밀도 선택', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: '소수점 자릿수가 많다고 측정값이 더 정확해지는 것은 아닙니다. 필요한 정밀도는 장치, 신호 품질, 지도 사용 목적에 따라 달라집니다.' },
|
|
205
|
+
{ type: 'title', text: '지도에서 결과 사용', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: '변환한 결과를 지도 앱이나 GIS에 입력할 수 있습니다. 대상 프로그램이 십진도와 도·분·초 중 어느 형식을 요구하는지 확인하세요.' },
|
|
207
|
+
{ type: 'title', text: '부호와 방향 문자', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: '북쪽과 동쪽은 보통 양수, 남쪽과 서쪽은 음수로 표시합니다. 문자 형식에서는 방향 문자가 숫자의 부호를 대신합니다.' },
|
|
209
|
+
{ type: 'title', text: '위치 데이터 보호', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: '민감한 좌표는 가능하면 기기에서 직접 처리하고 필요한 사람에게만 공유하세요. 사진에 포함된 GPS 메타데이터도 확인하는 것이 좋습니다.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -194,6 +194,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
194
194
|
type: 'paragraph',
|
|
195
195
|
html: 'Moderne GPS chips (zoals M8N en M10) bereiken met goed zicht 5 tot 6 decimalen. Noteer of kopieer in het verwerkveld daarom steeds zoveel decimaal-aanduidingen als mogelijk voor een veilige omrekening.',
|
|
196
196
|
},
|
|
197
|
+
{ type: 'title', text: 'Geografische referentiesystemen', level: 2 },
|
|
198
|
+
{ type: 'paragraph', html: 'Elke coördinaat hoort bij een referentiesysteem. GPS gebruikt meestal WGS84; een ander datum moet je eerst omrekenen voordat je waarden vergelijkt.' },
|
|
199
|
+
{ type: 'title', text: 'Breedtegraad en lengtegraad controleren', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'De breedtegraad loopt van 90° zuid tot 90° noord en de lengtegraad van 180° west tot 180° oost. Gebruik een minteken en een windrichting nooit dubbel.' },
|
|
201
|
+
{ type: 'title', text: 'De juiste nauwkeurigheid', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'Meer decimalen betekenen niet automatisch een nauwkeurigere meting. De bruikbare nauwkeurigheid hangt af van apparaat, signaal en kaartdoel.' },
|
|
203
|
+
{ type: 'title', text: 'Het resultaat op een kaart gebruiken', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: 'Je kunt de uitkomst in kaartsoftware of GIS plakken. Controleer of het doelprogramma decimale graden of graden, minuten en seconden verwacht.' },
|
|
205
|
+
{ type: 'title', text: 'Tekens en windrichtingen', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: 'Noord en oost zijn meestal positief; zuid en west negatief. In een notatie met letters vervangt de windrichting het minteken.' },
|
|
207
|
+
{ type: 'title', text: 'Locatiegegevens beschermen', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: "Verwerk gevoelige coördinaten zo mogelijk lokaal en deel ze alleen met bevoegde personen. Controleer ook GPS-metadata in foto's." },
|
|
197
209
|
],
|
|
198
210
|
faq: faqItems,
|
|
199
211
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: 'Moduły GPS dla konsumentów (takie jak klasyczne M8N i modele M10) w dobrym i otwartym niebie wyrabiają w rzetelnym zakresie te ramy 5 punktów dziesiętnych. Kopiując i badając dane, nie obcinaj ich - przerzucaj z zapasem, chociaż 6 miejsc - by mieć pewność optymalnej wyznaczonej formy ratunkowej.',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: 'Geograficzne układy odniesienia', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'Każda współrzędna należy do określonego układu odniesienia. GPS zwykle korzysta z WGS84, dlatego inny datum trzeba przeliczyć przed porównaniem wartości.' },
|
|
201
|
+
{ type: 'title', text: 'Sprawdzanie szerokości i długości', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'Szerokość geograficzna mieści się między 90° południe i 90° północ, a długość między 180° zachód i 180° wschód. Nie stosuj jednocześnie dwa razy znaku i kierunku.' },
|
|
203
|
+
{ type: 'title', text: 'Rozsądna dokładność', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: 'Większa liczba miejsc po przecinku nie gwarantuje dokładniejszego pomiaru. Wymagana dokładność zależy od urządzenia, sygnału i zastosowania mapy.' },
|
|
205
|
+
{ type: 'title', text: 'Użycie wyniku na mapie', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: 'Wynik można wkleić do programu mapowego lub GIS. Sprawdź, czy system docelowy oczekuje stopni dziesiętnych czy stopni, minut i sekund.' },
|
|
207
|
+
{ type: 'title', text: 'Znaki i kierunki', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: 'Północ i wschód są zwykle dodatnie, a południe i zachód ujemne. W zapisie literowym kierunek zastępuje znak liczbowy.' },
|
|
209
|
+
{ type: 'title', text: 'Ochrona danych lokalizacyjnych', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: 'Wrażliwe współrzędne przetwarzaj lokalnie, jeśli to możliwe, i udostępniaj tylko upoważnionym osobom. Pamiętaj także o metadanych GPS w zdjęciach.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: 'As Placas e Cúpulas Standard na grande fatia dos modelos lúdicos para fpv - como GPS do modelo M8n, Bem com os recentes chip modernos Ublox modelos de classe e séries M10 ou variantes conseguem um compromisso estável ao operarem aos tais dezoito a 20 sátélites em locais límpidos e céu pleno chegando na quinta e tocando mesmo bem fundo nestas medições de precisão aos 6 ( e raros num nível com um fator no sete decimal) de medições e por esse caso indicamos quando transfere apontamentos seus preceitue reter e dar copias o mais longe a exaustão que tiver visualizado.',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: 'Sistemas de referência geográfica', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'Todas as coordenadas pertencem a um sistema de referência. O GPS utiliza normalmente o WGS84; outro datum deve ser convertido antes da comparação.' },
|
|
201
|
+
{ type: 'title', text: 'Verificar latitude e longitude', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'A latitude varia entre 90° sul e 90° norte, enquanto a longitude varia entre 180° oeste e 180° este. Não aplique duas vezes o sinal e o ponto cardeal.' },
|
|
203
|
+
{ type: 'title', text: 'Escolher a precisão adequada', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: 'Mais casas decimais não significam necessariamente uma medição mais precisa. A precisão útil depende do dispositivo, do sinal e do objetivo do mapa.' },
|
|
205
|
+
{ type: 'title', text: 'Usar o resultado num mapa', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: 'O resultado pode ser introduzido numa aplicação de mapas ou num sistema GIS. Confirme se o destino espera graus decimais ou graus, minutos e segundos.' },
|
|
207
|
+
{ type: 'title', text: 'Sinais e pontos cardeais', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: 'Norte e este são normalmente positivos; sul e oeste são negativos. Nos formatos com letras, o ponto cardeal substitui o sinal numérico.' },
|
|
209
|
+
{ type: 'title', text: 'Proteger dados de localização', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: 'Processe coordenadas sensíveis localmente sempre que possível e partilhe-as apenas com as pessoas autorizadas. Verifique também os metadados GPS das fotografias.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: 'Большинство стандартных модулей GPS для FPV дронов (M8N или M10) под открытым небом обеспечивают точность до 5 или 6 знаков после запятой (1-2 метра). При копировании координат старайтесь сохранять как минимум 6 знаков для обеспечения точности.',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: 'Географические системы отсчёта', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'Каждая координата относится к определённой системе. GPS обычно использует WGS84, поэтому другой датум нужно преобразовать перед сравнением.' },
|
|
201
|
+
{ type: 'title', text: 'Проверка широты и долготы', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'Широта находится между 90° южной и 90° северной широты, а долгота - между 180° западной и 180° восточной долготы. Не применяйте знак и направление дважды.' },
|
|
203
|
+
{ type: 'title', text: 'Подходящая точность', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: 'Большое количество знаков после запятой не гарантирует точный замер. Нужная точность зависит от устройства, сигнала и назначения карты.' },
|
|
205
|
+
{ type: 'title', text: 'Использование результата на карте', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: 'Результат можно вставить в картографическую программу или ГИС. Сначала проверьте, нужны ли ей десятичные градусы или градусы, минуты и секунды.' },
|
|
207
|
+
{ type: 'title', text: 'Знаки и направления', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: 'Север и восток обычно обозначаются положительными значениями, юг и запад - отрицательными. В буквенной записи направление заменяет знак числа.' },
|
|
209
|
+
{ type: 'title', text: 'Защита данных о местоположении', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: 'По возможности обрабатывайте чувствительные координаты локально и делитесь ими только с теми, кому они нужны. Проверьте также GPS-метаданные фотографий.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: 'Utrymmet och förmågan under klar himmel ger de flesta standard M8N eller M10 GPS-moduler runt 5 till 6 decimaler att skryta med (vilket medför cirka 1-2 meters noggrannhet). Kopiera därför alltid minst sex decimaler när du räddar ut information från en loggfil.',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: 'Geografiska referenssystem', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'Varje koordinat hör till ett referenssystem. GPS använder vanligtvis WGS84, så ett annat datum måste konverteras innan värden jämförs.' },
|
|
201
|
+
{ type: 'title', text: 'Kontrollera latitud och longitud', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'Latituden går från 90° syd till 90° nord och longituden från 180° väst till 180° öst. Använd inte både minustecken och väderstreck två gånger.' },
|
|
203
|
+
{ type: 'title', text: 'Välj rätt noggrannhet', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: 'Fler decimaler innebär inte automatiskt en noggrannare mätning. Lämplig precision beror på enhet, signal och hur kartan ska användas.' },
|
|
205
|
+
{ type: 'title', text: 'Använd resultatet på en karta', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: 'Resultatet kan klistras in i kartprogram eller GIS. Kontrollera om målsystemet förväntar sig decimalgrader eller grader, minuter och sekunder.' },
|
|
207
|
+
{ type: 'title', text: 'Tecken och väderstreck', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: 'Norr och öster är vanligtvis positiva, medan söder och väster är negativa. I format med bokstäver ersätter väderstrecket det numeriska tecknet.' },
|
|
209
|
+
{ type: 'title', text: 'Skydda platsdata', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: 'Bearbeta känsliga koordinater lokalt när det är möjligt och dela dem bara med behöriga personer. Kontrollera även GPS-metadata i foton.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: 'Açık bir alanda uçarken, çoğu standart M8N veya M10 GPS modülü virgülden sonra 5. veya 6. basamağa (yaklaşık 1-2 metre) kadar hassasiyet sağlar. Tam ve doğru bir kurtarma operasyonu için kopyalama/kaydetme işlemi yaparken en az 6 basamağı tuttuğunuzdan emin olun.',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: 'Coğrafi Referans Sistemleri', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: 'Her koordinat belirli bir referans sistemine bağlıdır. GPS genellikle WGS84 kullanır; farklı bir datum karşılaştırmadan önce dönüştürülmelidir.' },
|
|
201
|
+
{ type: 'title', text: 'Enlem ve Boylamı Kontrol Etme', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: 'Enlem 90° güney ile 90° kuzey, boylam ise 180° batı ile 180° doğu arasındadır. Eksi işaretini ve yön harfini iki kez uygulamayın.' },
|
|
203
|
+
{ type: 'title', text: 'Uygun Hassasiyeti Seçme', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: 'Daha fazla ondalık basamak ölçümün daha doğru olduğu anlamına gelmez. Gerekli hassasiyet cihaz, sinyal ve haritanın kullanım amacına bağlıdır.' },
|
|
205
|
+
{ type: 'title', text: 'Sonucu Haritada Kullanma', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: 'Sonucu bir harita uygulamasına veya GIS yazılımına aktarabilirsiniz. Hedef sistemin ondalık derece mi, derece-dakika-saniye mi istediğini kontrol edin.' },
|
|
207
|
+
{ type: 'title', text: 'İşaretler ve Yönler', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: 'Kuzey ve doğu genellikle pozitif, güney ve batı negatiftir. Harfli gösterimde yön harfi sayısal işaretin yerini alır.' },
|
|
209
|
+
{ type: 'title', text: 'Konum Verilerini Koruma', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: 'Hassas koordinatları mümkünse yerel olarak işleyin ve yalnızca yetkili kişilerle paylaşın. Fotoğraflarda saklanan GPS meta verilerini de kontrol edin.' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|
|
@@ -196,6 +196,18 @@ export const content: GpsCoordinatesConverterLocaleContent = {
|
|
|
196
196
|
type: 'paragraph',
|
|
197
197
|
html: '身处在这个空阔畅通没有太多混泥建筑阻挡其开阔探天接收能视范围内时,大多标准大众消费版比如常见的那个 M8N、新型更强的 M10 定位件都可以输出稳定发挥以达成落子在那准 5 第甚至到探究第 6 位的水平线上(大概的锁定差距基本是在那么一两米开里)。当你慌不择路忙于摘抄去存底它最后弥留下的残血地址以去挽尊捞取自己机器时千万不要因为图省力或者心宽而抹去、少去任何的尾数的。一定坚决一字一字把它们,如果能给满第六位那必须死死抓着!这无疑才是确保护送贵重财物完好还家的不传绝学啊!',
|
|
198
198
|
},
|
|
199
|
+
{ type: 'title', text: '地理参考坐标系', level: 2 },
|
|
200
|
+
{ type: 'paragraph', html: '每个坐标都属于特定的参考坐标系。GPS通常使用WGS84,因此在比较不同基准的数据前需要先进行转换。' },
|
|
201
|
+
{ type: 'title', text: '检查纬度和经度', level: 2 },
|
|
202
|
+
{ type: 'paragraph', html: '纬度范围是南纬90度到北纬90度,经度范围是西经180度到东经180度。不要同时重复使用负号和方向字母。' },
|
|
203
|
+
{ type: 'title', text: '选择合适的精度', level: 2 },
|
|
204
|
+
{ type: 'paragraph', html: '小数位更多并不一定代表测量更准确。合适的精度取决于设备、信号质量和地图用途。' },
|
|
205
|
+
{ type: 'title', text: '在地图中使用结果', level: 2 },
|
|
206
|
+
{ type: 'paragraph', html: '转换结果可以输入地图应用或GIS软件。请先确认目标系统需要十进制度,还是度、分、秒格式。' },
|
|
207
|
+
{ type: 'title', text: '符号与方向', level: 2 },
|
|
208
|
+
{ type: 'paragraph', html: '北和东通常使用正数,南和西使用负数。在带字母的格式中,方向字母代替数字符号。' },
|
|
209
|
+
{ type: 'title', text: '保护位置数据', level: 2 },
|
|
210
|
+
{ type: 'paragraph', html: '敏感坐标应尽可能在本地处理,并只与需要它们的人分享。同时检查照片中可能保存的GPS元数据。' },
|
|
199
211
|
],
|
|
200
212
|
faq: faqItems,
|
|
201
213
|
bibliography,
|