Skip to content

Instantly share code, notes, and snippets.

@badpenguin
Created January 31, 2017 14:51
Show Gist options
  • Save badpenguin/3fb1cd5d41b110569505e2d398c74f1b to your computer and use it in GitHub Desktop.
Save badpenguin/3fb1cd5d41b110569505e2d398c74f1b to your computer and use it in GitHub Desktop.
Angular2/Ionic2 Helper
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