Am creat un tip de hartă personalizată folosind API-ul Google Maps.
Am folosit maptiler pentru a crea diferitele zoomlere și 0 layer (cu adevărat micșorat) este o placă de 256 x 256. Cu toate acestea, imaginea acoperă doar 134 x 112.
Vreau să pot face coordonatele hărții în raport cu întreaga hartă și nu cu coordonatele de pământ implicite ale google maps. De exemplu, colțul din stânga sus ar trebui să fie (0,0) în timp ce partea din dreapta jos ar trebui să fie (50,50).
Am primit ajutor de la Heitor Chang aici: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type
Problema se află aici:
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); };
Poate cineva să mă ajute să transform aceste coordonate.
Acest lucru poate ajuta: https://developers.google.com/maps/documentation/javascript/maptypes#Projections
Răspuns
Este de fapt posibil să plasați colțul din stânga sus la 0,0 și dreapta jos la 50,50, daca asta vrei. Desigur, puteți plasa colțul din dreapta jos și la 10,10 sau orice altceva, în limitele: -90 / + 90 pentru latitudine și -180 / + 180 pentru longitudine.
Proporția ar trebui să fie:
/* ****************************************** 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); };
Apoi ar trebui să plasați centrul hărții către LatLng (25,25) în opțiunile Hartă.