/**
*
*/
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;
}