Клуб API Карт

Пользовательские карты, загрузка тайлов

onedreamW
4 августа 2010, 10:53

Доброе время суток.

Вопрос по формированию урла тайлов.

На данный момент загрузка пользовательской карты у меня выглядит вот так (сделано по примеру):

                var options = {
                    tileUrlTemplate: "http://www.andboson.net/genmap/%z/tile-%x-%y.png",
                    backgroundMapType: YMaps.MapType.MAP,
                    isTransparent: true,
                    smoothZooming: false,
                    copyright: "maps.vlasenko.net"
                },
            myData = new YMaps.TileDataSource(options.tileUrlTemplate, options.isTransparent, options.smoothZooming);
            myData.getTileUrl = function (tile, zoom) {
                return this.getTileUrlTemplate().replace(/%x/i, tile.x).replace(/%y/i, tile.y).replace(/%z/i, zoom);
            }
            var MyLayer = function () {
                return new YMaps.Layer(myData);
            }
            YMaps.Layers.add("genshtab", MyLayer);
           myMapType = new YMaps.MapType(["map","genshtab"], "Генштаб", { textColor: "#000000", maxZoom: 13,  minZoom: 10});

хочется чтобы загрузка тайлов происходила быстрее, где ставить переменную %d, отвечающую за номер домена?

Примерно так:

http://map%d.andboson.net/%z/tile-%x-%y.png  ?

6 комментариев
Подписаться на комментарии к посту
В tileUrlTemplate:

var options = {
    tileUrlTemplate: "http://www.map%d.andboson.net/genmap/%z/tile-%x-%y.png",
    ...

Соответственно в методе getTIleUrl нужно заменять %d на номер (я для примера заменил на 1):

myData.getTileUrl = function (tile, zoom) {
    return this.getTileUrlTemplate().replace(/%x/i, tile.x).replace(/%y/i, tile.y).replace(/%z/i, zoom).replace(/%d/i, 1);
}

Не совсем понятно, как тогда реализовать загрузку с, к примеру, двух серверов, если getTileUrl уже переопределен на
return this.getTileUrlTemplate().replace(/%x/i, tile.x).replace(/%y/i, tile.y).replace(/%z/i, zoom).replace(/%d/i, 1);

т.е. на первый номер.

Может сделать чередование, по одному запросу она отдает

return this.getTileUrlTemplate().replace(/%x/i, tile.x).replace(/%y/i, tile.y).replace(/%z/i, zoom).replace(/%d/i, 1);
а по следующему
return this.getTileUrlTemplate().replace(/%x/i, tile.x).replace(/%y/i, tile.y).replace(/%z/i, zoom).replace(/%d/i, 2);

?
Сделайте чередование.
Чередовать неверно. Тогда у вас на каждый тайл будет два разных урла, что в два раза снизит эффективность браузерного кеша. Нужно вычислять цифру в зависимости от номеров тайла.
Например в АПИ это делается следующим образом:

.replace('%d', (2 * (tile.x & 1) + (tile.y & 1) + 1))

это замена на число от 1 до 4.
ну вот, именно эту формулу я и хотел увидеть, очевидно плохо формирую вопросы :)
Пока что, сделал три поддомена на сайте, где лежат тайлы.

.replace('%d', (1 * (tile.x & 1) + (tile.y & 1) + 1))


визуально, карта стала грузиться быстрее