gedcom-ts
Version:
TypeScript GEDCOM toolkit for browser apps: import .ged/.zip, edit typed genealogy data, and export GEDCOM or GEDZIP.
74 lines (73 loc) • 3.65 kB
TypeScript
import type { Act } from "../commons/Act";
import type { ReadGed } from "../import/ReadGed";
import { type GeocodeCandidate } from "./place-geocode";
export interface CoordVariant {
readonly lat: number;
readonly lng: number;
readonly actCount: number;
}
/** Groupe de lieux similaires à harmoniser (libellés ou coordonnées divergents). */
export interface CityHarmonizationCluster {
readonly clusterKey: string;
readonly labels: readonly string[];
readonly coordVariants: readonly CoordVariant[];
readonly acts: readonly Act[];
readonly actsWithoutCoord: number;
}
/** Groupe d’actes partageant une même ville au sens {@link citiesAreSimilar}. */
export interface SimilarCityActGroup {
readonly cityLabel: string;
/** Même clé que {@link clusterKeyForCity} / carte. */
readonly clusterKey: string;
readonly acts: readonly Act[];
readonly withoutCoordCount: number;
}
export interface GroupActsBySimilarCityOptions {
/** Ne retient que les actes sans coordonnées GPS utilisables. */
readonly onlyWithoutCoordinates?: boolean;
}
export interface FilterActsBySimilarCityOptions {
readonly onlyWithoutCoordinates?: boolean;
}
/** Distance de Levenshtein (petites chaînes de noms de villes). */
export declare function levenshteinDistance(a: string, b: string): number;
/**
* Ville proche : même clé décorée, faute légère, ou inclusion évidente (Saint-X / St-X).
* **Règle unique** pour regrouper actes, carte et harmonisation.
*/
export declare function citiesAreSimilar(a: string, b: string): boolean;
/**
* Clé stable pour la carte et les listes « par ville ».
* Utilise la localité principale (segment avant la première virgule), comme le regroupement
* par {@link citiesAreSimilar}, afin que « Pleurtuit » et « Pleurtuit, Ille-et-Vilaine, France »
* partagent la même clé.
*/
export declare function clusterKeyForCity(city: string): string;
/** Alias explicite de {@link clusterKeyForCity}. */
export declare const similarCityKey: typeof clusterKeyForCity;
/**
* Regroupe les actes par ville similaire (tri décroissant par nombre d’actes).
* Utiliser pour une UI « lieux sans position » (`onlyWithoutCoordinates: true`).
*/
export declare function groupActsBySimilarCity(acts: readonly Act[], options?: GroupActsBySimilarCityOptions): SimilarCityActGroup[];
/**
* Actes dont le lieu est similaire à `cityRef` (même logique que l’harmonisation / la carte).
*/
export declare function filterActsBySimilarCity(acts: readonly Act[], cityRef: string, options?: FilterActsBySimilarCityOptions): Act[];
/**
* Actes similaires à `cityRef` sans coordonnées GPS — à géolocaliser en une fois.
* Alias de `filterActsBySimilarCity(..., { onlyWithoutCoordinates: true })`.
*/
export declare function actsNeedingGeocodeForCity(acts: readonly Act[], cityRef: string): Act[];
/**
* Conflits d’harmonisation : libellés multiples, positions GPS divergentes,
* ou mixte avec/sans coordonnées sur la même ville similaire.
*/
export declare function findHarmonizationClustersFromActs(acts: readonly Act[]): CityHarmonizationCluster[];
/** Analyse toute l’arbre (préférer {@link findHarmonizationClustersFromActs} sur un sous-ensemble). */
export declare function findHarmonizationClusters(ged: ReadGed): CityHarmonizationCluster[];
export declare function applyCoordinatesToActs(acts: readonly Act[], lat: number, lng: number, patch?: {
city?: string;
country?: string | null;
}): void;
export declare function applyGeocodeCandidateToActs(acts: readonly Act[], candidate: GeocodeCandidate, preferredCityLabel?: string): void;