Olen tehnyt mukautetun karttatyypin Google Maps -sovellusliittymän avulla.
Olen käyttänyt maptileria eri zoomauskerrosten ja 0 kerros (todella loitonnettu) on 256 x 256 ruutu. Kuva kattaa kuitenkin vain 134 x 112.
Haluan pystyä määrittämään kartan koordinaatit suhteessa koko karttaan eikä Google Mapsin oletusmaadoituskoordinaatit. Esimerkiksi vasemman yläkulman tulisi olla (0,0), kun taas oikean alakulman (50,50).
Olen saanut apua Heitor Changilta: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type
Ongelma on tässä:
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); };
Voiko kukaan auttaa minua näiden koordinaattien muuntamisessa.
Tämä voi auttaa: https://developers.google.com/maps/documentation/javascript/maptypes#Projections
Vastaa
Vasemman yläkulman voi todella sijoittaa 0,0 ja oikean alakulman 50,50, jos haluat tämän. Tietenkin voit sijoittaa oikean alakulman myös kohtaan 10,10 tai mihin tahansa seuraavissa rajoissa: -90 / + 90 leveysasteelle ja -180 / + 180 pituusasteelle.
Suhteen tulee olla:
/* ****************************************** 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); };
Sitten sinun tulisi sijoittaa kartan keskipiste LatLng: iin (25,25) Karttavaihtoehtoihin.