Back Valparaíso

An error occurred while processing the template.
Can't convert this string to number: "null"
The blamed expression:
==> latitude?number  [in template "42020#42061#120471146" at line 148, column 35]

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${latitude?number}  [in template "42020#42061#120471146" at line 148, column 33]
----
1<style> 
2  #map { 
3    height: 100%; 
4    position: relative; 
5    overflow: visible; 
6
7</style> 
8<#if ! themeDisplay ? has_content> 
9       <#assign liferay_theme = PortletJspTagLibs["/META-INF/liferay-theme.tld"] /> 
10       <@liferay_theme["defineObjects"] /> 
11</#if> 
12<h1 class="title">${.vars['reserved-article-title'].data} </h1> 
13<div class="wrap-content mB30 clearfix"> 
14    <#assign firstImageNotEmpty = false /> 
15    <#if galeriaImagenes.foto?has_content> 
16        <#if galeriaImagenes.foto.getSiblings()?size == 1> 
17            <#assign firstImage = galeriaImagenes.foto.getSiblings()?first> 
18            <#if firstImage??> 
19                <#if (firstImage.imagen?? && firstImage.imagen.getData()?? && firstImage.imagen.getData() != "")> 
20                    <#assign firstImageNotEmpty = true /> 
21                </#if> 
22            </#if> 
23        <#else> 
24            <#assign firstImageNotEmpty = true /> 
25        </#if> 
26    </#if> 
27    <#if firstImageNotEmpty || descripcionProyecto.getData()?has_content> 
28        <div class="col-magic-slider mB20"> 
29            <#if videoExterno?has_content && videoExterno.getData()?has_content || UrlVideo?has_content && UrlVideo.getData()?has_content > 
30                <div class="pull-right w50 mL20 mB20"> 
31                    <div class="video-container"> 
32                        <#if videoExterno?has_content && videoExterno.getData()?has_content > 
33                                <div class="embed-responsive embed-responsive-16by9"> 
34                                    <iframe class="embed-responsive-item" src="${videoExterno.getData()}" allowfullscreen="allowfullscreen"></iframe> 
35                                </div> 
36                            <#elseif UrlVideo?has_content && UrlVideo.getData()?has_content> 
37                                <video controls> 
38                                  <source src="${UrlVideo.getData()}"> 
39                                </video> 
40                            </#if> 
41                    </div> 
42                </div> 
43            <#elseif firstImageNotEmpty> 
44                <div class="pull-right w50 mL20 mB20"> 
45                    <section class="slider-minOwl"> 
46                        <div id="slider-minOwl" class="owl-carousel owl-theme"> 
47                            <#list galeriaImagenes.foto.getSiblings() as cur_foto> 
48                                <#if galeriaImagenes.foto.imagen.getData()?? && galeriaImagenes.foto.imagen.getData() != ""> 
49                                   <div class="item"> 
50                                        <img class="img-responsive w100 cornerBR" data-fileentryid="${cur_foto.imagen.getAttribute("fileEntryId")}" alt="${cur_foto.imagen.getAttribute("alt")}" src="${cur_foto.imagen.getData()}" />                      
51                                        <#if cur_foto.nombre.getData()?has_content> 
52                                            <div class="minwc"> 
53                                                <p>${cur_foto.nombre.getData()}</p> 
54                                            </div> 
55                                        </#if>  
56                                    </div> 
57                                </#if>  
58                            </#list> 
59                        </div> 
60                    </section> 
61                </div> 
62            </#if> 
63            <#if descripcionProyecto.getData()?has_content> 
64                <div> 
65                    <p>${descripcionProyecto.getData()}</p> 
66                </div> 
67            </#if> 
68        </div> 
69    </#if> 
70</div> 
71<#if datosSignificativos.dato?has_content> 
72    <#if datosSignificativos.dato.getSiblings()?has_content> 
73        <#assign firstDatoNotEmpty = false /> 
74        <#if datosSignificativos.dato.getSiblings()?size == 1> 
75            <#assign firstDato = datosSignificativos.dato.getSiblings()?first> 
76            <#if firstDato??> 
77                <#if (firstDato.icono?? && firstDato.icono.getData()?? && firstDato.icono.getData() != "") || (firstDato.nombreDato?? && firstDato.nombreDato.getData()?? && firstDato.nombreDato.getData() != "") 
78                            || (firstDato.subtituloDato.getData()?? && firstDato.subtituloDato.getData() != "")> 
79                    <#assign firstDatoNotEmpty = true /> 
80                </#if> 
81            </#if> 
82        <#else> 
83            <#assign firstDatoNotEmpty = true /> 
84        </#if> 
85        <#if firstDatoNotEmpty> 
86            <div class="pB35"> 
87                <div class="flexbox"> 
88                    <#if datosSignificativos.dato.getSiblings()?has_content> 
89                        <#list datosSignificativos.dato.getSiblings() as cur_dato> 
90                            <div class="flexColumna blueBox cornerBR"> 
91                                <#if cur_dato.iconoDato.getData()?? && cur_dato.iconoDato.getData() != ""> 
92                                    <div class="blueBox-image"> 
93                                        <img data-fileentryid="${cur_dato.iconoDato.getAttribute("fileEntryId")}" alt="${cur_dato.iconoDato.getAttribute("alt")}" src="${cur_dato.iconoDato.getData()}" class="img46" /> 
94                                    </div> 
95                                </#if> 
96                                <div class="blueBox-text"> 
97                                    <h4 class="txtAzulOscuro">${cur_dato.nombreDato.getData()}</h4> 
98                                    <p>${cur_dato.subtituloDato.getData()}</p> 
99                                </div> 
100                            </div> 
101                        </#list> 
102                    </#if> 
103                </div> 
104            </div> 
105        </#if> 
106    </#if> 
107</#if> 
108<#assign latitude = 0> 
109<#assign longitude = 0> 
110<#assign hideMap = false> 
111 
112<#if hideGeolocation??> 
113    <#if getterUtil.getBoolean(hideGeolocation.getData())> 
114        <#assign hideMap = getterUtil.getBoolean(hideGeolocation.getData())> 
115    </#if> 
116</#if> 
117 
118<#if (geolocalizacion.getData() != "") && (hideMap == false)> 
119<#assign latitude = 0> 
120<#assign longitude = 0> 
121<#if (geolocalizacion.getData() != "")> 
122    <#assign PortalPreferencesUtil = staticUtil["com.liferay.portal.kernel.service.PortalPreferencesLocalServiceUtil"] /> 
123    <#assign portletPreferences = PortalPreferencesUtil.getPreferences(companyId, 1) /> 
124    <#assign googleMapsAPIKey = themeDisplay.getScopeGroup().getTypeSettingsProperties().getProperty("googleMapsAPIKey", "") /> 
125    <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(geolocalizacion.getData())> 
126 
127    <#assign latitude = geolocationJSONObject.getDouble("latitude")> 
128    <#assign longitude = geolocationJSONObject.getDouble("longitude")> 
129</#if> 
130<#if separadorCoordenadas?has_content> 
131    <#if separadorCoordenadas.latitud.getData() != "" && separadorCoordenadas.longitud.getData() != ""> 
132        <#assign latitude = separadorCoordenadas.latitud.getData()?replace(",", ".")> 
133        <#assign longitude = separadorCoordenadas.longitud.getData()?replace(",", ".")> 
134    </#if> 
135</#if> 
136<#if (geolocalizacion.getData() != "") || (separadorCoordenadas?has_content && separadorCoordenadas.latitud.getData() != "" && separadorCoordenadas.longitud.getData() != "")> 
137    <div class="container pB35"> 
138        <div class="wrap-content mT30 mB60 clearfix row"> 
139            <div class="col-12"> 
140                <div id="traza-maps" class="js-maptraza" style="position: relative; overflow: hidden;"> 
141                    <div class="lfr-map yui3-widget lfrmapgoogle" id="geolocalizacionMap" style="position: relative; overflow: hidden;"></div> 
142                </div> 
143            </div> 
144        </div> 
145    </div> 
146    <script type="text/javascript"> 
147        function initMap() { 
148            var project = {lat: ${latitude?number}, lng:${longitude?number}}; 
149            var map = new google.maps.Map(document.getElementById('geolocalizacionMap'), {zoom:18, center: project}); 
150            var marker = new google.maps.Marker({position: project, map: map}); 
151
152    </script> 
153    <script async defer src="https://maps.googleapis.com/maps/api/js?key=${googleMapsAPIKey}&callback=initMap"></script> 
154</#if> 
155</#if> 
156 
157 
158<div  class="links-container"> 
159    <#assign back = languageUtil.get(locale, "back-to-top")> 
160    <div class="results-header text-right"> 
161        <h2> 
162            <a id="goBackButton" href="#goBackButton" onClick="javascript: window.history.go(-1)">&lt;&nbsp;&nbsp;&nbsp;${back?keep_before(" ")}</a> 
163        </h2> 
164    </div> 
165</div> 

We use our own and third party cookies for analytical purposes. Click on HERE for more information. You can accept all cookies by clicking the "Accept" button or set them up or refuse their use by clicking .

Cookie declaration

These cookies are necessary for the website to function and cannot be disabled in our systems. These cookies do not store any personally identifiable information.

Name Provider Purpose Expiration Type
LFR_Sesión_STATE_* Liferay Manage your session as a registered user Session HTTP
GUEST_LANGUAGE_ID Liferay Determines the language with which it accesses, to show the same in the next session 1 year HTTP
ANONYMOUS_USER_ID Liferay Manage your session as an unregistered user 1 year HTTP
COOKIE_SUPPORT Liferay Identifies that the use of cookies is necessary for the operation of the portal 1 year HTTP
JSesiónID Liferay Manages login and indicates you are using the site Session HTTP
SACYRGDPR Sacyr Used to manage the cookie policy Session HTTP

These cookies allow us to count visits and sources of circulation in order to measure and improve the performance of our site. They help us know which pages are the most or least popular, and see how many people visit the site. All information collected by these cookies is aggregated and therefore anonymous.

Name Provider Purpose Expiration Type
_gat Google It is used to throttle the request rate - limiting the collection of data on high traffic sites Session HTTP
_gid Google It is used to store and update a unique value for each page visited Session HTTP
_ga Google This is used for statistical and analytical purposes for increasing performance of our Services Session HTTP