/** * */ var table; var star = []; var chainageMarkers = []; var chainageDataTables = []; var summaryData; var infoWindows = []; var TYPE_EXIT = -1; var TYPE_END = -2; var TYPE_ENTER = 1; var TYPE_START = 2; var lag; var fetchLength; var buildingHeight; var averagingDist; var lagCircle, fetchCircle; /** * Draws the compass/ star on map once result in from getFetchs. * @param map * @param resp */ function drawStar(map, resp) { // Remove old star lines star.forEach(function (line) { line.setMap(null); }); star = []; // Remove old chainage makrers chainageMarkers.forEach(function (marker) { marker.setMap(null); }); chainageMarkers = []; // Remove old chainage info windows infoWindows.forEach(function (iw) { iw.setMap(null); }); infoWindows = []; resp.items.forEach(function (fetch) { var path = [ {lat: fetch.chainageline.start[1], lng: fetch.chainageline.start[0]}, {lat: fetch.chainageline.end[1], lng: fetch.chainageline.end[0]} ]; var line = new google.maps.Polyline({ strokeColor: '#000000', strokeOpacity: 0.75, strokeWeight: 1, path: path }); star.push(line); if (fetch.coords) { fetch.coords.forEach(function (fetchcoord) { if (fetchcoord.type != TYPE_END && fetchcoord.type != TYPE_START) { var ch = getReadableChainage(fetchcoord); var x = getReadableCategory(fetchcoord); var defined = x[0]; var cat = x[1]; var type = getReadableType(fetchcoord); var marker = new google.maps.Marker({ position: {lat: fetchcoord.y, lng: fetchcoord.x}, draggable: false, icon: { path: circlePath(0,0,3), scale: 1, strokeColor: '#000000', fillColor: terrainColors[cat], fillOpacity: 1, strokeWeight: 1 } }); var contentString = '
' + '
' + '

Chainage: ' + ch + ' m

' + '

Category: ' + cat + '

' + '

Type: ' + type + '

' + '
' + '
'; chainageMarkers.push(marker); var infowindow = new google.maps.InfoWindow({ content: contentString }); infoWindows.push(infowindow); // if cursoe hovers over marker, show soe details in an infobox marker.addListener('mouseover', function () { infoWindows.forEach(function (iw) { if (iw == infowindow) { infowindow.open(map, marker); } else { iw.setMap(null); } }) }); marker.addListener('mouseout', function () { infoWindows.forEach(function (iw) { iw.setMap(null); }) }); } }); } else { // end of if fetch.coords //TODO } }); var bounds = new google.maps.LatLngBounds(); // Comoir star lines to map star.forEach(function (line) { var path = line.getPath(); for (var i = 0; i < path.length; i++) { var points = new google.maps.LatLng(path.getAt(i).lat(), path.getAt(i).lng()); bounds.extend(points); } line.setMap(map); map.fitBounds(bounds); }); if (chainageMarkers.length > 0) { // commit chainage markers to map chainageMarkers.forEach(function (m) { m.setMap(map); }); } } /** * Circle path in SVG notation. * @param cx * @param cy * @param r * @returns {string} */ function circlePath(cx, cy, r){ return 'M '+cx+' '+cy+' m -'+r+', 0 a '+r+','+r+' 0 1,0 '+(r*2)+',0 a '+r+','+r+' 0 1,0 -'+(r*2)+',0'; } function makeMzTables(resp) { chainageDataTables.forEach(function (table) { table = null; }); chainageDataTables = []; // Summary data here. summaryData = new google.visualization.DataTable(); summaryData.addColumn('string', 'Direction'); summaryData.addColumn('number', 'Bearing'); summaryData.addColumn('number', 'Mz'); resp.items.forEach(function (item) { var data = new google.visualization.DataTable(); var formattedBearing = intFormatter.format(item.chainageline.bearingDegrees); var direction = item.chainageline.direction data.setTableProperty('bearing', formattedBearing); data.setTableProperty('length', item.chainageline.length); data.setTableProperty('direction', direction); data.setTableProperty('mz_latex', item.terrainMultiplier.multiplier.latex); var multiplier; if (!item.terrainMultiplier.multiplier.value || item.terrainMultiplier.multiplier.value<0){ multiplier = "Error" } else { multiplier = two_dpFormatter.format(item.terrainMultiplier.multiplier.value); } data.setTableProperty('mz', multiplier); if (item.terrainMultiplier.lag && item.terrainMultiplier.lag.value>0){ lag = item.terrainMultiplier.lag; } if (item.terrainMultiplier.length && item.terrainMultiplier.length.value>0){ fetchLength = item.terrainMultiplier.length; } if (item.terrainMultiplier.height && item.terrainMultiplier.height.value>0){ buildingHeight = item.terrainMultiplier.height; } if (item.terrainMultiplier.xavg && item.terrainMultiplier.xavg.value>0){ averagingDist = item.terrainMultiplier.xavg; } if (item.coords) { data.addColumn('number', 'Chainage'); data.addColumn('boolean', 'Ok'); data.addColumn('number', 'Cat'); data.addColumn('number', 'Type'); item.coords.forEach(function (fetchcoord) { var ch = getReadableChainage(fetchcoord); var cat, defined; if (fetchcoord.cat <= 0) { defined = false; cat = "Data incomplete"; } else { defined = true; if (Math.floor(fetchcoord.cat) == fetchcoord.cat) { cat = intFormatter.format(fetchcoord.cat); } else { cat = one_dpFormatter.format(fetchcoord.cat); } } var type = ""; switch (fetchcoord.type) { case TYPE_END: type = "End point"; break; case TYPE_EXIT: type = "Exit region"; break; case TYPE_ENTER: type = "Enter region"; break; case TYPE_START: type = "Start point"; break; } data.addRows([ [{v: fetchcoord.chainage, f: ch + 'm'}, defined, {v: fetchcoord.cat, f: cat}, { v: fetchcoord.type, f: type }], ]); }); chainageDataTables.push(data); summaryData.addRows([ [ direction, {v: Number(formattedBearing), f: formattedBearing + '°'}, Number(multiplier) ] ]); } }); chainageDataTables.sort(function (a,b) { var ba = a.getTableProperty('bearing'); var bb = b.getTableProperty('bearing'); return ba-bb; }) } function drawLagCircle(position){ if (lagCircle){ lagCircle.setMap(null); } lagCircle = new google.maps.Circle({ strokeColor: '#FF0000', strokeOpacity: 0, strokeWeight: 1, fillColor: '#FF0000', fillOpacity: 0.2, map: map, center: position, radius: lag }); } function drawFetchCircle(position){ if (fetchCircle){ fetchCircle.setMap(null); } fetchCircle = new google.maps.Circle({ strokeColor: '#444444', strokeOpacity: 0.5, strokeWeight: 1, fillOpacity: 0, map: map, center: position, radius: fetchLength }); } function drawMzGeneral(parentDiv){ if (lag>0){ drawLagCircle(startMarker.getPosition()); } if (fetchLength>0){ drawFetchCircle(startMarker.getPosition()); } parentDiv.innerHTML = 'Building height: ' + delimitMathJax(buildingHeight.latex,true) + '
'+ 'Lag distance: ' + delimitMathJax(lag.latex,true) + '
'+ 'Averaging distance: ' + delimitMathJax(averagingDist.latex,true) + '
'+ 'Total fetch distance: ' + delimitMathJax(fetchLength.latex,true) + ' '; MathJax.Hub.Queue(["Typeset", MathJax.Hub, parentDiv]); } function drawMzSummaryTable(parentDiv){ $('#divTables').hide(); // remove old tables & meta data while (parentDiv.hasChildNodes()) { parentDiv.removeChild(parentDiv.lastChild); } //Make new data table for fetch data var divToAdd = document.createElement('div'); divToAdd.className += 'mz-summary-table'; var table = new google.visualization.Table(divToAdd); table.draw(summaryData, { showRowNumber: false, width: '100%', height: '100%', alternatingRowStyle: true, sortColumn: 1, sortAscending: true, allowHtml: true }); parentDiv.appendChild(divToAdd); $('#divTables').show(); } function drawMzTables(resp, parentDiv){ // remove old tables & meta data while (parentDiv.hasChildNodes()) { parentDiv.removeChild(parentDiv.lastChild); } for (var i=0; i '+ 'Bearing: ' + bearing + '° ' + 'Mz,cat' + mz + ' ' ; //Make new data table for fetch data var divToAdd2 = document.createElement('div'); divToAdd2.id = divId; divToAdd2.className += 'fetch-table'; var table = new google.visualization.Table(divToAdd2); table.draw(data, {showRowNumber: false, width: '100%', height: '100%'}); // Shows maths var divToAddMath = document.createElement('div'); divToAddMath.innerHTML=delimitMathJax(maths,false); parentDiv.appendChild(divToAdd1); parentDiv.appendChild(divToAdd2); parentDiv.appendChild(divToAddMath); MathJax.Hub.Queue(["Typeset", MathJax.Hub, divToAddMath]); } } function getReadableChainage(fetchcoord){ return fetchcoord.chainage; } function getReadableCategory(fetchcoord){ var defined; var cat; if (fetchcoord.cat <= 0) { defined = false; cat = "Data incomplete"; } else { defined = true; if (Math.floor(fetchcoord.cat) == fetchcoord.cat) { cat = intFormatter.format(fetchcoord.cat); } else { cat = one_dpFormatter.format(fetchcoord.cat); } } return new Array(defined,cat); } function getReadableType(fetchcoord){ var type = ""; switch (fetchcoord.type) { case TYPE_END: type = "End point"; break; case TYPE_EXIT: type = "Exit region"; break; case TYPE_ENTER: type = "Enter region"; break; case TYPE_START: type = "Start point"; break; } return type; }