Jeg har laget en egendefinert karttype ved hjelp av Google Maps API.
Jeg har brukt maptiler til å lage de forskjellige zoomlagene og 0 lag (virkelig zoomet ut) er en 256 x 256 flis. Bildet dekker imidlertid bare 134 x 112.
Jeg ønsker å kunne lage kartkoordinatene i forhold til hele kartet, og ikke standardjordkoordinatene til google maps. For eksempel skal øverste venstre hjørne være (0,0) mens nederst til høyre skal være (50,50).
Jeg har fått hjelp fra Heitor Chang her: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type
Problemet ligger her:
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 noen hjelpe meg med å transformere disse koordinatene.
Dette kan hjelpe: https://developers.google.com/maps/documentation/javascript/maptypes#Projections
Svar
Det er faktisk mulig å plassere ditt øverste venstre hjørne på 0,0 og ditt nederste høyre på 50,50, hvis du vil ha dette. Selvfølgelig kan du plassere nederste høyre hjørne ved 10,10 også, eller hva som helst, innenfor grensene: -90 / + 90 for breddegrad og -180 / + 180 for lengdegrad.
Andelen skal være:
/* ****************************************** 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); };
Deretter bør du plassere midten av kartet til LatLng (25,25) i kartalternativene.