Utworzyłem niestandardowy typ mapy przy użyciu interfejsu API Map Google.

Użyłem narzędzia maptiler do utworzenia różnych elementów powiększających i 0 warstwa (naprawdę pomniejszona) to kafelek 256 x 256. Obraz obejmuje jednak tylko 134 x 112.

Chcę mieć możliwość ustawienia współrzędnych mapy względem całej mapy, a nie domyślnych współrzędnych Ziemi w mapach Google. Na przykład lewy górny róg powinien być (0,0), a prawy dolny powinien być (50,50).

Otrzymałem pomoc od Heitor Chang tutaj: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type

Problem leży tutaj:

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

Czy ktoś może mi pomóc w przekształceniu tych współrzędnych.

Może to pomóc: https://developers.google.com/maps/documentation/javascript/maptypes#Projections

Odpowiedź

W rzeczywistości możliwe jest ustawienie lewego górnego rogu na 0,0, a prawego dolnego na 50,50, Jeśli tego chcesz. Oczywiście możesz również ustawić prawy dolny róg na 10,10 lub cokolwiek innego, w granicach: -90 / + 90 dla szerokości geograficznej i -180 / + 180 dla długości geograficznej.

Proporcja powinna wynosić:

/* ****************************************** 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); }; 

Następnie w opcjach mapy należy umieścić środek mapy w pozycji LatLng (25,25).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *