Někdy si člověk může chtít porovnat více mapových podkladů nebo mu v nějakém místě vybraná mapa nevyhovuje. Hledat stejné místo v jiném rozhraní může být otrava, proto jsem si připravil mapu založenou na API jednotlivých map, která v jednom rozhraní zobrazuje mapy Googlu, Seznamu a Atlasu.
Jakub Vrána:
Máte pravdu. Kód jsem předělal tak, aby využíval API jednotlivých rozhraní v souladu s licencí. Zde je původní kód:
function MapyCzProjection() {
this.fromLatLngToPixel = function (latlng, zoom) {
var pixel = MapyCzProjection.prototype.fromLatLngToPixel(latlng, zoom);
pixel.x *= 1.5;
pixel.y *= 1.5;
return pixel;
};
this.fromPixelToLatLng = function (pixel, zoom, unbounded) {
pixel.x /= 1.5;
pixel.y /= 1.5;
return MapyCzProjection.prototype.fromPixelToLatLng(pixel, zoom, unbounded);
};
}
MapyCzProjection.prototype = new GMercatorProjection(18);
window.onload = function () {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById('gmap-mapy'), { mapTypes: [ G_NORMAL_MAP ] });
map.addControl(new GMapTypeControl());
map.addControl(new GLargeMapControl());
map.addControl(new GScaleControl());
map.setCenter(new GLatLng(50.04, 14.33), 16);
mapyCzProjection = new MapyCzProjection();
var mapyCzTileLayer = new GTileLayer(new GCopyrightCollection(), 4, 17);
mapyCzTileLayer.getCopyright = function (bounds, zoom) {
return (zoom <= 5 ? '© Seznam.cz, a.s.' : '© PLANstudio, 2005-07');
}
mapyCzTileLayer.getTileUrl = function (tile, zoom) {
var x = (tile.x - Math.round(36847 / Math.pow(2, 16 - zoom))) * Math.pow(2, 29 - zoom);
var y = (Math.round(49897 / Math.pow(2, 16 - zoom)) - tile.y) * Math.pow(2, 29 - zoom);
return 'http://m' + ((tile.x+tile.y) % 4 + 1) + '.mapserver.mapy.cz/base/' + (zoom - 1) + '_' + x.toString(16) + '_' + y.toString(16);
};
map.addMapType(new GMapType([ mapyCzTileLayer ], mapyCzProjection, 'Mapy.cz'));
var aMapyTileLayer = new GTileLayer(new GCopyrightCollection(), 4, 17);
aMapyTileLayer.getCopyright = function (bounds, zoom) {
return '© 2006, DPA s.r.o.';
}
aMapyTileLayer.getTileUrl = function (tile, zoom) {
var reduce = Math.pow(2, 16 - zoom);
var x = (tile.x - Math.round((zoom >= 10 ? 52386 : 44672) / reduce));
var y = (tile.y - Math.round((zoom >= 10 ? 32825 : 23808) / reduce));
var block = (zoom >= 10 ? Math.floor(y / reduce + (zoom == 17 && x > 1000 ? 1 : 0)) : (zoom == 9 ? 5 : (zoom == 8 ? 1 : 0)));
return 'http://m' + ((tile.x+tile.y) % 4 + 1) + '.amapy.atlas.cz/cache/' + (zoom >= 10 ? 'cr' : 'evropa') + '/2.0/' + reduce + '/0/' + block + '/' + x + '_' + y + '.gif';
};
map.addMapType(new GMapType([ aMapyTileLayer ], mapyCzProjection, 'AMapy'));
}
}
window.onunload = GUnload;
Šedě jsou podbarveny příspěvky, které jste už viděli.
Diskuse je uzavřena.