Ik heb een aangepast kaarttype gemaakt met de Google Maps API.

Ik heb maptiler gebruikt om de verschillende zoomlagen te maken en de 0 laag (echt uitgezoomd) is een 256 x 256 tegel. De afbeelding beslaat echter slechts 134 x 112.

Ik wil de kaartcoördinaten relatief kunnen maken ten opzichte van de hele kaart en niet de standaard aardecoördinaten van google maps. De linkerbovenhoek moet bijvoorbeeld (0,0) zijn en de rechterbenedenhoek (50,50).

Ik heb hier hulp ontvangen van Heitor Chang: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type

Het probleem ligt 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); }; 

Kan iemand me helpen deze coördinaten om te zetten.

Dit kan helpen: https://developers.google.com/maps/documentation/javascript/maptypes#Projections

Antwoord

Het is eigenlijk mogelijk om je linkerbovenhoek op 0,0 te plaatsen en je rechterbenedenhoek op 50,50, als je dit wilt. Natuurlijk kunt u de rechter benedenhoek ook op 10,10 plaatsen, of wat dan ook, binnen de limieten: -90 / + 90 voor breedtegraad en -180 / + 180 voor lengtegraad.

De verhouding moet zijn:

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

Plaats dan het midden van de kaart naar LatLng (25,25) in de kaartopties.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *