Comment convertir la latitude et la longitude en coordonnées de pixels en utilisant PHP

PHPz
Libérer: 2023-04-24 14:20:37
original
645 Les gens l'ont consulté

Avec le développement continu de la technologie Web, de plus en plus de sites Web présentent désormais des informations sous forme de cartes, et l'affichage d'un point d'étiquette approprié sur la carte est un problème technique très critique. Lorsque nous utilisons des cartes pour afficher des données, nous devons parfois convertir les coordonnées de longitude et de latitude sur la carte en coordonnées en pixels, par exemple en localisant automatiquement des points marqueurs sur la carte. Par conséquent, dans cet article, nous présenterons comment convertir la latitude et la longitude en coordonnées en pixels à l'aide de PHP.

Que sont la latitude, la longitude et les coordonnées en pixels ?

Avant de commencer à expliquer comment convertir la latitude et la longitude en coordonnées en pixels, nous devons comprendre les concepts de base de la latitude, de la longitude et des coordonnées en pixels.

Les coordonnées obtenues à partir de la carte sont la longitude et la latitude, où la longitude fait référence à la position d'un point à l'ouest de la terre, et la latitude fait référence à la position d'un point au sud ou au nord de l'équateur.

Les coordonnées de pixels sont les coordonnées sur l'écran, qui sont composées de pixels sur l'écran.

Lors de l'affichage des données sur une carte, nous devons convertir la latitude et la longitude en coordonnées en pixels afin de localiser l'emplacement spécifique.

Calculer la latitude et la longitude en fonction des pixels

Ensuite, nous apprendrons comment calculer la latitude et la longitude en fonction des coordonnées en pixels. Dans ce processus, nous devons utiliser quelques mathématiques de base. Voici le code de ce processus :

function pixel2LatLng($x, $y, $zoom) {
    $numTiles = 1 << $zoom; // 2 ^ zoom
    $tileSize = 256;
    $x /= $tileSize;
    $y /= $tileSize;
    $x = min($x, $numTiles - 1);
    $y = min($y, $numTiles - 1);
    $lng = ($x / $numTiles) * 360.0 - 180.0;
    $lat = rad2deg(atan(sinh(pi() * (1 - 2 * $y / $numTiles))));
    return [&#39;lat&#39; => $lat, 'lng' => $lng];
}
Copier après la connexion

Cette fonction reçoit 3 paramètres, qui sont les coordonnées $x, $y du pixel et le paramètre $zoom, qui décrit le niveau de zoom. Ensuite, nous créons deux variables, $numTiles et $tileSize, qui représentent le nombre de tuiles de carte 2D standard et la taille de chaque tuile, qui est de 256 pixels.

Notez que lors de la conversion des coordonnées de pixels, nous devons d'abord diviser les coordonnées par $tileSize pour nous assurer qu'elles se situent dans la plage standard. Limitez-les ensuite à la valeur maximale dans chaque dimension pour éviter qu'ils ne dépassent la zone d'affichage de la carte.

Ensuite, utilisez des formules mathématiques simples pour calculer la latitude et la longitude. Tout d’abord, nous calculons $lng, qui est la longitude correspondant à la coordonnée du pixel $x. Pour ce faire, nous utilisons le calcul de soustraction (([$x / $numTiles) * 360.0 - 180.0]) qui nous donne l'échelle de degrés du pixel, puis nous en soustrayons 180 degrés. La raison pour laquelle vous devez soustraire 180 degrés est que la longitude peut être comprise entre -180 et +180 degrés. Nous devons donc limiter la valeur à cette plage.

Enfin, nous calculons la valeur de latitude et renvoyons un tableau associatif contenant les coordonnées $lat et $lng.

Calculer les coordonnées de pixels en fonction de la longitude et de la latitude

À l'inverse du processus ci-dessus, nous pouvons également calculer un point de coordonnées de pixels en fonction de la longitude et de la latitude. Voici le code de ce processus :

function latLng2Pixel($latitude, $longitude, $zoom) {
    $numTiles = 1 << $zoom; // 2 ^ zoom
    $tileSize = 256;
    $x = round(($longitude + 180.0) / 360.0 * $numTiles);
    $y = round((1.0 - log(tan(deg2rad($latitude)) + 1.0 / cos(deg2rad($latitude))) / pi()) / 2.0 * $numTiles);
    return [&#39;x&#39; => $x * $tileSize, 'y' => $y * $tileSize];
}
Copier après la connexion

Cette fonction est très similaire à celle ci-dessus, sauf qu'elle calcule les coordonnées des pixels en fonction de la latitude et de la longitude au lieu de l'inverse. Nous utilisons les mêmes variables que précédemment, $numTiles et $tileSize, et introduisons les variables $lat et $lng pour représenter les valeurs de latitude et de longitude transmises à la fonction.

Ensuite, nous effectuons d'abord un calcul simple pour obtenir la coordonnée en pixels de $x. L'idée de cette formule est que lorsque nous nous déplaçons sur la carte, comme la longitude peut changer de -180 degrés à +180 degrés, nous ajoutons d'abord 180 degrés à la longitude spécifiée afin qu'après avoir déterminé 0 degré, le résultat calculé puisse être garanti est une valeur positive. Ensuite, nous divisons cette valeur par 360 degrés pour obtenir la coordonnée x de l'emplacement du point décimal et la multiplions par le nombre puissance 2 de la carte, $numTiles, pour obtenir les coordonnées en pixels.

Ensuite, nous calculons la coordonnée en pixels de $y. Lorsque vous voyagez sur la carte, la latitude peut changer de -90 degrés à +90 degrés. L'idée de cette formule est qu'à partir d'un point de référence (l'équateur), on utilise les fonctions tangente et arctangente pour calculer la distance jusqu'à et autour du point que l'on veut trouver. Enfin, nous divisons par $tileSize pour convertir les coordonnées des pixels en pixels au lieu de coordonnées.

Enfin, renvoyez un tableau associatif contenant les coordonnées $x et $y.

Résumé

Ce qui précède est la méthode d'implémentation PHP permettant de convertir la longitude et la latitude en coordonnées en pixels et de convertir les coordonnées en pixels en longitude et latitude. Ces deux techniques de transformation peuvent être très utiles lors de l'affichage de données à l'aide de cartes. J'espère que cet article vous aidera !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!