<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<script>
document.write('<base href="' + document.location + '" />');
</script>
<script data-require="jquery@*" data-semver="2.1.3" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<link data-require="bootstrap-css@3.1.*" data-semver="3.1.1" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
<link data-require="bootstrap@*" data-semver="3.3.1" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
<script data-require="bootstrap@*" data-semver="3.3.1" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<!-- <script src="http://ol3js.org/en/master/build/ol.js"></script> -->
<script src="http://ol3js.org/en/master/build/ol-debug.js"></script>
<link rel="stylesheet" href="http://ol3js.org/en/master/css/ol.css" />
<script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.11/angular.js" data-semver="1.3.11"></script>
<script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.11/angular-sanitize.js" data-semver="1.3.11"></script>
<script data-require="ui-bootstrap@*" data-semver="0.12.0" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.12.0.min.js"></script>
<script src="app.js"></script>
<script src="highlightFilter.js"></script>
<script src="multipleFilter.js"></script>
<script src="mapService.js"></script>
<script src="MainController.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="//cdn.jsdelivr.net/angular-material-icons/0.3.0/angular-material-icons.min.js"></script>
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,600' rel='stylesheet' type='text/css'>
</head>
<body ng-controller="mainController as mc">
<div id="map"></div>
<div class="row-fluid">
<tabset class="tabset">
<div><a class="pull-right vcenter" ng-show="mc.search.length>0" ng-click="mc.cancelSearch()">Cancel Search</a></div>
<tab heading="Search" active="mc.staticTabs.search">
<div class="search-tab">
<div class="input-group">
<span class="input-group-addon"><ng-md-icon icon="search" style="fill: #000;" size="18"></ng-md-icon></span>
<input type="text" class="form-control" ng-model="mc.search" ng-model-options="{ debounce: 1000 }" aria-describedby="inputGroupSuccess1Status">
<div class="input-group-addon">
<span ng-show="mc.features.length>0"><span>{{filtered.length}}</span> Result/s</span>
</div>
</div>
<div class="list" ng-show="filtered.length>0">
<ul>
<li ng-repeat="f in filtered = (mc.features | multiple: mc.search)" class="feature-result" ng-click="mc.selectFeature(f.name);">
<div>
<span>{{f.name}}</span>
</div>
</li>
</ul>
</div>
</div>
</tab>
<tab heading="Details" active="mc.staticTabs.details">
<div class="span4 offset4 details-tab">
<div ng-show="mc.feature">
<h2><a href="{{mc.feature['Enlace a la ruta']}}" target="_blank"><span ng-bind-html="mc.feature.name | highlight:mc.search"></span></a></h2>
<p ng-bind-html="mc.feature.description | highlight:mc.search"></p>
</div>
<div ng-show="!mc.feature">
<h2>No Details available.</h2>
<p>Select a marker on the map to see the details.</p>
</div>
</div>
</tab>
</tabset>
</div>
<div style="display: none;">
<!-- Popup -->
<div id="popup"></div>
</div>
<!-- move to template -->
<!-- https://klarsys.github.io/angular-material-icons/ -->
<div id="svgmarker" ng-show="mc.features>0">
<ng-md-icon icon="room" style="fill: #7b98bc;" size="64"></ng-md-icon>
</div>
<!-- svg shadow filter definition -->
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0">
<filter id="blur" y="-2" height="64" x="-10" width="150">
<feoffset in="SourceAlpha" dx="0" dy="0.25" result="offset2"></feoffset>
<fegaussianblur in="offset2" stdDeviation="0.5" result="blur2"></fegaussianblur>
<femerge>
<femergenode in="blur2"></femergenode>
<femergenode in="SourceGraphic"></femergenode>
</femerge>
</filter>
</svg>
</body>
</html>
// Code goes here
/*----------------------------------------*/
/* map styles
*/
html, body, #map {
padding: 0;
margin: 0;
font-family: "Open Sans", Helvetica, Arial;
}
#map {
width: 100%;
height: 200px;
}
#map .popover {
width: 200px;
z-index: 9999999;
}
/* custom svg marker styles */
#map svg .icon {
cursor: pointer;
}
#map svg .icon.selected {
fill: #dd1c77;
}
/* custom zoom to extent control */
#map .ol-control, .ol-scale-line {
z-index: 9999999;
}
/*----------------------------------------*/
/* tabs
*/
/* remove bootstrap rounded tab corners */
.tabset .nav-tabs > li > a {
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
}
.tabset .details-tab .highlighted {
background: yellow;
}
.tabset .search-tab, .tabset .details-tab {
margin: 15px;
}
/* search tab */
.tabset .search-tab ul {
list-style-type: none;
padding: 0px;
}
.tabset .search-tab .input-group .input-group-addon {
padding-bottom: 4px;
}
.tabset .list {
margin-top: 2px;
max-height: 150px;
width: 100%;
overflow-y: auto;
background-color: #fff;
border: 1px solid #eee;
}
.tabset .feature-result {
padding: 10px;
cursor: pointer;
}
.tabset .feature-result:hover {
background-color: #dd1c77;
border: 1px solid #ddd;
color: #fff;
}
/* cancel search link */
.tabset .vcenter {
padding: 10px 15px;
cursor: pointer;
}
/**
* Main app module
*/
angular
.module('app', [
'ngMdIcons',
'ui.bootstrap',
'ngSanitize'
]);
/*
Tb. Tb.
:$$b. $$$b.
:$$$$b. :$$$$b.
:$$$$$$b :$$$$$$b
$$$$$$$b $$$$$$$b
$$$$$$$$b :$$$$$$$b
:$$$$$$$$b---^$$$$$$$$b
:$$$$$$$$$b ""^Tb
$$$$$$$$$$b __...__`.
$$$$$$$$$$$b.g$$$$$$$$$pb
$$$$$$$$$$$$$$$$$$$$$$$$$b
$$$$$$$$$$$$$$$$$$$$$$$$$$b
:$$$$$$$$$$$$$$$$$$$$$$$$$$;
:$$$$$$$$$$$$$^T$$$$$$$$$$P;
:$$$$$$$$$$$$$b "^T$$$$P' :
:$$$$$$$$$$$$$$b._.g$$$$$p.db
:$$$$$$$$$$$$$$$$$$$$$$$$$$$$;
:$$$$$$$$"""^^T$$$$$$$$$$$$P^;
:$$$$$$$$ ""^^T$$$P^' ;
:$$$$$$$$ .' `" ;
$$$$$$$$; / :
$$$$$$$$; .----, :
$$$$$$$$; ," ;
$$$$$$$$$p. |
:$$$$$$$$$$$$p. :
:$$$$$$$$$$$$$$$p. .'
:$$$$$$$$$$$$$$$$$$p...___..-"
$$$$$$$$$$$$$$$$$$$$$$$$$; "To the Bat Mobile, Robin!"
.db. bug $$$$$$$$$$$$$$$$$$$$$$$$$$
d$$$$bp. $$$$$$$$$$$$$$$$$$$$$$$$$$;
d$$$$$$$$$$pp..__..gg$$$$$$$$$$$$$$$$$$$$$$$$$$$
d$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$p._ .gp.
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$p._.ggp._.d$$$$b
*/
(function() {
'use strict';
/**
* Highlight filter
*/
angular
.module('app')
.filter('highlight', [
'$sce',
filter
]);
/**
* Creates a filter that wraps each search term occurrence in a span element with the 'highlighted' css class
*
* @param {$sceProvider} $sce
* @returns {returnedFunction} highlight filter
*
* See [$sce]{@link https://docs.angularjs.org/api/ng/service/$sce}
* Credits [higlight filter]{@link http://stackoverflow.com/questions/15519713/highlighting-a-filtered-result-in-angularjs/27798600#27798600}
*/
function filter($sce) {
return highlight;
/**
* Highlight filter
* @param {String} inputText - filter expression
* @param {String} searchTerms - search
*/
function highlight(inputText, searchTerms) {
if (!searchTerms) return inputText;
// split search terms by space character
var terms = searchTerms.split(' ') || [searchTerms];
terms.forEach(function(item){
// avoid messing with HTML tags
// needs a clever regular expression that skips HTML tags matches altogether
if (inputText)
inputText = inputText.replace(new RegExp('(' + item + ')', 'gi'),
'<span class="highlighted">$1</span>')
});
return $sce.trustAsHtml(inputText);
}
}
})();
(function() {
'use strict';
/**
* Multiple terms search filter
*/
angular
.module('app')
.filter('multiple', [
'$rootScope',
filter
]);
/**
* Creates a filter that takes into account multiple search terms
*
* @param {$rootScope} $rootScope
* @returns {Function} multiple filter
*
* Credits [multiple filter]{@link http://stackoverflow.com/questions/23504757/angular-js-filter-by-logical-and-using-multiple-terms}
*/
function filter($rootScope) {
return multiple;
/**
* Multiple filter
* @param {String} items - filter expression
* @param {String} searchTerms - search
*/
function multiple(items, searchTerms) {
// return all items if searchTerms is empty
if (!searchTerms) {
triggerHideFeatures([], $rootScope);
return items;
}
var terms = searchTerms.split(' '),
matchingItems = [],
passTest;
items.forEach(function(item){
passTest = true;
terms.forEach(function(term){
// we check the default KML properties
passTest = passTest && (
(item.name.toLowerCase().indexOf(term.toLowerCase()) > -1) ||
(item.description.toLowerCase().indexOf(term.toLowerCase()) > -1)
);
});
// Add item to return array only if passTest is true,
// all search terms were found in item
if (passTest) { matchingItems.push(item); }
});
triggerHideFeatures(matchingItems, $rootScope);
return matchingItems;
}
/**
* Notifies the application with the matching features
* @param {Array} matchingItems - filtered features
* @param {Object} $rootScope - $rootScope
*/
function triggerHideFeatures(matchingItems, $rootScope){
var featuresArray = matchingItems.map(function(feature){
return feature.name;
})
$rootScope.$broadcast("global.hide-features", featuresArray);
}
}
})();
(function() {
'use strict';
/**
* Map Service
*/
angular
.module('app')
.factory('mapService', service);
function service(){
// check openlayers is available on service instantiation
// this can be handled with Require later on
if (!ol) return {};
var map = {}, //convenience reference
defaults = {
zoom: 15,
startLocation: [0,40],
extractStylesKml: false,
popupOffset: [0,0],
featurePropertiesMap: ['name', 'description', 'address', 'phoneNumber', 'styleUrl'],
onFeatureSelected: function(feature) { console.log("feature selected", feature);}
},
zIndex = 9999,
popup,
selectedFeature,
myZoomToExtentControl;
// public API
var ms = {
map: map, // ol.Map
init: init,
getFeatures: getFeatures,
selectFeature: selectFeature,
hideFeatures: hideFeatures,
unselectFeature: unselectFeature
};
return ms;
///////////////////////////////////////////////////////////
// helper functions
function olMapFeatures() {
var featuresArray = map //ol.Map
.getLayers() //ol.Collection
.getArray()[1] //ol.layer.Vector
.getSource() //ol.source.KML
.getFeatures() //ol.Feature
return featuresArray;
}
function getFeatures() {
var f = [];
olMapFeatures()
.forEach(function(olFeature, i) {
var feature = {id: olFeature.getId()};
f.push(mapFeatureProperties(feature, olFeature));
});
return f;
}
function unselectFeature(zoom) {
var undefined;
selectedFeature = undefined;
$("#map path").each(function(index, item){
item.setAttribute("class", "icon");
});
if (zoom)
zoomToExtent();
}
function selectFeature(name, pan){
var feature;
if (!name) return;
var target = $("#map path[feature='" + escape(name) + "']")[0];
//search for feature
olMapFeatures()
.forEach(function(item, i) {
var f = item.get('name');
if (name==f)
feature = item;
});
selectedFeature = feature;
if (feature) {
unselectFeature();
target.setAttribute("class", "icon selected");
//put on top
$(target.parentNode.parentNode)
.parent().parent()
.css('z-index', ++zIndex);
}
//display feature details and pan
if (pan && feature) {
onFeatureSelected(feature);
panToFeature(feature, map.getView().getZoom());
var element = angular.element('#popup');
$(element).popover('destroy');
//show popup for feature or hide any previous one
if (feature) {
setTimeout(function(){
var coord = feature.getGeometry().getCoordinates();
var link = "<a href='" + feature.get('Enlace a la ruta') + "' target='_blank'>" + feature.get('name') + "</a>";
popup.setPosition(coord);
$(element).popover({
'title': link,
'placement': 'top',
'animation': false,
'html': true
//'content': feature.get('description')
});
$(element).popover('show');
}, 1000);
}
}
return feature;
}
function hideFeatures(features, search){
//hide any popups
var element = angular.element('#popup');
$(element).popover('destroy');
if (!features || features.length===0) {
if (search && search.length>0)
//search with no results: filters all
$("#map path.icon").hide();
else
//reset after having results
$("#map path.icon").show();
return;
}
features.forEach(function(item){
$("#map path[feature!='" + escape(item) + "'].icon").hide();
});
features.forEach(function(item){
$("#map path[feature='" + escape(item) + "'].icon").show();
});
}
function mapFeatureProperties(feature, olFeature) {
if (!olFeature) return feature;
if (!feature) feature = {};
defaults.featurePropertiesMap.forEach(function(key){
feature[key] = olFeature.get(key);
});
return feature;
}
function onFeatureSelected(olFeature) {
if (!olFeature) return;
var feature = mapFeatureProperties({}, olFeature);
if(defaults.onFeatureSelected)
defaults.onFeatureSelected(feature);
}
// Creates an overlays in the given coordinates
function createSVGOverlay(position, feature) {
if (defaults.extractStylesKml) return;
var elem = document.createElement('div');
var svg = angular.element('#svgmarker ng-md-icon').clone();
//change path attributes
var path = svg.find('path');
path.attr('class', 'icon');
path.attr('filter', 'url(#blur)');
path.attr('feature', escape(feature.get('name')) );
var filter = document.createElement('filter');
var fe = document.createElement('feGaussianBlur');
filter.setAttribute('id', 'blur');
fe.setAttribute('stdDeviation', 3);
filter.appendChild(fe);
svg.find('svg')[0].appendChild(filter);
elem.appendChild(svg[0]);
return new ol.Overlay({
offset: [-2, 12],
element: elem,
position: position,
positioning: 'bottom-center',
stopEvent: false,
});
}
function renderSVGFeatures(){
if (defaults.extractStylesKml) return;
//wait till directive renders svg element
setTimeout(function() {
olMapFeatures()
.forEach(function(item, i, arr){
var hidden = item.get('hidden');
if (!hidden) {
var coordinates = item.getGeometry().getCoordinates();
var overlay = createSVGOverlay(coordinates, item);
map.addOverlay(overlay);
}
});
}, 0);
}
function popupSetup() {
var element = angular.element('#popup');
// Add popup showing the position the user clicked
popup = new ol.Overlay({
element: element,
stopEvent: true,
offset: defaults.popupOffset
});
map.addOverlay(popup);
var displayPopup = function(evt){
var element = popup.getElement();
var coordinate = evt.coordinate;
var hdms = ol.coordinate.toStringHDMS(ol.proj.transform(
coordinate, 'EPSG:3857', 'EPSG:4326'));
$(element).popover('destroy');
popup.setPosition(coordinate);
// the keys are quoted to prevent renaming in ADVANCED mode.
$(element).popover({
'placement': 'top',
'animation': false,
'html': true,
'content': '<p>The location you clicked was:</p><code>' + hdms + '</code>'
});
$(element).popover('show');
}
// display popup on click
map.on('click', function(evt) {
if (defaults.extractStylesKml) {
// Regular rendered feature find on click coordinates
var feature = map.forEachFeatureAtPixel(evt.pixel,
function(feature, layer) {
return feature;
});
} else {
// SVG marker. Search at element attributes
if (!feature && evt.originalEvent.target && evt.originalEvent.target.nodeName == "path") {
var target = evt.originalEvent.target;
var featureId = unescape(target.getAttribute('feature'));
feature = selectFeature(featureId, false);
};
};
//trigger onFeatureSelected event
selectedFeature = feature;
onFeatureSelected(feature);
$(element).popover('destroy');
//show popup for feature or hide any previous one
if (feature) {
setTimeout(function(){
var coord = feature.getGeometry().getCoordinates();
popup.setPosition(coord);
var link = "<a href='" + feature.get('Enlace a la ruta') + "' target='_blank'>" + feature.get('name') + "</a>";
$(element).popover({
'title': link,
'placement': 'top',
'animation': false,
'html': true
//'content': feature.get('description')
});
$(element).popover('show');
}, 1000);
}
if (feature) {
panToFeature(feature, map.getView().getZoom());
}
});
}
function panToFeature(feature, zoom) {
var lonLat = feature.getGeometry().getCoordinates()
var olPixel = map.getPixelFromCoordinate(lonLat);
olPixel[1] -= 40;
lonLat = map.getCoordinateFromPixel(olPixel);
if (map.getView().getZoom() < zoom)
map.getView().setZoom(zoom);
var animation = ol.animation.pan({
duration: 1000,
easing: eval(ol.easing.inAndOut),
source: map.getView().getCenter()
});
// Add animation to the render pipeline
map.beforeRender(animation);
// Change center location
map.getView().setCenter(lonLat);
};
function init(config){
var config = angular.extend(defaults, config);
createMyZoomToExtentControl();
// map initialisation
map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.MapQuest({layer: 'osm'})
})
],
view: new ol.View({
center: ol.proj.transform(config.startLocation, 'EPSG:4326', 'EPSG:3857'),
zoom: config.zoom
}),
controls: ol.control.defaults().extend([
new myZoomToExtentControl({tipLabel: "Fit to extent"}),
new ol.control.ScaleLine()
])
});
popupSetup();
loadKML();
zoomToExtent();
}
function createMyZoomToExtentControl(){
/**
* @constructor
* @extends {ol.control.Control}
* @param {Object} opt_options - Control options.
*/
myZoomToExtentControl = function (opt_options) {
var options = opt_options || {};
var button = document.createElement('button');
button.id = 'zoom-to-extent';
button.setAttribute("title","Zoom to Extent");
var span = document.createElement('span');
//span.setAttribute("class", "glyphicon glyphicon-record");
span.innerHTML = 'E';
button.appendChild(span);
var this_ = this;
var handler = function(e) {
e.preventDefault(); //cancel click event
zoomToExtent();
document.getElementById("zoom-to-extent").disabled = true;
setTimeout(function() {
document.getElementById("zoom-to-extent").disabled = false;
}, 1);
};
button.addEventListener('click', handler, true);
button.addEventListener('touchstart', handler, true);
var element = document.createElement('div');
element.className = 'zoom-to-extent ol-zoom-extent ol-unselectable ol-control';
element.appendChild(button);
ol.control.Control.call(this, {
element: element,
target: options.target
});
};
ol.inherits(myZoomToExtentControl, ol.control.ZoomToExtent);
}
function zoomToExtent() {
var bounds = ol.extent.createEmpty();
olMapFeatures()
.forEach(function(item, i, arr){
var ext = ol.extent.createEmpty();
ext = item.getGeometry().getExtent();
bounds = ol.extent.extend(bounds, ext);
});
if (bounds) {
// increase bounds using a tenth of the
// maximum distance between coordinates
var incX = Math.abs(bounds[2] - bounds[0]);
var incY = Math.abs(bounds[3] - bounds[1]);
var buffer = (incX>incY)? incX: incY;
var bounds10 = ol.extent.createEmpty();
ol.extent.buffer(bounds, buffer/5, bounds10);
var animation = ol.animation.pan({
easing: eval(ol.easing.inAndOut),
source: map.getView().getCenter()
});
map.beforeRender(animation);
map.getView().fitExtent(bounds10, map.getSize());
}
};
function loadKML(){
var kml = "<?xml version='1.0' encoding='UTF-8'?> \
<kml xmlns='http://www.opengis.net/kml/2.2'>\
<Document>\
<name>Rutas de Barcelona</name>\
<description><![CDATA[]]></description>\
<Folder>\
<name>Catllaràs-Picancel</name>\
<Placemark>\
<styleUrl>#icon-503-F4EB37</styleUrl>\
<name>Serra del Catllaràs</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>5:40 horas (sin paradas)</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 1.100 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/serra-del-catllaras</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Media. Recorrido de longitud media, con un par de pasos de grimpada y terreno complicado si queremos ascender a la Roca del Joc.</value>\
</Data>\
<Data name='Distancia'>\
<value>18 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Catllaràs-Picancel</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Circular_Catllaras_38.JPG</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Completísima ruta circular en la que, partiendo desde La Pobla de Lillet, recorreremos la preciosa Serra del Catllaràs. Visitaremos tranquilos lugares como el Santuario de Falgars o históricos edificios como la rotonda de Sant Miquel de Lillet y el Monasterio de Lillet. No faltarán en nuestro camino las cimas, con trepada incluída a la abrupta Roca del Joc y visita al conocido mirador de la Roca de la Lluna.<br><br>Duración: 5:40 horas (sin paradas)<br>Desnivel: +/- 1.100 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/serra-del-catllaras<br>Época ideal: Todo el año<br>Dificultad: Media. Recorrido de longitud media, con un par de pasos de grimpada y terreno complicado si queremos ascender a la Roca del Joc.<br>Distancia: 18 kms.<br>Zona: Catllaràs-Picancel<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.941565,42.204112,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Ascenso al Sobrepuny</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:45 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 920 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/ascensi-n-al-sobrepuny</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>9,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Catllaràs-Picancel</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Sobrepuny_9.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Ruta circular que parte de la Nou de Berguedà, un tranquilo pueblo del prepirineo catalán y, ascendiendo por medio de bucólicos bosques nos lleva a coronar el Sobrepuny de Baix, con impresionantes vistas a la Serra d'Ensija, Pedraforca, Serra del Cadí o a Cingles de Queralt. Desde allí subiremos al Sobrepuny, cima más alta pero con panorámica más reducida. Bajaremos siguiendo GR para atravesar espesos pinares y pasar al lado de Les Agudes, impresionantes rocas de gran tamaño y afilada silueta, que tienen a tocar la restaurada entrada de la Mina de l'Ínsula, que se explotó entre 1918 y 1933.<br><br>Duración: 3:45 horas sin paradas<br>Desnivel: +/- 920 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/ascensi-n-al-sobrepuny<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 9,5 kms.<br>Zona: Catllaràs-Picancel<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.9107630000000002,42.167753,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Pedró de Tubau y Cingles de Tubau</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>2:15 sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 550 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/pedr-tubau-y-cingles-tubau</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>9,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Catllaràs-Picancel</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Pedro_de_Tubau_11.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Sencilla ruta que asciende a Rasos de Tubau y al Pedró de Tubau por una pista. Desde allí descendemos por los panorámicos Cingles de Tubau hasta alcanzar el Torrent del Sabuc, desde donde enlazaremos con la pista de ascenso para retornar al Coll de la Bataiola.<br><br>Duración: 2:15 sin paradas<br>Desnivel: +/- 550 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/pedr-tubau-y-cingles-tubau<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 9,5 kms.<br>Zona: Catllaràs-Picancel<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.049723,42.220181,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-F4EB37</styleUrl>\
<name>Puig Cornador desde Alpens por la Tremolosa</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>4:00 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 600 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/puig-cornador-alpens-tremolosa</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Media</value>\
</Data>\
<Data name='Distancia'>\
<value>14,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Catllaràs-Picancel</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/ruta/image/IMG_0039_web.jpg#overlay-context=ruta/puig-cornador-alpens-tremolosa</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Completa excursión que sube a una bonito y poco frecuentado pico de una modesta altitud, poco más de 1200 metros de altura. El itinerario descrito es poco frecuentado y circular, y pasa por la Tremolosa, una especie de mini-colonia abandonada. Destacable también la formación rocosa de Roca Pena. Cuidado con la orientación y con coger falsos caminos creados por tala de árboles.<br><br>Duración: 4:00 horas sin paradas<br>Desnivel: +/- 600 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/puig-cornador-alpens-tremolosa<br>Época ideal: Todo el año<br>Dificultad: Media<br>Distancia: 14,5 kms.<br>Zona: Catllaràs-Picancel<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.108356,42.139728,0.0</coordinates>\
</Point>\
</Placemark>\
</Folder>\
<Folder>\
<name>Moixeró-La Tosa</name>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Tosa d'Alp desde el Coll de Pal</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>2:15 horas sin paradas</value>\
</Data>\
<Data name='Difcultad'>\
<value>Baja. Media si hay nieve en el itinerario.</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 550 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/ascenso-tosa-dalp-coll-pal</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año. Fuera de la época estival, si el terreno está cubierto de nieve podemos requerir raquetas de nieve y/o crampones.</value>\
</Data>\
<Data name='Distancia'>\
<value>8 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Rasos de Peguera-Serra d'Ensija</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Tossa_Alp_11.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Fácil ascenso a una cima de alta montaña, en el extremo más oriental de la Serra del Cadí-Moixeró, con excepcionales vistas a los pueblos de la Cerdanya y a sus numerosas cimas.<br><br>Duración: 2:15 horas sin paradas<br>Difcultad: Baja. Media si hay nieve en el itinerario.<br>Desnivel: +/- 550 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/ascenso-tosa-dalp-coll-pal<br>Época ideal: Todo el año. Fuera de la época estival, si el terreno está cubierto de nieve podemos requerir raquetas de nieve y/o crampones.<br>Distancia: 8 kms.<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.892653,42.320581,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Puigllançada y Tossal de Rus desde el Coll de Pal</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:00 horas sin paradas</value>\
</Data>\
<Data name='Difcultad'>\
<value>Baja. Media si hay nieve en el itinerario.</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 730 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/puigllancada-y-tossal-rus-coll-pal</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año. Fuera de la época estival, si el terreno está cubierto de nieve podemos requerir raquetas de nieve y/o crampones.</value>\
</Data>\
<Data name='Distancia'>\
<value>9,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Rasos de Peguera-Serra d'Ensija</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Puigllancada_5.JPG</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Sencilla ruta circular por amable terreno de alta montaña. Partiremos del Coll de Pal para ascender rápidamente a la cima del Puigllançada, donde disfrutaremos de vistas de conocidas cimas pirenaicas y del Prepirineo: desde el Puigmal y cimas de la Cerdanya francesa a la Serra d'Ensija, el Pedraforca y la Serra del Cadí. Completaremos la ruta circular ascendiendo al Tossal de Rus y posteriormente flanqueando por la falda del Puigllançada hasta retornar al Coll de Pal.<br><br>Duración: 3:00 horas sin paradas<br>Difcultad: Baja. Media si hay nieve en el itinerario.<br>Desnivel: +/- 730 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/puigllancada-y-tossal-rus-coll-pal<br>Época ideal: Todo el año. Fuera de la época estival, si el terreno está cubierto de nieve podemos requerir raquetas de nieve y/o crampones.<br>Distancia: 9,5 kms.<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.9355710000000002,42.3003,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Sant Marc de Brocà desde Mare de Déu de Paller</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:15 horas sin contar paradas</value>\
</Data>\
<Data name='Difcultad'>\
<value>Baja</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 830 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/circular-sant-marc-broc-mare-d-u-paller</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Distancia'>\
<value>10 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Rasos de Peguera-Serra d'Ensija</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Sant_Marc_de_Broca_10.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Ruta circular sin grandes dificultades que parte del Santuario de la Mare de Déu de Paller, conocidísimo en Bagà y cercanías y que, pasando por el Paller de Dalt, ubicación del santuario original, asciende a la cima de Sant Marc de Brocà, con vértice geodésico y los restos de una antigua iglesia románica. La visión de la Serra d'Ensija, Pedraforca y Serra del Cadí desde este lugar recompensan el ascenso.<br><br>Duración: 3:15 horas sin contar paradas<br>Difcultad: Baja<br>Desnivel: +/- 830 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/circular-sant-marc-broc-mare-d-u-paller<br>Época ideal: Todo el año<br>Distancia: 10 kms.<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.8989419999999997,42.26471,0.0</coordinates>\
</Point>\
</Placemark>\
</Folder>\
<Folder>\
<name>Montseny</name>\
<Placemark>\
<styleUrl>#icon-503-F4EB37</styleUrl>\
<name>Agudes por Castellets y Turó de l'Home</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:00 horas sin paradas (3:40 si andamos el tramo de carretera)</value>\
</Data>\
<Data name='Desnivel'>\
<value>+700 metros, -750 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/ruta/ascension-agudes-castellets-turo-del-home</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año. Evitar la ascensión por Els Castellets si hay nieve en el Montseny.</value>\
</Data>\
<Data name='Dificultad'>\
<value>Media. El camino no es largo, pero tiene diversos pasos de grimpada que no son complicados pero que requieren un mínimo de experiencia.</value>\
</Data>\
<Data name='Distancia'>\
<value>9,5 kms (13,5 si andamos el tramo de carretera)</value>\
</Data>\
<Data name='Zona'>\
<value>Parc Natural de Montseny</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Les%20Agudes%204.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Clásica excursión en el Parc Natural del Montseny, subiendo a Les Agudes por su lado más agreste, Els Castellets. Este itinerario encara la subida directamente, pasando algunos pasos de grimpada sencillos que le añaden interés a la excursión. En la cima de Les Agudes disfrutamos grandes vistas hacia el cercano Matagalls, el Pirineo de Girona, con el Puigmal y el Canigó destacados y poblaciones como Arbúcies o Vic. Desde aquí nos acercaremos al Turó de l'Home, la máxima elevación del Montseny. Esta cima está muy degradada y ha perdido mucho encanto por las numerosas construcciones que encontramos cerca de ella: carretera, antenas, pista... Desde aquí bajaremos a Santa Fe del Montseny por la Font del Briançó, entre hermosos hayedos, para acabar llegando a la famosa Font dels Passavets y finalmente a Santa Fe del Montseny. Deberemos dejar un vehículo en Santa Fe y otro en el Pla d'en Mon o recorrer 4 kilómetros de carreterra para concluir la excursión si no tenemos esta opción.<br><br>Duración: 3:00 horas sin paradas (3:40 si andamos el tramo de carretera)<br>Desnivel: +700 metros, -750 metros<br>Enlace a la ruta: http://www.xiruca.com/ruta/ascension-agudes-castellets-turo-del-home<br>Época ideal: Todo el año. Evitar la ascensión por Els Castellets si hay nieve en el Montseny.<br>Dificultad: Media. El camino no es largo, pero tiene diversos pasos de grimpada que no son complicados pero que requieren un mínimo de experiencia.<br>Distancia: 9,5 kms (13,5 si andamos el tramo de carretera)<br>Zona: Parc Natural de Montseny<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.443986,41.789249,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Castanyer Gros de Can Cuch</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>2:30 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 550 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/circular-al-castanyer-gros-can-cuch</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>8,5 kms</value>\
</Data>\
<Data name='Zona'>\
<value>Parc Natural de Montseny</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Castanyer_Gros_Can_Cuc_7.JPG</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Completa y sencilla excursión en la cara Sur del Montseny que parte del Pantà de Vallfornes y nos llevará a visitar un árbol monumental, interesante donde los haya: el Castanyer Gros de Can Cuch. Para retornar al punto de origen volveremos por la ermita de Sant Salvador de Terrades y por Can Cuch, interesante hotel en un tranquilo y cuidado entorno. Excursión ideal para niños, especialmente por la visita al Castanyer.<br><br>Duración: 2:30 horas sin paradas<br>Desnivel: +/- 550 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/circular-al-castanyer-gros-can-cuch<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 8,5 kms<br>Zona: Parc Natural de Montseny<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.349114,41.736171,0.0</coordinates>\
</Point>\
</Placemark>\
</Folder>\
<Folder>\
<name>Puigsacalm-Bellmunt</name>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Bellmunt y Salt del Molí desde Vidrà</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:00 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 650 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/ruta/bellmunt-salt-del-moli-vidra</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>10 kilómetros</value>\
</Data>\
<Data name='Zona'>\
<value>Puigsacalm-Bellmunt</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Bellmunt_Salt_del_Mol%C3%AD_8.JPG</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Ruta circular que no presenta grandes dificultades y que parte del pueblo de Vidrà. Nos conducirá a Bellmunt, cima con hermosas vistas y un santuario que la corona. Desde aquí tomaremos un camino para descender hasta el bucólico salt del Molí del Salt, una cascada única en la zona, para retornar de nuevo al pueblo de Vidrà.<br><br>Duración: 3:00 horas sin paradas<br>Desnivel: +/- 650 metros<br>Enlace a la ruta: http://www.xiruca.com/ruta/bellmunt-salt-del-moli-vidra<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 10 kilómetros<br>Zona: Puigsacalm-Bellmunt<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.294362,42.101789,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Puigsacalm desde la Collada de Bracons</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>2:45 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 600 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/ruta/puigsacalm-collada-bracons</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>8 kilómetros</value>\
</Data>\
<Data name='Zona'>\
<value>Puigsacalm-Bellmunt</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Puigsacalm_11.JPG</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Sencilla y clásica ruta en la que ascenderemos a una bella cima al límite entre las provincias de Barcelona y Girona. El camino nos obsequia con el paso por hermosos hayedos y extensos prados.<br><br>Duración: 2:45 horas sin paradas<br>Desnivel: +/- 600 metros<br>Enlace a la ruta: http://www.xiruca.com/ruta/puigsacalm-collada-bracons<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 8 kilómetros<br>Zona: Puigsacalm-Bellmunt<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.387896,42.125158,0.0</coordinates>\
</Point>\
</Placemark>\
</Folder>\
<Folder>\
<name>Rasos de Peguera-Serra d'Ensija</name>\
<Placemark>\
<styleUrl>#icon-503-F4EB37</styleUrl>\
<name>Circular Serra d'Ensija</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>4:15 horas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 950 metros</value>\
</Data>\
<Data name='Descripción'>\
<value>Completísima ruta circular que tiene su origen y final en la Font Freda y recorre la Serra d'Ensija empezando por el Serrat Voltor, al Este. Transitaremos por las amables lomas de la parte superior de la sierra, por amplios prados, por el Pla d'Ensija y la redondeada cima de la Creu de Ferro. Finalmente pasaremos por el bucólico llano donde se emplaza el Refugio Delgado Úbeda o de la Serra d'Ensija y ascendemos a la cima más alta de la sierra, situada al Oeste de ésta: El Cap Llitzet o Cap de la Gallina Pelada, con grandes vistas a toda la sierra y al macizo del Pedraforca.</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/circular-serra-densija-del-serrat-voltor-al-cap-llitzet-o-cap-gallina-pelada</value>\
</Data>\
<Data name='Época ideal'>\
<value>Finales de primavera, verano y otoño</value>\
</Data>\
<Data name='Dificultad'>\
<value>Media</value>\
</Data>\
<Data name='Distancia'>\
<value>11.5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Rasos de Peguera-Serra d'Ensija</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Serra_Ensija_16.JPG</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Provincia: Barcelona<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Descripción: Completísima ruta circular que tiene su origen y final en la Font Freda y recorre la Serra d'Ensija empezando por el Serrat Voltor, al Este. Transitaremos por las amables lomas de la parte superior de la sierra, por amplios prados, por el Pla d'Ensija y la redondeada cima de la Creu de Ferro. Finalmente pasaremos por el bucólico llano donde se emplaza el Refugio Delgado Úbeda o de la Serra d'Ensija y ascendemos a la cima más alta de la sierra, situada al Oeste de ésta: El Cap Llitzet o Cap de la Gallina Pelada, con grandes vistas a toda la sierra y al macizo del Pedraforca.<br><br>Duración: 4:15 horas<br>Desnivel: +/- 950 metros<br>Descripción: Completísima ruta circular que tiene su origen y final en la Font Freda y recorre la Serra d'Ensija empezando por el Serrat Voltor, al Este. Transitaremos por las amables lomas de la parte superior de la sierra, por amplios prados, por el Pla d'Ensija y la redondeada cima de la Creu de Ferro. Finalmente pasaremos por el bucólico llano donde se emplaza el Refugio Delgado Úbeda o de la Serra d'Ensija y ascendemos a la cima más alta de la sierra, situada al Oeste de ésta: El Cap Llitzet o Cap de la Gallina Pelada, con grandes vistas a toda la sierra y al macizo del Pedraforca.<br>Enlace a la ruta: http://www.xiruca.com/rutas/circular-serra-densija-del-serrat-voltor-al-cap-llitzet-o-cap-gallina-pelada<br>Época ideal: Finales de primavera, verano y otoño<br>Dificultad: Media<br>Distancia: 11.5 kms.<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.73371,42.19103,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Raquetas Rasos de Peguera</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:00 horas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 400 metros</value>\
</Data>\
<Data name='Descripción'>\
<value>Sencilla excursión circular, ideal para iniciarse en el mundo de las raquetas de nieve, en la que ascenderemos fácilmente a La Torreta o Roca de l'Auró, con espléndidas vistas, para luego ganar la loma de Rasos de Baix, más alta pero con menos visión panorámica. Después descenderemos hasta Les Collades para encarar el ascenso al techo de la sierra, en Rasos de Dalt y volver a la Creu del Cabrer. Podemos acortar la excursión y retirarnos en múltiples puntos si estamos cansados.</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/circular-rasos-peguera-raquetas</value>\
</Data>\
<Data name='Época ideal'>\
<value>Invierno-primavera, dependiendo de la innivación.</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja, aunque requerirá de una buena orientación.</value>\
</Data>\
<Data name='Distancia'>\
<value>8,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Rasos de Peguera-Serra d'Ensija</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Rasos_de_Peguera_con_raquetas_14.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Sencilla excursión circular, ideal para iniciarse en el mundo de las raquetas de nieve, en la que ascenderemos fácilmente a La Torreta o Roca de l'Auró, con espléndidas vistas, para luego ganar la loma de Rasos de Baix, más alta pero con menos visión panorámica. Después descenderemos hasta Les Collades para encarar el ascenso al techo de la sierra, en Rasos de Dalt y volver a la Creu del Cabrer. Podemos acortar la excursión y retirarnos en múltiples puntos si estamos cansados.<br><br>Duración: 3:00 horas<br>Desnivel: +/- 400 metros<br>Descripción: Sencilla excursión circular, ideal para iniciarse en el mundo de las raquetas de nieve, en la que ascenderemos fácilmente a La Torreta o Roca de l'Auró, con espléndidas vistas, para luego ganar la loma de Rasos de Baix, más alta pero con menos visión panorámica. Después descenderemos hasta Les Collades para encarar el ascenso al techo de la sierra, en Rasos de Dalt y volver a la Creu del Cabrer. Podemos acortar la excursión y retirarnos en múltiples puntos si estamos cansados.<br>Enlace a la ruta: http://www.xiruca.com/rutas/circular-rasos-peguera-raquetas<br>Época ideal: Invierno-primavera, dependiendo de la innivación.<br>Dificultad: Baja, aunque requerirá de una buena orientación.<br>Distancia: 8,5 kms.<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.764529,42.141641,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Figuerassa y Cogulló d'Estela</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:00 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 750 metros</value>\
</Data>\
<Data name='Descripción'>\
<value>Variada ruta que nos llevará a dos buenos miradores de la comarca del Berguedà: La Figuerassa y el Cogulló d'Estela. El acceso a La Figuerassa desde el Coll d'Oreller es un corto y cómodo paseo sin apenas desnivel, pero que nos servirá para calentar de cara al ascenso al Cogulló d'Estela y para localizarlo desde allí. La posterior ascensión al Cogulló d'Estela es un poco más larga y pasa por dos grandes masias abandonadas y por los amplios prados de Plans de Tagast. La panorámica que nos ofrece el Cogulló d'Estela es amplísima y bella.</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/figuerassa-y-cogull-destela</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>11,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Rasos de Peguera-Serra d'Ensija</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/CogulloEstela_Figuerassa_15.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Variada ruta que nos llevará a dos buenos miradores de la comarca del Berguedà: La Figuerassa y el Cogulló d'Estela. El acceso a La Figuerassa desde el Coll d'Oreller es un corto y cómodo paseo sin apenas desnivel, pero que nos servirá para calentar de cara al ascenso al Cogulló d'Estela y para localizarlo desde allí. La posterior ascensión al Cogulló d'Estela es un poco más larga y pasa por dos grandes masias abandonadas y por los amplios prados de Plans de Tagast. La panorámica que nos ofrece el Cogulló d'Estela es amplísima y bella.<br><br>Duración: 3:00 horas sin paradas<br>Desnivel: +/- 750 metros<br>Descripción: Variada ruta que nos llevará a dos buenos miradores de la comarca del Berguedà: La Figuerassa y el Cogulló d'Estela. El acceso a La Figuerassa desde el Coll d'Oreller es un corto y cómodo paseo sin apenas desnivel, pero que nos servirá para calentar de cara al ascenso al Cogulló d'Estela y para localizarlo desde allí. La posterior ascensión al Cogulló d'Estela es un poco más larga y pasa por dos grandes masias abandonadas y por los amplios prados de Plans de Tagast. La panorámica que nos ofrece el Cogulló d'Estela es amplísima y bella.<br>Enlace a la ruta: http://www.xiruca.com/rutas/figuerassa-y-cogull-destela<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 11,5 kms.<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.787075,42.121607,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Vuelta Cingles de Queralt</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>2:10 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 400 metros</value>\
</Data>\
<Data name='Descripción'>\
<value>Sencilla ruta circular que parte del famoso Santuario de Queralt, conocido como el \"Balcó de Catalunya\" por sus espectaculares vistas. Sin grandes dificultades transitaremos por la escarpada cara sur de Cingles de Queralt y luego por un camino al norte que enlaza con el Camí de l'Aigua, equipado con escalones y algún pasamanos.</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/vuelta-cingles-queralt</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>5,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Rasos de Peguera-Serra d'Ensija</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Cingles_Queralt_21.JPG</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Sencilla ruta circular que parte del famoso Santuario de Queralt, conocido como el \"Balcó de Catalunya\" por sus espectaculares vistas. Sin grandes dificultades transitaremos por la escarpada cara sur de Cingles de Queralt y luego por un camino al norte que enlaza con el Camí de l'Aigua, equipado con escalones y algún pasamanos.<br><br>Duración: 2:10 horas sin paradas<br>Desnivel: +/- 400 metros<br>Descripción: Sencilla ruta circular que parte del famoso Santuario de Queralt, conocido como el \"Balcó de Catalunya\" por sus espectaculares vistas. Sin grandes dificultades transitaremos por la escarpada cara sur de Cingles de Queralt y luego por un camino al norte que enlaza con el Camí de l'Aigua, equipado con escalones y algún pasamanos.<br>Enlace a la ruta: http://www.xiruca.com/rutas/vuelta-cingles-queralt<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 5,5 kms.<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.827357,42.107393,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Circular Serra dels Tossals</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:45 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 800 metros</value>\
</Data>\
<Data name='Descripción'>\
<value>Ruta circular que nos lleva al Santuari dels Tossals, del que poco queda ya pero que está situado en una cima con excepcional visión de las sierras cercanas. Desde allí seguiremos la sierra por su parte más alta para retornar por la bucólica zona boscosa de la obaga de la sierra. La ruta es variada y no requiere grandes esfuerzos.</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/circular-serra-dels-tossals</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>13 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Rasos de Peguera-Serra d'Ensija</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Els_Tossals_16.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Ruta circular que nos lleva al Santuari dels Tossals, del que poco queda ya pero que está situado en una cima con excepcional visión de las sierras cercanas. Desde allí seguiremos la sierra por su parte más alta para retornar por la bucólica zona boscosa de la obaga de la sierra. La ruta es variada y no requiere grandes esfuerzos.<br><br>Duración: 3:45 horas sin paradas<br>Desnivel: +/- 800 metros<br>Descripción: Ruta circular que nos lleva al Santuari dels Tossals, del que poco queda ya pero que está situado en una cima con excepcional visión de las sierras cercanas. Desde allí seguiremos la sierra por su parte más alta para retornar por la bucólica zona boscosa de la obaga de la sierra. La ruta es variada y no requiere grandes esfuerzos.<br>Enlace a la ruta: http://www.xiruca.com/rutas/circular-serra-dels-tossals<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 13 kms.<br>Zona: Rasos de Peguera-Serra d'Ensija<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>1.753746,42.088613,0.0</coordinates>\
</Point>\
</Placemark>\
</Folder>\
<Folder>\
<name>Serra de Collserola</name>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Puig Madrona desde la Santa Creu d'Olorda</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>5:00 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 870 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/puig-madrona-santa-creu-dolorda</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja. No hay ningún tramo que sea de dificultad técnica, sólo debemos procurar orientarnos correctamente.</value>\
</Data>\
<Data name='Distancia'>\
<value>19 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Serra de Collserola</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/ruta/image/Puig%20de%20Madrona%206.JPG#overlay-context=node/1127</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Ruta circular que sale de la Creu d’Olorda, una zona de ocio interesante para visitar y que nos lleva al Puig de Madrona, cima con una buena panorámica de la Serra de Collserola y de los alrededores de Barcelona. Interesante visita al espacio naturalístico de la Pedrera dels Ocells.<br><br>Duración: 5:00 horas sin paradas<br>Desnivel: +/- 870 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/puig-madrona-santa-creu-dolorda<br>Época ideal: Todo el año<br>Dificultad: Baja. No hay ningún tramo que sea de dificultad técnica, sólo debemos procurar orientarnos correctamente.<br>Distancia: 19 kms.<br>Zona: Serra de Collserola<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.024177,41.451372,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Puig d'Olorda</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>0:40 horas sin paradas </value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 150 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/puig-olorda</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Muy Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>2,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Serra de Collserola</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Puig%20d%27Olorda%2014.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Sencillísima y breve ruta circular que sale de la Creu d’Olorda, una zona de ocio interesante para visitar y que nos lleva al Puig d'Olorda, cima con una buena panorámica de Barcelona y las poblaciones del Baix Llobregat pasando por al lado de una antigua cementera. Interesante visita al espacio naturalístico de la Pedrera dels Ocells.<br><br>Duración: 0:40 horas sin paradas <br>Desnivel: +/- 150 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/puig-olorda<br>Época ideal: Todo el año<br>Dificultad: Muy Baja<br>Distancia: 2,5 kms.<br>Zona: Serra de Collserola<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.055135,41.412224,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Sant Pere Màrtir</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>1:55 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 440 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/sant-pere-martir</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>7,5 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Serra de Collserola</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Sant%20Pere%20M%C3%A0rtir%2015.jpg#overlay-context=foto/fotos-ruta-sant-pere-m-rtir</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Sencilla ruta circular iniciada en Pedralbes, con la que alcanzaremos una panorámica cima de Collserola con bastante historia y curiosidades a su alrededor. La ruta es agradable y nos ofrece buenas vistas del Tibidabo y la Serra de Collserola y como no, de Barcelona ciudad y el Baix Llobregat.<br><br>Duración: 1:55 horas sin paradas<br>Desnivel: +/- 440 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/sant-pere-martir<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 7,5 kms.<br>Zona: Serra de Collserola<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.097844,41.393916,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-F4EB37</styleUrl>\
<name>Travesía de Collserola por sus cimas principales</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>10:00 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 1.600 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/travesia-collserola-sus-cimas-principales-papiol-llagosta</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Media. No hay ningún tramo que sea de dificultad técnica, pero debemos procurar orientarnos correctamente y tener claro que es un recorrido largo y con una exigencia física elevada.</value>\
</Data>\
<Data name='Distancia'>\
<value>40 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Serra de Collserola</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Traves%C3%ADa%20Collserola%2031.jpg</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Larga y variada travesía que arranca en la estación de tren de El Papiol y que nos llevará a través de la Sierra de Collserola alcanzando algunas de sus más ilustres cumbres: Puig de Madrona, Puig d'Olorda, Tibidabo y el Turó de Magarola. Durante el recorrido caminaremos por cuatro comarcas diferentes, disfrutando de hermosas vistas, largas pistas de tierra, senderos sombríos entre los árboles de Collserola y numerosas fuentes.<br><br>Duración: 10:00 horas sin paradas<br>Desnivel: +/- 1.600 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/travesia-collserola-sus-cimas-principales-papiol-llagosta<br>Época ideal: Todo el año<br>Dificultad: Media. No hay ningún tramo que sea de dificultad técnica, pero debemos procurar orientarnos correctamente y tener claro que es un recorrido largo y con una exigencia física elevada.<br>Distancia: 40 kms.<br>Zona: Serra de Collserola<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.118784,41.42208600000001,0.0</coordinates>\
</Point>\
</Placemark>\
<Placemark>\
<styleUrl>#icon-503-62AF44</styleUrl>\
<name>Turó de Magarola</name>\
<ExtendedData>\
<Data name='Duración'>\
<value>3:00 horas sin paradas</value>\
</Data>\
<Data name='Desnivel'>\
<value>+/- 450 metros</value>\
</Data>\
<Data name='Enlace a la ruta'>\
<value>http://www.xiruca.com/rutas/turo-magarola</value>\
</Data>\
<Data name='Época ideal'>\
<value>Todo el año</value>\
</Data>\
<Data name='Dificultad'>\
<value>Baja</value>\
</Data>\
<Data name='Distancia'>\
<value>10 kms.</value>\
</Data>\
<Data name='Zona'>\
<value>Serra de Collserola</value>\
</Data>\
<Data name='Provincia'>\
<value>Barcelona</value>\
</Data>\
<Data name='gx_media_links'>\
<value>http://www.xiruca.com/sites/xiruca.com/files/galeria/Tur%C3%B3%20Magarola%2020.JPG</value>\
</Data>\
</ExtendedData>\
<description><![CDATA[Sencilla ruta circular que se inicia en la estación de metro de Canyelles y que nos lleva hasta uno de los mejores miradores de la Sierra de Collserola, el Turó de Magarola, recorriendo tramos de sendero con grandes sombras, tramos del Passeig de les Aigües y pasando por al lado de zonas bien conocidas en la ciudad de Barcelona como el Parque del laberinto o el velódromo de Horta.<br><br>Duración: 3:00 horas sin paradas<br>Desnivel: +/- 450 metros<br>Enlace a la ruta: http://www.xiruca.com/rutas/turo-magarola<br>Época ideal: Todo el año<br>Dificultad: Baja<br>Distancia: 10 kms.<br>Zona: Serra de Collserola<br>Provincia: Barcelona]]></description>\
<Point>\
<coordinates>2.129714,41.442161,0.0</coordinates>\
</Point>\
</Placemark>\
</Folder>\
<Style id='icon-503-62AF44'>\
<IconStyle>\
<color>ff44AF62</color>\
<scale>1.1</scale>\
<Icon>\
<href>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAA4klEQVRIx2P4//8/Az0xw8ixEBmEuDH8pwLeD8QOMDMJWvj1LGV45yyG/3F+YIsT6GIhCF/fArfUgGYWZoQz/J/ViOpToHnraWYhLA6XdkH4r49C+DS3sCYDVWz4WUi3IAUlGphlILx+Eo0TDd2zBSwY6ZbxkYq29SCf0bxoA+llwAIGnYXvH+4h3TKQHpBecixsKIqHRD4pCQWkB6SXZAthloJcS0L99x6XZVgtpFKlixNjWAgqIaiR2XElJGw+JCuhEJuQsFkITijUtBRkFjQhFWBNNGQkFKIT0ghsl9ILAwAuYBFFue/ufAAAAABJRU5ErkJggg=</href>\
</Icon>\
</IconStyle>\
</Style>\
<Style id='icon-503-F4EB37'>\
<IconStyle>\
<color>ff37EBF4</color>\
<scale>1.1</scale>\
<Icon>\
<href>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAA4klEQVRIx2P4//8/Az0xw8ixEBmEuDH8pwLeD8QOMDMJWvj1LGV45yyG/3F+YIsT6GIhCF/fArfUgGYWZoQz/J/ViOpToHnraWYhLA6XdkH4r49C+DS3sCYDVWz4WUi3IAUlGphlILx+Eo0TDd2zBSwY6ZbxkYq29SCf0bxoA+llwAIGnYXvH+4h3TKQHpBecixsKIqHRD4pCQWkB6SXZAthloJcS0L99x6XZVgtpFKlixNjWAgqIaiR2XElJGw+JCuhEJuQsFkITijUtBRkFjQhFWBNNGQkFKIT0ghsl9ILAwAuYBFFue/ufAAAAABJRU5ErkJggg=</href>\
</Icon>\
</IconStyle>\
</Style>\
</Document>\
</kml>";
var kmlSource = new ol.source.KML({
projection: 'EPSG:3857',
text: kml,
extractStyles: defaults.extractStylesKml
});
var vectorLayer = new ol.layer.Vector({
source: kmlSource,
style: kmlStyle
});
function kmlStyle(feature, resolution){
// use default styles if using kml icons
if (!defaults.extractStylesKml) return [];
return [new ol.style.Style({
image: new ol.style.Circle({
radius: 5,
fill: new ol.style.Fill({
color: 'rgba(123, 152, 188, 0)'
}),
stroke: new ol.style.Stroke({
color: 'rgba(123, 152, 188, 0)',
width: 1
})
})
})];
}
// Add vectory layer to map
map.addLayer(vectorLayer);
//render custom markers
renderSVGFeatures();
}
}
})();
(function() {
'use strict';
/**
* Main Controller
*/
angular
.module('app')
.controller('mainController', Controller);
Controller.$inject = [
'mapService',
'$timeout',
'$rootScope'
];
function Controller(mapService, $timeout, $rootScope) {
var vm = this;
// map initialisation
mapService.init({
extractStylesKml: false,
popupOffset: [-4,-43],
featurePropertiesMap: ['name', 'description', 'Enlace a la ruta'], //override default mapping
onFeatureSelected: onFeatureSelected //override default event handler
});
vm.staticTabs = { search: true, details: false };
vm.features = mapService.getFeatures();
vm.selectFeature = selectFeature;
vm.hideFeatures = hideFeatures;
vm.cancelSearch = cancelSearch;
///////////////////////////////////////////////////////////
// map to view interactions
/**
* Event handler triggered when a feature is selected
*
* @param {Object} feature - feature selected.
*
* Feature properties are defined by config.featurePropertiesMap.
*/
function onFeatureSelected(feature) {
console.log("feature selected", feature);
// safely run after digest cycle
// needed to handle list selection
$timeout(function(){
vm.feature = feature;
selectTab("details");
});
}
/**
* Activates tab
*
* @param {String} key - tab id
*/
function selectTab(key){
if (vm.staticTabs.hasOwnProperty(key))
vm.staticTabs[key] = true;
}
///////////////////////////////////////////////////////////
// view to map interactions
// subscribe to event
$rootScope.$on("global.hide-features", vm.hideFeatures);
/**
* Selects a single feature on the map
*
* @param {String} id - feature id
*/
function selectFeature(id){
mapService.selectFeature(id, true);
}
/**
* Hides features on the map
*
* @param {Event} event - event object
* @param {Array} features - feature ids that should be shown
*/
function hideFeatures(event, features){
mapService.hideFeatures(features, vm.search);
};
/**
* Cancels search and zoom to extent
*/
function cancelSearch(){
var undefined,
zoomToExtent = true;
selectTab("search");
vm.search = "";
vm.feature = undefined;
mapService.unselectFeature(zoomToExtent);
};
}
})();