Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie Breiten- und Längengrade mit PHP in Pixelkoordinaten

So konvertieren Sie Breiten- und Längengrade mit PHP in Pixelkoordinaten

PHPz
PHPzOriginal
2023-04-24 10:51:22649Durchsuche

Mit der kontinuierlichen Weiterentwicklung der Web-Technologie stellen immer mehr Websites Informationen über Karten dar, und die Anzeige eines geeigneten Beschriftungspunkts auf der Karte ist ein sehr kritisches technisches Problem. Wenn wir Karten zum Anzeigen von Daten verwenden, müssen wir manchmal die Längen- und Breitengradkoordinaten auf der Karte in Pixelkoordinaten umwandeln, um beispielsweise automatisch Markierungspunkte auf der Karte zu lokalisieren. Daher stellen wir in diesem Artikel vor, wie man mit PHP Breiten- und Längengrade in Pixelkoordinaten umwandelt.

Was sind Breiten- und Längengrade und Pixelkoordinaten?

Bevor wir erklären, wie Breiten- und Längengrade in Pixelkoordinaten umgewandelt werden, müssen wir die Grundkonzepte von Breiten- und Längengraden sowie Pixelkoordinaten verstehen.

Die aus der Karte erhaltenen Koordinaten sind Längen- und Breitengrad, wobei sich der Längengrad auf die Position eines Punktes westlich der Erde und der Breitengrad auf die Position eines Punktes südlich oder nördlich des Äquators bezieht.

Die Pixelkoordinaten sind die Koordinaten auf dem Bildschirm, die aus Pixeln auf dem Bildschirm bestehen.

Bei der Anzeige von Daten auf der Karte müssen wir den Längen- und Breitengrad in Pixelkoordinaten umwandeln, um den spezifischen Standort zu lokalisieren.

Breiten- und Längengrad anhand von Pixeln berechnen

Als nächstes lernen wir, wie man Breiten- und Längengrad anhand von Pixelkoordinaten berechnen kann. In diesem Prozess müssen wir einige grundlegende Mathematik anwenden. Hier ist der Code für diesen Prozess:

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];
}

Diese Funktion empfängt 3 Parameter, nämlich die $x-, $y-Koordinaten des Pixels und den $zoom-Parameter, der die Zoomstufe beschreibt. Als Nächstes erstellen wir zwei Variablen, $numTiles und $tileSize, die die Anzahl der standardmäßigen 2D-Kartenkacheln und die Größe jeder Kachel (256 Pixel) darstellen.

Beachten Sie, dass wir beim Konvertieren von Pixelkoordinaten zunächst die Koordinaten durch $tileSize dividieren müssen, um sicherzustellen, dass sie im Standardbereich liegen. Begrenzen Sie sie dann in jeder Dimension auf den Maximalwert, um zu vermeiden, dass sie den Kartenanzeigebereich überschreiten.

Als nächstes verwenden Sie einfache mathematische Formeln, um den Breiten- und Längengrad zu berechnen. Zuerst berechnen wir $lng, den Längengrad, der der Pixelkoordinate $x entspricht. Dazu verwenden wir die Subtraktionsrechnung (([$x / $numTiles) * 360,0 - 180,0]), die uns die Gradskala des Pixels liefert, und subtrahieren dann 180 Grad davon. Der Grund, warum Sie 180 Grad subtrahieren müssen, liegt darin, dass der Längengrad zwischen -180 und +180 Grad liegen kann. Daher müssen wir den Wert auf diesen Bereich begrenzen.

Schließlich berechnen wir den Breitengradwert und geben ein assoziatives Array zurück, das die Koordinaten $lat und $lng enthält.

Pixelkoordinaten basierend auf Längen- und Breitengrad berechnen

Umgekehrt zum obigen Prozess können wir auch einen Pixelkoordinatenpunkt basierend auf Längen- und Breitengrad berechnen. Hier ist der Code für diesen Prozess:

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];
}

Diese Funktion ist der obigen sehr ähnlich, außer dass sie Pixelkoordinaten basierend auf Breiten- und Längengrad berechnet und nicht umgekehrt. Wir verwenden die gleichen Variablen wie zuvor, $numTiles und $tileSize, und führen die Variablen $lat und $lng ein, um die an die Funktion übergebenen Breiten- und Längenwerte darzustellen.

Dann führen wir zunächst eine einfache Berechnung durch, um die Pixelkoordinate von $x zu ermitteln. Die Idee dieser Formel besteht darin, dass wir beim Bewegen auf der Karte, da sich der Längengrad von -180 Grad auf +180 Grad ändern kann, zunächst 180 Grad zum angegebenen Längengrad addieren, sodass nach der Bestimmung von 0 Grad das berechnete Ergebnis vorliegen kann garantiert ist ein positiver Wert. Als nächstes dividieren wir diesen Wert durch 360 Grad, um die x-Koordinate der Dezimalpunktposition zu erhalten, und multiplizieren ihn mit der Zweierpotenz der Karte, $numTiles, um die Pixelkoordinaten zu erhalten.

Als nächstes berechnen wir die Pixelkoordinate von $y. Beim Reisen auf der Karte kann sich der Breitengrad von -90 Grad bis +90 Grad ändern. Die Idee dieser Formel besteht darin, dass wir ausgehend von einem Referenzpunkt (dem Äquator) mithilfe der Tangens- und Arkustangensfunktionen die Entfernung zu und um den Punkt berechnen, den wir finden möchten. Schließlich dividieren wir durch $tileSize, um die Pixelkoordinaten in Pixel statt in Koordinaten umzuwandeln.

Zum Schluss geben Sie ein assoziatives Array zurück, das die Koordinaten $x und $y enthält.

Zusammenfassung

Das Obige ist die PHP-Implementierungsmethode zum Konvertieren von Längen- und Breitengraden in Pixelkoordinaten und zum Konvertieren von Pixelkoordinaten in Längen- und Breitengrade. Diese beiden Transformationstechniken können bei der Anzeige von Daten mithilfe von Karten sehr nützlich sein. Ich hoffe, dieser Artikel hilft Ihnen!

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie Breiten- und Längengrade mit PHP in Pixelkoordinaten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn