Documentation du code de SPIP et de ses plugins

Librairie Mathématique & Statistique

API

Table of Contents

Constants

_EZMATH_RAYON_TERRE_KM  = 6371.009
Rayon de la terre en kilomètre selon l'UGGI.

Functions

sphere_point_valider()  : null|array<string|int, mixed>
Vérifie qu'un point est bien un couple (latitude, longitude) exploitable et renvoie ses coordonnées réindexées de zéro et transtypées en réels.
distance_euclidienne()  : null|float
Calcule la distance euclidienne entre deux points connus par leur coordonnées cartésiennes dans un espace à n dimensions.
sphere_distance_haversine()  : null|float
Calcule la distance géodésique en utilisant la formule d'Haversine qui permet de déterminer la distance du grand cercle entre deux points d'une sphère, à partir de leurs longitudes et latitudes.
sphere_distance_loi_sinus()  : null|float
Calcule la distance entre deux points d'une sphère en utilisant la loi des sinus à partir de leurs longitudes et latitudes.
sphere_distance_euclidienne()  : null|float
Calcule la distance euclidienne entre deux points d'une sphère, à partir de leurs longitudes et latitudes.
matrice_ponderation_spatiale()  : array<string|int, mixed>
Calcule la matrice de pondération spatiale d'une liste de coordonnées exprimés en (latitude, longitude).

Constants

_EZMATH_RAYON_TERRE_KM

Rayon de la terre en kilomètre selon l'UGGI.

public mixed _EZMATH_RAYON_TERRE_KM = 6371.009

Functions

sphere_point_valider()

Vérifie qu'un point est bien un couple (latitude, longitude) exploitable et renvoie ses coordonnées réindexées de zéro et transtypées en réels.

sphere_point_valider(array<string|int, mixed> $point) : null|array<string|int, mixed>

Les bornes retenues sont celles du système géodésique mondial : la latitude appartient à [-90, 90] et la longitude à [-180, 180]. Les fonctions trigonométriques étant périodiques, des coordonnées hors de ces bornes produiraient un résultat d'apparence plausible : les refuser est le seul moyen de signaler une donnée aberrante plutôt que de la cartographier silencieusement.

Parameters
$point : array<string|int, mixed>

Coordonnées du point exprimé en (latitude, longitude), en degrés décimaux

Tags
note

Certains jeux de données expriment la longitude sur l'intervalle [0, 360] et non [-180, 180]. Ils doivent être ramenés à la convention ci-dessus avant d'être fournis à ces fonctions.

Return values
null|array<string|int, mixed>

Couple (latitude, longitude) réindexé de zéro ou null si le point n'est pas un couple de valeurs numériques comprises dans les bornes géographiques

distance_euclidienne()

Calcule la distance euclidienne entre deux points connus par leur coordonnées cartésiennes dans un espace à n dimensions.

distance_euclidienne(array<string|int, mixed> $point_p, array<string|int, mixed> $point_q) : null|float

d(p,q) = √∑(pᵢ - qᵢ)² où pᵢ et qᵢ désignent les ième coordonnées des points p et q.

Parameters
$point_p : array<string|int, mixed>

Coordonnées du premier point

$point_q : array<string|int, mixed>

Coordonnées du deuxième point

Return values
null|float

Valeur de la distance euclidienne ou null si erreur (point vide ou points exprimés dans des espaces de dimensions différentes)

sphere_distance_haversine()

Calcule la distance géodésique en utilisant la formule d'Haversine qui permet de déterminer la distance du grand cercle entre deux points d'une sphère, à partir de leurs longitudes et latitudes.

sphere_distance_haversine(array<string|int, mixed> $point1, array<string|int, mixed> $point2) : null|float

Latitude et longitude sont exprimés en degrés (non sexagésimaux). √a φ₂-φ₁ λ₂-λ₁ d(p₁,p₂) = 2r.arctan(------) avec a = sin²(-----) + cos(φ₁).cos(φ₂).sin²(-----) √(1-a) 2 2 où r est le rayon de la terre, soit 6371,009 km φ₁ et φ₂ sont les latitudes des points p₁ et p₂ λ₁ et λ₂ sont les longitudes des points p₁ et p₂

Cette formule est plus précise grâce à l'utilisation de la fonction arctangente que celle classique avec l'arcsinus.

Parameters
$point1 : array<string|int, mixed>

Coordonnées du premier point exprimé en (latitude, longitude)

$point2 : array<string|int, mixed>

Coordonnées du deuxième point exprimé en (latitude, longitude)

Return values
null|float

Distance en kilomètres ou null si un point n'est pas un couple (latitude, longitude) valide, au sens de sphere_point_valider()

sphere_distance_loi_sinus()

Calcule la distance entre deux points d'une sphère en utilisant la loi des sinus à partir de leurs longitudes et latitudes.

sphere_distance_loi_sinus(array<string|int, mixed> $point1, array<string|int, mixed> $point2) : null|float

Latitude et longitude sont exprimés en degrés (non sexagésimaux).

d(p₁,p₂) = r.arccos(cos_β) avec cos_β = sin(φ₁).sin(φ₂) + cos(φ₁).cos(φ₂).cos(λ₂-λ₁), β étant appelé l'angle central où r est le rayon de la terre, soit 6371,009 km φ₁ et φ₂ sont les latitudes des points p₁ et p₂ λ₁ et λ₂ sont les longitudes des points p₁ et p₂

Parameters
$point1 : array<string|int, mixed>

Coordonnées du premier point exprimé en (latitude, longitude)

$point2 : array<string|int, mixed>

Coordonnées du deuxième point exprimé en (latitude, longitude)

Tags
note

Cette formule perd en précision sur les points proches : le cosinus de l'angle central y vaut presque 1 et l'arc cosinus amplifie alors l'erreur d'arrondi, au point de renvoyer plusieurs centimètres pour la distance d'un point à lui-même. Lui préférer sphere_distance_haversine(), dont l'arc tangente ne souffre pas de ce défaut.

Return values
null|float

Distance en kilomètres ou null si un point n'est pas un couple (latitude, longitude) valide, au sens de sphere_point_valider()

sphere_distance_euclidienne()

Calcule la distance euclidienne entre deux points d'une sphère, à partir de leurs longitudes et latitudes.

sphere_distance_euclidienne(array<string|int, mixed> $point1, array<string|int, mixed> $point2) : null|float

Latitude et longitude sont exprimés en degrés (non sexagésimaux).

Les coordonnées sphériques (φ,λ) sont converties en coordonnées cartésiennes (x,y,z) de la façon suivante:

  • x = r.cos(φ).cos(λ)
  • y = r.cos(φ).sin(λ)
  • z = r.sin(φ) où r est le rayon de la terre, soit 6371,009 km Il suffit alors de calculer la distance euclidienne d(p, q).

La distance obtenue est celle de la corde, c'est-à-dire du segment qui traverse la sphère, et non celle de l'arc parcouru à sa surface : elle sous-estime donc toujours la distance géodésique, d'autant plus que les points sont éloignés. L'écart reste négligeable à l'échelle régionale - de l'ordre du dixième de pour mille sur quelques centaines de kilomètres - mais atteint 10% d'un pôle à l'équateur.

Parameters
$point1 : array<string|int, mixed>

Coordonnées du premier point exprimé en (latitude, longitude)

$point2 : array<string|int, mixed>

Coordonnées du deuxième point exprimé en (latitude, longitude)

Return values
null|float

Distance en kilomètres ou null si un point n'est pas un couple (latitude, longitude) valide, au sens de sphere_point_valider()

matrice_ponderation_spatiale()

Calcule la matrice de pondération spatiale d'une liste de coordonnées exprimés en (latitude, longitude).

matrice_ponderation_spatiale(array<string|int, mixed> $coordonnees[, null|string $f_distance = 'sphere_distance_haversine' ]) : array<string|int, mixed>

Latitude et longitude sont exprimés en degrés (non sexagésimaux).

Chaque unité spatiale est pondérée par l'inverse de sa distance aux autres : plus deux unités sont proches, plus leur pondération est forte. La diagonale est nulle, une unité n'étant pas sa propre voisine. La matrice obtenue alimente notamment le calcul de l'indice d'autocorrélation spatiale de Geary.

Parameters
$coordonnees : array<string|int, mixed>

Coordonnées des points exprimés en (latitude, longitude), indexées par l'identifiant de l'unité spatiale, numérique ou non

$f_distance : null|string = 'sphere_distance_haversine'

Fonction de calcul de la distance entre points. Par défaut méthode d'Haversine

Tags
note

Deux unités de coordonnées identiques donneraient une pondération infinie : un epsilon est donc ajouté à la distance, qui plafonne la pondération sans altérer sensiblement les autres.

Return values
array<string|int, mixed>

Matrice carrée des pondérations, indexée dans les deux dimensions par les identifiants fournis, ou tableau vide si la fonction de distance est inconnue ou si une distance n'est pas calculable


        
On this page

Search results