Jag har skapat en anpassad karttyp med hjälp av Google Maps API.

Jag har använt maptiler för att skapa olika zoomlager och 0 lager (verkligen zoomat ut) är en 256 x 256 kakel. Men bilden täcker bara 134 x 112.

Jag vill kunna göra kartkoordinaterna i förhållande till hela kartan och inte standardkoordinaterna för google maps. Till exempel bör det övre vänstra hörnet vara (0,0) medan det nedre högra bör vara (50,50).

Jag har fått hjälp av Heitor Chang här: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type

Problemet ligger här:

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 någon hjälpa mig att omvandla dessa koordinater.

Detta kan hjälpa: https://developers.google.com/maps/documentation/javascript/maptypes#Projections

Svar

Det är faktiskt möjligt att placera ditt övre vänstra hörn på 0,0 och ditt nedre högra till 50,50, om du vill ha det här. Naturligtvis kan du placera det nedre högra hörnet vid 10,10, eller vad som helst, inom gränserna: -90 / + 90 för latitud och -180 / + 180 för longitud.

Andelen bör vara:

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

Då ska du placera mitten av kartan till LatLng (25,25) i kartalternativen.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *