Объект на Яндекс карте
Denis_prk
30 января 2015 г.
Подключаем скрипты яндекса, я добавил в основной шаблон:
Далее в макете в XSL в нужное место вставляем обработчик
Ну а дальше там где хотим видеть карту вставляем меня на нужную высоту и ширину, либо в последствии можно стилем описать вывод
Цитата:
Решение было приватизировано на просторах интернета
В Довесок если нужно на одной карте несколько объектов вывести то используем код:
так как не силен в кодировании то сам не смог разобраться как сделать чтоб центр координат получался автоматически как в первом варианте
и для второго варианта нужны будут скрипты
и
<script src="//api-maps.yandex.ru/2.0/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
Далее в макете в XSL в нужное место вставляем обработчик
<script type="text/javascript">
var myMap;
ymaps.ready(init);
function init () {
ymaps.geocode('<xsl:value-of select="property_value[tag_name='city']/value"/>, <xsl:value-of select="property_value[tag_name='address']/value"/>', {results: 1}).then(function (res) {
var firstGeoObject = res.geoObjects.get(0),
myMap = new ymaps.Map('map', {
center: firstGeoObject.geometry.getCoordinates(),
zoom:17
});
myMap.controls
.add('zoomControl', {left: 5, top: 5})
.add('typeSelector')
.add('mapTools', {left: 35, top: 5});
firstGeoObject.options.set('preset', 'twirl#buildingsIcon');
myMap.geoObjects.add(firstGeoObject);
});}
</script>
var myMap;
ymaps.ready(init);
function init () {
ymaps.geocode('<xsl:value-of select="property_value[tag_name='city']/value"/>, <xsl:value-of select="property_value[tag_name='address']/value"/>', {results: 1}).then(function (res) {
var firstGeoObject = res.geoObjects.get(0),
myMap = new ymaps.Map('map', {
center: firstGeoObject.geometry.getCoordinates(),
zoom:17
});
myMap.controls
.add('zoomControl', {left: 5, top: 5})
.add('typeSelector')
.add('mapTools', {left: 35, top: 5});
firstGeoObject.options.set('preset', 'twirl#buildingsIcon');
myMap.geoObjects.add(firstGeoObject);
});}
</script>
Ну а дальше там где хотим видеть карту вставляем меня на нужную высоту и ширину, либо в последствии можно стилем описать вывод
<div id="map" style="width: 800px; height: 400px;"></div>
Цитата:
<xsl:value-of select="property_value[tag_name='city']/value"/>, <xsl:value-of select="property_value[tag_name='address']/value"/>
Значения соответственно подставляем свои.Решение было приватизировано на просторах интернета
В Довесок если нужно на одной карте несколько объектов вывести то используем код:
<script type="text/javascript">
ymaps.ready(function () {
var map = new ymaps.Map('map', {
center: [ 55.734046, 37.588628 ],
zoom: 9,
behaviors: ['default', 'scrollZoom']
});
var mGeocoder = new MultiGeocoder({ boundedBy : map.getBounds() });
// Геокодирование массива адресов и координат.
mGeocoder.geocode([
"Москва, Слесарный переулок, д.3",
"Люберцы, Октябрьский проспект д.143",
[ 55.734046, 37.588628 ],
"Мытищи, ул. Олимпийский проспект, владение 13, корпус А",
"Москва, 3-я Хорошовская улица д.2, стр.1",
"Москва, Нижний Сусальный переулок, д.5, стр.4"
])
.then(function (res) {
// Асинхронно получаем коллекцию найденных геообъектов.
map.geoObjects.add(res.geoObjects);
},
function (err) {
console.log(err);
});
});
</script>
ymaps.ready(function () {
var map = new ymaps.Map('map', {
center: [ 55.734046, 37.588628 ],
zoom: 9,
behaviors: ['default', 'scrollZoom']
});
var mGeocoder = new MultiGeocoder({ boundedBy : map.getBounds() });
// Геокодирование массива адресов и координат.
mGeocoder.geocode([
"Москва, Слесарный переулок, д.3",
"Люберцы, Октябрьский проспект д.143",
[ 55.734046, 37.588628 ],
"Мытищи, ул. Олимпийский проспект, владение 13, корпус А",
"Москва, 3-я Хорошовская улица д.2, стр.1",
"Москва, Нижний Сусальный переулок, д.5, стр.4"
])
.then(function (res) {
// Асинхронно получаем коллекцию найденных геообъектов.
map.geoObjects.add(res.geoObjects);
},
function (err) {
console.log(err);
});
});
</script>
так как не силен в кодировании то сам не смог разобраться как сделать чтоб центр координат получался автоматически как в первом варианте
и для второго варианта нужны будут скрипты
/**
* @fileOverview
* Пример реализации функциональности множественного геокодирования.
* Аналогичная разработка для первой версии АПИ.
* @seehttp://api.yandex.ru/maps/doc/jsapi/1.x/examples/multiplygeocoding.html
* @example
var multiGeocoder = new MultiGeocoder({ boundedBy : map.getBounds() });
multiGeocoder
.geocode(['Москва, Льва Толстого 16', [55.7, 37.5], 'Санкт-Петербург'])
.then(
function (res) {
map.geoObjects.add(res.geoObjects);
},
function (err) {
console.log(err);
}
);
*/
/**
* Класс для геокодирования списка адресов или координат.
* @class
* @name MultiGeocoder
* @param {Object} [options={}] Дефолтные опции мультигеокодера.
*/
function MultiGeocoder(options) {
this._options = options || {};
}
/**
* Функция множественнеого геокодирования.
* @function
* @requires ymaps.util.extend
* @seehttp://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/util.extend.xml
* @requires ymaps.util.Promise
* @seehttp://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/util.Promise.xml
* @name MultiGeocoder.geocode
* @param {Array} requests Массив строк-имен топонимов и/или геометрий точек (обратное геокодирование)
* @returns {Object} Как и в обычном геокодере, вернем объект-обещание.
*/
MultiGeocoder.prototype.geocode = function (requests, options) {
var self = this,
size = requests.length,
promise = new ymaps.util.Promise(),
geoObjects = new ListCollection();
requests.forEach(function (request, index) {
ymaps.geocode(request, ymaps.util.extend({}, self._options, options))
.then(
function (response) {
var geoObject = response.geoObjects.get(0);
geoObject && geoObjects.add(geoObject, index);
--size || promise.resolve({ geoObjects : geoObjects });
},
function (err) {
promise.reject(err);
}
);
});
return promise;
};
* @fileOverview
* Пример реализации функциональности множественного геокодирования.
* Аналогичная разработка для первой версии АПИ.
* @see
* @example
var multiGeocoder = new MultiGeocoder({ boundedBy : map.getBounds() });
multiGeocoder
.geocode(['Москва, Льва Толстого 16', [55.7, 37.5], 'Санкт-Петербург'])
.then(
function (res) {
map.geoObjects.add(res.geoObjects);
},
function (err) {
console.log(err);
}
);
*/
/**
* Класс для геокодирования списка адресов или координат.
* @class
* @name MultiGeocoder
* @param {Object} [options={}] Дефолтные опции мультигеокодера.
*/
function MultiGeocoder(options) {
this._options = options || {};
}
/**
* Функция множественнеого геокодирования.
* @function
* @requires ymaps.util.extend
* @see
* @requires ymaps.util.Promise
* @see
* @name MultiGeocoder.geocode
* @param {Array} requests Массив строк-имен топонимов и/или геометрий точек (обратное геокодирование)
* @returns {Object} Как и в обычном геокодере, вернем объект-обещание.
*/
MultiGeocoder.prototype.geocode = function (requests, options) {
var self = this,
size = requests.length,
promise = new ymaps.util.Promise(),
geoObjects = new ListCollection();
requests.forEach(function (request, index) {
ymaps.geocode(request, ymaps.util.extend({}, self._options, options))
.then(
function (response) {
var geoObject = response.geoObjects.get(0);
geoObject && geoObjects.add(geoObject, index);
--size || promise.resolve({ geoObjects : geoObjects });
},
function (err) {
promise.reject(err);
}
);
});
return promise;
};
и
function ListCollection() {
ListCollection.superclass.constructor.apply(this, arguments);
this._list = [];
}
ymaps.ready(function () {
ymaps.util.augment(ListCollection, ymaps.GeoObjectCollection, {
get: function (index) {
return this._list[index];
},
add: function (child, index) {
this.constructor.superclass.add.call(this, child);
index = index == null ? this._list.length : index;
this._list[index] = child;
return this;
},
indexOf: function (o) {
for(var i = 0, len = this._list.length; i < len; i++) {
if(this._list[i] === o) {
return i;
}
}
return -1;
},
splice: function (index, number) {
var added = Array.prototype.slice.call(arguments, 2),
removed = this._list.splice.apply(this._list, arguments);
for(var i = 0, len = added.length; i < len; i++) {
this.add(added[i]);
}
for(var i = 0, len = removed.length; i < len; i++) {
this.remove(removed[i]);
}
return removed;
},
remove: function (child) {
this.constructor.superclass.remove.call(this, child);
// this._list.splice(this.indexOf(child), 1);
delete this._list[this.indexOf(child)];
return this;
},
removeAll: function () {
this.constructor.superclass.removeAll.call(this);
this._list = [];
return this;
},
each: function (callback, context) {
for(var i = 0, len = this._list.length; i < len; i++) {
callback.call(context, this._list[i]);
}
}
});
});
ListCollection.superclass.constructor.apply(this, arguments);
this._list = [];
}
ymaps.ready(function () {
ymaps.util.augment(ListCollection, ymaps.GeoObjectCollection, {
get: function (index) {
return this._list[index];
},
add: function (child, index) {
this.constructor.superclass.add.call(this, child);
index = index == null ? this._list.length : index;
this._list[index] = child;
return this;
},
indexOf: function (o) {
for(var i = 0, len = this._list.length; i < len; i++) {
if(this._list[i] === o) {
return i;
}
}
return -1;
},
splice: function (index, number) {
var added = Array.prototype.slice.call(arguments, 2),
removed = this._list.splice.apply(this._list, arguments);
for(var i = 0, len = added.length; i < len; i++) {
this.add(added[i]);
}
for(var i = 0, len = removed.length; i < len; i++) {
this.remove(removed[i]);
}
return removed;
},
remove: function (child) {
this.constructor.superclass.remove.call(this, child);
// this._list.splice(this.indexOf(child), 1);
delete this._list[this.indexOf(child)];
return this;
},
removeAll: function () {
this.constructor.superclass.removeAll.call(this);
this._list = [];
return this;
},
each: function (callback, context) {
for(var i = 0, len = this._list.length; i < len; i++) {
callback.call(context, this._list[i]);
}
}
});
});
Авторизация