Created
January 31, 2017 14:51
-
-
Save badpenguin/3fb1cd5d41b110569505e2d398c74f1b to your computer and use it in GitHub Desktop.
Angular2/Ionic2 Helper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import {$log} from "./$log"; | |
import {jsObjectPrettyPrint} from "./js-object-pretty-print"; | |
/** | |
* try to avoid circular references | |
* @param obj | |
* @returns {string} | |
*/ | |
export function jStringify(obj) { | |
return jsObjectPrettyPrint(obj); | |
} | |
/** | |
* programmatically open external browser | |
* @param url | |
*/ | |
export function openExternal(url) { | |
$log.debug('openExternal',url); | |
window.open( url, '_system', 'location=yes'); | |
return; | |
} | |
/** | |
* Simple transparent image | |
*/ | |
export const TRANSPARENT_GIF = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; | |
export const BLACK_GIF = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='; | |
export function to_radians(degrees:number): number { | |
return degrees * Math.PI / 180; | |
} | |
/** | |
* | |
* @param lat1 | |
* @param lon1 | |
* @param lat2 | |
* @param lon2 | |
* @returns {number} metri | |
*/ | |
export function approximate_distance(lat1:number,lon1:number,lat2:number,lon2:number): number { | |
let x = to_radians(lon2 - lon1) * Math.cos( to_radians(lat2+lat1)/2 ); | |
let y = to_radians(lat2 - lat1); | |
return 6371 * 1000 * Math.sqrt( (x*x) + (y*y) ); | |
} | |
// TODO to be tested | |
function geo_distance(lat1:number,lon1:number,lat2:number,lon2:number): number { | |
let R = 6378137; | |
let dLat = to_radians(lat2 - lat1); | |
let dLong = to_radians(lon2 - lon1); | |
let rlat1 = to_radians(lat1); | |
let rlat2 = to_radians(lat2); | |
let a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + | |
Math.cos(rlat1) * Math.cos(rlat2) * | |
Math.sin(dLong/2) * Math.sin(dLong/2); | |
let c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); | |
return R * c; | |
} | |
export function AgxGetImage(url): Promise<HTMLImageElement>{ | |
return new Promise(function(resolve, reject){ | |
let img = new Image(); | |
img.onload = function(){ | |
resolve(img); | |
}; | |
img.onerror = function(err){ | |
$log.error('AgxGetImage', err); | |
reject(err) | |
}; | |
img.src = url; | |
}); | |
} | |
export function AgxGetImageDataUrl(url): Promise<string>{ | |
return new Promise(function(resolve, reject){ | |
let img = new Image(); | |
img.onload = function(){ | |
$log.debug('img load ok', url); | |
let canvas = document.createElement('canvas'); | |
canvas.width = img.width; | |
canvas.height = img.height; | |
let ctx = canvas.getContext("2d"); | |
ctx.drawImage(img, 0, 0); | |
try{ | |
let data = canvas.toDataURL(); | |
return resolve(data); | |
}catch(e){ | |
$log.error('AgxGetImageDataUrl Exception',e); | |
return reject(e); | |
} | |
}; | |
img.onerror = function(err){ | |
return reject(err) | |
}; | |
// start | |
img.setAttribute('crossOrigin', 'anonymous'); | |
img.src = url; | |
}); | |
} | |
export function DateFromItalian(d:string): Date { | |
if (!d || d=='') return null; | |
let parts = d.split("/"); | |
return new Date( | |
parseInt(parts[2], 10), | |
parseInt(parts[1], 10)-1, | |
parseInt(parts[0], 10) | |
); | |
} | |
export function DateToIsoString(d:Date):string { | |
if (!d) return null; | |
let mn: number = d.getMonth()+1; | |
let ms: string = mn<10 ? ('0'+mn) : mn.toString(); | |
let dn: number = d.getDate(); | |
let ds: string = dn<10 ? ('0'+dn) : dn.toString(); | |
return d.getFullYear()+'-'+ms+'-'+ds; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment