Jeg har lavet en brugerdefineret korttype ved hjælp af Google Maps API.
Jeg har brugt maptiler til at oprette de forskellige zoomlag og 0 lag (virkelig zoomet ud) er en 256 x 256 flise. Billedet dækker dog kun 134 x 112.
Jeg vil være i stand til at lave kortkoordinaterne i forhold til hele kortet og ikke standardjordkoordinaterne på google maps. For eksempel skal det øverste venstre hjørne være (0,0), mens det nederste højre skal være (50,50).
Jeg har modtaget hjælp 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 nogen hjælpe mig med at transformere disse koordinater.
Dette kan hjælpe: https://developers.google.com/maps/documentation/javascript/maptypes#Projections
Svar
Det er faktisk muligt at placere dit øverste venstre hjørne på 0,0 og dit nederste højre på 50,50, hvis du vil have dette. Selvfølgelig kan du placere nederste højre hjørne ved 10,10 også eller hvad som helst inden for grænserne: -90 / + 90 for breddegrad og -180 / + 180 for længdegrad.
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); };
Derefter skal du placere midten af kortet til LatLng (25,25) i kortindstillingerne.