Клуб API Карт

Много объектов на карте

urrisoft
23 декабря 2010, 22:37
Добрый день, уважаемые...

Активно использую яндекс карты для своего проекта. Но вот возникла такая задача: нужно разместить много объектов (меток, линий, многоугольников на карте) - сейчас уже 25000, а планируется более 100000. Для решения этой проблемы разработчиками предлагается механизм активных областей (не совсем удобный, но и на том спасибо: кстати, может уважаемые разработчики расширят возможности этого механизма, чтобы можно было использовать метки и линии, а не моделировать их с помощью многоугольников?). Но лучшим выходом для себя решил воспользоваться слоями активных областей, для работы которых необходимо получить набор тайлов, которые формируются приложением, разработанным сторонним разработчиком twirl (неплохо бы было, если бы уважаемые разработчики API сделали что-то подобное на JavaScript, а то для работы этого приложения пришлось осваивать Apache и PHP (в нашей конторе ранее эта связка никакого развития не имела, потратили неделю). И вот как бы все заработало, предлагаю броузеру Index.PHP, генерируется HTML страница, приведенная ниже, возникает сообщение с веб-страницы "Неправильный ключ" и более ничего не происходит. А хочется видеть обещанные тайлы.

Подскажите, пожалуйста, где искать решение, очень надо.
Вот текст HTML страницы:
<!doctype html>
<html><head>
    <title>Test</title>
        <!-- Подключаем API -->
        <script src="http://api-maps.yandex.ru/1.1/index.xml?key=AHJBjksBAAAAxW35aQMATpaR0cEdAoLyMNd1MwmoHxfCr8UAAAAAAAAAAAB0Ripz_KiouiTOADvM4qIS8oJ3yA==&modules=hotspots" type="text/javascript"></script>
        <!-- Подключаем файл со стилями -->
        <script src="styles.js" type="text/javascript"></script>
        <script type="text/javascript">
        window.onload = function () {
            // Создаем и инициализируем карту
            var map = new YMaps.Map(document.getElementById("YMapsID"));
            map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 0);

            // Вспомогательная функция обработки шаблонов
            function processTemplate (template, tile, zoom) {
                return template.replace(/%x/ig, tile.getX()).replace(/%y/ig, tile.getY()).replace(/%z/ig, zoom);
            }

            // Источник тайлов с изображениями
            var ds = new YMaps.TileDataSource('png/%z/tile-%x-%y.png', 1, 0);
            ds.getTileUrl = function (tileNumber, zoom) {
                return processTemplate(
                    YMaps.TileDataSource.prototype.getTileUrl.call(this, tileNumber, zoom),
                    tileNumber,
                    zoom
                );
            };
            // Добавляем "картиночный" слой на карту
            map.addLayer(new YMaps.Layer(ds));

            // Источник тайлов с описаниями активных областей
            var os = new YMaps.Hotspots.ObjectSource('js/%z/tile-%x-%y.js', 'myLayer-%x-%y-%z');
            os.getTileUrl = function (tileNumber, zoom) {
                return processTemplate(
                    YMaps.Hotspots.ObjectSource.prototype.getTileUrl.call(this, tileNumber, zoom),
                    tileNumber,
                    zoom
                );
            };
            os.getKey = function (tileNumber, zoom) {
                return processTemplate(
                    YMaps.Hotspots.ObjectSource.prototype.getKey.call(this, tileNumber, zoom),
                    tileNumber,
                    zoom
                );
            };
            // Добавляем слой активных областей на карту
            var hLayer = new YMaps.Hotspots.Layer(os);
            map.addLayer(hLayer);

            map.enableScrollZoom();
        }
    </script>
</head><body>
    <div id="YMapsID" style="height: 700px; width: 1200px;"></div>
    <a href="../index.php">Back</a>
</body></html>
3 комментария
Подписаться на комментарии к посту
Ну допустим никакой не сторонний, а свой, родной, :-) он один из "уважаемых разработчиков АПИ".
То что тайлер написан на php, продиктовано популярностью это языка среди пользователей апи и соответственно участников этого клуба. В яндексе на php не пишут, предпочитая ему python, lua, но смысла писать на этих замечательных языках инструменты для апи нет никакого, почему см. предыдущее предложение.

Впрочем Вы могли бы и сами написать тайлер на том в чем пишут в вашей конторе и поделиться вашим решением в клубе и/или на гитхабе, но почему то предпочли копи-пастить готовое и настраивать php/apache неделю (что собственно делается за 10 мин. в интернетах есть куча мануалов)

Расскажите, пожалуйста, поподробнее про Ваше предложение по реализации его (тайлера) в javascript.
Очень интересно как Вы предлагаете на клиенте (в броузере) резать тайлы и сохранять файлы.

Что касается "Неправильный ключ", то Вам нужно грузить АПИ на страницах того домена, который Вы указали при его (ключа) получении. Ну либо на локалхосте
Дык так и сделали. Попробовали оба варианта. И в обоих случаях эффект одинаково отрицательный.
дайте ссылку на страницу