Клуб API Карт

Проблема со сменой меток на карте.

Opite
23 декабря 2011, 11:22

Всем здравствуйте.

Сделал на сайте карту с офисами. Но ни как не могу поменять метки по умолчанию.

Задание точек сделано через динамическое формирование xml файла по средству php скрипта.

<?xml version=\"1.0\" encoding=\"windows-1251\"?>
    <ymaps:ymaps xmlns:ymaps=\"http://maps.yandex.ru/ymaps/1.x\"
        xmlns:repr=\"http://maps.yandex.ru/representation/1.x\"
        xmlns:gml=\"http://www.opengis.net/gml\"
        xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
        xsi:schemaLocation=\"http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd\">
    <repr:Representation>
        <repr:View>
            <repr:mapType>".$this->last_settings['yandex_map_setting_map_type']."</repr:mapType>
        </repr:View>
        <repr:Style gml:id=\"MyStyle\">
            <repr:iconStyle>
                <repr:href>http://company.yandex.ru/i/ya.png</repr:href>
                <repr:size x=\"57\" y=\"55\"/>
                <repr:offset x=\"-37\" y=\"0\"/>
                <repr:shadow>
                    <repr:href>http://company.yandex.ru/i/shadow.png</repr:href>
                    <repr:size x=\"57\" y=\"55\"/>
                    <repr:offset x=\"-37\" y=\"0\"/>
                </repr:shadow>
            </repr:iconStyle>

            <repr:iconContentStyle>
                <repr:template>#StyleForMarkTemplate</repr:template>
            </repr:iconContentStyle>

            <repr:hintContentStyle>
                <repr:template>#StyleForHintTemplate</repr:template>
            </repr:hintContentStyle>

            <repr:balloonContentStyle>
                <repr:template>#StyleForBallounTemplate</repr:template>
            </repr:balloonContentStyle>
        </repr:Style>

        <repr:Template gml:id=\"StyleForMarkTemplate\">
            <repr:text><![CDATA[<div><strong>$[metaDataProperty.AnyMetaData.info.number]</strong></div>]]></repr:text>
        </repr:Template>
        <repr:Template gml:id=\"StyleForHintTemplate\">
            <repr:text><![CDATA[<div><p><strong>$[name]</strong></p></div>]]></repr:text>
        </repr:Template>
        <repr:Template gml:id=\"StyleForBallounTemplate\">
            <repr:text><![CDATA[
                            <div>
                                <h3><strong>$[name]</strong></h3>
                                    <p><strong>Адрес: </strong>$[metaDataProperty.AnyMetaData.info.address|не указан]</p>
                                    <p><strong>Телефон: </strong>$[metaDataProperty.AnyMetaData.info.phone|не указан]</p>
                            </div>
                        ]]>
            </repr:text>
        </repr:Template>
    </repr:Representation>

    <ymaps:GeoObjectCollection>
        <ymaps:style>#MyStyle</ymaps:style>
        <gml:name>Офисы ...</gml:name>
            <gml:featureMembers>
                <ymaps:GeoObject>
                    <gml:name>... офис № ".$val['off_num']."</gml:name>
                    <gml:description>".$val['off_address']."; Телефон: ".$val['off_phone']."</gml:description>
                    <gml:metaDataProperty>
                        <AnyMetaData>
                            <info>
                                <number>".$val['off_num']."</number>
                                <address>".$val['off_address']."</address>
                                <phone>".$val['off_phone']."</phone>
                            </info>
                        </AnyMetaData>
                    </gml:metaDataProperty>
                    <gml:Point>
                        <gml:pos>".$val['yandex_map_item_latitude']." ".$val['yandex_map_item_longitude']."</gml:pos>
                    </gml:Point>
                </ymaps:GeoObject>";

            </gml:featureMembers>
    </ymaps:GeoObjectCollection>
</ymaps:ymaps>

 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 4.0 Transitional//EN">
<HTML>
<head>
 <title>Контакты.</title>
 <meta http-equiv="Content-Type" content="text/xml; Charset=Windows-1251" />
   <link rel="alternate" href="http://.../rss/rss_hotspo.php" title="..." type="application/rss+xml" />
 <link rel="alternate" href="http://.../rss/rss_lenta.php" title="... - Новости" type="application/rss+xml" />

 <link rel="Stylesheet" href="http://.../style.css" type="text/css" />
 <link rel="stylesheet" href="http://.../thickbox.css" type="text/css" media="screen" />
<script type="text/javascript" src="http://.../script/jquery.js"></script>
<script type="text/javascript" src="http://.../script/jquery.pngFix.js"></script>
<script type="text/javascript" src="http://.../script/main.js"></script>
<script type="text/javascript" src="http://.../script/thickbox.js"></script>

...

        <div style='text-align : center;'> <!-- Для ИЕ центрирование -->
            <!-- Стили для раздела по работе с Яндекс.Карты -->
            <link rel='stylesheet' type='text/css' media='all' href='/css_style/yandex_map.css' />

            <div id='div_form_yandex_map'>
               
            <!-- Блок с Яндекс.Картой (начало) -->

                <script src='http://api-maps.yandex.ru/1.1/index.xml?key=...&modules=pmap' type='text/javascript'></script>
                <script src='http://.../yandex_map/get_file.php?js=all' type='text/javascript'></script>

                <p>Выберите населенный пунк для которого желаете увидеть офисы:</p>
                <select id='region' name='region' onChange='change_region()'></select>

                <div id='yandex_map' style='height:600px;width:800px;'></div>

            <!-- Блок с Яндекс.Картой (конец) -->
               
            </div>
        </div>



                 var map;
                var data;
                var showitem;
                var geoResult;
                // Создание обработчика для события window.onLoad
                YMaps.jQuery(window).load(function () {
                    // Создание экземпляра карты и его привязка к созданному контейнеру
                    map = new YMaps.Map(YMaps.jQuery('#yandex_map')[0]

                    YMaps.MapType.PMAP.getName = function () { return 'Народная'; };

                    map.setCenter(new YMaps.GeoPoint(".$this->last_settings['yandex_map_setting_beg_latitude'].", ".$this->last_settings['yandex_map_setting_beg_longitude']."), ".$this->last_settings['yandex_map_setting_zoom_default'].", YMaps.MapType.".$this->last_settings['yandex_map_setting_map_type'].");

                    map.addControl(new YMaps.TypeControl([
                            YMaps.MapType.MAP,
                            YMaps.MapType.SATELLITE,
                            YMaps.MapType.HYBRID,
                            YMaps.MapType.PMAP
                        ], [0, 1, 2, 3])

                    // Ссылка на контейнер для меню
                    var menuContainer = YMaps.jQuery('#region');

                    data = [";

                $sBody_text .=    "'Не выбрано',";

                // формируем список регионов
                foreach ($this->regions_on_map as $val)
                {
                    $sBody_text .=    "
                        '".$val['off_region_name']."',";
                }
               
                // если нет регионов тогда из настроек берем по умолчанию либо подставляем россию
                if (count($this->regions_on_map)==0)
                    if ($this->last_settings['yandex_map_setting_city_no_markers']!='')
                        $sBody_text .=    "'".$this->last_settings['yandex_map_setting_city_no_markers']."',";
                    else
                        $sBody_text .=    "'Россия',";

                //
                $sBody_text .=    "];
                    // поиск координат городов
                    // запуск мульти геокодирования
                    var geocoder = new MultiplyGeocoder(data);

                    // Генерирование меню
                    for (var item in data) {
                        (function (number,desc) {
                            // Создаем элемент списка
                            YMaps.jQuery(\"<option value='number'>\" + desc + \"</option>\")
                            // Записываем элемент списка в список
                               .appendTo(menuContainer);
                        })(item,data[item])
                    }                       

                    // Создание и добавление YMapsML-документа на карту
                    var ml = new YMaps.YMapsML('.../yandex_map/get_file.php?xml=ymapsml');
                    map.addOverlay(ml);

                    // Обработчик неудачной загрузки YMapsML
                    YMaps.Events.observe(ml, ml.Events.Fault, function (ml, error) {
                        alert('Ошибка: ' + error);
                    }
                }

                // Реализует наследование прототипа без исполнения конструктора родителя
                // Подробнее о наследовании: http://javascript.ru/tutorial/object/inheritance
                function extend (child, parent) {
                    var c = function () {};
                    c.prototype = parent.prototype;
                    c.prototype.constructor = parent;
                    return child.prototype = new c;
                };

                // Множественный геокодер
                // requests - массив адресов
                function MultiplyGeocoder (requests)
                {
                    // Вызов родительского конструктора
                    YMaps.GeoObjectCollection.call(this);

                    var _this = this,

                    // Количество вызовов геокодера
                    geocodeCallCount = 0,

                    // Обработчики событий
                    listeners = [];

                    // Последовательно геокодируем все переданные адреса
                    for (var i = 0, l = requests.length; i < l; i++) {
                        geocode(requests[i]
                    }

                    // Функция, отвечающая за геокодировании одного адреса
                    function geocode (request)
                    {
                        // Геокодируем
                        var geocoder = new YMaps.Geocoder(request);
       
                        // Счетчик вызовов геокодирования увеличиваем
                        geocodeCallCount++;

                        // Сохраняем ссылки на обработчики событий
                        listeners = listeners.concat(

                            // Обработка событий Load и Fault
                            YMaps.Events.observe(geocoder, [geocoder.Events.Load, geocoder.Events.Fault], function (geocoder) {
                                if (geocoder.length()) {
                                    // добавляем полученные результат
                                    _this.add(geocoder.get(0)
                                    // добавляем в наш массив координаты
                                    data[request]=geocoder.get(0).getGeoPoint(
                                }
                                geocodeCallCount--;
                                isFinish(
                            })
                       
                    }

                    // Функция для проверки окончания процесса геокодирования
                    function isFinish ()
                    {
                        // Если все объекты сгеокодированы, то генерируем событие завершения
                        if (!geocodeCallCount) {

                            // Событие о завершении геокодирования
                            YMaps.Events.notify(_this, 'Load', _this);

                            // Удаление обработчиков событий
                            for (var i = 0, l = listeners.length; i < l; i++) {
                                listeners[i].cleanup(
                            }
                        }
                    }
                }

                var ptp = extend(MultiplyGeocoder, YMaps.GeoObjectCollection);

                function change_region()
                {
                    // Перемещаем карту
                    // меняем масштаб до уровня города
                    map.setZoom(9);
                    // перемещаем карту
                    map.panTo(data[data[region.selectedIndex]], {flying: 1}

                }

 

Примечание:

... - пропущенный текст.

12 комментариев
Подписаться на комментарии к посту

Оффтоп:

Вы бы такие "простыни" всё что ли под кат убирали бы...

Представленной информации недостаточно для ответа на ваш вопрос; покажите, пожалуйста, файл с конфигурацией вашего сервера.

а что именно интересут?

Дело немного сдвинулось когда убираю текст на метке, метка принимает указаный мной...при возвращении текста, опять меняется на стандартную :(

пробовал убрать в шаблоне все лишнее оставлял только текс все равно стандартная... Что я мог написать не правильно? кто подскажет

Так ни чего и не получилось...

Люди добрые подскажите :(

а есть страница на которой можно все это увидеть?

только стандартные стили значков умеют принимать шаблон для контента

 

Если вы создаете свой кастомный iconStyle и для нее же шаблон iconStyleContent

то этот шаблон перекроет то что написано в iconStyle

 

Иными словами - вы можете сделать свои метки с картинками 

тогда надо оставить iconStyle и удалить iconContentStyle

либо, если вам нужны цифры в метках, оставить iconStyle стандартным и переопределить iconContentStyle (сделать номер strong-ом, как в вашем случае)

Мне нужны желтые метки (стиль фирмы) или близкие к ним, с цыфрой в нутри (номер офиса).

Как это сделать через java понятно, но как указать в xml. По умолчанию беруться голубые.

Заранее благодарен за ответ.

   

        default#yellowPointrepr:template>

   

....

Пробовал, насколько помню, не получалось они все так же остаются голубыми :(

начал с самого начала сдела просто что бы хотя бы были желтыми...как вы и рекомендовали...

но они все равно не желтые :-(

Пример страницы по томуже адресу.