Egyéni térképtípust készítettem a Google Maps API használatával.

A maptiler segítségével hoztam létre a különböző zoomállomásokat és a 0 réteg (valóban kicsinyítve) egy 256 x 256 csempe. A kép azonban csak 134 x 112 méretű.

Szeretném megadni a térkép koordinátáit a teljes térképhez képest, nem pedig a google maps alapértelmezett földkoordinátáit. Például a bal felső saroknak (0,0), míg a jobb alsónak (50,50) kell lennie.

Itt kaptam segítséget a Heitor Chang-tól: https://stackoverflow.com/questions/11192281/can-i-reset-latlng-coordinates-for-a-custom-map-type

A probléma itt rejlik:

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

Tudna valaki segíteni ezen koordináták átalakításában.

Ez segíthet: https://developers.google.com/maps/documentation/javascript/maptypes#Projections

Válasz

Valójában lehetséges a bal felső sarok 0,0-ra, a jobb alsó sarok pedig 50,50-re, ha ezt akarod. Természetesen a jobb alsó sarkot is elhelyezheti 10,10-nél, vagy bárhol máshol, a következő határokon belül: -90 / + 90 szélesség és -180 / + 180 hosszúság esetén.

Az arány legyen:

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

Ezután helyezze a térkép közepét a LatLng (25,25) helyre a Térkép opciókban.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük