// Create a JSON2 object only if one does not already exist. We create the // methods in a closure to avoid creating global variables. var JSON2; if (!JSON2) { JSON2 = {}; } (function () { "use strict"; function f(n) { // Format integers to have at least two digits. return n < 10 ? '0' + n : n; } if (typeof Date.prototype.toJSON2 !== 'function') { Date.prototype.toJSON2 = function (key) { return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z' : null; }; String.prototype.toJSON2 = Number.prototype.toJSON2 = Boolean.prototype.toJSON2 = function (key) { return this.valueOf(); }; } var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = { // table of character substitutions '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\' }, rep; function quote(string) { // If the string contains no control characters, no quote characters, and no // backslash characters, then we can safely slap some quotes around it. // Otherwise we must also replace the offending characters with safe escape // sequences. escapable.lastIndex = 0; return escapable.test(string) ? '"' + string.replace(escapable, function (a) { var c = meta[a]; return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); }) + '"' : '"' + string + '"'; } function str(key, holder) { // Produce a string from holder[key]. var i, // The loop counter. k, // The member key. v, // The member value. length, mind = gap, partial, value = holder[key]; // If the value has a toJSON2 method, call it to obtain a replacement value. if (value && typeof value === 'object' && typeof value.toJSON2 === 'function') { value = value.toJSON2(key); } // If we were called with a replacer function, then call the replacer to // obtain a replacement value. if (typeof rep === 'function') { value = rep.call(holder, key, value); } // What happens next depends on the value's type. switch (typeof value) { case 'string': return quote(value); case 'number': // JSON2 numbers must be finite. Encode non-finite numbers as null. return isFinite(value) ? String(value) : 'null'; case 'boolean': case 'null': // If the value is a boolean or null, convert it to a string. Note: // typeof null does not produce 'null'. The case is included here in // the remote chance that this gets fixed someday. return String(value); // If the type is 'object', we might be dealing with an object or an array or // null. case 'object': // Due to a specification blunder in ECMAScript, typeof null is 'object', // so watch out for that case. if (!value) { return 'null'; } // Make an array to hold the partial results of stringifying this object value. gap += indent; partial = []; // Is the value an array? if (Object.prototype.toString.apply(value) === '[object Array]') { // The value is an array. Stringify every element. Use null as a placeholder // for non-JSON2 values. length = value.length; for (i = 0; i < length; i += 1) { partial[i] = str(i, value) || 'null'; } // Join all of the elements together, separated with commas, and wrap them in // brackets. v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']'; gap = mind; return v; } // If the replacer is an array, use it to select the members to be stringified. if (rep && typeof rep === 'object') { length = rep.length; for (i = 0; i < length; i += 1) { k = rep[i]; if (typeof k === 'string') { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ': ' : ':') + v); } } } } else { // Otherwise, iterate through all of the keys in the object. for (k in value) { if (Object.hasOwnProperty.call(value, k)) { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ': ' : ':') + v); } } } } // Join all of the member texts together, separated with commas, // and wrap them in braces. v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}'; gap = mind; return v; } } // If the JSON2 object does not yet have a stringify method, give it one. if (typeof JSON2.stringify !== 'function') { JSON2.stringify = function (value, replacer, space) { // The stringify method takes a value and an optional replacer, and an optional // space parameter, and returns a JSON2 text. The replacer can be a function // that can replace values, or an array of strings that will select the keys. // A default replacer method can be provided. Use of the space parameter can // produce text that is more easily readable. var i; gap = ''; indent = ''; // If the space parameter is a number, make an indent string containing that // many spaces. if (typeof space === 'number') { for (i = 0; i < space; i += 1) { indent += ' '; } // If the space parameter is a string, it will be used as the indent string. } else if (typeof space === 'string') { indent = space; } // If there is a replacer, it must be a function or an array. // Otherwise, throw an error. rep = replacer; if (replacer && typeof replacer !== 'function' && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) { throw new Error('JSON2.stringify'); } // Make a fake root object containing our value under the key of ''. // Return the result of stringifying the value. return str('', {'': value}); }; } // If the JSON2 object does not yet have a parse method, give it one. if (typeof JSON2.parse !== 'function') { JSON2.parse = function (text, reviver) { // The parse method takes a text and an optional reviver function, and returns // a JavaScript value if the text is a valid JSON2 text. var j; function walk(holder, key) { // The walk method is used to recursively walk the resulting structure so // that modifications can be made. var k, v, value = holder[key]; if (value && typeof value === 'object') { for (k in value) { if (Object.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v; } else { delete value[k]; } } } } return reviver.call(holder, key, value); } // Parsing happens in four stages. In the first stage, we replace certain // Unicode characters with escape sequences. JavaScript handles many characters // incorrectly, either silently deleting them, or treating them as line endings. text = String(text); cx.lastIndex = 0; if (cx.test(text)) { text = text.replace(cx, function (a) { return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); }); } // In the second stage, we run the text against regular expressions that look // for non-JSON2 patterns. We are especially concerned with '()' and 'new' // because they can cause invocation, and '=' because it can cause mutation. // But just to be safe, we want to reject all unexpected forms. // We split the second stage into 4 regexp operations in order to work around // crippling inefficiencies in IE's and Safari's regexp engines. First we // replace the JSON2 backslash pairs with '@' (a non-JSON2 character). Second, we // replace all simple value tokens with ']' characters. Third, we delete all // open brackets that follow a colon or comma or that begin the text. Finally, // we look to see that the remaining characters are only whitespace or ']' or // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. if (/^[\],:{}\s]*$/ .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { // In the third stage we use the eval function to compile the text into a // JavaScript structure. The '{' operator is subject to a syntactic ambiguity // in JavaScript: it can begin a block or an object literal. We wrap the text // in parens to eliminate the ambiguity. j = eval('(' + text + ')'); // In the optional fourth stage, we recursively walk the new structure, passing // each name/value pair to a reviver function for possible transformation. return typeof reviver === 'function' ? walk({'': j}, '') : j; } // If the text is not JSON2 parseable, then a SyntaxError is thrown. throw new SyntaxError('JSON2.parse'); }; } }()); //add contains function in Array Array.prototype.contains = function(obj) { var i = this.length; while (i--) { if (this[i] === obj) { return true; } } return false; } Array.prototype.max = function() { var max = parseFloat(this[0]); var len = this.length; for (var i = 1; i < len; i++) if (parseFloat(this[i]) > max) max = parseFloat(this[i]); return max; } Array.prototype.min = function() { var min = parseFloat(this[0]); var len = this.length; for (var i = 1; i < len; i++) if (parseFloat(this[i]) < min) min = parseFloat(this[i]); return min; } window.net=window.net||{}; net.imapbuilder=net.imapbuilder||{}; net.imapbuilder.gmap=net.imapbuilder.gmap||{}; var map; var markers=[]; var labels=[]; var images=[]; var polylines=[]; var polygons=[]; var rectangles=[]; var circles=[]; var routes=[]; var current_route = 0; var route_count = 0 ; var map_geocoder; var markerCluster; var crowdMarkers=[]; var crowdMarkersId=0; var crowdMarkersData = [] ; //information box var gmap_locationdetails; var modal_div; var crowdForm_div; var markerID; var tempMarker; var tempMarkerAni; var crowdGetLocation_div; var errorMessage_div; var infoZIndex = 0 ; var heatMapArr = []; var heatMapCon_colorRatio; var cluster_infowindow ; var cs_title = "Add a Location" ; var cs_loginas = "Login as" ; var cs_address = "Address" ; var cs_desc = "Description" ; var cs_data = "Crowdsourced data"; var clickCircle; (function(){ var g=net.imapbuilder.gmap; // shorten the code of the namespace object // icon list g.iconlist=[]; g.iconlist[1]={}; g.iconlist[1].imagew="32"; g.iconlist[1].imageh="32"; g.iconlist[1].imageox="0"; g.iconlist[1].imageoy="0"; g.iconlist[1].imageax="16"; g.iconlist[1].imageay="32"; g.iconlist[2]={}; g.iconlist[2].imagew="32"; g.iconlist[2].imageh="32"; g.iconlist[2].imageox="0"; g.iconlist[2].imageoy="0"; g.iconlist[2].imageax="16"; g.iconlist[2].imageay="32"; g.iconlist[3]={}; g.iconlist[3].imagew="32"; g.iconlist[3].imageh="32"; g.iconlist[3].imageox="0"; g.iconlist[3].imageoy="0"; g.iconlist[3].imageax="16"; g.iconlist[3].imageay="32"; g.iconlist[4]={}; g.iconlist[4].imagew="32"; g.iconlist[4].imageh="32"; g.iconlist[4].imageox="0"; g.iconlist[4].imageoy="0"; g.iconlist[4].imageax="16"; g.iconlist[4].imageay="32"; g.iconlist[5]={}; g.iconlist[5].imagew="32"; g.iconlist[5].imageh="32"; g.iconlist[5].imageox="0"; g.iconlist[5].imageoy="0"; g.iconlist[5].imageax="16"; g.iconlist[5].imageay="32"; g.iconlist[6]={}; g.iconlist[6].imagew="32"; g.iconlist[6].imageh="32"; g.iconlist[6].imageox="0"; g.iconlist[6].imageoy="0"; g.iconlist[6].imageax="16"; g.iconlist[6].imageay="32"; g.iconlist[7]={}; g.iconlist[7].imagew="32"; g.iconlist[7].imageh="32"; g.iconlist[7].imageox="0"; g.iconlist[7].imageoy="0"; g.iconlist[7].imageax="16"; g.iconlist[7].imageay="32"; g.iconlist[8]={}; g.iconlist[8].imagew="32"; g.iconlist[8].imageh="32"; g.iconlist[8].imageox="0"; g.iconlist[8].imageoy="0"; g.iconlist[8].imageax="16"; g.iconlist[8].imageay="32"; g.iconlist[9]={}; g.iconlist[9].imagew="32"; g.iconlist[9].imageh="32"; g.iconlist[9].imageox="0"; g.iconlist[9].imageoy="0"; g.iconlist[9].imageax="16"; g.iconlist[9].imageay="32"; g.iconlist[10]={}; g.iconlist[10].imagew="32"; g.iconlist[10].imageh="32"; g.iconlist[10].imageox="0"; g.iconlist[10].imageoy="0"; g.iconlist[10].imageax="16"; g.iconlist[10].imageay="32"; g.iconlist[11]={}; g.iconlist[11].imagew="32"; g.iconlist[11].imageh="32"; g.iconlist[11].imageox="0"; g.iconlist[11].imageoy="0"; g.iconlist[11].imageax="16"; g.iconlist[11].imageay="32"; g.iconlist[12]={}; g.iconlist[12].imagew="32"; g.iconlist[12].imageh="32"; g.iconlist[12].imageox="0"; g.iconlist[12].imageoy="0"; g.iconlist[12].imageax="16"; g.iconlist[12].imageay="32"; g.iconlist[13]={}; g.iconlist[13].imagew="32"; g.iconlist[13].imageh="32"; g.iconlist[13].imageox="0"; g.iconlist[13].imageoy="0"; g.iconlist[13].imageax="16"; g.iconlist[13].imageay="32"; g.iconlist[14]={}; g.iconlist[14].imagew="32"; g.iconlist[14].imageh="32"; g.iconlist[14].imageox="0"; g.iconlist[14].imageoy="0"; g.iconlist[14].imageax="16"; g.iconlist[14].imageay="32"; g.iconlist[15]={}; g.iconlist[15].imagew="32"; g.iconlist[15].imageh="32"; g.iconlist[15].imageox="0"; g.iconlist[15].imageoy="0"; g.iconlist[15].imageax="11"; g.iconlist[15].imageay="32"; g.iconlist[16]={}; g.iconlist[16].imagew="32"; g.iconlist[16].imageh="32"; g.iconlist[16].imageox="0"; g.iconlist[16].imageoy="0"; g.iconlist[16].imageax="11"; g.iconlist[16].imageay="32"; g.iconlist[17]={}; g.iconlist[17].imagew="32"; g.iconlist[17].imageh="32"; g.iconlist[17].imageox="0"; g.iconlist[17].imageoy="0"; g.iconlist[17].imageax="11"; g.iconlist[17].imageay="32"; g.iconlist[18]={}; g.iconlist[18].imagew="32"; g.iconlist[18].imageh="32"; g.iconlist[18].imageox="0"; g.iconlist[18].imageoy="0"; g.iconlist[18].imageax="11"; g.iconlist[18].imageay="32"; g.iconlist[19]={}; g.iconlist[19].imagew="32"; g.iconlist[19].imageh="32"; g.iconlist[19].imageox="0"; g.iconlist[19].imageoy="0"; g.iconlist[19].imageax="11"; g.iconlist[19].imageay="32"; g.iconlist[20]={}; g.iconlist[20].imagew="32"; g.iconlist[20].imageh="32"; g.iconlist[20].imageox="0"; g.iconlist[20].imageoy="0"; g.iconlist[20].imageax="11"; g.iconlist[20].imageay="32"; g.iconlist[21]={}; g.iconlist[21].imagew="32"; g.iconlist[21].imageh="32"; g.iconlist[21].imageox="0"; g.iconlist[21].imageoy="0"; g.iconlist[21].imageax="11"; g.iconlist[21].imageay="32"; g.iconlist[22]={}; g.iconlist[22].imagew="31"; g.iconlist[22].imageh="35"; g.iconlist[22].imageox="0"; g.iconlist[22].imageoy="0"; g.iconlist[22].imageax="15"; g.iconlist[22].imageay="34"; g.iconlist[23]={}; g.iconlist[23].imagew="31"; g.iconlist[23].imageh="35"; g.iconlist[23].imageox="0"; g.iconlist[23].imageoy="0"; g.iconlist[23].imageax="15"; g.iconlist[23].imageay="34"; g.iconlist[24]={}; g.iconlist[24].imagew="31"; g.iconlist[24].imageh="35"; g.iconlist[24].imageox="0"; g.iconlist[24].imageoy="0"; g.iconlist[24].imageax="15"; g.iconlist[24].imageay="34"; g.iconlist[25]={}; g.iconlist[25].imagew="31"; g.iconlist[25].imageh="35"; g.iconlist[25].imageox="0"; g.iconlist[25].imageoy="0"; g.iconlist[25].imageax="15"; g.iconlist[25].imageay="34"; g.iconlist[26]={}; g.iconlist[26].imagew="31"; g.iconlist[26].imageh="35"; g.iconlist[26].imageox="0"; g.iconlist[26].imageoy="0"; g.iconlist[26].imageax="15"; g.iconlist[26].imageay="34"; g.iconlist[27]={}; g.iconlist[27].imagew="31"; g.iconlist[27].imageh="35"; g.iconlist[27].imageox="0"; g.iconlist[27].imageoy="0"; g.iconlist[27].imageax="15"; g.iconlist[27].imageay="34"; g.iconlist[28]={}; g.iconlist[28].imagew="31"; g.iconlist[28].imageh="35"; g.iconlist[28].imageox="0"; g.iconlist[28].imageoy="0"; g.iconlist[28].imageax="15"; g.iconlist[28].imageay="34"; g.iconlist[29]={}; g.iconlist[29].imagew="31"; g.iconlist[29].imageh="35"; g.iconlist[29].imageox="0"; g.iconlist[29].imageoy="0"; g.iconlist[29].imageax="15"; g.iconlist[29].imageay="34"; g.iconlist[30]={}; g.iconlist[30].imagew="31"; g.iconlist[30].imageh="35"; g.iconlist[30].imageox="0"; g.iconlist[30].imageoy="0"; g.iconlist[30].imageax="15"; g.iconlist[30].imageay="34"; g.iconlist[31]={}; g.iconlist[31].imagew="31"; g.iconlist[31].imageh="35"; g.iconlist[31].imageox="0"; g.iconlist[31].imageoy="0"; g.iconlist[31].imageax="15"; g.iconlist[31].imageay="34"; g.iconlist[32]={}; g.iconlist[32].imagew="31"; g.iconlist[32].imageh="35"; g.iconlist[32].imageox="0"; g.iconlist[32].imageoy="0"; g.iconlist[32].imageax="15"; g.iconlist[32].imageay="34"; g.iconlist[33]={}; g.iconlist[33].imagew="31"; g.iconlist[33].imageh="35"; g.iconlist[33].imageox="0"; g.iconlist[33].imageoy="0"; g.iconlist[33].imageax="15"; g.iconlist[33].imageay="34"; g.iconlist[34]={}; g.iconlist[34].imagew="31"; g.iconlist[34].imageh="35"; g.iconlist[34].imageox="0"; g.iconlist[34].imageoy="0"; g.iconlist[34].imageax="15"; g.iconlist[34].imageay="34"; g.iconlist[35]={}; g.iconlist[35].imagew="31"; g.iconlist[35].imageh="35"; g.iconlist[35].imageox="0"; g.iconlist[35].imageoy="0"; g.iconlist[35].imageax="15"; g.iconlist[35].imageay="34"; g.iconlist[36]={}; g.iconlist[36].imagew="31"; g.iconlist[36].imageh="35"; g.iconlist[36].imageox="0"; g.iconlist[36].imageoy="0"; g.iconlist[36].imageax="15"; g.iconlist[36].imageay="34"; g.iconlist[37]={}; g.iconlist[37].imagew="31"; g.iconlist[37].imageh="35"; g.iconlist[37].imageox="0"; g.iconlist[37].imageoy="0"; g.iconlist[37].imageax="15"; g.iconlist[37].imageay="34"; g.iconlist[38]={}; g.iconlist[38].imagew="31"; g.iconlist[38].imageh="35"; g.iconlist[38].imageox="0"; g.iconlist[38].imageoy="0"; g.iconlist[38].imageax="15"; g.iconlist[38].imageay="34"; g.iconlist[39]={}; g.iconlist[39].imagew="31"; g.iconlist[39].imageh="35"; g.iconlist[39].imageox="0"; g.iconlist[39].imageoy="0"; g.iconlist[39].imageax="15"; g.iconlist[39].imageay="34"; g.iconlist[40]={}; g.iconlist[40].imagew="31"; g.iconlist[40].imageh="35"; g.iconlist[40].imageox="0"; g.iconlist[40].imageoy="0"; g.iconlist[40].imageax="15"; g.iconlist[40].imageay="34"; g.iconlist[41]={}; g.iconlist[41].imagew="31"; g.iconlist[41].imageh="35"; g.iconlist[41].imageox="0"; g.iconlist[41].imageoy="0"; g.iconlist[41].imageax="15"; g.iconlist[41].imageay="34"; g.iconlist[42]={}; g.iconlist[42].imagew="31"; g.iconlist[42].imageh="35"; g.iconlist[42].imageox="0"; g.iconlist[42].imageoy="0"; g.iconlist[42].imageax="15"; g.iconlist[42].imageay="34"; g.iconlist[43]={}; g.iconlist[43].imagew="31"; g.iconlist[43].imageh="35"; g.iconlist[43].imageox="0"; g.iconlist[43].imageoy="0"; g.iconlist[43].imageax="15"; g.iconlist[43].imageay="34"; g.iconlist[44]={}; g.iconlist[44].imagew="31"; g.iconlist[44].imageh="35"; g.iconlist[44].imageox="0"; g.iconlist[44].imageoy="0"; g.iconlist[44].imageax="15"; g.iconlist[44].imageay="34"; g.iconlist[45]={}; g.iconlist[45].imagew="31"; g.iconlist[45].imageh="35"; g.iconlist[45].imageox="0"; g.iconlist[45].imageoy="0"; g.iconlist[45].imageax="15"; g.iconlist[45].imageay="34"; g.iconlist[46]={}; g.iconlist[46].imagew="31"; g.iconlist[46].imageh="35"; g.iconlist[46].imageox="0"; g.iconlist[46].imageoy="0"; g.iconlist[46].imageax="15"; g.iconlist[46].imageay="34"; g.iconlist[47]={}; g.iconlist[47].imagew="31"; g.iconlist[47].imageh="35"; g.iconlist[47].imageox="0"; g.iconlist[47].imageoy="0"; g.iconlist[47].imageax="15"; g.iconlist[47].imageay="34"; g.iconlist[48]={}; g.iconlist[48].imagew="31"; g.iconlist[48].imageh="35"; g.iconlist[48].imageox="0"; g.iconlist[48].imageoy="0"; g.iconlist[48].imageax="15"; g.iconlist[48].imageay="34"; g.iconlist[49]={}; g.iconlist[49].imagew="31"; g.iconlist[49].imageh="35"; g.iconlist[49].imageox="0"; g.iconlist[49].imageoy="0"; g.iconlist[49].imageax="15"; g.iconlist[49].imageay="34"; g.iconlist[50]={}; g.iconlist[50].imagew="31"; g.iconlist[50].imageh="35"; g.iconlist[50].imageox="0"; g.iconlist[50].imageoy="0"; g.iconlist[50].imageax="15"; g.iconlist[50].imageay="34"; g.iconlist[51]={}; g.iconlist[51].imagew="31"; g.iconlist[51].imageh="35"; g.iconlist[51].imageox="0"; g.iconlist[51].imageoy="0"; g.iconlist[51].imageax="15"; g.iconlist[51].imageay="34"; g.iconlist[52]={}; g.iconlist[52].imagew="31"; g.iconlist[52].imageh="35"; g.iconlist[52].imageox="0"; g.iconlist[52].imageoy="0"; g.iconlist[52].imageax="15"; g.iconlist[52].imageay="34"; g.iconlist[53]={}; g.iconlist[53].imagew="31"; g.iconlist[53].imageh="35"; g.iconlist[53].imageox="0"; g.iconlist[53].imageoy="0"; g.iconlist[53].imageax="15"; g.iconlist[53].imageay="34"; g.iconlist[54]={}; g.iconlist[54].imagew="31"; g.iconlist[54].imageh="35"; g.iconlist[54].imageox="0"; g.iconlist[54].imageoy="0"; g.iconlist[54].imageax="15"; g.iconlist[54].imageay="34"; g.iconlist[55]={}; g.iconlist[55].imagew="31"; g.iconlist[55].imageh="35"; g.iconlist[55].imageox="0"; g.iconlist[55].imageoy="0"; g.iconlist[55].imageax="15"; g.iconlist[55].imageay="34"; g.iconlist[56]={}; g.iconlist[56].imagew="31"; g.iconlist[56].imageh="35"; g.iconlist[56].imageox="0"; g.iconlist[56].imageoy="0"; g.iconlist[56].imageax="15"; g.iconlist[56].imageay="34"; g.iconlist[57]={}; g.iconlist[57].imagew="31"; g.iconlist[57].imageh="35"; g.iconlist[57].imageox="0"; g.iconlist[57].imageoy="0"; g.iconlist[57].imageax="15"; g.iconlist[57].imageay="34"; g.iconlist[58]={}; g.iconlist[58].imagew="31"; g.iconlist[58].imageh="35"; g.iconlist[58].imageox="0"; g.iconlist[58].imageoy="0"; g.iconlist[58].imageax="15"; g.iconlist[58].imageay="34"; g.iconlist[59]={}; g.iconlist[59].imagew="31"; g.iconlist[59].imageh="35"; g.iconlist[59].imageox="0"; g.iconlist[59].imageoy="0"; g.iconlist[59].imageax="15"; g.iconlist[59].imageay="34"; g.iconlist[60]={}; g.iconlist[60].imagew="31"; g.iconlist[60].imageh="35"; g.iconlist[60].imageox="0"; g.iconlist[60].imageoy="0"; g.iconlist[60].imageax="15"; g.iconlist[60].imageay="34"; g.iconlist[61]={}; g.iconlist[61].imagew="31"; g.iconlist[61].imageh="35"; g.iconlist[61].imageox="0"; g.iconlist[61].imageoy="0"; g.iconlist[61].imageax="15"; g.iconlist[61].imageay="34"; g.iconlist[62]={}; g.iconlist[62].imagew="31"; g.iconlist[62].imageh="35"; g.iconlist[62].imageox="0"; g.iconlist[62].imageoy="0"; g.iconlist[62].imageax="15"; g.iconlist[62].imageay="34"; g.iconlist[63]={}; g.iconlist[63].imagew="31"; g.iconlist[63].imageh="35"; g.iconlist[63].imageox="0"; g.iconlist[63].imageoy="0"; g.iconlist[63].imageax="15"; g.iconlist[63].imageay="34"; g.iconlist[64]={}; g.iconlist[64].imagew="31"; g.iconlist[64].imageh="35"; g.iconlist[64].imageox="0"; g.iconlist[64].imageoy="0"; g.iconlist[64].imageax="15"; g.iconlist[64].imageay="34"; g.iconlist[65]={}; g.iconlist[65].imagew="31"; g.iconlist[65].imageh="35"; g.iconlist[65].imageox="0"; g.iconlist[65].imageoy="0"; g.iconlist[65].imageax="15"; g.iconlist[65].imageay="34"; g.iconlist[66]={}; g.iconlist[66].imagew="31"; g.iconlist[66].imageh="35"; g.iconlist[66].imageox="0"; g.iconlist[66].imageoy="0"; g.iconlist[66].imageax="15"; g.iconlist[66].imageay="34"; g.iconlist[67]={}; g.iconlist[67].imagew="31"; g.iconlist[67].imageh="35"; g.iconlist[67].imageox="0"; g.iconlist[67].imageoy="0"; g.iconlist[67].imageax="15"; g.iconlist[67].imageay="34"; g.iconlist[68]={}; g.iconlist[68].imagew="31"; g.iconlist[68].imageh="35"; g.iconlist[68].imageox="0"; g.iconlist[68].imageoy="0"; g.iconlist[68].imageax="15"; g.iconlist[68].imageay="34"; g.iconlist[69]={}; g.iconlist[69].imagew="31"; g.iconlist[69].imageh="35"; g.iconlist[69].imageox="0"; g.iconlist[69].imageoy="0"; g.iconlist[69].imageax="15"; g.iconlist[69].imageay="34"; g.iconlist[70]={}; g.iconlist[70].imagew="31"; g.iconlist[70].imageh="35"; g.iconlist[70].imageox="0"; g.iconlist[70].imageoy="0"; g.iconlist[70].imageax="15"; g.iconlist[70].imageay="34"; g.iconlist[71]={}; g.iconlist[71].imagew="31"; g.iconlist[71].imageh="35"; g.iconlist[71].imageox="0"; g.iconlist[71].imageoy="0"; g.iconlist[71].imageax="15"; g.iconlist[71].imageay="34"; g.iconlist[72]={}; g.iconlist[72].imagew="20"; g.iconlist[72].imageh="20"; g.iconlist[72].imageox="0"; g.iconlist[72].imageoy="0"; g.iconlist[72].imageax="10"; g.iconlist[72].imageay="10"; g.iconlist[73]={}; g.iconlist[73].imagew="20"; g.iconlist[73].imageh="20"; g.iconlist[73].imageox="0"; g.iconlist[73].imageoy="0"; g.iconlist[73].imageax="10"; g.iconlist[73].imageay="10"; g.iconlist[74]={}; g.iconlist[74].imagew="20"; g.iconlist[74].imageh="20"; g.iconlist[74].imageox="0"; g.iconlist[74].imageoy="0"; g.iconlist[74].imageax="10"; g.iconlist[74].imageay="10"; g.iconlist[75]={}; g.iconlist[75].imagew="12"; g.iconlist[75].imageh="12"; g.iconlist[75].imageox="0"; g.iconlist[75].imageoy="0"; g.iconlist[75].imageax="6"; g.iconlist[75].imageay="12"; g.iconlist[76]={}; g.iconlist[76].imagew="12"; g.iconlist[76].imageh="12"; g.iconlist[76].imageox="0"; g.iconlist[76].imageoy="0"; g.iconlist[76].imageax="6"; g.iconlist[76].imageay="12"; g.iconlist[77]={}; g.iconlist[77].imagew="12"; g.iconlist[77].imageh="12"; g.iconlist[77].imageox="0"; g.iconlist[77].imageoy="0"; g.iconlist[77].imageax="6"; g.iconlist[77].imageay="12"; g.iconlist[78]={}; g.iconlist[78].imagew="12"; g.iconlist[78].imageh="12"; g.iconlist[78].imageox="0"; g.iconlist[78].imageoy="0"; g.iconlist[78].imageax="6"; g.iconlist[78].imageay="12"; g.iconlist[79]={}; g.iconlist[79].imagew="12"; g.iconlist[79].imageh="12"; g.iconlist[79].imageox="0"; g.iconlist[79].imageoy="0"; g.iconlist[79].imageax="6"; g.iconlist[79].imageay="12"; g.iconlist[80]={}; g.iconlist[80].imagew="12"; g.iconlist[80].imageh="12"; g.iconlist[80].imageox="0"; g.iconlist[80].imageoy="0"; g.iconlist[80].imageax="6"; g.iconlist[80].imageay="12"; g.iconlist[81]={}; g.iconlist[81].imagew="12"; g.iconlist[81].imageh="12"; g.iconlist[81].imageox="0"; g.iconlist[81].imageoy="0"; g.iconlist[81].imageax="6"; g.iconlist[81].imageay="12"; g.iconlist[82]={}; g.iconlist[82].imagew="12"; g.iconlist[82].imageh="12"; g.iconlist[82].imageox="0"; g.iconlist[82].imageoy="0"; g.iconlist[82].imageax="6"; g.iconlist[82].imageay="12"; g.iconlist[83]={}; g.iconlist[83].imagew="12"; g.iconlist[83].imageh="12"; g.iconlist[83].imageox="0"; g.iconlist[83].imageoy="0"; g.iconlist[83].imageax="6"; g.iconlist[83].imageay="12"; g.iconlist[84]={}; g.iconlist[84].imagew="12"; g.iconlist[84].imageh="12"; g.iconlist[84].imageox="0"; g.iconlist[84].imageoy="0"; g.iconlist[84].imageax="6"; g.iconlist[84].imageay="12"; g.iconlist[85]={}; g.iconlist[85].imagew="12"; g.iconlist[85].imageh="12"; g.iconlist[85].imageox="0"; g.iconlist[85].imageoy="0"; g.iconlist[85].imageax="6"; g.iconlist[85].imageay="12"; g.iconlist[86]={}; g.iconlist[86].imagew="12"; g.iconlist[86].imageh="12"; g.iconlist[86].imageox="0"; g.iconlist[86].imageoy="0"; g.iconlist[86].imageax="6"; g.iconlist[86].imageay="12"; g.iconlist[87]={}; g.iconlist[87].imagew="31"; g.iconlist[87].imageh="35"; g.iconlist[87].imageox="0"; g.iconlist[87].imageoy="0"; g.iconlist[87].imageax="15"; g.iconlist[87].imageay="35"; g.iconlist[88]={}; g.iconlist[88].imagew="31"; g.iconlist[88].imageh="35"; g.iconlist[88].imageox="0"; g.iconlist[88].imageoy="0"; g.iconlist[88].imageax="15"; g.iconlist[88].imageay="35"; g.iconlist[89]={}; g.iconlist[89].imagew="31"; g.iconlist[89].imageh="35"; g.iconlist[89].imageox="0"; g.iconlist[89].imageoy="0"; g.iconlist[89].imageax="15"; g.iconlist[89].imageay="35"; g.iconlist[90]={}; g.iconlist[90].imagew="31"; g.iconlist[90].imageh="35"; g.iconlist[90].imageox="0"; g.iconlist[90].imageoy="0"; g.iconlist[90].imageax="15"; g.iconlist[90].imageay="35"; g.iconlist[91]={}; g.iconlist[91].imagew="31"; g.iconlist[91].imageh="35"; g.iconlist[91].imageox="0"; g.iconlist[91].imageoy="0"; g.iconlist[91].imageax="15"; g.iconlist[91].imageay="35"; g.iconlist[92]={}; g.iconlist[92].imagew="31"; g.iconlist[92].imageh="35"; g.iconlist[92].imageox="0"; g.iconlist[92].imageoy="0"; g.iconlist[92].imageax="15"; g.iconlist[92].imageay="35"; g.iconlist[93]={}; g.iconlist[93].imagew="31"; g.iconlist[93].imageh="35"; g.iconlist[93].imageox="0"; g.iconlist[93].imageoy="0"; g.iconlist[93].imageax="15"; g.iconlist[93].imageay="35"; g.iconlist[94]={}; g.iconlist[94].imagew="31"; g.iconlist[94].imageh="35"; g.iconlist[94].imageox="0"; g.iconlist[94].imageoy="0"; g.iconlist[94].imageax="15"; g.iconlist[94].imageay="35"; g.iconlist[95]={}; g.iconlist[95].imagew="31"; g.iconlist[95].imageh="35"; g.iconlist[95].imageox="0"; g.iconlist[95].imageoy="0"; g.iconlist[95].imageax="15"; g.iconlist[95].imageay="35"; var limit_object = -1; var object_count = 0 ; var opened_window ; var searchMarkerID = 0 ; g.run=function(d){ g.data=JSON2.parse(d); if( g.data.datalist == undefined){ g.data.datalist={}; g.data.datalist.position=""; // top , right, left, bottom g.data.datalist.width=""; // none if top or bottom g.data.datalist.height=""; // none if left or right g.data.datalist.bgcolor="#F0F0F0"; }else{ if( g.data.datalist.position != undefined){ var positionArr=["", "top", "bottom", "left", "right"]; g.data.datalist.position=positionArr[g.data.datalist.position] ; } } if(g.data.datalist.showmarkers== undefined) g.data.datalist.showmarkers=-1; if( g.data.crowdmap == undefined){ g.data.crowdmap={}; g.data.crowdmap.mode=""; g.data.crowdmap.markericon=3; } //g.data.width="800px"; //g.data.height="600px"; // modify to 100% if browser is mobile /* if(navigator.userAgent.indexOf('iPhone')!=-1||navigator.userAgent.indexOf('Android')!=-1){ g.data.width=100; g.data.width_unit='%'; g.data.height=100; g.data.height_unit='%'; } */ var gmap_informationbox_style="overflow: hidden; border: 1px solid #DDD; font-family: Verdana,Geneva,sans-serif; font-size: 12px; margin: 5px;"; var width = g.data.width+g.data.width_unit; var height = g.data.height+g.data.height_unit; if( g.data.datalist.position=="top"||g.data.datalist.position=="left" ) document.write('
'+ '
'+ '
'); else document.write('
'+ '
'+ '
'); var script=document.createElement('script'); var lang = ''; if(g.data.lang != undefined && g.data.lang != "") lang = '&language='+g.data.lang; // here we dynamically determine whether mapkey is used script.src='//maps.google.com/maps/api/js?key='+net.imapbuilder.gmap.mapkey+'&callback=net.imapbuilder.gmap.initialize&libraries=geometry'+lang; // &v=3.3 script.type='text/javascript'; document.body.appendChild(script); if( g.data.font_size!=undefined) document.getElementById('gmap_'+g.data.fileid).style.fontSize=g.data.font_size+'px'; if( g.data.font_family!=undefined) document.getElementById('gmap_'+g.data.fileid).style.fontFamily=g.data.font_family; } // get device width and height g.getWidth=function(){ xWidth = null; if(window.screen != null) xWidth = window.screen.availWidth; if(window.innerWidth != null) xWidth = window.innerWidth; if(document.body != null) xWidth = document.body.clientWidth; return xWidth; } g.getHeight=function() { xHeight = null; if(window.screen != null) xHeight = window.screen.availHeight; if(window.innerHeight != null) xHeight = window.innerHeight; if(document.body != null) xHeight = document.body.clientHeight; return xHeight; } g.initialize=function(){ map_geocoder=new google.maps.Geocoder(); // start of clustering function //if(g.data.clustering===true){ function MarkerClusterer(map, opt_markers, opt_options) { // MarkerClusterer implements google.maps.OverlayView interface. We use the // extend function to extend MarkerClusterer with google.maps.OverlayView // because it might not always be available when the code is defined so we // look for it at the last possible moment. If it doesn't exist now then // there is no point going ahead :) this.extend(MarkerClusterer, google.maps.OverlayView); this.map_ = map; /** * @type {Array.} * @private */ this.markers_ = []; /** * @type {Array.} */ this.clusters_ = []; this.sizes = [53, 56, 66, 78, 90]; /** * @private */ this.styles_ = []; /** * @type {boolean} * @private */ this.ready_ = false; var options = opt_options || {}; /** * @type {number} * @private */ this.gridSize_ = options['gridSize'] || 60; /** * @private */ this.minClusterSize_ = options['minimumClusterSize'] || 2; /** * @type {?number} * @private */ this.maxZoom_ = options['maxZoom'] || null; this.styles_ = options['styles'] || []; /** * @type {string} * @private */ this.imagePath_ = options['imagePath'] || this.MARKER_CLUSTER_IMAGE_PATH_; /** * @type {string} * @private */ this.imageExtension_ = options['imageExtension'] || this.MARKER_CLUSTER_IMAGE_EXTENSION_; /** * @type {boolean} * @private */ this.zoomOnClick_ = true; if (options['zoomOnClick'] != undefined) { this.zoomOnClick_ = options['zoomOnClick']; } /** * @type {boolean} * @private */ this.averageCenter_ = false; if (options['averageCenter'] != undefined) { this.averageCenter_ = options['averageCenter']; } this.setupStyles_(); this.setMap(map); /** * @type {number} * @private */ this.prevZoom_ = this.map_.getZoom(); // Add the map event listeners var that = this; google.maps.event.addListener(this.map_, 'zoom_changed', function() { var zoom = that.map_.getZoom(); if (that.prevZoom_ != zoom) { that.prevZoom_ = zoom; that.resetViewport(); } }); google.maps.event.addListener(this.map_, 'idle', function() { that.redraw(); }); // Finally, add the markers if (opt_markers && opt_markers.length) { this.addMarkers(opt_markers, false); } } /** * The marker cluster image path. * * @type {string} * @private */ MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_ = '//google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/' + 'images/m'; /** * The marker cluster image path. * * @type {string} * @private */ MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_ = 'png'; /** * Extends a objects prototype by anothers. * * @param {Object} obj1 The object to be extended. * @param {Object} obj2 The object to extend with. * @return {Object} The new extended object. * @ignore */ MarkerClusterer.prototype.extend = function(obj1, obj2) { return (function(object) { for (var property in object.prototype) { this.prototype[property] = object.prototype[property]; } return this; }).apply(obj1, [obj2]); }; /** * Implementaion of the interface method. * @ignore */ MarkerClusterer.prototype.onAdd = function() { this.setReady_(true); }; /** * Implementaion of the interface method. * @ignore */ MarkerClusterer.prototype.draw = function() {}; /** * Sets up the styles object. * * @private */ MarkerClusterer.prototype.setupStyles_ = function() { if (this.styles_.length) { return; } for (var i = 0, size; size = this.sizes[i]; i++) { this.styles_.push({ url: this.imagePath_ + (i + 1) + '.' + this.imageExtension_, height: size, width: size }); } }; /** * Fit the map to the bounds of the markers in the clusterer. */ MarkerClusterer.prototype.fitMapToMarkers = function() { var markers = this.getMarkers(); var bounds = new google.maps.LatLngBounds(); for (var i = 0, marker; marker = markers[i]; i++) { bounds.extend(marker.getPosition()); } this.map_.fitBounds(bounds); }; /** * Sets the styles. * * @param {Object} styles The style to set. */ MarkerClusterer.prototype.setStyles = function(styles) { this.styles_ = styles; }; /** * Gets the styles. * * @return {Object} The styles object. */ MarkerClusterer.prototype.getStyles = function() { return this.styles_; }; /** * Whether zoom on click is set. * * @return {boolean} True if zoomOnClick_ is set. */ MarkerClusterer.prototype.isZoomOnClick = function() { return this.zoomOnClick_; }; /** * Whether average center is set. * * @return {boolean} True if averageCenter_ is set. */ MarkerClusterer.prototype.isAverageCenter = function() { return this.averageCenter_; }; /** * Returns the array of markers in the clusterer. * * @return {Array.} The markers. */ MarkerClusterer.prototype.getMarkers = function() { return this.markers_; }; /** * Returns the number of markers in the clusterer * * @return {Number} The number of markers. */ MarkerClusterer.prototype.getTotalMarkers = function() { return this.markers_.length; }; /** * Sets the max zoom for the clusterer. * * @param {number} maxZoom The max zoom level. */ MarkerClusterer.prototype.setMaxZoom = function(maxZoom) { this.maxZoom_ = maxZoom; }; /** * Gets the max zoom for the clusterer. * * @return {number} The max zoom level. */ MarkerClusterer.prototype.getMaxZoom = function() { return this.maxZoom_; }; /** * The function for calculating the cluster icon image. * * @param {Array.} markers The markers in the clusterer. * @param {number} numStyles The number of styles available. * @return {Object} A object properties: 'text' (string) and 'index' (number). * @private */ MarkerClusterer.prototype.calculator_ = function(markers, numStyles) { var index = 0; var count = markers.length; var dv = count; while (dv !== 0) { dv = parseInt(dv / 10, 10); index++; } index = Math.min(index, numStyles); return { text: count, index: index }; }; /** * Set the calculator function. * * @param {function(Array, number)} calculator The function to set as the * calculator. The function should return a object properties: * 'text' (string) and 'index' (number). * */ MarkerClusterer.prototype.setCalculator = function(calculator) { this.calculator_ = calculator; }; /** * Get the calculator function. * * @return {function(Array, number)} the calculator function. */ MarkerClusterer.prototype.getCalculator = function() { return this.calculator_; }; /** * Add an array of markers to the clusterer. * * @param {Array.} markers The markers to add. * @param {boolean=} opt_nodraw Whether to redraw the clusters. */ MarkerClusterer.prototype.addMarkers = function(markers, opt_nodraw) { /* for (var i = 0, marker; marker = markers[i]; i++) { this.pushMarkerTo_(marker); } */ //Terry modified 20120326 for(var i = 0 ; i < markers.length ; i++){ if( markers[i] != undefined ) this.pushMarkerTo_(markers[i]); } if (!opt_nodraw) { this.redraw(); } }; /** * Pushes a marker to the clusterer. * * @param {google.maps.Marker} marker The marker to add. * @private */ MarkerClusterer.prototype.pushMarkerTo_ = function(marker) { marker.isAdded = false; if (marker['draggable']) { // If the marker is draggable add a listener so we update the clusters on // the drag end. var that = this; google.maps.event.addListener(marker, 'dragend', function() { marker.isAdded = false; that.repaint(); }); } this.markers_.push(marker); }; /** * Adds a marker to the clusterer and redraws if needed. * * @param {google.maps.Marker} marker The marker to add. * @param {boolean=} opt_nodraw Whether to redraw the clusters. */ MarkerClusterer.prototype.addMarker = function(marker, opt_nodraw) { this.pushMarkerTo_(marker); if (!opt_nodraw) { this.redraw(); } }; /** * Removes a marker and returns true if removed, false if not * * @param {google.maps.Marker} marker The marker to remove * @return {boolean} Whether the marker was removed or not * @private */ MarkerClusterer.prototype.removeMarker_ = function(marker) { var index = -1; if (this.markers_.indexOf) { index = this.markers_.indexOf(marker); } else { for (var i = 0, m; m = this.markers_[i]; i++) { if (m == marker) { index = i; break; } } } if (index == -1) { // Marker is not in our list of markers. return false; } marker.setMap(null); this.markers_.splice(index, 1); return true; }; /** * Remove a marker from the cluster. * * @param {google.maps.Marker} marker The marker to remove. * @param {boolean=} opt_nodraw Optional boolean to force no redraw. * @return {boolean} True if the marker was removed. */ MarkerClusterer.prototype.removeMarker = function(marker, opt_nodraw) { var removed = this.removeMarker_(marker); if (!opt_nodraw && removed) { this.resetViewport(); this.redraw(); return true; } else { return false; } }; /** * Removes an array of markers from the cluster. * * @param {Array.} markers The markers to remove. * @param {boolean=} opt_nodraw Optional boolean to force no redraw. */ MarkerClusterer.prototype.removeMarkers = function(markers, opt_nodraw) { var removed = false; for (var i = 0, marker; marker = markers[i]; i++) { var r = this.removeMarker_(marker); removed = removed || r; } if (!opt_nodraw && removed) { this.resetViewport(); this.redraw(); return true; } }; /** * Sets the clusterer's ready state. * * @param {boolean} ready The state. * @private */ MarkerClusterer.prototype.setReady_ = function(ready) { if (!this.ready_) { this.ready_ = ready; this.createClusters_(); } }; /** * Returns the number of clusters in the clusterer. * * @return {number} The number of clusters. */ MarkerClusterer.prototype.getTotalClusters = function() { return this.clusters_.length; }; /** * Returns the google map that the clusterer is associated with. * * @return {google.maps.Map} The map. */ MarkerClusterer.prototype.getMap = function() { return this.map_; }; /** * Sets the google map that the clusterer is associated with. * * @param {google.maps.Map} map The map. */ MarkerClusterer.prototype.setMap = function(map) { this.map_ = map; }; /** * Returns the size of the grid. * * @return {number} The grid size. */ MarkerClusterer.prototype.getGridSize = function() { return this.gridSize_; }; /** * Sets the size of the grid. * * @param {number} size The grid size. */ MarkerClusterer.prototype.setGridSize = function(size) { this.gridSize_ = size; }; /** * Returns the min cluster size. * * @return {number} The grid size. */ MarkerClusterer.prototype.getMinClusterSize = function() { return this.minClusterSize_; }; /** * Sets the min cluster size. * * @param {number} size The grid size. */ MarkerClusterer.prototype.setMinClusterSize = function(size) { this.minClusterSize_ = size; }; /** * Extends a bounds object by the grid size. * * @param {google.maps.LatLngBounds} bounds The bounds to extend. * @return {google.maps.LatLngBounds} The extended bounds. */ MarkerClusterer.prototype.getExtendedBounds = function(bounds) { var projection = this.getProjection(); // Turn the bounds into latlng. var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng()); var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()); // Convert the points to pixels and the extend out by the grid size. var trPix = projection.fromLatLngToDivPixel(tr); trPix.x += this.gridSize_; trPix.y -= this.gridSize_; var blPix = projection.fromLatLngToDivPixel(bl); blPix.x -= this.gridSize_; blPix.y += this.gridSize_; // Convert the pixel points back to LatLng var ne = projection.fromDivPixelToLatLng(trPix); var sw = projection.fromDivPixelToLatLng(blPix); // Extend the bounds to contain the new bounds. bounds.extend(ne); bounds.extend(sw); return bounds; }; /** * Determins if a marker is contained in a bounds. * * @param {google.maps.Marker} marker The marker to check. * @param {google.maps.LatLngBounds} bounds The bounds to check against. * @return {boolean} True if the marker is in the bounds. * @private */ MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) { return bounds.contains(marker.getPosition()); }; /** * Clears all clusters and markers from the clusterer. */ MarkerClusterer.prototype.clearMarkers = function() { this.resetViewport(true); // Set the markers a empty array. this.markers_ = []; }; /** * Clears all existing clusters and recreates them. * @param {boolean} opt_hide To also hide the marker. */ MarkerClusterer.prototype.resetViewport = function(opt_hide) { // Remove all the clusters for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { cluster.remove(); } // Reset the markers to not be added and to be invisible. for (var i = 0, marker; marker = this.markers_[i]; i++) { marker.isAdded = false; if (opt_hide) { marker.setMap(null); } } this.clusters_ = []; }; /** * */ MarkerClusterer.prototype.repaint = function() { var oldClusters = this.clusters_.slice(); this.clusters_.length = 0; this.resetViewport(); this.redraw(); // Remove the old clusters. // Do it in a timeout so the other clusters have been drawn first. window.setTimeout(function() { for (var i = 0, cluster; cluster = oldClusters[i]; i++) { cluster.remove(); } }, 0); }; /** * Redraws the clusters. */ MarkerClusterer.prototype.redraw = function() { this.createClusters_(); }; /** * Calculates the distance between two latlng locations in km. * @see http://www.movable-type.co.uk/scripts/latlong.html * * @param {google.maps.LatLng} p1 The first lat lng point. * @param {google.maps.LatLng} p2 The second lat lng point. * @return {number} The distance between the two points in km. * @private */ MarkerClusterer.prototype.distanceBetweenPoints_ = function(p1, p2) { if (!p1 || !p2) { return 0; } var R = 6371; // Radius of the Earth in km var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var d = R * c; return d; }; /** * Add a marker to a cluster, or creates a new cluster. * * @param {google.maps.Marker} marker The marker to add. * @private */ MarkerClusterer.prototype.addToClosestCluster_ = function(marker) { var distance = 40000; // Some large number var clusterToAddTo = null; var pos = marker.getPosition(); for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { var center = cluster.getCenter(); if (center) { var d = this.distanceBetweenPoints_(center, marker.getPosition()); if (d < distance) { distance = d; clusterToAddTo = cluster; } } } if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { clusterToAddTo.addMarker(marker); } else { var cluster = new Cluster(this); cluster.addMarker(marker); this.clusters_.push(cluster); } }; /** * Creates the clusters. * * @private */ MarkerClusterer.prototype.createClusters_ = function() { if (!this.ready_) { return; } // Get our current map view bounds. // Create a new bounds object so we don't affect the map. var mapBounds = new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(), this.map_.getBounds().getNorthEast()); var bounds = this.getExtendedBounds(mapBounds); for (var i = 0, marker; marker = this.markers_[i]; i++) { if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) { this.addToClosestCluster_(marker); } } }; /** * A cluster that contains markers. * * @param {MarkerClusterer} markerClusterer The markerclusterer that this * cluster is associated with. * @constructor * @ignore */ function Cluster(markerClusterer) { this.markerClusterer_ = markerClusterer; this.map_ = markerClusterer.getMap(); this.gridSize_ = markerClusterer.getGridSize(); this.minClusterSize_ = markerClusterer.getMinClusterSize(); this.averageCenter_ = markerClusterer.isAverageCenter(); this.center_ = null; this.markers_ = []; this.bounds_ = null; this.clusterIcon_ = new ClusterIcon(this, markerClusterer.getStyles(), markerClusterer.getGridSize()); } /** * Determins if a marker is already added to the cluster. * * @param {google.maps.Marker} marker The marker to check. * @return {boolean} True if the marker is already added. */ Cluster.prototype.isMarkerAlreadyAdded = function(marker) { if (this.markers_.indexOf) { return this.markers_.indexOf(marker) != -1; } else { for (var i = 0, m; m = this.markers_[i]; i++) { if (m == marker) { return true; } } } return false; }; /** * Add a marker the cluster. * * @param {google.maps.Marker} marker The marker to add. * @return {boolean} True if the marker was added. */ Cluster.prototype.addMarker = function(marker) { if (this.isMarkerAlreadyAdded(marker)) { return false; } if (!this.center_) { this.center_ = marker.getPosition(); this.calculateBounds_(); } else { if (this.averageCenter_) { var l = this.markers_.length + 1; var lat = (this.center_.lat() * (l-1) + marker.getPosition().lat()) / l; var lng = (this.center_.lng() * (l-1) + marker.getPosition().lng()) / l; this.center_ = new google.maps.LatLng(lat, lng); this.calculateBounds_(); } } marker.isAdded = true; this.markers_.push(marker); var len = this.markers_.length; if (len < this.minClusterSize_ && marker.getMap() != this.map_) { // Min cluster size not reached so show the marker. marker.setMap(this.map_); } if (len == this.minClusterSize_) { // Hide the markers that were showing. for (var i = 0; i < len; i++) { this.markers_[i].setMap(null); } } if (len >= this.minClusterSize_) { marker.setMap(null); } this.updateIcon(); return true; }; /** * Returns the marker clusterer that the cluster is associated with. * * @return {MarkerClusterer} The associated marker clusterer. */ Cluster.prototype.getMarkerClusterer = function() { return this.markerClusterer_; }; /** * Returns the bounds of the cluster. * * @return {google.maps.LatLngBounds} the cluster bounds. */ Cluster.prototype.getBounds = function() { var bounds = new google.maps.LatLngBounds(this.center_, this.center_); var markers = this.getMarkers(); for (var i = 0, marker; marker = markers[i]; i++) { bounds.extend(marker.getPosition()); } return bounds; }; /** * Removes the cluster */ Cluster.prototype.remove = function() { this.clusterIcon_.remove(); this.markers_.length = 0; delete this.markers_; }; /** * Returns the center of the cluster. * * @return {number} The cluster center. */ Cluster.prototype.getSize = function() { return this.markers_.length; }; /** * Returns the center of the cluster. * * @return {Array.} The cluster center. */ Cluster.prototype.getMarkers = function() { return this.markers_; }; /** * Returns the center of the cluster. * * @return {google.maps.LatLng} The cluster center. */ Cluster.prototype.getCenter = function() { return this.center_; }; /** * Calculated the extended bounds of the cluster with the grid. * * @private */ Cluster.prototype.calculateBounds_ = function() { var bounds = new google.maps.LatLngBounds(this.center_, this.center_); this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); }; /** * Determines if a marker lies in the clusters bounds. * * @param {google.maps.Marker} marker The marker to check. * @return {boolean} True if the marker lies in the bounds. */ Cluster.prototype.isMarkerInClusterBounds = function(marker) { return this.bounds_.contains(marker.getPosition()); }; /** * Returns the map that the cluster is associated with. * * @return {google.maps.Map} The map. */ Cluster.prototype.getMap = function() { return this.map_; }; /** * Updates the cluster icon */ Cluster.prototype.updateIcon = function() { var zoom = this.map_.getZoom(); var mz = this.markerClusterer_.getMaxZoom(); if (mz && zoom > mz) { // The zoom is greater than our max zoom so show all the markers in cluster. for (var i = 0, marker; marker = this.markers_[i]; i++) { marker.setMap(this.map_); } return; } if (this.markers_.length < this.minClusterSize_) { // Min cluster size not yet reached. this.clusterIcon_.hide(); return; } var numStyles = this.markerClusterer_.getStyles().length; var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); this.clusterIcon_.setCenter(this.center_); this.clusterIcon_.setSums(sums); this.clusterIcon_.show(); }; /** * A cluster icon * * @param {Cluster} cluster The cluster to be associated with. * @param {Object} styles An object that has style properties: * 'url': (string) The image url. * 'height': (number) The image height. * 'width': (number) The image width. * 'anchor': (Array) The anchor position of the label text. * 'textColor': (string) The text color. * 'textSize': (number) The text size. * 'backgroundPosition: (string) The background postition x, y. * @param {number=} opt_padding Optional padding to apply to the cluster icon. * @constructor * @extends google.maps.OverlayView * @ignore */ function ClusterIcon(cluster, styles, opt_padding) { cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); this.styles_ = styles; this.padding_ = opt_padding || 0; this.cluster_ = cluster; this.center_ = null; this.map_ = cluster.getMap(); this.div_ = null; this.sums_ = null; this.visible_ = false; this.setMap(this.map_); } /** * Triggers the clusterclick event and zoom's if the option is set. */ ClusterIcon.prototype.triggerClusterClick = function() { var markerClusterer = this.cluster_.getMarkerClusterer(); // Trigger the clusterclick event. google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_); if(g.data.clustering_click == "list"){ // show infowindow with marker content cluster_infowindow=new google.maps.InfoWindow(); var markers = this.cluster_.getMarkers(); var html = ''; var marker_link = ''; var marker_icon = ''; var marker_title = ''; var marker_desc = ''; html += ''+ markers.length + ' markers
'; html += '
'; for (var i = 0, marker; marker = markers[i]; i++) { marker_link = 'map.setCenter(new google.maps.LatLng('+marker.position.lat()+','+marker.position.lng()+')); map.setZoom(15);'+ 'google.maps.event.trigger(markers[\''+marker.markerid+'\'], \'click\');'+ 'cluster_infowindow.close();'; marker_icon = ''; marker_desc = ''; marker_title = ''; // markers icon marker_icon += ''; if( !isNaN(marker.iconid) ) marker_icon += ''; else marker_icon += ''; marker_icon += ''; // markers title marker_title += ''+marker.title +''; //markers description marker_desc += ''+marker.desc +''; // infowindow content html += ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ '
'+marker_icon+''+marker_title+'
'+marker_desc+'
'; } html += '
'; cluster_infowindow.setOptions({content:html,position:this.center_}); cluster_infowindow.open(map); }else{ // if click to zoom var markerClusterer = this.cluster_.getMarkerClusterer(); if (markerClusterer.isZoomOnClick()) { // Zoom into the cluster. this.map_.fitBounds(this.cluster_.getBounds()); } } }; /** * Adding the cluster icon to the dom. * @ignore */ ClusterIcon.prototype.onAdd = function() { this.div_ = document.createElement('DIV'); if (this.visible_) { var pos = this.getPosFromLatLng_(this.center_); this.div_.style.cssText = this.createCss(pos); this.div_.innerHTML = this.sums_.text; } var panes = this.getPanes(); panes.overlayMouseTarget.appendChild(this.div_); var that = this; google.maps.event.addDomListener(this.div_, 'click', function() { that.triggerClusterClick(); }); /* google.maps.event.addDomListener(this.div_, 'dblclick', function() { that.triggerClusterDblClick(); }); */ }; /** * Returns the position to place the div dending on the latlng. * * @param {google.maps.LatLng} latlng The position in latlng. * @return {google.maps.Point} The position in pixels. * @private */ ClusterIcon.prototype.getPosFromLatLng_ = function(latlng) { var pos = this.getProjection().fromLatLngToDivPixel(latlng); pos.x -= parseInt(this.width_ / 2, 10); pos.y -= parseInt(this.height_ / 2, 10); return pos; }; /** * Draw the icon. * @ignore */ ClusterIcon.prototype.draw = function() { if (this.visible_) { var pos = this.getPosFromLatLng_(this.center_); this.div_.style.top = pos.y + 'px'; this.div_.style.left = pos.x + 'px'; } }; /** * Hide the icon. */ ClusterIcon.prototype.hide = function() { if (this.div_) { this.div_.style.display = 'none'; } this.visible_ = false; }; /** * Position and show the icon. */ ClusterIcon.prototype.show = function() { if (this.div_) { var pos = this.getPosFromLatLng_(this.center_); this.div_.style.cssText = this.createCss(pos); this.div_.style.display = ''; } this.visible_ = true; }; /** * Remove the icon from the map */ ClusterIcon.prototype.remove = function() { this.setMap(null); }; /** * Implementation of the onRemove interface. * @ignore */ ClusterIcon.prototype.onRemove = function() { if (this.div_ && this.div_.parentNode) { this.hide(); this.div_.parentNode.removeChild(this.div_); this.div_ = null; } }; /** * Set the sums of the icon. * * @param {Object} sums The sums containing: * 'text': (string) The text to display in the icon. * 'index': (number) The style index of the icon. */ ClusterIcon.prototype.setSums = function(sums) { this.sums_ = sums; this.text_ = sums.text; this.index_ = sums.index; if (this.div_) { this.div_.innerHTML = sums.text; } this.useStyle(); }; /** * Sets the icon to the the styles. */ ClusterIcon.prototype.useStyle = function() { var index = Math.max(0, this.sums_.index - 1); index = Math.min(this.styles_.length - 1, index); var style = this.styles_[index]; this.url_ = style['url']; this.height_ = style['height']; this.width_ = style['width']; this.textColor_ = style['textColor']; this.anchor_ = style['anchor']; this.textSize_ = style['textSize']; this.backgroundPosition_ = style['backgroundPosition']; }; /** * Sets the center of the icon. * * @param {google.maps.LatLng} center The latlng to set as the center. */ ClusterIcon.prototype.setCenter = function(center) { this.center_ = center; }; /** * Create the css text based on the position of the icon. * * @param {google.maps.Point} pos The position. * @return {string} The css style text. */ ClusterIcon.prototype.createCss = function(pos) { var style = []; style.push('background-image:url(' + this.url_ + ');'); var backgroundPosition = this.backgroundPosition_ ? this.backgroundPosition_ : '0 0'; style.push('background-position:' + backgroundPosition + ';'); if (typeof this.anchor_ === 'object') { if (typeof this.anchor_[0] === 'number' && this.anchor_[0] > 0 && this.anchor_[0] < this.height_) { style.push('height:' + (this.height_ - this.anchor_[0]) + 'px; padding-top:' + this.anchor_[0] + 'px;'); } else { style.push('height:' + this.height_ + 'px; line-height:' + this.height_ + 'px;'); } if (typeof this.anchor_[1] === 'number' && this.anchor_[1] > 0 && this.anchor_[1] < this.width_) { style.push('width:' + (this.width_ - this.anchor_[1]) + 'px; padding-left:' + this.anchor_[1] + 'px;'); } else { style.push('width:' + this.width_ + 'px; text-align:center;'); } } else { style.push('height:' + this.height_ + 'px; line-height:' + this.height_ + 'px; width:' + this.width_ + 'px; text-align:center;'); } var txtColor = this.textColor_ ? this.textColor_ : 'black'; var txtSize = this.textSize_ ? this.textSize_ : 11; style.push('cursor:pointer; top:' + pos.y + 'px; left:' + pos.x + 'px; color:' + txtColor + '; position:absolute; font-size:' + txtSize + 'px; font-family:Arial,sans-serif; font-weight:bold'); return style.join(''); }; // Export Symbols for Closure // If you are not going to compile with closure then you can remove the // code below. window['MarkerClusterer'] = MarkerClusterer; MarkerClusterer.prototype['addMarker'] = MarkerClusterer.prototype.addMarker; MarkerClusterer.prototype['addMarkers'] = MarkerClusterer.prototype.addMarkers; MarkerClusterer.prototype['clearMarkers'] = MarkerClusterer.prototype.clearMarkers; MarkerClusterer.prototype['fitMapToMarkers'] = MarkerClusterer.prototype.fitMapToMarkers; MarkerClusterer.prototype['getCalculator'] = MarkerClusterer.prototype.getCalculator; MarkerClusterer.prototype['getGridSize'] = MarkerClusterer.prototype.getGridSize; MarkerClusterer.prototype['getExtendedBounds'] = MarkerClusterer.prototype.getExtendedBounds; MarkerClusterer.prototype['getMap'] = MarkerClusterer.prototype.getMap; MarkerClusterer.prototype['getMarkers'] = MarkerClusterer.prototype.getMarkers; MarkerClusterer.prototype['getMaxZoom'] = MarkerClusterer.prototype.getMaxZoom; MarkerClusterer.prototype['getStyles'] = MarkerClusterer.prototype.getStyles; MarkerClusterer.prototype['getTotalClusters'] = MarkerClusterer.prototype.getTotalClusters; MarkerClusterer.prototype['getTotalMarkers'] = MarkerClusterer.prototype.getTotalMarkers; MarkerClusterer.prototype['redraw'] = MarkerClusterer.prototype.redraw; MarkerClusterer.prototype['removeMarker'] = MarkerClusterer.prototype.removeMarker; MarkerClusterer.prototype['removeMarkers'] = MarkerClusterer.prototype.removeMarkers; MarkerClusterer.prototype['resetViewport'] = MarkerClusterer.prototype.resetViewport; MarkerClusterer.prototype['repaint'] = MarkerClusterer.prototype.repaint; MarkerClusterer.prototype['setCalculator'] = MarkerClusterer.prototype.setCalculator; MarkerClusterer.prototype['setGridSize'] = MarkerClusterer.prototype.setGridSize; MarkerClusterer.prototype['setMaxZoom'] = MarkerClusterer.prototype.setMaxZoom; MarkerClusterer.prototype['onAdd'] = MarkerClusterer.prototype.onAdd; MarkerClusterer.prototype['draw'] = MarkerClusterer.prototype.draw; Cluster.prototype['getCenter'] = Cluster.prototype.getCenter; Cluster.prototype['getSize'] = Cluster.prototype.getSize; Cluster.prototype['getMarkers'] = Cluster.prototype.getMarkers; ClusterIcon.prototype['onAdd'] = ClusterIcon.prototype.onAdd; ClusterIcon.prototype['draw'] = ClusterIcon.prototype.draw; ClusterIcon.prototype['onRemove'] = ClusterIcon.prototype.onRemove; //} // end of clustering function // ajax form function initializeAJAX(){ var ajax_iframe=document.createElement("iframe"); ajax_iframe.name="ajax_iframe"; ajax_iframe.id="ajax_iframe"; ajax_iframe.style.display="none"; ajax_iframe.style.position="absolute"; ajax_iframe.style.top="100px"; // 100 ajax_iframe.style.width="1px"; // 1px ajax_iframe.style.height="1px"; // 1px document.body.appendChild(ajax_iframe); ajax_form=document.createElement("form"); ajax_form.id="ajax_form"; ajax_form.name="ajax_form"; ajax_form.method="post"; ajax_form.target="ajax_iframe"; var input=document.createElement("input"); input.id="ca_mapid"; input.name="ca_mapid"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_usertype"; input.name="ca_usertype"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_userid"; input.name="ca_userid"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_username"; input.name="ca_username"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_useremail"; input.name="ca_useremail"; input.type="hidden"; input.value=""; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_latlng"; input.name="ca_latlng"; input.type="hidden"; input.value=''; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_address"; input.name="ca_address"; input.type="hidden"; input.value=''; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_description"; input.name="ca_description"; input.type="hidden"; input.value=''; ajax_form.appendChild(input); input=document.createElement("input"); input.id="ca_date"; input.name="ca_date"; input.type="hidden"; input.value='now'; ajax_form.appendChild(input); document.body.appendChild(ajax_form); } // init modal modal_div=document.createElement("div"); modal_div.style.position="absolute"; modal_div.id="modal_div"; modal_div.style.left="0px"; modal_div.style.top="0px"; modal_div.style.bottom="0px"; modal_div.style.right="0px"; modal_div.style.backgroundColor="#000000"; modal_div.style.opacity="0.5"; modal_div.style.zIndex="1"; if(navigator.appName=='Microsoft Internet Explorer'){ modal_div.style.filter="alpha(opacity=50)"; } var mapTypeId=[google.maps.MapTypeId.ROADMAP,google.maps.MapTypeId.SATELLITE,google.maps.MapTypeId.HYBRID,google.maps.MapTypeId.TERRAIN]; var options={}; for(var i in g.data.options){ if(typeof(g.data.options[i])!='object'){ if ( i == "infoAutoPan") continue; options[i]=g.data.options[i]; } } options.center=new google.maps.LatLng(g.data.options.center[0],g.data.options.center[1]); //options.mapTypeId=mapTypeId[g.data.options.mapTypeId[0]]; map=new google.maps.Map(document.getElementById('gmap_'+g.data.fileid),options); google.maps.event.addListener(map, 'zoom_changed', function() { if(clickCircle!= undefined) clickCircle.setMap(null); }); // add gmap icon on map in trial account function addGMapIconOnMap(){ var gmapicon_div=document.createElement("div"); //gmapicon_div.style.width="480px"; //gmapicon_div.style.height="320px"; //gmapicon_div.style.backgroundColor="#F0F0F0"; gmapicon_div.style.position="absolute"; gmapicon_div.style.bottom="20px"; gmapicon_div.style.left="40%"; gmapicon_div.style.marginLeft="0px"; gmapicon_div.style.marginBottom="0px"; gmapicon_div.style.display='block'; gmapicon_div.style.zIndex="1"; var cl_content = '
'+ ''+ ''+ ''+ '
'; gmapicon_div.innerHTML=cl_content; if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(gmapicon_div); } } // locate search into map function seacrhBarInMap(){ var map_div = document.getElementById('gmap_'+g.data.fileid); var searchbar_div = document.createElement('div'); searchbar_div.id="searchbar_div"; searchbar_div.style.position="absolute"; searchbar_div.style.top="5px"; searchbar_div.style.right="130px"; searchbar_div.style.font="14px Arial"; searchbar_div.style.zIndex="1000"; searchbar_div.style.padding="0 5px"; var html = 'Search: '; searchbar_div.innerHTML=html; map_div.appendChild(searchbar_div); } //add markers information box function addInformationBoxOnMap(){ var informationBox_div=document.createElement("div"); informationBox_div.id="informationBox_title"; informationBox_div.style.backgroundColor="#666"; informationBox_div.style.color="#FFF"; informationBox_div.style.padding="3px 10px"; informationBox_div.style.display='block'; informationBox_div.style.zIndex="1"; informationBox_div.style.overflow="hidden"; var inb_content = ''+ ''; if( g.data.crowdmap.mode == "edit"){ inb_content += ''; } inb_content +='
Locations:'+ ''+ ''+ '
'+ ''+ ''+ ''+ '
'+ '
'; informationBox_div.innerHTML=inb_content; var gmap_informationbox = document.getElementById('gmap_informationbox'); gmap_informationbox.appendChild(informationBox_div); var dlc_div=document.createElement("div"); dlc_div.id="dataListContainer"; dlc_div.style.overflowY="scroll"; dlc_div.style.backgroundColor="#F6F6F6"; var inb_height=""; var inb_style=""; if( g.data.datalist.position=="right" || g.data.datalist.position=="left"){ dlc_div.style.height=(g.data.height-40)+"px"; }else if( g.data.datalist.position=="top" || g.data.datalist.position=="bottom"){ dlc_div.style.height=(g.data.datalist.height-45)+"px"; if( g.data.width_unit == "%" ){ dlc_div.style.width=(g.data.width)+g.data.width_unit; dlc_div.style.float="left"; }else{ dlc_div.style.width=(g.data.width)+"px"; dlc_div.style.float="left"; } } var dlc_content='
'+ '
'; dlc_div.innerHTML=dlc_content; gmap_informationbox.appendChild(dlc_div); if( g.data.datalist.position=="bottom"||g.data.datalist.position=="top"){ gmap_informationbox.style.height=g.data.datalist.height+"px"; gmap_informationbox.style.width=g.data.width+g.data.width_unit; }else if( g.data.datalist.position=="right"||g.data.datalist.position=="left"){ document.getElementById('gmap_'+g.data.fileid).style.cssFloat ="left"; document.getElementById('gmap_'+g.data.fileid).style.styleFloat ="left"; gmap_informationbox.style.width=g.data.datalist.width+"px"; gmap_informationbox.style.cssFloat ="left"; gmap_informationbox.style.styleFloat ="left"; gmap_informationbox.style.height=g.data.height+g.data.height_unit; gmap_informationbox.style.margin="0px 5px"; // resize the top menu bar if(document.getElementById('sharebar')!=undefined&&g.data.width+g.data.width_unit!="100%"){ document.getElementById('sharebar').style.width=(parseInt(g.data.datalist.width)+parseInt(g.data.width)+10)+"px"; } // resize map container if(document.getElementById('map_content')!=undefined&&g.data.width+g.data.width_unit!="100%"){ document.getElementById('map_content').style.width=(parseInt(g.data.datalist.width)+parseInt(g.data.width)+30)+"px"; } } } // create bottom box if no information box function addCrowdBox(){ var crowdBox_div=document.createElement("div"); crowdBox_div.id="crowdBox_div"; crowdBox_div.style.backgroundColor="#666"; crowdBox_div.style.borderWidth="1px"; crowdBox_div.style.borderColor="#CCC"; crowdBox_div.style.borderStyle="solid"; crowdBox_div.style.display='block'; crowdBox_div.style.padding='5px 5px 0px'; crowdBox_div.style.zIndex="1"; crowdBox_div.style.fontSize="12px"; crowdBox_div.style.width= (g.data.width-12)+"px"; crowdBox_div.style.height= "44px"; cs_title = "Add a Location"; if(g.data.crowdmap.inputpanel != undefined && g.data.crowdmap.inputpanel.title != undefined) cs_title = g.data.crowdmap.inputpanel.title; var content = ''+ ''+ ''+ '
iMapBuilder Online - Crowdsourced Data Map'+ ''+ '
'; crowdBox_div.innerHTML=content; var crowdBox = document.getElementById('crowdbox'); crowdBox.appendChild(crowdBox_div); document.getElementById('gmap_informationbox').style.margin="0px"; document.getElementById('gmap_informationbox').style.borderWidth="0px"; if(g.data.crowdmap != undefined && g.data.crowdmap.inputpanel != undefined){ cs_title = g.data.crowdmap.inputpanel.title ; cs_loginas = g.data.crowdmap.inputpanel.loginas ; cs_address = g.data.crowdmap.inputpanel.address ; cs_desc = g.data.crowdmap.inputpanel.desc ; } } if( g.data.datalist.showmarkers != -1 && g.data.datalist!=undefined&&g.data.datalist.position!=undefined&&g.data.datalist.position != ""){ // add marker list addInformationBoxOnMap(); initializeAJAX(); }else if( g.data.crowdmap!=undefined && g.data.crowdmap.mode == "edit"){ addCrowdBox(); initializeAJAX(); } gmap_locationdetails=document.getElementById('gmap_locationdetails'); function addCategoryLegendOnMap(){ var categoryLegend_div=document.createElement("div"); //categoryLegend_div.style.width="480px"; //categoryLegend_div.style.height="320px"; categoryLegend_div.style.backgroundColor="#F0F0F0"; categoryLegend_div.style.position="absolute"; if(g.data.catgoryLegendOptions==undefined||g.data.catgoryLegendOptions.position==undefined){ categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; categoryLegend_div.style.marginBottom="10px"; } else{ if(g.data.catgoryLegendOptions.position == 1){ categoryLegend_div.style.top="0px"; categoryLegend_div.style.left="0px"; categoryLegend_div.style.marginLeft="10px"; categoryLegend_div.style.marginTop="10px"; }else if(g.data.catgoryLegendOptions.position == 2){ categoryLegend_div.style.top="0px"; categoryLegend_div.style.left="50%"; categoryLegend_div.style.marginLeft="0px"; categoryLegend_div.style.marginTop="10px"; }else if(g.data.catgoryLegendOptions.position == 3){ categoryLegend_div.style.top="0px"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; categoryLegend_div.style.marginTop="10px"; }else if(g.data.catgoryLegendOptions.position == 4){ categoryLegend_div.style.top="40%"; categoryLegend_div.style.left="0px"; categoryLegend_div.style.marginLeft="10px"; }else if(g.data.catgoryLegendOptions.position == 5){ categoryLegend_div.style.top="40%"; categoryLegend_div.style.left="50%"; }else if(g.data.catgoryLegendOptions.position == 6){ categoryLegend_div.style.top="40%"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; }else if(g.data.catgoryLegendOptions.position == 7){ categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.left="0px"; categoryLegend_div.style.marginLeft="10px"; categoryLegend_div.style.marginBottom="10px"; }else if(g.data.catgoryLegendOptions.position == 8){ categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.left="40%"; categoryLegend_div.style.marginBottom="10px"; }else if(g.data.catgoryLegendOptions.position == 9){ categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; categoryLegend_div.style.marginBottom="10px"; }else { categoryLegend_div.style.bottom="20px"; categoryLegend_div.style.right="0px"; categoryLegend_div.style.marginRight="10px"; categoryLegend_div.style.marginBottom="10px"; } } categoryLegend_div.style.borderWidth="2px"; categoryLegend_div.style.borderColor="#666666"; categoryLegend_div.style.borderStyle="solid"; categoryLegend_div.style.display='block'; categoryLegend_div.style.zIndex="1"; var cl_content = '
'; var catCount = 0 ; if (g.data.catlegend!=undefined) { var allcat=g.data.catlegend.length; for (var i=0;i
'; catCount++; } } } if(g.data.crowdmap != undefined && g.data.crowdmap.inputpanel != undefined && g.data.crowdmap.inputpanel.data != undefined){ cs_data = g.data.crowdmap.inputpanel.data ; } if( (g.data.crowdmap.mode=="edit" || g.data.crowdmap.mode=="view") && g.data.crowdmap.clenable == true){ cl_content+= '
'; } cl_content += '
'; categoryLegend_div.innerHTML=cl_content; if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(categoryLegend_div); } } var categoryArr = []; var allCategoryArr = []; if( ((g.data.crowdmap.mode=="edit" || g.data.crowdmap.mode=="view") && g.data.crowdmap.clenable == true) || g.data.catlegendenable === true ) addCategoryLegendOnMap(); // add crowd data if(g.data.crowdmap.mode=="edit" || g.data.crowdmap.mode=="view"){ // get all crowd data from db var crowdMarkerCount = 0 ; } g.checkHeatMap(); g.loadObject(); if(g.data.stylemapenable != undefined && g.data.stylemapenable == true){ g.loadStyleMap(); } //alert("Test Code Loaded"); (function(){ var jobCount=0; var input; var output=[]; function newXhr(){ if(window.XMLHttpRequest){ return new XMLHttpRequest(); }else{ return new ActiveXObject("Microsoft.XMLHTTP"); } } function geocodeNext(){ var geocoder=new google.maps.Geocoder(); geocoder.geocode({"address":input.job[jobCount].geocodeAddr},function(results,status){ if(status==google.maps.GeocoderStatus.OK){ output.push({id:input.job[jobCount].id,lat:results[0].geometry.location.lat(),lng:results[0].geometry.location.lng()}); }else{ output.push({id:input.job[jobCount].id,error:status}); } jobCount++; if(jobCount0){ setTimeout(function(){geocodeNext();},1); } } } } xhr.open("GET","//live.view.g.imapbuilder.net/getJob/",true); xhr.send(); })(); } g.loadStyleMap=function(){ var styles = []; var styleName = g.data.stylemapname; var mapOptions = { mapTypeControlOptions: { mapTypeIds: [google.maps.MapTypeId.HYBRID, google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.TERRAIN,styleName] }, mapTypeId: styleName }; map.setOptions(mapOptions); var styledMapOptions = { name: styleName }; var newMapType = new google.maps.StyledMapType(g.data.mapstyle, styledMapOptions); map.mapTypes.set(styleName, newMapType); } g.loadObject=function(){ var kmlfiles=[]; if (g.data.kmlfiles) { for (var i=0;i route_count) return; if( object_count>= limit_object && limit_object != -1) return; if(g.data.routes[current_route]!=undefined){ if ( g.data.catlegendenable === true ){ if (!allCategoryArr.contains(g.data.routes[current_route].catID) ) {}else if ( g.data.routes[current_route].catID != undefined && g.data.routes[current_route].catID != -1 && !categoryArr.contains(g.data.routes[current_route].catID) ) { routeID ++ ; current_route++; g.loadRouteData(); return; } } var polylineOpt = { clickable: true, strokeWeight: g.data.routes[current_route].strokeWeight, strokeOpacity: g.data.routes[current_route].strokeOpacity, strokeColor: g.data.routes[current_route].strokeColor}; var iconimage = { url:"http://g3.imapbuilder.net/editor/img/icon/route_marker.gif", size:new google.maps.Size(11,11), origin:new google.maps.Point(0,0), anchor:new google.maps.Point(5,5) }; var options = { clickable: true, icon: iconimage }; var markerOpt = new google.maps.Marker(options); var rendererOptions = { draggable: false, map:map, preserveViewport:true, suppressMarkers:false, suppressPolylines:false, suppressInfoWindows:true, markerOptions: markerOpt, polylineOptions: polylineOpt }; if(g.data.routes[current_route].encodedPath != undefined){ polylineOpt.map=map; polylineOpt.path=google.maps.geometry.encoding.decodePath(g.data.routes[current_route].encodedPath); routes[current_route]=new google.maps.Polyline(polylineOpt); google.maps.event.addListener(routes[current_route], 'click', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(routes[current_route], 'mouseover', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(routes[current_route], 'mouseout', function(event) { if(infowindow[current_route]) infowindow[current_route].setMap(null); }); routeID ++ ; current_route++; object_count++; g.loadRouteData(); return; } routes[current_route] = new google.maps.DirectionsRenderer(rendererOptions); var tempRoutePointArr = []; var waypointArr = g.data.routes[current_route].waypoint; for( var j = 0 ; j < waypointArr.length ; j++) { var wpeach = waypointArr[j].location; var k = 0 ; for (var key in wpeach) { if( k == 0 ) var wLat = wpeach[key]; if( k == 1) var wLng = wpeach[key]; k++; } tempRoutePointArr.push({ location: new google.maps.LatLng(wLat, wLng), stopover:waypointArr[j].stopover }); } var k = 0 ; for (var key in g.data.routes[current_route].startLocation) { if( k == 0 ) var sLat = g.data.routes[current_route].startLocation[key]; if( k == 1) var sLng = g.data.routes[current_route].startLocation[key]; k++; } var k = 0 ; for (var key in g.data.routes[current_route].endLocation) { if( k == 0 ) var eLat = g.data.routes[current_route].endLocation[key]; if( k == 1) var eLng = g.data.routes[current_route].endLocation[key]; k++; } g.data.routes[current_route].startLocation = new google.maps.LatLng(sLat,sLng); g.data.routes[current_route].endLocation = new google.maps.LatLng(eLat,eLng); var travelMode = google.maps.DirectionsTravelMode.DRIVING; g.data.routes[current_route].waypoint = tempRoutePointArr; if( g.data.routes[current_route].travelMode != undefined && modeArr[g.data.routes[current_route].travelMode] != undefined) travelMode = modeArr[g.data.routes[current_route].travelMode]; else g.data.routes[current_route].travelMode = 0; var request = { origin: g.data.routes[current_route].startLocation, destination: g.data.routes[current_route].endLocation, waypoints: g.data.routes[current_route].waypoint, travelMode: travelMode }; directionsService.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { if(routes[current_route] != undefined){ routes[current_route].setDirections(response); g.data.routes[current_route].encodedPath = google.maps.geometry.encoding.encodePath(response.routes[0].overview_path); /* */ var legs = routes[current_route].directions.routes[0].legs; var distance = 0 ; if(legs[0].distance) distance = legs[0].distance.text; var duration = 0 ; // legs[0].duration.text; if(legs[0].duration) duration = legs[0].duration.text; /* var polylineOpt = { clickable: true, strokeWeight: g.data.routes[current_route].strokeWeight, strokeOpacity: g.data.routes[current_route].strokeOpacity, strokeColor: g.data.routes[current_route].strokeColor}; var polyline = new google.maps.Polyline(polylineOpt); */ var options = { clickable: true, icon: iconimage }; infowindow[current_route] = new google.maps.InfoWindow(); var markerOpt = new google.maps.Marker(options); var html = "Travel By "+modeArr[g.data.routes[current_route].travelMode].toLowerCase()+"
"+"Duration: "+ duration +"
"+"Distance: "+distance; google.maps.event.addListener(markerOpt, 'click', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(markerOpt, 'mouseover', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(markerOpt, 'mouseout', function(event) { if(infowindow[current_route]!= undefined) infowindow[current_route].setMap(null); }); // for polylines mouseover google.maps.event.addListener(polylineOpt, 'click', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(polylineOpt, 'mouseover', function(event) { infowindow[current_route] = new google.maps.InfoWindow({content:html,position:event.latLng}); if( g.data.options["infoAutoPan"] != undefined) infowindow[current_route].setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow[current_route].open(map); }); google.maps.event.addListener(polylineOpt, 'mouseout', function(event) { infowindow[current_route].setMap(null); }); routes[current_route].setOptions({markerOptions:markerOpt}); /*google.maps.event.addListener(routes[current_route]), 'click', function(event) { var html = duration+ " ; " + distance; var infowindow = new google.maps.InfoWindow({content:html,position:event.latLng}); infowindow.open(map); });*/ } routeID ++ ; current_route++; object_count++; setTimeout(function(){g.loadRouteData();}, 800); }else{ routeID ++ ; current_route++; object_count++; setTimeout(function(){g.loadRouteData();}, 100); } }); }else{ routeID ++ ; current_route++; g.loadRouteData(); } } g.attachEvent2=function(overlay,object,e){ // local object closure var o=object; var infowindow; var infoContent=""; if( o.event[e].infoWindow && o.event[e].infoWindow.options.content) { infoContent=o.event[e].infoWindow.options.content; if(g.expire){ infoContent+='

Powered by iMapBuilder'; } } google.maps.event.addListener(overlay,e,function(event){ //alert(JSON.stringify(o.event[e])); if(o.event[e].infoWindow){ infowindow = new google.maps.InfoWindow(o.event[e].infoWindow.options); infowindow.setPosition(event.latLng); infowindow.setOptions({"content":infoContent}); if( g.data.options["infoAutoPan"] != undefined) infowindow.setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); infowindow.open(map); //alert(infowindow.toSource()); } if(o.event[e].navigate){ window.open(o.event[e].navigate.href,o.event[e].navigate.target); /*if(o.event[e].navigate.target=='_self'){ location.href=o.event[e].navigate.href; }else{ window.op }*/ } }); if(e=="mouseover"){ if(o.event[e].infoWindow){ google.maps.event.addListener(overlay,'mouseout',function(){ infowindow.close(); }); } } } g.mouseoverEffect=function(overlay, orgColor, overColor){ google.maps.event.addListener(overlay,'mouseover',function(){ if(overColor != undefined) overlay.setOptions({"fillColor":overColor}); }); google.maps.event.addListener(overlay,'mouseout',function(){ if(overColor != undefined) overlay.setOptions({"fillColor":orgColor}); }); } g.loadCircles=function(){ if( g.data.circles ) { //remove all circle first for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.circles[i]!=null){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.circles[i].catID) ) {} else if (g.data.circles[i].catID != undefined && g.data.circles[i].catID != -1 && !categoryArr.contains(g.data.circles[i].catID) ) continue; } var options={}; for(var j in g.data.circles[i].options){ if(typeof(g.data.circles[i].options[j])!='object'){ options[j]=g.data.circles[i].options[j]; } } options.map = map; options.center = []; options.center =new google.maps.LatLng(g.data.circles[i].options.center[0],g.data.circles[i].options.center[1]); options.radius = []; options.radius = g.data.circles[i].options.radius; circles[i]=new google.maps.Circle(options); for(var j in g.data.circles[i].event){ g.attachEvent2(circles[i],g.data.circles[i],j); } object_count++; } } } } g.loadRectangles=function(){ if( g.data.rectangles) { //remove all polygon first for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.rectangles[i]!=null){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.rectangles[i].catID) ) {} else if ( g.data.rectangles[i].catID != undefined && g.data.rectangles[i].catID != -1 && !categoryArr.contains(g.data.rectangles[i].catID) ) continue; } var options={}; for(var j in g.data.rectangles[i].options){ if(typeof(g.data.rectangles[i].options[j])!='object'){ options[j]=g.data.rectangles[i].options[j]; } } options.map=map; var rectangleBoundsSW = new google.maps.LatLng(g.data.rectangles[i].options.bounds[0],g.data.rectangles[i].options.bounds[1]); var rectangleBoundsNE = new google.maps.LatLng(g.data.rectangles[i].options.bounds[2],g.data.rectangles[i].options.bounds[3]); var rectangleBounds = new google.maps.LatLngBounds(rectangleBoundsSW , rectangleBoundsNE); options.bounds=[]; options.bounds=rectangleBounds; rectangles[i]=new google.maps.Rectangle(options); for(var j in g.data.rectangles[i].event){ g.attachEvent2(rectangles[i],g.data.rectangles[i],j); } object_count++; } } } } g.loadPolygons=function(){ //console.log("loadPolygons() start"); if ( g.data.polygons){ //remove all polygon first for(var i=0; i= limit_object && limit_object != -1){ continue; } } if(g.data.polygons[i]!=null){ if(g.data.polygons[i].options.encodedPath == undefined || g.data.polygons[i].options.encodedPath == "") continue; if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.polygons[i].catID) ) {} else if (g.data.polygons[i].catID != undefined && g.data.polygons[i].catID != -1 && !categoryArr.contains(g.data.polygons[i].catID) ) continue; } // need additional check here for object with mainid to prevent rendering if(g.data.polygons[i].options.mainid!=undefined ){ var mainid = g.data.polygons[i].options.mainid; if (g.data.polygons[mainid].catID != undefined && g.data.polygons[mainid].catID != -1 && typeof categoryArr!="undefined" && !categoryArr.contains(g.data.polygons[mainid].catID) ) continue; } var options={}; for(var j in g.data.polygons[i].options){ if(typeof(g.data.polygons[i].options[j])!='object'){ options[j]=g.data.polygons[i].options[j]; } } options.map=map; options.path=[]; options.path=google.maps.geometry.encoding.decodePath(g.data.polygons[i].options.encodedPath); polygons[i]=new google.maps.Polygon(options); // if Heat Map if( g.data.polygons[i].options.regionID != undefined && g.data.heatmap != undefined && g.data.heatmap.enable == true ){ if( g.data.heatmap.color !=undefined ){ if(g.data.heatmap.color == "contin"){ polygons[i].setOptions({"fillColor":g.heatMapContinColorValue(g.getHeatMapValue(g.data.polygons[i].options.regionID))}); // add mouseover color heatmap enable //if(g.data.polygons[i].options.overColor != undefined) // g.mouseoverEffect(polygons[i], g.heatMapContinColorValue(g.getHeatMapValue(g.data.polygons[i].options.regionID)), g.data.polygons[i].options.overColor); }else if(g.data.heatmap.color == "discrete"){ polygons[i].setOptions({"fillColor":g.heatMapDiscreteColorValue(g.getHeatMapValue(g.data.polygons[i].options.regionID))}); // add mouseover color heatmap enable //if(g.data.polygons[i].options.overColor != undefined) // g.mouseoverEffect(polygons[i], g.heatMapDiscreteColorValue(g.getHeatMapValue(g.data.polygons[i].options.regionID)), g.data.polygons[i].options.overColor); } } } else { // add mouseover color heatmap disenable //if(g.data.polygons[i].options.overColor != undefined) // g.mouseoverEffect(polygons[i], g.data.polygons[i].options.fillColor, g.data.polygons[i].options.overColor); } // for sub polygons if(g.data.polygons[i].options.mainid!=undefined ){ var mainid = g.data.polygons[i].options.mainid; for(var j in g.data.polygons[mainid].event){ g.attachEvent2(polygons[i],g.data.polygons[mainid],j); } } for(var j in g.data.polygons[i].event){ g.attachEvent2(polygons[i],g.data.polygons[i],j); } if(g.data.polygons[i].options.isRegions==undefined || g.data.polygons[i].options.isRegions!=true) object_count++; } } } //console.log("loadPolygons() finish"); } g.loadPolylines=function() { if(g.data.polylines ) { //remove all polyline first for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.polylines[i]!=null){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.polylines[i].catID) ) {} else if ( g.data.polylines[i].catID != undefined && g.data.polylines[i].catID != -1 && !categoryArr.contains(g.data.polylines[i].catID) ) continue; } var options={}; for(var j in g.data.polylines[i].options){ if(typeof(g.data.polylines[i].options[j])!='object'){ options[j]=g.data.polylines[i].options[j]; } } options.map=map; options.path=google.maps.geometry.encoding.decodePath(g.data.polylines[i].options.encodedPath); polylines[i]=new google.maps.Polyline(options); object_count++; } } } } g.loadLegend=function(){ var map_div = document.getElementById('gmap_'+g.data.fileid+''); if(g.data.legends != undefined ){ for(var i=0; i= 87 ) l_content+= '
'; else if ( g.data.legends[i].items[j].imageUrl >= 75 ) l_content+= '
'; else if(g.data.legends[i].items[j].imageUrl >= 72 ) l_content+= '
'; else l_content+= '
'; }else l_content+= '
'; l_content+= ''; l_content+=''; lCount++; } } l_content+=''; } l_content += '
'; legend_div.innerHTML=l_content; if ( g.data.legends[i].items.length > 0 || g.data.legends[i].name != undefined) map_div.appendChild(legend_div); } } } } g.removeAllMarkers=function(){ //remove all marker first /* for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.markers[i]!=undefined){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.markers[i].catID) ) {}else if ( g.data.markers[i].catID != undefined && g.data.markers[i].catID != -1 && !categoryArr.contains(g.data.markers[i].catID) ) continue; } for(var j in g.data.markers[i].options){ if(typeof(g.data.markers[i].options[j])!='object'){ options[j]=g.data.markers[i].options[j]; } } options.markerid = i; var iconid=g.data.markers[i].iconid; options.iconid = iconid; if( !isNaN(iconid) ) //options.icon=new google.maps.MarkerImage('http://g3.imapbuilder.net/_api/img/marker/'+iconid,new google.maps.Size(g.iconlist[iconid].imagew,g.iconlist[iconid].imageh),new google.maps.Point(g.iconlist[iconid].imageox,g.iconlist[iconid].imageoy),new google.maps.Point(g.iconlist[iconid].imageax,g.iconlist[iconid].imageay)); options.icon={url:'http://g3.imapbuilder.net/_api/img/marker/'+iconid,size:new google.maps.Size(35,35),origin:new google.maps.Point(parseInt(g.iconlist[iconid].imageox),parseInt(g.iconlist[iconid].imageoy)),anchor:new google.maps.Point(parseInt(g.iconlist[iconid].imageax),parseInt(g.iconlist[iconid].imageay))}; else { /* var newImg = new Image(); newImg.src = iconid; var height = newImg.height; var width = newImg.width; options.icon=new google.maps.MarkerImage( iconid, new google.maps.Size(width,height), new google.maps.Point(0,0), new google.maps.Point(width/2,height) ); */ options.icon={url:iconid,size:new google.maps.Size(35,35),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17.5,35)}; } options.map=map; options.position=new google.maps.LatLng(g.data.markers[i].options.position[0],g.data.markers[i].options.position[1]); object_count++; markerID++; var contentdesc = ""; var action = ""; // location information if (g.data.markers[i].event != undefined){ if (g.data.markers[i].event.click != undefined) { if (g.data.markers[i].event.click.infoWindow != undefined) { contentdesc = g.data.markers[i].event.click.infoWindow.options.content; action="click"; } }else if (g.data.markers[i].event.mouseover != undefined) { if (g.data.markers[i].event.mouseover.infoWindow != undefined) { contentdesc = g.data.markers[i].event.mouseover.infoWindow.options.content; action="over"; } } } if( gmap_locationdetails != undefined ){ g.addOrgMarkerToList(i, iconid, g.data.markers[i].options.title, contentdesc, action); } options.desc = g.convertHtmlToText(contentdesc); markers[i]=new google.maps.Marker(options); // for marker's event, create closures for(var j in g.data.markers[i].event){ g.attachEvent(markers[i],g.data.markers[i],j); } // for custom project map id = 5990 } } } } g.loadClustering=function(){ if(g.data.clustering===true){ var clustering_gridsize = g.data.clustering_gridsize; var clustering_maxzoom = g.data.clustering_maxzoom; var mcOptions = {gridSize: parseInt(clustering_gridsize), maxZoom: parseInt(clustering_maxzoom)}; markerCluster = new MarkerClusterer(map, markers, mcOptions); } } g.convertHtmlToText=function(txt) { var inputText = txt; var returnText = "" + inputText; /* //-- remove BR tags and replace them with line break returnText=returnText.replace(/
/gi, "\n"); returnText=returnText.replace(//gi, "\n"); returnText=returnText.replace(//gi, "\n"); //-- remove P and A tags but preserve what's inside of them returnText=returnText.replace(//gi, "\n"); returnText=returnText.replace(/(.*?)<\/a>/gi, " $2 ($1)"); */ //-- remove all inside SCRIPT and STYLE tags returnText=returnText.replace(/[\w\W]{1,}(.*?)[\w\W]{1,}<\/script>/gi, ""); returnText=returnText.replace(/[\w\W]{1,}(.*?)[\w\W]{1,}<\/style>/gi, ""); //-- remove all else returnText=returnText.replace(/<(?:.|\s)*?>/g, ""); /* //-- get rid of more than 2 multiple line breaks: returnText=returnText.replace(/(?:(?:\r\n|\r|\n)\s*){2,}/gim, "\n\n"); //-- get rid of more than 2 spaces: returnText = returnText.replace(/ +(?= )/g,''); //-- get rid of html-encoded characters: returnText=returnText.replace(/ /gi," "); returnText=returnText.replace(/&/gi,"&"); returnText=returnText.replace(/"/gi,'"'); returnText=returnText.replace(/</gi,'<'); returnText=returnText.replace(/>/gi,'>'); */ var maxLen= 180 ; if (returnText.length > maxLen) { returnText = returnText.substring(0, maxLen) + "..."; } //-- return return returnText; } g.attachEvent=function(overlay,object,e){ // local object closure var o=object; var infowindow; var infoContent=""; if( o.event[e].infoWindow && o.event[e].infoWindow.options.content) { infoContent=o.event[e].infoWindow.options.content; if(g.expire){ infoContent+='

Powered by iMapBuilder'; } } google.maps.event.addListener(overlay,e,function(){ console.debug(o.event[e].infoWindow.options.maxWidth); if(o.event[e].infoWindow){ /*if ( o.event[e].infoWindow.options.maxWidth == undefined) o.event[e].infoWindow.options.maxWidth = 0 ;*/ if(o.event[e].infoWindow.options.maxWidth==0){ delete o.event[e].infoWindow.options.maxWidth; } infowindow=new google.maps.InfoWindow(o.event[e].infoWindow.options); infowindow.setOptions({"content":infoContent}); if( g.data.options["infoAutoPan"] != undefined) infowindow.setOptions({"disableAutoPan": g.data.options["infoAutoPan"]}); if(o.event[e].infoWindow.options.maxWidth!=undefined){ infowindow.setOptions({"maxWidth": parseInt(o.event[e].infoWindow.options.maxWidth) }); } infowindow.open(map,overlay); } if(o.event[e].navigate){ window.open(o.event[e].navigate.href,o.event[e].navigate.target); /*if(o.event[e].navigate.target=='_self'){ location.href=o.event[e].navigate.href; }else{ window.op //here }*/ } }); if(e=="mouseover"){ if(o.event[e].infoWindow){ google.maps.event.addListener(overlay,'mouseout',function(){ infowindow.close(); }); } } } g.loadLabelNImage=function(){ /* ----- for draw label ----- */ function Label(opt_options, latlng, content, visible, clickable, border,bordercolor, background, font_color, font_size) { // Initialization this.setValues(opt_options); this.latLng_ = latlng; this.content_ = content; this.visible_ = visible; this.clickable_ = clickable; this.zIndex_ = 1; this.border_ = border; this.borderColor_ = bordercolor; this.bg_ = background; this.fontColor_ = font_color; this.fontSize_ = font_size; // Label specific var span = this.span_ = document.createElement('span'); span.style.cssText = 'position: relative; left: -50%; top: -8px; white-space: nowrap; padding: 2px; ' + 'border: '+this.border_+'px solid #'+this.borderColor_+'; ' + 'background-color: '+this.bg_ +';'+ 'color:'+ this.fontColor_+ ';'+ 'font-size: '+this.fontSize_+'px;'; var div = this.div_ = document.createElement('div'); div.appendChild(span); div.style.cssText = 'position: absolute; display: none'; }; Label.prototype = new google.maps.OverlayView; // Implement onAdd Label.prototype.onAdd = function() { var pane = this.getPanes().overlayImage; pane.appendChild(this.div_); }; // Implement onRemove Label.prototype.onRemove = function() { this.div_.parentNode.removeChild(this.div_); }; // Implement draw Label.prototype.draw = function() { var projection = this.getProjection(); var position = projection.fromLatLngToDivPixel(this.latLng_); this.span_.style.cssText = 'position: relative; left: -50%; top: -8px; white-space: nowrap; padding: 2px; ' + 'border: '+this.border_+'px solid '+this.borderColor_+'; ' + 'background-color: '+this.bg_ +';'+ 'color:'+ this.fontColor_+ ';'+ 'font-size: '+this.fontSize_+'px;'; this.span_.innerHTML = this.content_; var div = this.div_; div.style.left = position.x+'px'; div.style.top = position.y+'px'; var visible = this.visible_; div.style.display = visible ? 'block' : 'none'; var clickable = this.clickable_; this.span_.style.cursor = clickable ? 'pointer' : ''; var zIndex = this.zIndex_; div.style.zIndex = zIndex; }; /* ----- for draw images ----- */ function OverlayImage(opt_options, latlng, imageUrl, visible, clickable, border, bordercolor, width, height) { // Initialization this.setValues(opt_options); this.latLng_ = latlng; this.imageUrl_ = imageUrl; this.visible_ = visible; this.clickable_ = clickable; this.zIndex_ = 1; this.border_ = border; this.borderColor_ = bordercolor; if( width == "") this.width_ = "100" ; else this.width_ = width; if( height == "") this.height_ = "100" ; else this.height_ = height; var top_pos = Number(this.height_/2) + Number(this.border_); // OverlayImage specific var span = this.span_ = document.createElement('div'); span.style.cssText = 'position: relative; left: -50%; top: -'+ top_pos +'px; ' + 'border: '+this.border_+'px solid #'+this.borderColor_+'; ' + 'width:'+this.width_+'px; height:'+this.height_+'px; '; var div = this.div_ = document.createElement('div'); div.appendChild(span); div.style.cssText = 'position: absolute; display: none'; }; OverlayImage.prototype = new google.maps.OverlayView(); // Implement onAdd OverlayImage.prototype.onAdd = function() { var pane = this.getPanes().overlayImage; pane.appendChild(this.div_); var me = this; // Ensures the label is redrawn if the text or position is changed. /* this.listeners_ = [ google.maps.event.addDomListener(this.div_, 'click', function() { if (me.clickable_) { google.maps.event.trigger(me, 'click'); } }) ]; */ }; // Implement onRemove OverlayImage.prototype.onRemove = function() { this.div_.parentNode.removeChild(this.div_); }; // Implement draw OverlayImage.prototype.draw = function() { var projection = this.getProjection(); var position = projection.fromLatLngToDivPixel(this.latLng_); var top_pos = Number(this.height_/2) + Number(this.border_); this.span_.style.cssText = 'position: relative; left: -50%; top: -'+ top_pos +'px; ;' + 'border: '+this.border_+'px solid '+this.borderColor_+'; '+ 'width:'+this.width_+'px; height:'+this.height_+'px; '; this.span_.innerHTML = ''; var div = this.div_; div.style.left = position.x+'px'; div.style.top = position.y+'px'; var visible = this.visible_; div.style.display = visible ? 'block' : 'none'; var clickable = this.clickable_; this.span_.style.cursor = clickable ? 'pointer' : ''; var zIndex = this.zIndex_; div.style.zIndex = zIndex; }; function loadLabels(){ //remove all label first if(g.data.labels != undefined ){ for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.labels[i]!=undefined){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.labels[i].catID) ) {}else if ( g.data.labels[i].catID != undefined && g.data.labels[i].catID != -1 && !categoryArr.contains(g.data.labels[i].catID) ) continue; } for(var j in g.data.labels[i].options){ if(typeof(g.data.labels[i].options[j])!='object'){ options[j]=g.data.labels[i].options[j]; } } options.map = map; options.title = g.data.labels[i].options.title; var visible = g.data.labels[i].options.visible; var clickable = g.data.labels[i].options.clickable; var title = g.data.labels[i].options.title; var border = g.data.labels[i].options.border; var bordercolor = g.data.labels[i].options.bordercolor; var bg = g.data.labels[i].options.bg; var font_color = g.data.labels[i].options.font_color; var font_size = g.data.labels[i].options.font_size; options.position=new google.maps.LatLng(g.data.labels[i].options.position[0],g.data.labels[i].options.position[1]); labels[i] = new Label( options, options.position, title , visible, clickable, border, bordercolor,bg,font_color, font_size ); object_count++; } } } } function loadImages() { if(g.data.images != undefined ){ for(var i=0; i= limit_object && limit_object != -1) break; if(g.data.images[i]!=undefined){ if ( g.data.catlegendenable === true ) { if ( !allCategoryArr.contains(g.data.images[i].catID) ) {}else if ( g.data.images[i].catID != undefined && g.data.images[i].catID != -1 && !categoryArr.contains(g.data.images[i].catID) ) continue; } for(var j in g.data.images[i].options){ if(typeof(g.data.images[i].options[j])!='object'){ options[j]=g.data.images[i].options[j]; } } options.map = map; options.title = g.data.images[i].options.title; var visible = g.data.images[i].options.visible; var clickable = g.data.images[i].options.clickable; var imageUrl = g.data.images[i].options.title; var border = g.data.images[i].options.border; var bordercolor = g.data.images[i].options.bordercolor; var width = g.data.images[i].options.width; var height = g.data.images[i].options.height; options.position=new google.maps.LatLng(g.data.images[i].options.position[0],g.data.images[i].options.position[1]); images[i] = new OverlayImage( options, options.position, imageUrl , visible, clickable, border, bordercolor,width,height ); object_count++; } } } } //label loadLabels(); //images loadImages(); } g.addOrgMarkerToList=function(i, iconid, title, desc, action){ if( (g.data.datalist.position != "" ) && (g.data.datalist.showmarkers == 0 || g.data.datalist.showmarkers == 1) ){ var table=document.createElement("table"); table.style.width="100%"; table.style.borderBottom="1px solid #DDD"; table.style.margin="5px 0px "; table.id="markers_"+i+"_"+action; tr=document.createElement("tr"); tr.id="markers_"+i; td=document.createElement("td"); td.align="center"; td.vAlign="top"; td.style.padding="3px 5px"; td.width="50px"; img=document.createElement("img"); img.style.border= '0px'; if( !isNaN(iconid) ) img.src='http://g3.imapbuilder.net/_api/img/marker/'+iconid; else img.src=iconid; td.appendChild(img); tr.appendChild(td); td=document.createElement("td"); div=document.createElement("div"); div.innerHTML=''+g.data.markers[i].options.title+'
'; var contentdesc = ""; if (g.data.markers[i].event != undefined){ if (g.data.markers[i].event.click != undefined) { if (g.data.markers[i].event.click.infoWindow != undefined) { contentdesc = g.data.markers[i].event.click.infoWindow.options.content; tr.id+="_click"; } }else if (g.data.markers[i].event.mouseover != undefined) { if (g.data.markers[i].event.mouseover.infoWindow != undefined) { contentdesc = g.data.markers[i].event.mouseover.infoWindow.options.content; tr.id+="_over"; } } } div.innerHTML+=''+g.convertHtmlToText(contentdesc)+''; td.appendChild(div); tr.appendChild(td); table.onmouseover=function(){ this.style.background="#FFF"; } table.onmouseout=function(){ this.style.background=""; } table.onclick=function(){ if ( this.id.split("_")[2] != undefined){ if(this.id.split("_")[2] == "click") google.maps.event.trigger(markers[this.id.split("_")[1]], "click"); else if(this.id.split("_")[2] == "over") google.maps.event.trigger(markers[this.id.split("_")[1]], "mouseover"); } } table.appendChild(tr); gmap_locationdetails.appendChild(table); } } g.reloadObject=function(){ //console.log("reloadObject() start"); if ( g.data.crowdmap.clenable == true || g.data.catlegendenable === true){ categoryArr = []; allCategoryArr = []; markerID=0; object_count=0 ; var cl_list = document.getElementById('categorylegend_list'); var chk = cl_list.getElementsByTagName('input'); var chkLen = chk.length; for (var i = 0; i < chkLen; i++) { if (chk[i].type === 'checkbox' && chk[i].checked === true) { categoryArr.push(chk[i].value); } allCategoryArr.push(chk[i].value); } if(g.data.clustering===true){ markerCluster.clearMarkers(); } // load object g.removeAllMarkers(); g.loadMarkers(); if(g.data.crowdmap.mode=="edit" || g.data.crowdmap.mode=="view") g.drawCrowdMarker(); g.loadLabelNImage(); //polylines g.loadPolylines(); //polygons g.loadPolygons(); //rectangle g.loadRectangles(); //circle g.loadCircles(); //route g.loadRoutes(); g.loadLegend(); g.loadClustering(); } //console.log("reloadObject() finish"); } // crowd map submit report g.submitLocation=function(){ var ajax_form=document.getElementById('ajax_form'); ajax_form.action='/_api/addlocation.php'; ajax_form.target='ajax_iframe'; if( document.getElementById('crowd_address').value == ""){ g.showMessage("Please Enter Address or Latitude/ Longitude", "#FF0000", "#FFF"); return; } if( document.getElementById('crowd_description').value == "" ){ g.showMessage("Please Enter Description!", "#FF0000", "#FFF"); return; } var fullAddress=document.getElementById('crowd_address').value; map_geocoder.geocode({'address':fullAddress, 'bounds': map.getBounds()},function(results,status){ if(status==google.maps.GeocoderStatus.OK){ var locationLat = results[0].geometry.location.lat(); var locationLng = results[0].geometry.location.lng(); var formattedAddress=results[0].formatted_address; var description = document.getElementById('crowd_description').value; var username = document.getElementById('crowd_username').value; document.getElementById("ca_latlng").value=locationLat+','+locationLng; document.getElementById("ca_address").value=formattedAddress; //document.getElementById("ca_address").value=fullAddress; document.getElementById("ca_mapid").value=g.data.fileid; document.getElementById("ca_usertype").value=document.getElementById('crowd_usertype').value; document.getElementById("ca_userid").value=document.getElementById('crowd_userid').value; document.getElementById("ca_username").value=document.getElementById('crowd_username').value; document.getElementById("ca_useremail").value=document.getElementById('crowd_useremail').value; document.getElementById("ca_description").value=description; ajax_form.submit(); //alert('Add Location Success'); }else{ g.showMessage("Address is not correct!", "#FF0000", "#FFF"); //alert('Add Location Fail'); } }); } // login with facebook , google, twitter, email g.loginFacebook=function(){ opened_window = window.open('https://www.facebook.com/dialog/oauth/?client_id=391367400907909&redirect_uri=http://g3.imapbuilder.net/_map/get_facebook.php&state='+g.data.fileid+'_8aa845fea8bd5228a628a9c864db5d92&scope=email&response_type=token','fboauth_window','width=860,height=540'); g.removeCrowdForm(); } g.loginGoogle=function(){ opened_window = window.open('https://accounts.google.com/o/oauth2/auth?'+ 'response_type=code'+ '&redirect_uri=http%3A%2F%2Fg3.imapbuilder.net%2F_map%2Fgoogleapi'+ '&client_id=17030872649-20f1n1b2fojm8ksfgdt0dj9oinmtjosl.apps.googleusercontent.com'+ '&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile'+ '&approval_prompt=force&state='+g.data.fileid+'','google_oauth_window','width=860,height=540'); g.removeCrowdForm(); } g.loginTwitter=function(){ opened_window = window.open('http://g3.imapbuilder.net/_map/twitterapi/redirect.php?mapid='+g.data.fileid+'','google_oauth_window','width=860,height=540'); g.removeCrowdForm(); } g.loginEmail=function(){ if( document.getElementById("customName").value == ""){ alert('Please provide your Name'); }else if( document.getElementById("customEmail").value == "" ){ alert('Please provide your Email Address'); }else if( !g.checkEmail(document.getElementById("customEmail").value) ){ alert('Please provide a valid Email Address'); }else{ opened_window = window.open('http://g3.imapbuilder.net/_map/new_user.php?mapid='+g.data.fileid+'&email='+document.getElementById("customEmail").value+'&name='+document.getElementById("customName").value,'google_oauth_window','width=860,height=540'); g.removeCrowdForm(); } } g.checkEmail=function(email) { var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if (!filter.test(email)) { return false; }else{ return true; } } g.updateCS=function(userName){ opened_window.document.getElementById('cs_title').innerHTML = cs_title; opened_window.document.getElementById('crowd_userinfo').innerHTML = cs_loginas + " "+ userName; opened_window.document.getElementById('cs_address').innerHTML = cs_address; opened_window.document.getElementById('cs_desc').innerHTML = cs_desc; opened_window.window.centermap(g.data.options.center[0],g.data.options.center[1], g.data.options.zoom); } // add crowd markers g.addCrowdMarker=function(cmarkerid, latLng, AddressName, description,uid, username, usertype, email, date, isNew){ // center location on the map var location = new google.maps.LatLng(latLng.split(",")[0], latLng.split(",")[1]); if( isNew == true){ map.setCenter(location); } cmarkerid=markerID; var infowindow = new google.maps.InfoWindow(); var iconpath = ""; if( !isNaN(g.data.crowdmap.markericon) ) iconpath='http://g3.imapbuilder.net/_api/img/marker/'+g.data.crowdmap.markericon; else iconpath=g.data.crowdmap.markericon; markers[cmarkerid] = new google.maps.Marker({ map: map, animation: google.maps.Animation.DROP, position: location, icon: {url:iconpath,size:new google.maps.Size(35,35),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17.5,35)}, title: AddressName }); google.maps.event.addListener(markers[cmarkerid], 'click',function(event){ var userImagePath=''; var userDesc=''+description+''; var userAddress=''+AddressName+''; var userName=''+username+''; if(usertype=="google") userImagePath='https://profiles.google.com/s2/photos/profile/'+uid; else if(usertype=="facebook") userImagePath='https://graph.facebook.com/'+uid+'/picture'; else if(usertype=="twitter") userImagePath='https://api.twitter.com/1/users/profile_image?screen_name='+email+'&size=normal'; else userImagePath='http://g3.imapbuilder.net/editor/img/crowd/emailuser.png'; var userTypeIcon=''; if(usertype=="google") userTypeIcon=''; else if(usertype=="facebook") userTypeIcon=''; else if(usertype=="twitter") userTypeIcon=''; else userTypeIcon=''; var userDate=''+date+''; var infoContent=''; infoContent=''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ '
'+userTypeIcon+' '+userName+'
'+userAddress+'
'+userDesc+'
'+userDate+'
'; infowindow.setContent(infoContent); infowindow.open(map, markers[cmarkerid]); }); markerID++; crowdMarkersId++; if( isNew == true){ var crowdMarkerCount = crowdMarkersData.length; crowdMarkersData[crowdMarkerCount]={}; crowdMarkersData[crowdMarkerCount].address=AddressName; crowdMarkersData[crowdMarkerCount].latlng =location.lat()+","+location.lng(); crowdMarkersData[crowdMarkerCount].userid =uid; crowdMarkersData[crowdMarkerCount].email =email; crowdMarkersData[crowdMarkerCount].username =username; crowdMarkersData[crowdMarkerCount].username =usertype; crowdMarkersData[crowdMarkerCount].description =description; crowdMarkersData[crowdMarkerCount].date =date; crowdMarkersData[crowdMarkerCount].isapproved = "1"; } g.addCrowdMarkerToList(g.data.crowdmap.markericon, AddressName, description,uid, username, usertype,email, date, markers[cmarkerid], cmarkerid, isNew); } // add markers to data list g.addCrowdMarkerToList=function(iconid, address, description,uid, username, usertype,email, date, obj, i){ if( (g.data.datalist.position != "") && (g.data.datalist.showmarkers == 0 || g.data.datalist.showmarkers == 2) ){ if( gmap_locationdetails != undefined ){ var table=document.createElement("table"); table.style.width="100%"; table.style.borderBottom="1px solid #DDD"; table.style.margin="5px 0px "; table.id="markers_"+i; table.style.cursor="pointer"; tr=document.createElement("tr"); tr.style.cursor="pointer"; td=document.createElement("td"); td.align="center"; td.vAlign="top"; td.width="50px"; td.rowSpan="4"; td.style.padding="3px 5px"; td.style.verticalAlign="top"; img=document.createElement("img"); img.style.border= '0px'; img.style.width= '50px'; img.style.height= '50px'; if(usertype=="google") img.src='https://profiles.google.com/s2/photos/profile/'+uid; else if(usertype=="facebook") img.src='https://graph.facebook.com/'+uid+'/picture'; else if(usertype=="twitter") img.src='https://api.twitter.com/1/users/profile_image?screen_name='+email+'&size=normal'; else img.src='http://g3.imapbuilder.net/editor/img/crowd/emailuser.png'; td.appendChild(img); tr.appendChild(td); table.appendChild(tr); table.id="markers_"+i; tr=document.createElement("tr"); // description td=document.createElement("td"); td.colSpan="2"; td.vAlign="top"; div=document.createElement("div"); div.innerHTML=''+g.convertHtmlToText(description)+'
'; td.appendChild(div); tr.appendChild(td); table.appendChild(tr); tr=document.createElement("tr"); // social icon td=document.createElement("td"); td.vAlign="top"; td.width="12px"; div=document.createElement("div"); div.innerHTML=''; if(usertype=="google") div.innerHTML+=''; else if(usertype=="facebook") div.innerHTML+=''; else if(usertype=="twitter") div.innerHTML+=''; else div.innerHTML+=''; td.appendChild(div); tr.appendChild(td); // name td=document.createElement("td"); td.vAlign="top"; div=document.createElement("div"); div.innerHTML=' '+ ''+username + '
'; td.appendChild(div); tr.appendChild(td); table.appendChild(tr); // pin icon tr=document.createElement("tr"); td=document.createElement("td"); td.vAlign="top"; td.width="12px"; div=document.createElement("div"); var contentAdd = address; var imapath = ""; if( !isNaN(iconid) ) imapath='http://g3.imapbuilder.net/_api/img/marker/'+iconid; else imapath=iconid; div.innerHTML=' '; td.appendChild(div); tr.appendChild(td); // address td=document.createElement("td"); td.vAlign="top"; div=document.createElement("div"); div.innerHTML=''+ contentAdd+ ''; td.appendChild(div); tr.appendChild(td); table.appendChild(tr); //div.innerHTML+='
' + date+ ''; tr=document.createElement("tr"); // empty td=document.createElement("td"); tr.appendChild(td); // clock icon& time td=document.createElement("td"); td.vAlign="bottom"; if( g.data.datalist.position=="right"||g.data.datalist.position=="left" ) td.align="left"; else if( g.data.datalist.position=="top"||g.data.datalist.position=="bottom" ) td.align="right"; td.colSpan="2"; td.innerHTML=' ' + date+ '';; tr.appendChild(td); table.appendChild(tr); // setup the mouse over effect table.onmouseover=function(){ this.style.background="#FFF"; } table.onmouseout=function(){ this.style.background=""; } table.onclick=function(){ google.maps.event.trigger(obj, "click"); } //gmap_locationdetails.appendChild(table); var markerlist = document.getElementById('gmap_locationdetails'); if( markerlist.getElementsByTagName('table').length > 0 ){ var t= markerlist.getElementsByTagName('table')[0]; markerlist.insertBefore(table, t); }else{ gmap_locationdetails.appendChild(table); } } } } g.drawCrowdMarker=function(){ for( var i=0; i= limit_object && limit_object != -1) break; if ( crowdMarkersData[i].catID != undefined && crowdMarkersData[i].catID != -1 && !categoryArr.contains(crowdMarkersData[i].catID) ) continue; } g.addCrowdMarker(crowdMarkersId, crowdMarkersData[i].latlng, crowdMarkersData[i].address, crowdMarkersData[i].description,crowdMarkersData[i].userid, crowdMarkersData[i].username, crowdMarkersData[i].usertype, crowdMarkersData[i].email, crowdMarkersData[i].date, false); object_count++; } } } // create & remove dark background g.createModel=function(){ var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(modal_div); } g.removeModel=function(){ if(document.getElementById("modal_div")) { var map_div = document.getElementById('gmap_'+g.data.fileid); var md = document.getElementById("modal_div"); map_div.removeChild(md); } } // add a submit form g.addCrowdForm=function(){ g.createModel(); if(document.getElementById("crowdForm_div")){ document.getElementById("crowdForm_div").style.display="block"; }else{ crowdForm_div=document.createElement("div"); crowdForm_div.id="crowdForm_div"; crowdForm_div.style.position="absolute"; crowdForm_div.style.top="20%"; crowdForm_div.style.left="25%"; crowdForm_div.style.right="25%"; crowdForm_div.style.backgroundColor="#F0F0F0"; crowdForm_div.style.borderWidth="1px"; crowdForm_div.style.borderColor="#CCC"; crowdForm_div.style.borderStyle="solid"; crowdForm_div.style.display='block'; crowdForm_div.style.zIndex="2"; crowdForm_div.style.borderRadius="5px"; crowdForm_div.align="center"; var ci_style=""; var loginCount = 0 ; var loginFacebook = ''; var loginGoogle = ''; var loginTwitter = ''; var loginOR =''; var loginEmail = ''; if( g.data.crowdmap.login == undefined || g.data.crowdmap.login.facebook ) { loginFacebook='
'; loginCount++; } if( g.data.crowdmap.login == undefined || g.data.crowdmap.login.google ) { loginGoogle='
'; loginCount++ } if( g.data.crowdmap.login == undefined || g.data.crowdmap.login.twitter ){ /*loginTwitter = '
'; loginCount++;*/ } if( g.data.crowdmap.login == undefined || g.data.crowdmap.login.email ){{ loginOR = '
'; if( g.data.crowdmap.login == undefined || loginCount >0) loginOR +='or '; loginOR += 'Enter your name and email
'; loginEmail = ''+ ''+ ''+ ''+ '
Name:
Email:
'+ ''+ ''+ '
'; loginCount++; } } var content=""; content+='
'+ '
'+ '
'+ '
'+cs_title+'
'+ '
'+ '
'+ //'
Login
'+ '
'+ loginFacebook+ loginGoogle+ loginTwitter+ '
'+ loginOR+ loginEmail+ '
'+ ''+ '
'; crowdForm_div.innerHTML=content; if(true || g.data.crowdmap.mode=="edit" ){ if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(crowdForm_div); } } } } g.removeCrowdForm=function(){ g.removeModel(); if(document.getElementById("crowdForm_div")) { //var map_div = document.getElementById('gmap_'+g.data.fileid); //var cf = document.getElementById("crowdForm_div"); //map_div.removeChild(cf); document.getElementById("crowdForm_div").style.display="none"; } } g.addMore=function(){ document.getElementById('crowd_done').style.display="none"; document.getElementById('crowd_input').style.display="block"; document.getElementById('crowd_inputdata').style.display="block"; } // add temp marker for user to set location g.addLocationMarker=function(){ if( !isNaN(g.data.crowdmap.markericon) ) iconpath='http://g3.imapbuilder.net/_api/img/marker/'+g.data.crowdmap.markericon; else iconpath=g.data.crowdmap.markericon; tempMarker = new google.maps.Marker({ map: map, animation: google.maps.Animation.DROP, position: map.getCenter(), icon: {url:iconpath,size:new google.maps.Size(35,35),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17.5,35)}, draggable: true }); document.getElementById('crowd_address').value="("+map.getCenter().lat()+","+map.getCenter().lng()+")"; google.maps.event.addListener(tempMarker, 'position_changed',function(){ document.getElementById('crowd_address').value="("+tempMarker.getPosition().lat()+", "+tempMarker.getPosition().lng()+")"; }); var tempMarkerAni = setInterval("tempMarker.setAnimation(google.maps.Animation.BOUNCE)", 3000); } g.removeLocationMarker=function(){ if( tempMarker != undefined){ tempMarker.setMap(null); clearTimeout(tempMarkerAni); } } // confirm button for temp marker g.addLocationDiv=function(){ if(document.getElementById("crowdGetLocation_div")){ }else{ crowdGetLocation_div=document.createElement("div"); crowdGetLocation_div.id="crowdGetLocation_div"; crowdGetLocation_div.style.position="absolute"; crowdGetLocation_div.style.bottom="20px"; crowdGetLocation_div.style.left="30%"; crowdGetLocation_div.style.right="30%"; crowdGetLocation_div.style.display='block'; crowdGetLocation_div.style.zIndex="3"; crowdGetLocation_div.style.opacity="0.8"; crowdGetLocation_div.style.align="center"; var ci_style=""; var content=""; content+='
'+ '
Drag Marker and Confirm the Location.
'+ ''+ '
'; crowdGetLocation_div.innerHTML=content; if(true || g.data.crowdmap.mode=="edit" ){ if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(crowdGetLocation_div); } } } } g.removeLocationDiv=function(){ if(document.getElementById("crowdGetLocation_div")) { var map_div = document.getElementById('gmap_'+g.data.fileid); var cf = document.getElementById("crowdGetLocation_div"); map_div.removeChild(cf); } } // show and hide temp marker g.addLocationMode=function(){ document.getElementById('reportPanel').style.display="none"; g.removeModel(); g.addLocationDiv(); g.addLocationMarker(); } g.comfirmLocation=function(){ g.createModel(); document.getElementById('reportPanel').style.display="block"; g.removeLocationMarker(); g.removeLocationDiv(); } // message dialog g.showMessage=function(message, bgcolor, fontColor){ if(document.getElementById("errorMessage_div")){ }else{ errorMessage_div=document.createElement("div"); errorMessage_div.id="errorMessage_div"; errorMessage_div.style.position="absolute"; errorMessage_div.style.bottom="20px"; errorMessage_div.style.left="30%"; errorMessage_div.style.right="30%"; errorMessage_div.style.display='block'; errorMessage_div.style.zIndex="3"; errorMessage_div.style.opacity="1"; errorMessage_div.align="center"; var ci_style=""; var content=""; content+='
'+ '
'+message+'
'+ '
'; errorMessage_div.innerHTML=content; if(true || g.data.crowdmap.mode=="edit" ){ if ( document.getElementById('gmap_'+g.data.fileid) ) { var map_div = document.getElementById('gmap_'+g.data.fileid); map_div.appendChild(errorMessage_div); } } setTimeout('net.imapbuilder.gmap.removeMessageDiv()', 3000); } } g.removeMessageDiv=function(){ if(document.getElementById("errorMessage_div")) { var map_div = document.getElementById('gmap_'+g.data.fileid); var cf = document.getElementById("errorMessage_div"); map_div.removeChild(cf); } } // function for data list scroll to bottom /* g.scrollDataListToBottom=function(){ if(document.getElementById('dataListContainer')!=undefined ) { var objDiv = document.getElementById('dataListContainer'); objDiv.scrollTop = objDiv.scrollHeight; } } */ g.refreshPage=function(){ window.location.reload(); return false; } // heat map g.checkHeatMap=function(){ heatMapArr = []; // check if it is heatmap if( g.data.heatmap != undefined && g.data.heatmap.enable == true ){ var heatMapData = g.data.heatmap.data; for(var i=0; i=0;i--){ if(str.charAt(i)!=" "&&str.charAt(i)!=" ") break; } str = str.substring(0,i+1); return str; } g.Trim=function(str){ return g.LTrim(g.RTrim(str)); } g.numToHex=function(num){ var hex = num.toString(16); if( hex.length == 1 ) return "0"+hex; else return hex; } var searchMarker = []; g.searchInMapAction=function(address){ if(address != " "){ map_geocoder=new google.maps.Geocoder(); var map_bound_SW = new google.maps.LatLng(-32.768800, -86.923828); var map_bound_NE = new google.maps.LatLng(9.188870, -16.611328); var map_bound = new google.maps.LatLngBounds(map_bound_SW, map_bound_NE); map_geocoder.geocode({'address':address +" Bazil", 'bounds':map_bound},function(results,status){ if(status==google.maps.GeocoderStatus.OK){ map.setCenter(results[0].geometry.location); //searchInMapAddMarker(results[0].geometry.location, results[0].formatted_address, searchMarkerID); searchMarker[searchMarkerID] = new google.maps.Marker({ map: map, animation: google.maps.Animation.DROP, position: results[0].geometry.location, icon: {url:'http://g3.imapbuilder.net/_api/img/marker/17',size:new google.maps.Size(35,35),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(17.5,35)}, title: results[0].formatted_address }); google.maps.event.addListener(searchMarker[searchMarkerID], 'click',function(event){ var infowindow = new google.maps.InfoWindow({content:results[0].formatted_address,position:event.latLng}); infowindow.open(map); }); searchMarkerID++ } }); } } g.zoomInPolygonCenter=function(path){ var bounds = new google.maps.LatLngBounds(); var pglength = path.getLength(); for (i = 0; i < pglength; i++) { bounds.extend(path.getAt(i)); } map.fitBounds(bounds); } g.zoomInPolygon=function(polygonID){ if(polygons[polygonID] != undefined){ g.zoomInPolygonCenter(polygons[polygonID].getPath()); } } })();net.imapbuilder.gmap.mapkey="AIzaSyBsJ00itihfix0LqWl2nQ86J5AYBQK_XQg";net.imapbuilder.gmap.run("{\"width\":\"960\",\"width_unit\":\"px\",\"height\":\"800\",\"height_unit\":\"px\",\"fileid\":23382,\"filename\":\"HMA - Zaccaria\",\"font_size\":\"14\",\"font_family\":\"Arial\",\"options\":{\"mapTypeId\":\"hybrid\",\"disableDoubleClickZoom\":false,\"draggable\":true,\"keyboardShortcuts\":true,\"scrollwheel\":true,\"mapTypeControl\":true,\"panControl\":true,\"scaleControl\":false,\"streetViewControl\":true,\"zoomControl\":true,\"center\":[45.43400829440096,12.343716469450774],\"zoom\":18,\"infoAutoPan\":false},\"markers\":[{\"iconid\":\"32\",\"options\":{\"position\":[45.43772571561588,12.31871934701951],\"visible\":true,\"title\":\"Marco Polo Airport ATVO coach\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_buses_atvo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Marco Polo Airport ATVO coach - This bus reaches VCE in 20 minutes.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.437673206974424,12.318885643978433],\"visible\":true,\"title\":\"Treviso Airport Coaches (ATVO & Barzi Bus)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/treviso_airport_bus_to_venice.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Treviso Airport Coaches serve passengers on Ryanair and several other budget airlines. Two companies, ATVO and Barzi Bus, cover the route.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"31\",\"options\":{\"position\":[45.43772029497402,12.31921823789628],\"visible\":true,\"title\":\"Marco Polo Airport No. 5 \"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_buses_actv.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The ACTV No. 5 Aerobus is a city bus that stops often on its way to Venice Marco Polo Airport. (If you have much luggage, take the ATVO coach.)\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43683102720528,12.319478412170724],\"visible\":true,\"title\":\"Best Western Olimpia Hotel ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/best-western-olimpia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Best Western Olimpia Hotel *** is popular with cruise passengers. It\'s 1 low bridge from airport buses, taxis, and the People Mover to the Marittima piers. Click \\\"H\\\" for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43690631088286,12.319811006088571],\"visible\":true,\"title\":\"Hotel Arlecchino ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/arlecchino.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Arlecchino *** This well-run hotel is especially convenient if you have an early-morning flight. Click the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.438492891024644,12.319698116439326],\"visible\":true,\"title\":\"Hotel Santa Chiara ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/santa-chiara.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Santa Chiara *** is on the Piazzale Roma, which has airport buses, land taxis, and the People Mover to Marittima cruise terminals and the Tronchetto parking garage. Click \\\"H\\\" for info.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43756315670896,12.317576725979166],\"visible\":true,\"title\":\"Ca\' Doge ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-doge.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Ca\' Doge *** has parking and is next to the People Mover, which runs to the Marittima cruise piers and Tronchetto parking garage. Click the \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.438026411235214,12.321170886059235],\"visible\":true,\"title\":\"Hotel Papadopoli Venezia (ex-Sofitel) ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/papodopoli-venezia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Papadopoli Venezia ****, formerly a member of the Sofitel group, is a full-service hotel for upscale travelers and cruise passengers. Click the \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43896030796871,12.321235101161847],\"visible\":true,\"title\":\"Hotel Gardena ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/gardena.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Gardena *** is 2 small bridges from airport buses and land taxis at the Piazzale Roma. Click the \\\"H\\\" icon for pictures, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43679526742404,12.322030534048395],\"visible\":true,\"title\":\"Palazzo Odoni ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/palazzo-odoni.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Palazzo Odoni *** is a restored palazzo with plenty of romance for couples celebrating honeymoons, anniversaries, or love affairs. Click the \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.436644699672115,12.322588433523492],\"visible\":true,\"title\":\"Hotel Al Sole ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/al-sole.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Al Sole *** is about 10 minutes on foot from airport buses and land taxis. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43661890152935,12.322792281408624],\"visible\":true,\"title\":\"Hotel Falier **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/falier.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Falier ** is an economical hotel with a good reputation. it\'s an easy walk from airport buses and taxis at the Piazzale Roma. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43623295490904,12.319147159357385],\"visible\":true,\"title\":\"Alloggi Marinella ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/alloggi-marinella.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Alloggi Marinella ***. Do as we did, and splurge on a Superior Double with a private patio by the canal. Click the \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"42\",\"options\":{\"position\":[45.437805495899944,12.317496259708719],\"visible\":true,\"title\":\"People Mover to Marittima cruise terminals and Tronchetto parking garage\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-people-mover.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The inexpensive Venice People Mover takes only 3 minutes to reach the Tronchetto parking island, with an intermediate stop at the Marittima cruise port.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"36\",\"options\":{\"position\":[45.440831730317136,12.321028728981332],\"visible\":true,\"title\":\"Venezia Santa Lucia Station (Ferrovia)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-railroad-station.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Venezia Santa Lucia Railroad Station (Ferrovia)\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.441670094385515,12.322289367218332],\"visible\":true,\"title\":\"Hotel Florida **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/florida.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Florida ** is 0 bridges from the train station. Click the \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.441930916221644,12.323466856975983],\"visible\":true,\"title\":\"Hotel Principe ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/principe.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Principe **** is 0 bridges from the RR station and 1 bridge from the airport boat\'s Guglie stop. Click \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.442705390282,12.324225922127084],\"visible\":true,\"title\":\"Hotel Amadeus ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/amadeus.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Amadeus **** is 0 bridges from the train station and 1 bridge from the Alilaguna airport boat\'s Guglie stop. Click the \\\"H\\\" icon for details about this 4-star hotel.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44202672802186,12.32158662845643],\"visible\":true,\"title\":\"Hotel Abbazia ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/abbazia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Abbazia *** is popular with our readers, and it\'s close to the train station. Click the \\\"H\\\" icon for photos, rates, and reviews by paying guests.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44277192535886,12.324593384762125],\"visible\":true,\"title\":\"Hotel Adua **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/adua.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Adua ** is 0 bridges from the train station and 1 bridge from the Alilaguna airport boat\'s Guglie stop. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44442197014732,12.323759217758493],\"visible\":true,\"title\":\"Hotel Hesperia **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/hesperia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Hesperia ** is 1 bridge from the Alilaguna Guglie airport-boat stop and 0 bridges from the train station. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44506600679252,12.326653321285562],\"visible\":true,\"title\":\"Locanda del Ghetto\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/locanda_del_ghetto.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Locanda del Ghetto is close to the Guglie stop of Alilaguna Orange Line airport boats. Click \\\"H\\\" for photos, rates, and guest reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44557697278424,12.326806207199411],\"visible\":true,\"title\":\"Kosher House Giardino dei Melograni\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/kosher-house-giardino-dei-melograni.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Kosher House Giardino dei Melograni is a short walk from the Guglie stop of Alilaguna Orange Line airport boats. Click \\\"H\\\" for details about this B&B.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44163961977781,12.3226259844497],\"visible\":true,\"title\":\"Hotel Boscolo Bellini ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/boscolo-bellini-venezia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Boscolo Bellini **** is 0 bridges from the train station. Click the \\\"H\\\" icon for photos, rates, and reviews by paying guests at this 4-star hotel.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44233215729472,12.322610009630921],\"visible\":true,\"title\":\"Hotel Il Mercante di Venezia ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/mercante-di-venezia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Il Mercante di Venezia *** is 0 bridges from the train station and 1 bridge from the Alilaguna airport boat\'s Guglie stop. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44261184097088,12.324099371015336],\"visible\":true,\"title\":\"Hotel Adriatico **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/adriatico.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Adriatico ** is 0 bridges from the train station and 1 bridge from the Alilaguna airport boat\'s Guglie stop. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4417782961945,12.322126173184301],\"visible\":true,\"title\":\"Hotel A La Locanda di Orsaria ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/a-la-locanda-di-orsaria.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel A La Locanda di Orsaria *** is close to the train station over level ground. Click the \\\"H\\\" icon for photos, rates, and guest reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44100800700647,12.324428600368265],\"visible\":true,\"title\":\"Hotel Ai Due Fanali ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ai-due-fanali.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Ai Due Fanali ***This hotel is one of our favorites, with a rooftop breakfast terrace and a great location. Click the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44112111999294,12.32380632787681],\"visible\":true,\"title\":\"Ca\' Nigra Lagoon Resort ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-nigra-lagoon-resort.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Ca Nigra Lagoon Resort **** has a huge garden with outdoor tables next to the Grand Canal. Click the \\\"H\\\" icon for photos, rates, and reviews by paying guests.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.441397913166966,12.324045044479135],\"visible\":true,\"title\":\"Hotel Canal Grande ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/canal-grande.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Canal Grande **** is directly on the Grand Canal, with its entrance on a quiet square. Click the \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43916208163847,12.321038708889319],\"visible\":true,\"title\":\"Hotel Canal & Walter ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/canal-and-walter.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Canal & Walter *** faces the Grand Hotel near the Piazzale Roma\'s airport buses and land taxis. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44004305501559,12.321860385236505],\"visible\":true,\"title\":\"Hotel Carlton on the Grand Canal ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/carlton-on-the-grand-canal.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Carlton on the Grand Canal **** is directly opposite the railway station, across the Scalzi Bridge. Click the \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43978222445217,12.321613622007135],\"visible\":true,\"title\":\"Hotel Airone **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/airone.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Airone ** is convenient to the Piazzale Roma and the railroad station. Click the \\\"H\\\" icon for photos, rates, and reviews by paying guests.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.440181454416816,12.322042775449518],\"visible\":true,\"title\":\"Hotel Antiche Figure ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/antiche-figure.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Antiche Figure *** is across the Scalzi Bridge from Venice\'s Santa Lucia railroad station. Click the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"42\",\"options\":{\"position\":[45.44009020580545,12.312881783062721],\"visible\":true,\"title\":\"People Mover - Marittima Station\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-people-mover.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"People Mover - Marittima Station\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"42\",\"options\":{\"position\":[45.44206780280943,12.308335438782478],\"visible\":true,\"title\":\"People Mover - Tronchetto Station\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-people-mover.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"People Mover - Tronchetto Station\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.44030306504413,12.306311712080742],\"visible\":true,\"title\":\"ACTV Vaporetto Stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"ACTV Vaporetto Stop\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.42825621488517,12.320176050478722],\"visible\":true,\"title\":\"Hilton Moliny Stucky Hotel *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/molino-stucky-hilton-transportation.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The Hilton Molino Stucky ***** is popular with cruise passengers, since it\'s one stop from the Marittima cruise terminals by Alilaguna airport boat. Click the \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.432207284256904,12.32056598648387],\"visible\":true,\"title\":\"Hotel San Sebastiano Garden ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/san-sebastiano-garden.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel San Sebastiano Garden **** is 2 to 3 minutes on foot from the San Basilio cruise terminal. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43290520390331,12.323287454539468],\"visible\":true,\"title\":\"Hotel Pausania ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/pausania.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Pausania *** is 0 bridges from the Ca\' Rezzonico airport-boat stop and near the San Basilio cruise terminal. Click the \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4328852398981,12.322875735455682],\"visible\":true,\"title\":\"Casa Rezzonico (B&B)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/casa-rezzonico.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Casa Rezzonico (B&B) is 0 bridges from Alilaguna\'s Ca\' Rezzonico airport-boat stop and close to the San Basilio cruise pier. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43157343870911,12.324894472203368],\"visible\":true,\"title\":\"Antica Locanda Montin **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/antica-locanda-montin.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Antica Locanda Montin ** is a simple, traditional pension owned by a respected Venice restaurant.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.428026308702705,12.320349908901562],\"visible\":true,\"title\":\"Giudecca (Hilton) Stop - Alilaguna Airport Boat - Linea Blu\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Giudecca (Hilton) stop for the Alilaguna Linea Blu or Blue Line airport boat, which also goes to the Marittima cruise terminals. \",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.43054992024272,12.320864893032422],\"visible\":true,\"title\":\"San Basilio Vaporetto Stop - ACTV Linea 2\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"San Basilio Vaporetto Stop - ACTV Line 2. As you leave the pier, turn left and cross the small footbridge to the San Basilio Cruise Terminal.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.43210763919715,12.337330139516439],\"visible\":true,\"title\":\"SAN MARCO - Alilaguna airport boats\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The San Marco Giardinetti stop of Alilaguna\'s Linea Blu and Linea Arancio airport boats is also used by ACTV public water buses.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.43211362512088,12.337514975067734],\"visible\":true,\"title\":\"San Marco - ACTV vaporetto\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The San Marco Giardinetti pier for ACTV public water buses is also used by Alilaguna Blue and Orange Line airport boats.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43299474575283,12.337301825181498],\"visible\":true,\"title\":\"Luna Hotel Baglioni *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/luna-baglioni.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Luna Hotel Baglioni *****, Venice\'s oldest hotel, is 0 bridges from the San Marco airport-boat stop. Click the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.432665189868125,12.33692960665735],\"visible\":true,\"title\":\"Hotel Monaco & Grand Canal ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/monaco-and-grand-canal.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Monaco & Grand Canal **** is 0 bridges from the San Marco stop of the Alilaguna airport boat. Click the \\\"H\\\" icon for hotel information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43290160737085,12.335859699124057],\"visible\":true,\"title\":\"Hotel Bauer *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/bauer-and-il-palazzo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Bauer ***** is 0 bridges from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for photos, guest reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.432113467587214,12.33639808659268],\"visible\":true,\"title\":\"Hotel Bauer Il Palazzo *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/bauer-and-il-palazzo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Bauer Il Palazzo *****, the Bauer\'s even more exclusive sibling, is 0 bridges from the San Marco airport-boat stop. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43336556620387,12.335070820619649],\"visible\":true,\"title\":\"Hotel San Moisè ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/san-moise.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel San Moisè *** (a personal favorite) is 1 small bridge from the Alilaguna airport boat\'s San Marco stop. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43283239878477,12.33549625980254],\"visible\":true,\"title\":\"Hotel Violino d\'Oro ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/violino-d-oro.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Violino d\'Oro *** is 1 bridge from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43269677700093,12.335603278587541],\"visible\":true,\"title\":\"Hotel Lisbona ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/lisbona.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Lisbona *** is 1 bridges from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.432557122887,12.335531128519733],\"visible\":true,\"title\":\"Hotel Anastasia ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/anastasia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Anastasia *** is 1 bridges from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for photos, rates, and reviews by paying guests.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43212165592049,12.335490849132839],\"visible\":true,\"title\":\"The Westin Europa & Regina Hotel *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/europa-e-regina.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Westin Europa & Regina Hotel ***** is 1 bridge from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43335895437141,12.334496069383704],\"visible\":true,\"title\":\"Hotel Kette ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/kette.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The excellent Hotel Kette **** is 1 small bridge from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43335878815111,12.336315376344146],\"visible\":true,\"title\":\"Hotel Firenze ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/firenze.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Firenze *** is 0 bridges from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.432428421550874,12.334310566666773],\"visible\":true,\"title\":\"Hotel Flora ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/flora.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Flora *** and its garden are 1 bridge from the airport boat\'s San Marco stop. Click the \\\"H\\\" icon for reviews of the Flora, which has a loyal following.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43290004890649,12.334174587664393],\"visible\":true,\"title\":\"Hotel Saturnia & International ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/saturnia-and-international.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Saturnia & International **** is 1 bridge from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for rates, reviews, and photos.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43250476025251,12.333951964316157],\"visible\":true,\"title\":\"Hotel Do Pozzi ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/do-pozzi.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Do Pozzi *** has a lovely, quiet location 1 bridge from the airport boat\'s San Marco stop. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43248787273643,12.33375949382139],\"visible\":true,\"title\":\"Hotel Torino ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/torino.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Torino *** is 1 bridge from the Alilaguna airport boat\'s San Marco stop. Click the \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43502350731983,12.339542710921478],\"visible\":true,\"title\":\"Hotel Concordia ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/concordia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Concordia **** faces the Basilica, with the hotel entrance behind the square in the Calle Larga San Marco. It\'s 0 bridges from the San Marco Alilaguna stop.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43558694982917,12.339237995365693],\"visible\":true,\"title\":\"Best Western Hotel Montecarlo ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/best-western-montecarlo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Best Western Hotel Montecarlo *** is 0 bridges from the San Marco Alilaguna airport-boat stop. Click the \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43553150321427,12.33932968056547],\"visible\":true,\"title\":\"Comfort Hotel Diana ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/comfort-hotel-diana.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Comfort Hotel Diana *** is 0 bridges from the San Marco Alilaguna airport-boat stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43546895221834,12.339237144354342],\"visible\":true,\"title\":\"Hotel Antico Panada ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/antico-panada.htm11\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Antico Panada *** is 0 bridges from the San Marco Alilaguna airport-boat stop. Click \\\"H\\\" icon for photos, rates, and reviews by paying guests.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43594959202075,12.33893225063116],\"visible\":true,\"title\":\"Hotel San Zulian ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/san-zulian.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel San Zulian *** is 0 bridges from the San Marco Alilaguna airport-boat stop. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.435570773993184,12.338603177548293],\"visible\":true,\"title\":\"Hotel Orion **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/orion.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Orion ** is 0 bridges from the San Marco stop of the Alilaguna airport boat. Click the \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43441154922855,12.337070295096282],\"visible\":true,\"title\":\"Best Western Hotel Cavaletto & Doge Orseola ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/best-western-cavaletto-e-doge-orseolo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Best Western Hotel Cavaletto & Doge Orseola is 1 bridge from the San Marco stop of the Alilaguna airport boat. Click the \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4347216475924,12.336834260702972],\"visible\":true,\"title\":\"Hotel San Gallo ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/san-gallo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel San Gallo *** is 1 bridge from the San Marco stop of the Alilaguna airport boat. Click the \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.434488033268536,12.3377182391921],\"visible\":true,\"title\":\"Albergo Best Western San Marco ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/best-western-san-marco.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Albergo Best Western San Marco *** is 1 bridge from the San Marco stop of the Alilaguna airport boat. Click the \\\"H\\\" icon for more info.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43460249021864,12.33778663552198],\"visible\":true,\"title\":\"Hotel Royal San Marco ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/royal-san-marco.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Royal San Marco **** is 1 bridge from the San Marcoairport-boat stop. Click the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"54\",\"options\":{\"position\":[45.434711738938574,12.33809272878841],\"visible\":true,\"title\":\"San Marco Palace Apartment Hotel\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/vacation-rentals/venice/vacation-rental-san-marco-palace-all-suites/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"San Marco Palace is an apartment hotel, 1 bridge from the San Marco airport-boat stop. Click icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43394362725095,12.342067542030463],\"visible\":true,\"title\":\"Hotel Danieli *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/danieli.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Danieli ***** occupies three palazzi. The entrance is 1 bridge from the Alilaguna airport boat\'s San Zaccaria stop. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.434041657732855,12.342759551956306],\"visible\":true,\"title\":\"Hotel Savoia & Jolanda ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/savoia-e-jolanda.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Savoia & Jolanda **** is directly behind the San Zaccaria stop of Alilaguna\'s Blue Line airport boat. Click on the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43408919201358,12.343446197464118],\"visible\":true,\"title\":\"Hotel Londra Palace ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/londra-palace.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Londra Palace **** is close to the San Zaccaria stop of the Alilaguna Linea Blu airport boat. Click the \\\"H\\\" icon for rates, reviews, and photos.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43414614667495,12.34389680857862],\"visible\":true,\"title\":\"Hotel Wildner ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/wildner.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Wildner *** is 0 bridges from the San Zaccaria stop of the Alilaguna Linea Blu airport boat. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.43358184048087,12.342866840316901],\"visible\":true,\"title\":\"San Zaccaria - Alilaguna airport boat - Linea Blu\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"San Zaccaria stop of the Alilaguna Linea Blu or Blue Line airport boat. Some ACTV public water buses, or vaporetti, also use this pier.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43416744113788,12.345276805116782],\"visible\":true,\"title\":\"Hotel Metropole *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/metropole.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Metropole ***** is 1 bridge from the San Zaccaria stop of the Alilaguna Linea Blu airport boat. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4340822632381,12.343143107845435],\"visible\":true,\"title\":\"Hotel Paganelli ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/paganelli.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Paganelli *** is close to the San Zaccaria stop of Alilaguna\'s Linea Blu airport boat. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.434155463003485,12.344561996414313],\"visible\":true,\"title\":\"Locanda Vivaldi ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/locanda-vivaldi.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Locanda Vivaldi **** is 1 bridge from the San Zaccaria stop of the Alilaguna Linea Blu airport boat. Click the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4339039215942,12.346892836048255],\"visible\":true,\"title\":\"Residenza A Tribute to Music\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/a-tribute-to-music.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Residenza A Tribute to Music is 1 bridge from Alilaguna\'s Arsenale airport-boat stop. Click \\\"H\\\" icon for photos, rates, and reviews by paying guests.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43376151405591,12.347697498752723],\"visible\":true,\"title\":\"Hotel Gabrielli Sandwirth ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/gabrieli-sandwirth.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Gabrielli Sandwirth **** is 1 bridge from Alilaguna\'s Arsenale airport-boat stop. Click the \\\"H\\\" icon for more information on this historic hotel.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43247184437907,12.35013026232923],\"visible\":true,\"title\":\"Hotel Bucintoro ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/bucintoro.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Bucintoro **** is by the Naval Museum, 1 bridge from Alilaguna\'s Arsenale airport-boat stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43212180510934,12.35105964775289],\"visible\":true,\"title\":\"Hotel Ca\' Formenta ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-formenta.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Ca\' Formenta *** is 1 bridge from the Arsenale stop of the Alilaguna Linea Blu airport boat. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4345956513407,12.342876320552136],\"visible\":true,\"title\":\"Hotel Villa Igea ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/villa-igea.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Villa Igea *** is 0 bridges from the Alilaguna airport boat\'s San Zaccaria stop. Click \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.435140088278885,12.3426936647312],\"visible\":true,\"title\":\"Hotel Fontana ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/fontana.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Fontana *** is 0 bridges from the Alilaguna airport boat\'s San Zaccaria stop. Click the \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43444314767962,12.342501294610202],\"visible\":true,\"title\":\"Hotel Campiello ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/campiello.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Campiello *** is 0 bridges from the Alilaguna airport boat\'s San Zaccaria stop. Click \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.434726176129914,12.342265260216891],\"visible\":true,\"title\":\"Hotel Doni *\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/doni.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Doni *is a budget hotel, 0 bridges from the Alilaguna airport boat\'s San Zaccaria stop. Click \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43490717694791,12.342247825858294],\"visible\":true,\"title\":\"Hotel Le Isole ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/le-isole.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Le Isole *** is 0 bridges from the Alilaguna airport boat\'s San Zaccaria stop. Click the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.43286522136948,12.348406177756488],\"visible\":true,\"title\":\"Arsenale - Alilaguna airport boat - Linea Blu\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Arsenale stop - Alilaguna airport boat - Linea Blu (Blue Line). This pier is also used by ACTV public water buses.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.430316808197645,12.327965404612996],\"visible\":true,\"title\":\"Hotel Belle Arti ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/belle-arti.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Belle Arti *** is 0 bridges from the Zattere stop of Alilaguna\'s Linea Blu airport boat. Click \\\"H\\\" icon for hotel information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.430463561336445,12.32816192886753],\"visible\":true,\"title\":\"Ca\' Pisani Hotel ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-pisani.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Ca\' Pisani Hotel **** is 0 bridges from Alilaguna\'s Blue Line airport-boat stop at Zattere. Click \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43061708182042,12.328438857950005],\"visible\":true,\"title\":\"Hotel Agli Alboretti ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/agli-alboretti.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Agli Alboretti **** is 0 bridges from the Alilaguna airport boat\'s Zattere pier. Click the \\\"H\\\" icon for hotel photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.430127201907986,12.328143926620214],\"visible\":true,\"title\":\"Hotel Domus Cavanis **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/domus-cavanis.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Domus Cavanis ** - Check in across the street at the Hotel Belle Arti. Click \\\"H\\\" icon for property details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43108158697816,12.326765727412976],\"visible\":true,\"title\":\"Hotel Palazzo Guardi \"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/palazzo-guardi.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Palazzo Guardi (entrance in Calle del Pistor) is 0 bridges from the Zattere stop on the Alilaguna airport boat\'s Blue Line. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.430256263909776,12.329795710465987],\"visible\":true,\"title\":\"Hotel American Dinesen ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/american-dinesen.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel American Dinesen *** is 1 bridge from the Zattere stop on the Alilaguna airport boat\'s Blue Line. Click the \\\"H\\\" icon for hotel information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4299673282055,12.332851146248686],\"visible\":true,\"title\":\"Hotel Messner **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/messner.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Messner ** - An affordable hotel in a quiet upscale neighborhood near the Peggy Guggenheim Collection.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.42909265591518,12.327365226580014],\"visible\":true,\"title\":\"Zattere - Alilaguna airport boat - Linea Blu\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Zattere - Alilaguna airport boat stop - Linea Blu (Blue Line)\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.42926968174371,12.32632184727322],\"visible\":true,\"title\":\"ZATTERE - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Zattere ACTV vaporetto stop with ticket booth.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.42919248257847,12.32683683140408],\"visible\":true,\"title\":\"ZATTERE - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Zattere ACTV vaporetto stop. Buy your ticket at the neighboring ACTV pier.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"57\",\"options\":{\"position\":[45.43083094564819,12.321021802259793],\"visible\":true,\"title\":\"Billa supermarket - Zattere store\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Billa supermarket - Zattere branch\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.42908999386874,12.328770704103817],\"visible\":true,\"title\":\"Pensione Seguso **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/seguso.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Pensione Seguso ** is an old-fashioned inn located 0 bridges from the Zattere airport-boat stop. Click \\\"H\\\" icon for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.429095317962144,12.328534669710507],\"visible\":true,\"title\":\"Hotel La Calcina ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/calcina.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel La Calcina *** is 0 bridges from the Alilaguna Blue Line Zattere airport-boat stop. Click \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"54\",\"options\":{\"position\":[45.42906337339412,12.328651345802655],\"visible\":true,\"title\":\"La Calcina Suites ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/calcina.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"La Calcina Suites *** Vacation Apartments - Check in at the Hotel La Calcina. (Apartments are in several locations.)\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.44395955938163,12.339162922932019],\"visible\":true,\"title\":\"FONDAMENTE NOVE - Alilaguna Airport Boat stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Fondamente Nove, a.k.a. Fondamenta Nuove, is a stop for airport boats of the Alilaguna Blue Line (and, in late evening, a few inbound boats of the Alilaguna Orange Line).\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44519084449135,12.322537250353207],\"visible\":true,\"title\":\"Hotel Ca\' Dogaressa ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-dogaressa.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Ca\' Dogaressa *** is 0 bridges from the Guglie stop of Alilaguna Orange Line airport boats. Click \\\"H\\\" for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44299775015417,12.340487934185376],\"visible\":true,\"title\":\"Hotel Vecellio ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/vecellio.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Vecellio *** is 1 bridge from Alilaguna\'s Fondamente Nove airport-boat stop. Click \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44169028144386,12.340197000237026],\"visible\":true,\"title\":\"Hotel Casa Boccassini *\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/boccassini.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Casa Boccassini * is inland from Alilaguna\'s Fondamente Nove airport-boat stop. Click \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44095172353941,12.337057474585094],\"visible\":true,\"title\":\"Hotel Giorgione ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/giorgione.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Giorgione **** is worth the fairly easy walk from Alilaguna\'s Fondamente Nove airport-boat stop. Click the \\\"H\\\" icon for details on this first-rate hotel.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.441455986101694,12.336569813379242],\"visible\":true,\"title\":\"Ca\' d\'Oro ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-d-oro.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Ca d\'Oro *** is closer than it looks from Alilaguna\'s Fondamente Nove airport-boat stop. Click the \\\"H\\\" icon for information about this small inn.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.441926607371165,12.33681184945533],\"visible\":true,\"title\":\"Locanda Alla Vite Dorata\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/alla-vite-dorata.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Inn Alla Vite Dorata is a few minutes inland from Alilaguna\'s Fondamente Nove airport-boat stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44197185185618,12.337348291258309],\"visible\":true,\"title\":\"Apostoli Palace\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/apostoli-palace.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Apostoli Palace is inland but easy to reach from Alilaguna\'s Fondamente Nove airport-boat stop. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44015083733283,12.339759676119456],\"visible\":true,\"title\":\"Residenza Ca\' Riccio (Quality Inn)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/inns/venice/inn-ca-riccio/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The Residenza Ca\' Riccio B&B is a Quality Inn. Click the \\\"H\\\" icon for photos, rates, and reviews by paying guests.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4428075328326,12.33690312351871],\"visible\":true,\"title\":\"Residenza Ca\' Zanardi\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-zanardi.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Residenza Ca\' Zanardi is 1 bridge from Alilaguna\'s Fondamente Nove airport-boat stop. Click \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44746923513967,12.326836793085704],\"visible\":true,\"title\":\"Eurostars Residenza Cannaregio\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/residenza-cannaregio.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Eurostars Residenza Cannaregio is an easy walk (with several small bridges) from Alilaguna\'s Madonna dell\'Orto airport-boat stop. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44658704711001,12.3311766072718],\"visible\":true,\"title\":\"Hotel Boscolo Venezia *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/boscolo-venezia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Boscolo Venezia ***** is a luxury hotel with a huge garden near Alilaguna\'s Madonna dell\'Orto airport-boat stop. Click \\\"H\\\" for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44591641530493,12.330312935969005],\"visible\":true,\"title\":\"Hotel Ai Mori d\'Oriente ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ai-mori-d-oriente.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Ai Mori d\'Oriente **** is 1 bridge south of the Madonna dell\'Orto stop on Alilaguna\'s Orange Line from the airport. Click \\\"H\\\" for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.440726643500525,12.336739318149966],\"visible\":true,\"title\":\"Hotel Mignon ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/mignon.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Mignon *** can be reached from either the Fondamente Nove or Rialto stop of Alilaguna\'s airport boats. Click the \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44072638272766,12.336924581190715],\"visible\":true,\"title\":\"Inn Locanda Novo\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/locanda-novo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Inn Locanda Novo can be reached from the Fondamente Nove or Rialto stop of Alilaguna\'s airport boats. Click the \\\"H\\\" icon for rates and other details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44086355772268,12.335901318451533],\"visible\":true,\"title\":\"Hotel Bernardi Semenzato **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/hotel-bernardi-semenzato/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Bernardi Semenzato ** is inland from Alilaguna\'s Fondamente Nove airport-boat stop. Click the \\\"H\\\" icon for hotel information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4271565882916,12.339330522677074],\"visible\":true,\"title\":\"Bauer Palladio Hotel & Spa *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/bauer-palladio-hotel/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Bauer Palladio Hotel & Spa ***** is a luxury hotel near the Alilaguna airport boat\'s Zittelle stop. Click \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.42574696861172,12.33603408779777],\"visible\":true,\"title\":\"Venice Hostel - Ostello Venezia\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_hostel.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Venice Hostel - Ostello Venezia has 14- to 16-bed dorms, segregated by gender. Rates are cheap, but transportation is expensive.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4286340555552,12.318159846922299],\"visible\":true,\"title\":\"Sarah Sun Island (moored yacht B&B)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/sarah-sun-island.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Sarah Sun Island is a B&B in a moored yacht next to the Giudecca Canal. Click the \\\"H\\\" icon for photos, rates, and guest reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"54\",\"options\":{\"position\":[45.428090991002016,12.31938829865112],\"visible\":true,\"title\":\"Residenza Grandi Vedute (Molino Stucky)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/vacation-rentals/venice/residenza-grandi-vedute/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Residenza Grandi Vedute shares the historic Stucky mill with the Hilton Molino Stucky hotel. Guests in these serviced apartments can use the Hilton\'s free shuttle boat. Click icon for more details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.42666017688866,12.33750125612869],\"visible\":true,\"title\":\"Zittelle - Alilaguna airport boat - Linea Blu\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The Alilaguna Linea Blu (Blue Line) airport boat stops at Zittelle, which is also used by public ACTV water buses.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.426692201183414,12.337839214464566],\"visible\":true,\"title\":\"Zitelle stop - ACTV vaporetto\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Zitelle stop of ACTV\'s vaporetti (water buses) on the island of La Giudecca, near the Venice Hostel. The pier is also used by Alilaguna airport boats.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43986446602128,12.336830703874966],\"visible\":true,\"title\":\"Hotel Al Vagon *\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/hotel-al-vagon/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Al Vagon * is a budget hotel a few minutes from the Rialto Bridge and Alilaguna\'s Rialto stop. Click the \\\"H\\\" icon for information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.443690970530774,12.325269041916272],\"visible\":true,\"title\":\"Hotel Marte *\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/marte.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Marte * is 1 bridge from the Alilaguna Guglie airport-boat stop and 0 bridges from the train station. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4438287639091,12.325924315254042],\"visible\":true,\"title\":\"Alle Guglie (B&B)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/alle-guglie-b-and-b.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Alle Guglie is a B&B near the Alilaguna airport boat\'s Guglie stop. Click \\\"H\\\" for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.442809519146785,12.328940587305624],\"visible\":true,\"title\":\"Locanda Ca\' San Marcuola\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/locanda-ca-san-marcuola.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Locanda Ca\' San Marcuola is a small inn located a few minutes on foot (with no bridges) from Alilaguna\'s Guglie airport-boat stop. Click the \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.44245555187515,12.328826593422491],\"visible\":true,\"title\":\"San Marcuola - ACTV No. 1 vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"This is the San Marcuola stop for ACTV vaporetto Line 1.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"http://\",\"options\":{\"position\":[45.44426927800135,12.324433135056097],\"visible\":true,\"title\":\"GUGLIE - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Guglie ACTV vaporetto stop. The pier is also used by Alilaguna airport boats.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.44422403535882,12.324543105625708],\"visible\":true,\"title\":\"GUGLIE stop - Alilaguna airport boat - Linea Arancio (Orange Line)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Guglie stop for Alilguna airport boat Linea Arancio (Orange line). This pier also is used by ACTV public water buses.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.44429589130354,12.324422406220037],\"visible\":true,\"title\":\"GUGLIE - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The Guglie pier is used by both ACTV public water buses and ALilaguna Linea Arancio (Orange Line) airport boats.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.44765986367433,12.332904892229635],\"visible\":true,\"title\":\"MADONNA DELL\'ORTO - Alilaguna Orange Line\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The Madonna dell\'Orto pier is used by both Alilaguna Linea Arancio (Orange Line) airport boats and ACTV public water buses.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.44789471094001,12.332878070139486],\"visible\":true,\"title\":\"MADONNA DELL\'ORTO - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The Madonna dell\'Orto pier is used by both Alilaguna Linea Arancio (Orange Line) airport boats and ACTV public water buses.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.44166527369112,12.330755051003052],\"visible\":true,\"title\":\"SAN STAE - Alilaguna airport boat Linea Arancio (Orange Line)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"San Stae stop of the Alilaguna airport boat\'s Linea Arancio or Orange Line. This pier is also used by ACTV public water buses.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.441624295354735,12.330874211912032],\"visible\":true,\"title\":\"SAN STAE - ACTV No. 1 vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"This is the San Stae stop of the ACTV No. 1 public water bus or vaporetto line. The pier is also used by Alilaguna Orange Line airport boats.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4410726501449,12.33037353095915],\"visible\":true,\"title\":\"Hotel Al Ponte Mocenigo **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/al-ponte-mocenigo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Al Ponte Mocenigo ** is 0 bridges from the San Stae> stop of the Alilaguna Orange Line airport boat or the ACTV No. 1 vaporetto. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43759328993168,12.334520495671768],\"visible\":true,\"title\":\"Locanda Ovidius ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/locanda-ovidius.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Locanda Ovidius *** is 2 bridges from the Alilaguna airport boat\'s Rialto stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43743359095971,12.334531224507828],\"visible\":true,\"title\":\"Hotel Antica Locanda Sturion ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/antica-locanda-sturion.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Antica Locanda Sturion *** is 2 bridges from the Alilaguna airport boat\'s Rialto stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.437880746942284,12.335132039327164],\"visible\":true,\"title\":\"Hotel Marconi ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/marconi.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Marconi *** is on the Grand Canal, 2 bridges from the Alilaguna airport boat\'s Rialto stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.43695357798911,12.334576361866766],\"visible\":true,\"title\":\"RIALTO stop - Alilaguna airport boat\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Rialto stop of the Alilaguna airport boat\'s Orange Line. (Alilaguna boats use pier A.) ACTV public water buses also stop at piers A, B, C, and D on this side of the Rialto Bridge.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.437721847371336,12.336103641868021],\"visible\":true,\"title\":\"Hotel Rialto ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/rialto.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Rialto *** is 1 small bridge from the Alilaguna airport boat\'s Rialto stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43729528890318,12.336751945718788],\"visible\":true,\"title\":\"Residenza Goldoni (B&B)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/goldoni.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Residenza Goldoni B&B is 1 small bridge from the Alilaguna airport boat\'s Rialtostop. Click \\\"H\\\" icon for rates, photos, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.437300612222586,12.337052353128456],\"visible\":true,\"title\":\"Hotel San Salvador **\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/san-salvador.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel San Salvador ** is 1 small bridge from the Alilaguna airport boat\'s Rialto stop. Click \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43665116354945,12.337458707794326],\"visible\":true,\"title\":\"Ca\' dell Acque (B&B)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-delle-acque.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Ca\' dell Acque B&B is 1 small bridge from the Alilaguna airport boat\'s Rialto stop. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.436459521529386,12.337631710275673],\"visible\":true,\"title\":\"Hotel Al Gazzettino ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/al-gazzettino.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Al Gazzettino *** is 1 bridge from the Alilaguna airport boat\'s Rialto stop. Click \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43708900988983,12.335146643623375],\"visible\":true,\"title\":\"Palazzo Bembo\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/palazzo-bembo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Palazzo Bembo overlooks the Grand Canal from a 15th Century Palace by the Alilaguna airport boat\'s Rialto stop. Clock the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4362878416669,12.33477649877932],\"visible\":true,\"title\":\"Hotel A La Commedia ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/a-la-commedia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel A La Commedia **** is a wheelchair-accessible hotel on a quiet square, 0 bridges from the Alilaguna airport boat\'s Rialto stop. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.43569581291392,12.330437780891543],\"visible\":true,\"title\":\"SANT\'ANGELO stop - Alilaguna airport boat\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Sant\'Angelo: This pier is used by Alilaguna\'s Linea Arancio (Orange Line) airport boats and by the ACTV No. 1 vaporetto or public water bus.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.43568782770757,12.330302329336291],\"visible\":true,\"title\":\"SANT\'ANGELO stop - ACTV vaporetto\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Sant\'Angelo pier is used by the ACTV No. 1 vaporetto or public water bus, and also by Alilaguna\'s Linea Arancio (Orange Line) airport boat.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43534446276471,12.330263437305575],\"visible\":true,\"title\":\"Hotel NH Manin ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/nh-manin.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel NH Manin **** is an upscale hotel at the Sant\'Angelo Alilaguna airport-boat and ACTV vaporetto stop. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43527791892947,12.33003544953931],\"visible\":true,\"title\":\"Palazzo Sant\'Angelo sul Canal Grande\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/palazzo-sant-angelo.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Palazzo Sant\'Angelo sul Canal Grande **** is an upmarket hotel by the Sant\'Angelo Alilaguna airport-boat and ACTV water bus pier. Click \\\"H\\\" icon for details. \",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43491591909132,12.330962152753955],\"visible\":true,\"title\":\"Hotel De L\'Alboro ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/de-l-alboro.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel De L\'Alboro is 0 bridges from the Sant\'Angelo Alilaguna airport-boat and ACTV vaporetto stop. Click \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43493087028788,12.330204356523836],\"visible\":true,\"title\":\"Locanda Antico Fiore (B&B)\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/locanda-antico-fiore.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Locanda Antico Fiore is an affordable B&B in an upscale neighborhood, 1 small bridge from the Sant\'Angelo airport-boat and vaporetto stop. Click \\\"H\\\" icon for rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43395399174845,12.330431009958943],\"visible\":true,\"title\":\"Locanda Fiorita *\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/locanda-fiorita.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Locanda Fiorita * may be the best hotel bargain in Venice. It\'s 1 small bridge from the Sant\'Angelo airport-boat stop. Click \\\"H\\\" icon for reviews and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.434369233740306,12.329594160746296],\"visible\":true,\"title\":\"Albergo San Samuele *\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/san-samuele.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Albergo San Samuele * is 1 small bridge from the Sant\'Angelo pier of Alilaguna\'s airport boat and the ACTV vaporetto. Click \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43360172604986,12.329734181539607],\"visible\":true,\"title\":\"Domus Ciliota\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/domus-ciliota.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Domus Ciliota is an affordable hotel in a former monastery, 1 bridge from the Sant\'Angelo airport-boat and vaporetto stop. Click \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.434370048604094,12.333000965909832],\"visible\":true,\"title\":\"Hotel Piccola Fenice ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/piccola-fenice.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Piccola Fenice *** is 1 small bridge from the Sant\'Angelo airport-boat and vaporetto stop. Click \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.434433548627176,12.333439507083767],\"visible\":true,\"title\":\"Hotel Ca Alvise ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ca-alvise.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Ca\' Alvise **** is on the Calle de la Verona, 1 bridge from the Sant\'Angelo airport-boat and vaporetto stop. Click \\\"H\\\" icon for details. \",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"54\",\"options\":{\"position\":[45.43334676921076,12.326793027012172],\"visible\":true,\"title\":\"Appartamenti Ca\' Rezzonico\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.booking.com/hotel/it/appartamenti-ca-rezzonico.en.html?aid=344756\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Appartamenti Ca\' Rezzonico are 4 upscale vacation apartments by the Ca\' Rezzonico airport-boat ahd vaporetto stop. Click house icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43302867492506,12.326815786310362],\"visible\":true,\"title\":\"Hotel Palazzo Stern ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/palazzo-stern.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Palazzo Stern **** is on the Grand Canal, next to the Ca\' Rezzonico airport-boat and vaporetto stop. It has a terrace on the water and a Jacuzzi on the roof. Click \\\"H\\\" for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"32\",\"options\":{\"position\":[45.433201838900565,12.327157175783213],\"visible\":true,\"title\":\"CA\' REZZONICO stop - Alilaguna airport boat\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice_airport_boat.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Ca\' Rezzonico: The airport boat of Alilaguna\'s Linea Arancio (Orange Line) stops here. The pier is also used by ACTV\'s No. 1 public water bus or vaporetto.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.433301596167006,12.327157175783213],\"visible\":true,\"title\":\"CA\' REZZONICO stop - ACTV No. 1 vaporetto\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The ACTV No. 1 vaporetto or public water bus stops at Ca\' Rezzonico on its way up and down the Grand Canal. The pier is also used by airport boats of Alilaguna\'s Linea Arancio or Orange Line.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.41124453571887,12.335389980947866],\"visible\":true,\"title\":\"San Clemente Palace Hotel & Resort *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/san-clemente-palace-hotel/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"San Clemente Palace & Resort ***** is on a private island in the Venetian Lagoon. A free shuttle boat runs to central Venice, and the island has a 12th Century church for weddings. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"54\",\"options\":{\"position\":[45.43709682682218,12.346042304570574],\"visible\":true,\"title\":\"Corte Nova vacation apartments\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/vacation-rentals/venice/vacation-rental-corte-nova/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Corte Nova vacation apartments: These apartments are in a renovated convent, with a courtyard and a reception staff. Near San Marco, but away from the crowds. Click icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.432715233617714,12.348608283659587],\"visible\":true,\"title\":\"ARSENALE - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Arsenale stop - ACTV vaporetti or public water buses. This pier is also used by Alilaguna\'s Blue Line airport boats.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.43323925121151,12.342853429271827],\"visible\":true,\"title\":\"San Zaccaria ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"This is one of several piers at the San Zaccaria ACTV vaporetto (water bus) stop. It\'s also used by Alilaguna Linea Blu or Blue Line airport boats.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.43324989861501,12.342091681911597],\"visible\":true,\"title\":\"San Zaccaria ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"This is one of several piers at the San Zaccaria ACTV vaporetto (water bus) stop.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.43342025679853,12.344103338672767],\"visible\":true,\"title\":\"San Zaccaria ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"This is one of several piers at the San Zaccaria ACTV vaporetto (public water bus) stop.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.44377919731225,12.339366557552466],\"visible\":true,\"title\":\"FONDAMENTE NOVE - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Public water buses of several ACTV lines stop at piers along the Fondamente Nove (Venetian dialect spelling) or Fondamenta Nuove (Italian spelling).\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.44341725201198,12.340321423961768],\"visible\":true,\"title\":\"FONDAMENTE NOVE - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Public water buses of several ACTV lines stop at piers along the Fondamente Nove (Venetian dialect spelling) or Fondamenta Nuove (Italian spelling).\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.44283174734505,12.341163637592445],\"visible\":true,\"title\":\"FONDAMENTE NOVE - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Public water buses of several ACTV lines stop at piers along the Fondamente Nove (Venetian dialect spelling) or Fondamenta Nuove (Italian spelling).\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.43710412671497,12.334779980137],\"visible\":true,\"title\":\"RIALTO - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Rialto stop for ACTV public water buses. (ACTV has several vaporetto piers along the Rialto waterfront.)\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.437412879455756,12.335305693103919],\"visible\":true,\"title\":\"RIALTO - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Rialto stop for ACTV public water buses. (ACTV has several vaporetto piers along the Rialto waterfront.)\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.43747675912224,12.335557820751319],\"visible\":true,\"title\":\"RIALTO - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Rialto stop for ACTV public water buses. (ACTV has several vaporetto piers along the Rialto waterfront.)\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.42631858769788,12.362647530728509],\"visible\":true,\"title\":\"Best Western Premier Hotel Sant\' Elena ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/best-western-premier-sant-elena.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The peaceful Best Western Premier Hotel Sant\'Elena is midway between the Piazza San Marco and the Lido di Venezia (1 stop away by vaporetto). Click the icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43735885207806,12.341324964437831],\"visible\":true,\"title\":\"Hotel Scandinavia ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/scandinavia.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Scandinavia *** is worth the walk from the airport boat\'s San Zaccaria stop to the Campo Santa Maria Formosa. Click the \\\"H\\\" icon for hotel details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.437238712519864,12.341467317745582],\"visible\":true,\"title\":\"Hotel Palazzo Vitturi ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/palazzo-vitturi.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Palazzo Vitturi *** occupies the piano nobile of a 13th Century palazzo on the Campo Santa Maria Formosa. Click the \\\"H\\\" icon for photos, reviews, and rates.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43784004243746,12.340665580894097],\"visible\":true,\"title\":\"Ruzzini Palace Hotel ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/ruzzini-palace.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The 28-room Ruzzini Palace Hotel **** is a noble family\'s palazzo that has been restored beautifully as a stylish boutique hotel. Click \\\"H\\\" for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.431053405832586,12.333599741458784],\"visible\":true,\"title\":\"Hotel Centurion Palace *****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/centurion-palace.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Centurion Palace ***** is a rarity in Venice: a palazzo on the Grand Canal that blends Venetian Gothic architecture with contemporary interior design. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43588516280953,12.344517127329368],\"visible\":true,\"title\":\"Liassidi Palace ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/small-luxury-hotels-of-the-world/venice/hotel-liassidi-palace/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"The Liassidi Palace **** is 5 minutes from St. Mark\'s Basilica, in a quiet neighborhood facing a canal. To learn about this elegant boutique hotel, click the \\\"H\\\" icon.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4371765578767,12.339396087643877],\"visible\":true,\"title\":\"Hotel Da Bruno ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/hotel-da-bruno/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Da Bruno *** is a family-owned hotel with free Wi-Fi. It\'s next door to our favorite gelateria in Venice. (Click the \\\"H\\\" icon for more information.)\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43908760128928,12.345487384316698],\"visible\":true,\"title\":\"Alloggi Barbaria\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/inns/venice/inn-alloggi-barbaria/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Alloggi Barbariais a bit out of the way, but it\'s inexpensive and offers free Wi-Fi. The manager publishes a nice blog about Venice. Click the icon for details about this tiny inn.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"39\",\"options\":{\"position\":[45.44053074079732,12.333953258546103],\"visible\":true,\"title\":\"CA\' D\'ORO - ACTV vaporetto stop\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-vaporetto-water-buses.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Ca\' d\'Oro is a stop on ACTV\'s No. 1 vaporetto route up and down the Grand Canal.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44162727111022,12.335356053860892],\"visible\":true,\"title\":\"Palazzo Abadessa ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/palazzo-abadessa.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Palazzo Abadessa **** is a boutique hotel that attracts an international clientele. It has a private landing for water taxis. Click \\\"H\\\" for more information.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.440046344406646,12.33652281478237],\"visible\":true,\"title\":\"Hotel Antico Doge ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/hotel-antico-doge/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Antico Doge *** is a 13th Century palace on the main walking route between the railroad station, the Rialto Bridge, and the Piazza San Marco. Click \\\"H\\\" icon for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.4404908181751,12.334731099160422],\"visible\":true,\"title\":\"Hotel Foscari Palace ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/hotel-foscari-palace/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Foscari Palace **** is on the Grand Canal near Ca\' d\'Oro. Amenities include a roof terrace and free Wi-Fi. Click the \\\"H\\\" icon for photos, rates, and reviews.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43838237516463,12.328186509164084],\"visible\":true,\"title\":\"Locanda Sant\'Agostin\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/inns/venice/locanda-sant-agostin/?ref=6011\",\"target\":\"_blank\"},\"infoWindow\":{\"options\":{\"content\":\"Locanda Sant\'Agostincan be tricky to find, but the B&B is in an authentic Venetian neighborhood within walking distance of the train station. Click \\\"H\\\" for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43569894445814,12.343516674788702],\"visible\":true,\"title\":\"Hotel Ai Due Principi ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/hotel-ai-due-principi/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Ai Due Principi **** is a boutique hotel inland from the San Zaccaria airport-boat stop, on a canal not far from the Piazza San Marco. Click \\\"H\\\" for details.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.43589857423934,12.34350728705715],\"visible\":true,\"title\":\"Hotel Palazzo Priuli ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://www.venere.com/hotels/venice/hotel-palazzo-priuli/?ref=6011\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Palazzo Priuli **** is a restored 14th Century palace alongside two canals. It\'s close to the San Zaccaria airport-boat stop. Click \\\"H\\\" icon for more info.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"23\",\"options\":{\"position\":[45.43761712295988,12.319374111445654],\"visible\":true,\"title\":\"Land Taxis\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/articles/venice-taxis.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Land Taxis to the airport, mainland, and cruise terminals.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44220261047966,12.338971495628357],\"visible\":true,\"title\":\"Locanda Acquavita B&B\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/locanda-acquavita.htm\",\"target\":\"_self\"},\"infoWindow\":{\"options\":{\"content\":\"Locanda Acquavita B&B is 1 bridge from the Alilaguna airport boat\'s Fondamente Nove stop.\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.44363661074263,12.326370477676392],\"visible\":true,\"title\":\"Hotel Alle Guglie ***\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/alle-guglie-hotel.htm\",\"target\":\"_blank\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Alle Guglie ***\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"},{\"iconid\":\"62\",\"options\":{\"position\":[45.441425095354816,12.331119328737259],\"visible\":true,\"title\":\"Hotel Palazzo Giovanelli e Gran Canal ****\"},\"event\":{\"click\":{\"navigate\":{\"href\":\"http://europeforvisitors.com/venice/directions/palazzo-giovanelli.htm\",\"target\":\"_blank\"},\"infoWindow\":{\"options\":{\"content\":\"Hotel Palazzo Giovanelli e Gran Canal ****\",\"maxWidth\":\"0\"}}}},\"catID\":\"-1\"}],\"labels\":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,{\"options\":{\"position\":[45.438271787885256,12.318581213255243],\"visible\":true,\"clickable\":true,\"title\":\"Piazzale Roma\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"},null,{\"options\":{\"position\":[45.44132144290509,12.32083560993226],\"visible\":true,\"clickable\":true,\"title\":\"Train Station (Ferrovia)\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"},{\"options\":{\"position\":[45.43891198037959,12.319614127689988],\"visible\":true,\"clickable\":true,\"title\":\"Calatrava Bridge\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"},{\"options\":{\"position\":[45.441122029672364,12.322467998081834],\"visible\":true,\"clickable\":true,\"title\":\"Scalzi Bridge\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"},null,{\"options\":{\"position\":[45.43898589362244,12.30990989547422],\"visible\":true,\"clickable\":true,\"title\":\"Marittima Cruise Terminals\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"},null,null,{\"options\":{\"position\":[45.44228870145613,12.306300983244682],\"visible\":true,\"clickable\":true,\"title\":\"Tronchetto Parking Garage\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"},{\"options\":{\"position\":[45.44690289400083,12.308521852309013],\"visible\":true,\"clickable\":true,\"title\":\"Ponte della Libertà\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"},null,null,{\"options\":{\"position\":[45.429660812593404,12.32041964633595],\"visible\":true,\"clickable\":true,\"title\":\"Giudecca Canal\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"},null,null,null,null,{\"options\":{\"position\":[45.431013102509134,12.320205069614758],\"visible\":true,\"clickable\":true,\"title\":\"San Basilio Cruise Terminal\",\"border\":\"1\",\"bordercolor\":\"#000000\",\"bg\":\"#FFFFFF\",\"font_color\":\"#000000\",\"font_size\":\"18\"},\"event\":{},\"catID\":\"-1\"}],\"images\":[],\"polylines\":[],\"polygons\":[],\"rectangles\":[],\"circles\":[],\"kmlfiles\":[],\"routes\":[],\"catlegendenable\":false,\"catlegend\":[],\"legends\":[{\"items\":[]},null],\"lang\":\"\",\"clustering\":false,\"clustering_gridsize\":\"40\",\"clustering_maxzoom\":\"12\",\"clustering_click\":\"\",\"datalist\":{\"position\":\"1\",\"height\":\"300\",\"width\":\"230\",\"showmarkers\":\"-1\"},\"savetime\":\"2013-4-9 11:3:55\"}"); // test 3 0000-00-00 00:00:00 30339 // qoute test 0 17642