He creado un tipo de mapa personalizado utilizando la API de Google Maps.

He utilizado maptiler para crear los diferentes zoomlayers y el 0 La capa (realmente alejada) es un mosaico de 256 x 256. Sin embargo, la imagen solo cubre 134 x 112.

Quiero poder hacer que las coordenadas del mapa sean relativas a todo el mapa y no las coordenadas terrestres predeterminadas de Google Maps. Por ejemplo, la esquina superior izquierda debería ser (0,0) mientras que la esquina inferior derecha debería ser (50,50).

He recibido ayuda de Heitor Chang aquí: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type

El problema radica aquí:

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

¿Alguien puede ayudarme a transformar estas coordenadas?

Esto puede ayudar: https://developers.google.com/maps/documentation/javascript/maptypes#Projections

Respuesta

De hecho, es posible colocar la esquina superior izquierda en 0,0 y la esquina inferior derecha en 50,50, si quieres esto. Por supuesto, también puede colocar la esquina inferior derecha en 10,10, o lo que sea, dentro de los límites: -90 / + 90 para la latitud y -180 / + 180 para la longitud.

La proporción debe ser:

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

Luego, debes colocar el centro del mapa en LatLng (25,25) en las opciones de Mapa.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *