Dec 26 2009

Decimal Degrees conversion and distance of two points on google map

Category: Google Maps,JavascriptGiulio Pons @ 11:06 pm

Those two functions are usefull when you’re making Google Maps applications:
When you show the coordinates of a point, it’s sometimes better to show them as degrees and not as deciaml (even if decimal is simpler). Each of the two coordinates can be converted with the same function. In the function call the “tipo” is the type of the “v” value: if you call the function without the type, then the default type is “N”, that means “NORTH”, it means that you’re converting a Latitude value (Latitude is the angular distance of a point north or south of the Equator). Values for latitude type are “N” for NORTH and “S” for SOUTH.
If you specify “E” or “W” than you’re converting a Longitude value (Longitude is the angular distance of a point east or west of the Greenwich Meridian).

function convertDecDeg(v,tipo) {
	if (!tipo) tipo='N';
	var deg;
	deg = v;
	if (!deg){
		return "";
	} else if (deg > 180 || deg < 0){
		// convert coordinate from north to south or east to west if wrong tipo
		return convertDecDeg(-v,(tipo=='N'?'S': (tipo=='E'?'W':tipo) ));
	} else {
		var gpsdeg = parseInt(deg);
		var remainder = deg - (gpsdeg * 1.0);
		var gpsmin = remainder * 60.0;
		var D = gpsdeg;
		var M = parseInt(gpsmin);
		var remainder2 = gpsmin - (parseInt(gpsmin)*1.0);
		var S = parseInt(remainder2*60.0);
		return D+"&deg; "+M+"' "+S+"'' "+tipo;
	}
}

This function calculates distance with the Haversine formula, this formula assumes that our Earth is spherical, but it isn’t since it’s more like a big orange fruit also compresses at poles. I’ve read that this function has an error about + o – 3 meters (it depends), but it’s a small error for many purposes, I’ve used it on my google maps ruler:

function distance(lat1,lon1,lat2,lon2) {
	var R = 6371; // km (change this constant to get miles)
	var dLat = (lat2-lat1) * Math.PI / 180;
	var dLon = (lon2-lon1) * Math.PI / 180;
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
		Math.cos(lat1 * Math.PI / 180 ) * Math.cos(lat2 * 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;
	if (d>1) return Math.round(d)+"km";
	else if (d<=1) return Math.round(d*1000)+"m";
	return d;
}
Share

Tags: , , , , , , , ,


Nov 11 2009

PHP Day add function

Category: PhpGiulio Pons @ 3:06 pm

How to add 2 days to a date in PHP?
There are many ways to add days to a string date. The best function is the following one:

function dayadd($days,$date=null , $format="d/m/Y"){
	return date($format,strtotime($days." days",strtotime( $date ? $date : date($format) )));
}

This function let you decide the date to which add the days, the output format and days to add. To use the function look these examples:

echo dayadd(2);  // 2 days after today
echo dayadd(-2,null,"Y-m-d");  // 2 days before today with given format
echo dayadd(3,"12/31/2009");  // 3 days after given date
echo dayadd(3,"12/31/2009","d-m-Y");  // 3 days after given date with given format
Share

Tags: , , ,


Nov 09 2009

Parse a float number in javascript

Category: JavascriptGiulio Pons @ 10:59 pm

This small code parse a javascript float number to a string. It converts the number to a string and let you decide how many decimals use.

It’s very good to change the value of an input box using onfocus or onblur events, for example, when a user input a price.


function parseFloatString (v,d) {
	var x = parseFloat( !v ? 0 : v);
	x = parseFloat( Math.round(  x * Math.pow(10,d)  )  ) / Math.pow(10,d);
	y = x + "";
	if (y.indexOf(".")==-1) y = x + ".";
	var a = y.split(".");
	if (a[1].length < d) for(k=a[1].length;k < d;k++) a[1]+="0";
	y = a[0]+"."+a[1];
	return y;
}
Share

Tags: , ,