Ich habe mithilfe der Google Maps-API einen benutzerdefinierten Kartentyp erstellt.

Ich habe Maptiler verwendet, um die verschiedenen Zoomschichten und die 0 zu erstellen Ebene (wirklich herausgezoomt) ist eine 256 x 256 Kachel. Das Bild deckt jedoch nur 134 x 112 ab.

Ich möchte in der Lage sein, die Kartenkoordinaten relativ zur gesamten Karte und nicht die Standard-Erdkoordinaten von Google Maps zu erstellen. Zum Beispiel sollte die obere linke Ecke (0,0) sein, während die untere rechte Ecke (50,50) sein sollte.

Ich habe hier Hilfe von Heitor Chang erhalten: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type

Das Problem liegt hier:

dayzProjection.prototype.fromLatLngToPoint = function(latlng) { // pixel size of tile at zoom 0 var max = 134; // define bottom-right corner as (50, 50) var x = max * latlng.lng() / 50; var y = max * latlng.lat() / 50; return new google.maps.Point(x, y); }; dayzProjection.prototype.fromPointToLatLng = function(pixel) { // inverse conversion var lng = pixel.x / max * 50; var lat = pixel.y / max * 50; return new google.maps.LatLng(lat, lng); }; 

Kann mir jemand helfen, diese Koordinaten zu transformieren.

Dies kann helfen: https://developers.google.com/maps/documentation/javascript/maptypes#Projections

Antwort

Es ist tatsächlich möglich, Ihre obere linke Ecke bei 0,0 und Ihre untere rechte bei 50,50 zu platzieren. wenn du das willst. Natürlich können Sie die untere rechte Ecke auch bei 10,10 oder was auch immer innerhalb der Grenzen platzieren: -90 / + 90 für den Breitengrad und -180 / + 180 für den Längengrad.

Der Anteil sollte sein:

/* ****************************************** Custom Projection - CARTESIAN ****************************************** */ function CartesianProjection() { // map size at zoom 0 is equal to tile size this.tileSize = 256; }; CartesianProjection.prototype.fromLatLngToPoint = function(latLng) { var x = (latLng.lng() / 50) * this.tileSize; var y = (latLng.lat() / 50) * this.tileSize; return new google.maps.Point(x, y); }; CartesianProjection.prototype.fromPointToLatLng = function(point, noWrap) { var lng = (point.x / this.tileSize) * 50; var lat = (point.y / this.tileSize) * 50; return new google.maps.LatLng(lat, lng, noWrap); }; 

Dann sollten Sie die Mitte der Karte in den Kartenoptionen auf LatLng (25,25) setzen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.