Клуб API Карт

Отображение информации в hint объекта закруженного через geoXml

marj-erokhova
9 сентября 2014, 13:50

Добрый день!

Имею хмл файл с объектами, описанными таким образом:  

<GeoObject>
<gml:metaDataProperty>
<AnyMetaData>
<number>11790</number>
</AnyMetaData>
</gml:metaDataProperty>
<gml:name>г.Бабаево</gml:name>
<gml:hintContent>11790</gml:hintContent>
<gml:Point>
<gml:pos>35.9288 59.3948</gml:pos>
</gml:Point>
</GeoObject>

выполняю такие действия над объектами:
ymaps.geoXml.load('http://lgis.gov35.ru/4/src/getObjects.php?season=1&region=' + $(this).attr("id")).then(function (res) {
console.log(objects);
var objects = ymaps.geoQuery(res.geoObjects);
objects.searchInside(map)
// И затем добавим найденные объекты на карту.
.addToMap(map);
console.log(objects);
map.events.add('boundschange', function () {
// После каждого сдвига карты будем смотреть, какие объекты попадают в видимую область.
var visibleObjects = objects.searchInside(map).addToMap(map);
// Оставшиеся объекты будем удалять с карты.
objects.remove(visibleObjects).removeFromMap(map);
});
});
Содержимое в хинте отсутствует, подскажите, пожалуйста,как праивльно сделать?
17 комментариев

Попробуйте задать

objects.options.set('hintContentLayout', ymaps.templateLayoutFactiry.createClass('$[hintContent]'));

ymaps.geoXml.load('http://lgis.gov35.ru/4/src/getObjects.php?season=1®ion=' + $(this).attr("id")).then(function (res) {

objects = ymaps.geoQuery(res.geoObjects);

objects.options.set('hintContentLayout', ymaps.templateLayoutFactiry.createClass('$[hintContent]'));

objects.searchInside(map)

// И затем добавим найденные объекты на карту.

.addToMap(map);

console.log(objects);

map.events.add('boundschange', function () {

// После каждого сдвига карты будем смотреть, какие объекты попадают в видимую область.

var visibleObjects = objects.searchInside(map).addToMap(map);

// Оставшиеся объекты будем удалять с карты.

objects.remove(visibleObjects).removeFromMap(map);

});

});

не помогло, или я не правильно делаю.

Сейчас метки вовсе не отображаются, а ошибки в консоли тоже нет:(

Извините, перепутала - objects.setOptions(....)

Посмотрела по коду - бабушка бэтмен ниже прав. Произвольные пользовательские данные можно размещать только в AnyMetaData и соответственно формировать ссылку на эти данные в шаблоне хинта

Если возмонжо, направьте меня на путь истинный;)

Вот я прописываю хмл : http://lgis.gov35.ru/4/src/getObjects.php?region=1&season=1

На подобие http://maps.yandex.ru/export/usermaps/93jfWjoXws37exPmKH-OFIuj3IQduHal/

 

Затем, делаю те же самые действия с объектами 

ymaps.geoXml.load('http://lgis.gov35.ru/4/src/getObjects.php?season=1®ion=' + $(this).attr("id")).then(function (res) {

objects = ymaps.geoQuery(res.geoObjects);

(????)objects.setOptions('hintContentLayout', '$number');

objects.searchInside(map)

// И затем добавим найденные объекты на карту.

.addToMap(map);

map.events.add('boundschange', function () {

// После каждого сдвига карты будем смотреть, какие объекты попадают в видимую область.

var visibleObjects = objects.searchInside(map).addToMap(map);

// Оставшиеся объекты будем удалять с карты.

objects.remove(visibleObjects).removeFromMap(map);

});

});

 

и все ранво ничего.

:(

 

Т.е. я пыталась сделать на подобие приемра: http://api.yandex.ru/maps/jsbox/2.1/geoxml_display

Не надо переопределять макет хинта на клиенте

Добавьте hintContentStyle в ваш YMapsML в тэг Representation/Style на один уровень с iconContentStyle

и все должно заработать само

 

http://lgis.gov35.ru/4/src/getObjects.php?region=1&season=1

Таким образом верно или нет?

 

Просо, меня еще смущает то, что если я подключаю наприемр к коду обработки объектов хмл приведенный в примере(http://maps.yandex.ru/export/usermaps/93jfWjoXws37exPmKH-OFIuj3IQduHal/) то значки появляются также без подписей(((

Вот такой минимальный код выводит ваши метки с хинтами

 

ymaps.ready(init);function init() {    var myMap = new ymaps.Map('map', {        center: [55.76, 37.64], // Москва        zoom: 2,        controls: ['zoomControl']    });    ymaps.geoXml.load('http://lgis.gov35.ru/4/src/getObjects.php?region=1&season=1').then(function(res) {        myMap.geoObjects.add(res.geoObjects);    });}

 

Это понятно, а вот чтобы отображались только те которые попадают в обалсть видимсоти и тд. Мне же нужно их в geoQuery засовывать и тд?

Тут есть тонкость – geoQuery теряет стили, назначенные коллекции (оперирует только содержимым коллекции), поэтому вам нужно в вашем YMapsML перенести <style>#userobjectstyle> из коллекции (GeoObjectCollection) в каждый геообъект GeoObject.

 

Сам код добавления и фильтрации по видимой области выглядит так

 

ymaps.ready(init);function init() {    var myMap = new ymaps.Map('map', {        center: [55.76, 37.64], // Москва        zoom: 2,        controls: ['zoomControl']    });    var geoObjects = ymaps.geoQuery(ymaps.geoXml.load('http://lgis.gov35.ru/4/src/getObjects.php?region=1&season=1')).addToMap(myMap),        removeInvisible = function () {            var visibleObjects = geoObjects.searchInside(myMap);                       visibleObjects.remove(ymaps.geoQuery(myMap.geoObjects)).addToMap(myMap);            geoObjects.remove(visibleObjects).removeFromMap(myMap);        };        removeInvisible();        myMap.events.add('boundschange', removeInvisible);}

 

;-)Шпасибоооо большое!!!!!

И снова здравствуйте!

Прошу сильно не ругаться. Я со своими замороками. 

Стандартные preset не иемют растягивающегося кружочка под содержимое, поэтому возникла необходимость сделать свое.

На смешной иконке нарисованной в пэйнте пробую.

Создаю свой персет гружу в Storage

ymaps.option.presetStorage.add('my#preset', {

iconLayout: 'default#image',

iconImageHref: 'http://lgis.gov35.ru/test.png',

iconImageSize: [40, 40]

});

Затем определнным объектам сформиранным по коду, который Вы посоветовали мне выше, приписываю этот пресет. 

obj[$num].setOptions('preset', 'my#preset');

 

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

obj[$num].each(function(obj)

{

$count = obj.properties.get('metaDataProperty.AnyMetaData.number');

obj.properties.set('iconContent', $count);

});

И все хорошо становилось.

 

 

Очнеь прошу помощи.

Все это извращение происходит по клику на район вот тут: http://lgis.gov35.ru/4/

 

 

Марина, здравствуйте!

Хочу попросить помощи, т.к. не омгу получить ответа на мой посл.коммент. А помощь очень нужна.

 

marj-erokhova

изменено 10 сентября, в 17:01

И снова здравствуйте!

Прошу сильно не ругаться. Я со своими замороками. 

Стандартные preset не иемют растягивающегося кружочка под содержимое, поэтому возникла необходимость сделать свое.

На смешной иконке нарисованной в пэйнте пробую.

Создаю свой персет гружу в Storage

ymaps.option.presetStorage.add('my#preset', {

iconLayout: 'default#image',

iconImageHref: 'http://lgis.gov35.ru/test.png',

iconImageSize: [40, 40]

});

Затем определнным объектам сформиранным по коду, который Вы посоветовали мне выше, приписываю этот пресет. 

obj[$num].setOptions('preset', 'my#preset');(сейчас это закомментировано)

 

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

obj[$num].each(function(obj)

{

$count = obj.properties.get('metaDataProperty.AnyMetaData.number');

obj.properties.set('iconContent', $count);

});

И все хорошо становилось.

 

 

Очнеь прошу помощи.

Все это извращение происходит по клику на район вот тут: http://lgis.gov35.ru/4/

 

Добрый день,

 

вы использовали макет 'default#image', но он не поддерживает отображение контента. Вам нужно взять http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/layout.ImageWithContent.xml

Спасибо огромное!

Вы меня очень выручили.

Не за что)

тега gml:hintContent нет в схеме YMapsML

Это ваше собственное изобретение?

Содержимое хинта и балуна в YMapsML задается вметаданных gml:metaDataProperty/AnyMetaData,

а представление (html-обвязка) через шаблоны