Ich lade Kartenkacheln aus Google Maps mithilfe von Static Maps mit .NET.
Das Problem, das ich habe, ist, dass ich nicht weiß, was die SW- und NE-Koordinaten des zurückgegebenen Bildes sind.
Ich habe viele verschiedene Code-Beispiele und Formeln gefunden, aber alle scheinen fehlerhaft zu sein. Dies ist derjenige, der der richtigen Antwort am nächsten kommt. Als ich die Koordinaten in Google Maps eingegeben habe, hat es gezeigt, dass es ein bisschen weg war.
%Vor% Quellen:
Wie man Grenzen von a Google statische Karte?
Ссылка
Geladenes Bild nach Mittelpunktkoordinaten:
Ссылка
EDIT: Wow, ich habe gerade festgestellt, dass diese Frage fast zwei Jahre alt ist. Tut mir leid.
OK, also denke ich, dass hier ein paar Dinge vor sich gehen. Das Wichtigste ist, dass Sie nicht die Mercator-Projektion ausführen, die in den von Ihnen bereitgestellten Links erwähnt wird. Sie können es in Aktion mit einem Codebeispiel in den Google Maps-API-Dokumenten sehen. Ich denke, der Grund, warum Sie etwas näher kommen, ist, dass der Skalierungsfaktor bei Zoomstufe 20 so groß ist, dass er die Details des Problems übertönt.
Um die Grenzen zu erhalten, müssen Sie den Mittelpunkt lat / lon nehmen, ihn in Pixelkoordinaten umwandeln, addieren / subtrahieren, um die Pixelkoordinaten der gewünschten Ecken zu erhalten, und dann zurück in lat / lon konvertieren. Der Code in der ersten Verbindung kann die Projektion und die umgekehrte Projektion ausführen. Unten habe ich es in c # übersetzt.
In Ihrer obigen Lösung verwenden Sie Koordinaten von lat / lon und addieren / subtrahieren Weltkoordinaten (Pixelkoordinaten / Skala), so dass Sie zwei verschiedene Koordinatensysteme kombinieren.
Ein Problem, auf das ich stieß, als ich das herauszufinden versuchte, ist, dass Ihre Coordinate
-Klasse ein wenig verwirrend ist. Hoffentlich habe ich das nicht rückwärts, aber es sieht so aus, als würden Sie die Breite und Länge rückwärts eingeben. Dies ist wichtig, weil die Mercator-Projektion unter anderem in jeder Richtung unterschiedlich ist. Ihr X / Y-Mapping scheint auch rückwärts zu liegen, da Latitude Ihre Nord / Süd-Position ist, die bei Projektion die Y-Koordinate sein sollte, und Longitude ist die Ost / West-Position, die bei Projektion die X-Koordinate sein sollte.
Um die Grenzen zu finden, werden drei Koordinatensysteme benötigt: Längen- / Breitengrad, Weltkoordinaten und Pixel Koordinaten. Der Prozess ist Center Lat / Lon - (Mercator-Projektion) - & gt; Zentrum Welt Koordinaten - & gt; Zentrum Pixel Koordinaten - & gt; NE / SW Pixel Koordinaten - & gt; NE / SW-Weltkoordinaten - (Inverse Mercator-Projektion) - & gt; NE / SW Lat / Lon.
Sie finden die Pixelkoordinaten durch Addieren / Subtrahieren der Abmessungen des Bildes / 2. Das Pixelkoordinatensystem beginnt jedoch von der oberen linken Ecke, um die NE-Ecke zu erhalten, müssen Sie also Breite / 2 von x addieren und Höhe / 2 von y subtrahieren. Für die SW-Ecke müssen Sie Breite / 2 von x subtrahieren und Höhe / 2 bis y hinzufügen.
Hier ist der Projektionscode (als Teil Ihrer GoogleMapsAPI-Klasse) in c #, Übersetzung vom ersten Link oben javascript:
%Vor%Sie können den ursprünglichen JavaScript-Code für detailliertere Kommentare überprüfen.
Ich habe es getestet, indem ich die Grenzen manuell approximiert und dann mit der Antwort verglichen habe, die der Code gegeben hat. Meine manuellen Näherungswerte für die NE-Ecke waren (51.15501, 4.796695) und der Code spuckte aus (51.155005 ..., 4.797038 ...) was ziemlich nah zu sein scheint. SW Ecke ungefähr war (51.154572, 4.796007), Code spuckte aus (51.154574 ..., 4.796006 ...) .
Das war eine lustige, ich hoffe, das hilft!
BEARBEITEN: Realisiert Ich habe die neue Funktion GetBounds
nicht eingeschlossen:
Denken Sie daran, dass Sie den Breiten- und Längengrad genau da rechts haben:
%Vor%Ich weiß, dass der Code nicht der größte ist, aber ich hoffe, dass es klar ist.