LocaPoint Encode/Decode sample code

�@

1. C++

Deocde

int LocaPoint2LatLon(double* latidude, double* longitude, char* locapoint)
{
    *latidude = ((double)(
                                ((int)(locapoint[0]) - 65) * 1757600
                                +((int)(locapoint[1]) - 65) * 67600
                                +((int)(locapoint[2]) - 48) * 6760
                                +((int)(locapoint[8]) - 65) * 260
                                +((int)(locapoint[9]) - 65) * 10
                                +((int)(locapoint[10]) - 48) )
                                * 180 / 45697600 -90);
    *longitude = ((double)(
                                ((int)(locapoint[4]) - 65) * 1757600
                                +((int)(locapoint[5]) - 65) * 67600
                                +((int)(locapoint[6]) - 48) * 6760
                                +((int)(locapoint[12]) - 65) * 260
                                +((int)(locapoint[13]) - 65) * 10
                                +((int)(locapoint[14]) - 48) )
                                * 360 / 45697600 -180);
    return(0);
}

Encode

int LatLon2LocaPoint(double* latitude, double* longitude, char* locapoint)
{
    double latitude_step = (*latitude +90)/180*45697600;
    double longitude_step = (*lonitude + 180)/360*45697600;

    locapoint[0] = (char)(latitude_step/1757600%26 + 65);
    locapoint[1] = (char)(latitude_step/67600%26 + 65);
    locapoint[2] = (char)(latitude_step/6760%10 + 48);
    locapoint[3] = '.';
    locapoint[4] = (char)(longitude_step/1757600%26 + 65);
    locapoint[5] = (char)(longitude_step/67600%26 + 65);
    locapoint[6] = (char)(longitude_step/6760%10 + 48);
    locapoint[7] = '.';
    locapoint[8] = (char)(latitude_step/260%26 + 65);
    locapoint[9] = (char)(latitude_step/10%26 + 65);
    locapoint[10] = (char)(latitude_step/1%10 + 48);
    locapoint[11] = '.';
    locapoint[12] = (char)(longitude_step/260%26 + 65);
    locapoint[13] = (char)(longitude_step/10%26 + 65);
    locapoint[14] = (char)(longitude_step/1%10 + 48);
    locapoint[15] = '\0' ;

    return (0) ;
}

2.JavaScript

Decode

function LocaPoint2LatLon(locapoint){
    var location = new Object();

    location.latitude =(
                            (locapoint.charCodeAt(0)-65)*1757600
                          +(locapoint.charCodeAt(1)-65)*67600
                          +(locapoint.charCodeAt(2)-48)*6760
                          +(locapoint.charCodeAt(8)-65)*260
                          +(locapoint.charCodeAt(9)-65)*10
                          +(locapoint.charCodeAt(10)-48)*1
                          )*180/45697600-90;

    location.longitude = (
                            (locapoint.charCodeAt(4)-65)*1757600
                          +(locapoint.charCodeAt(5)-65)*67600
                          +(locapoint.charCodeAt(6)-48)*6760
                          +(locapoint.charCodeAt(12)-65)*260
                          +(locapoint.charCodeAt(13)-65)*10
                          +(locapoint.charCodeAt(14)-48)*1
                          )*360/45697600-180);
    return(location);
}

Encode

function LatLon2LocaPoint(location){
    var latitude_step = (location.latitude + 90)/180*45697600;
    var longitude_step = (location.longitude + 180)/360*45697600;

    var locapoint = String.fromCharCode(
                                                     latitude_step/1757600%26 + 65,
                                                     latitude_step/67600%26 + 65,
                                                     latitude_step/6760%10 + 48,
                                                     46,
                                                     longitude_step/1757600%26 + 65,
                                                     longitude_step/67600%26 + 65,
                                                     longitude_step/6760%10 + 48,
                                                     46,
                                                     latitude_step/260%26 + 65,
                                                     latitude_step/10%26 + 65,
                                                     latitude_step/1%10 + 48,
                                                     46,
                                                     longitude_step/260%26 + 65,
                                                     longitude_step/10%26 + 65,
                                                     longitude_step/1%10 + 48
                                                     );
    return(locapoint);
}
�@

3. Visual Basic

Decode

Function LocaPoint2Latitude(ByVal locapoint As String) As Double
	Dim Lat_10 As Double
	Lat_10 	= CLng(Asc(Mid(locapoint, 1, 1)) - 65) * 1757600 _
		+ CLng(Asc(Mid(locapoint, 2, 1)) - 65) * 67600 _
		+ CLng(Mid(locapoint, 3, 1)) * 6760 _
		+ CLng(Asc(Mid(locapoint, 9, 1)) - 65) * 260 _
		+ CLng(Asc(Mid(locapoint, 10, 1)) - 65) * 10 _
		+ CLng(Mid(locapoint, 11, 1))
	LocaPoint2Latitude = (Lat_10 * 180 / 45697600) - 90
End Function

Function LocaPoint2Longitude(ByVal locapoint As String) As Double
	Dim Lon_10 As Double
	Lon_10 	= CLng(Asc(Mid(locapoint, 5, 1)) - 65) * 1757600 _
		+ CLng(Asc(Mid(locapoint, 6, 1)) - 65) * 67600 _
		+ CLng(Mid(locapoint, 7, 1)) * 6760 _
		+ CLng(Asc(Mid(locapoint, 13, 1)) - 65) * 260 _
		+ CLng(Asc(Mid(locapoint, 14, 1)) - 65) * 10 _
		+ CLng(Mid(locapoint, 15, 1))
	LocaPoint2Longitude = (Lon_10 * 360 / 45697600) - 180
End Function

Encode

Function LatLon2LocaPoint(ByVal latitude As Double, ByVal longitude As Double) As String
	Dim Lat_10 As Double
	Dim Lon_10 As Double
	Dim Lat_A(6) As Long
	Dim Lon_A(6) As Long

	'for boundary
	if latitude = 90 then latitude = 89.999998
	if longitude = 180 then longitude = 0

	'(-90 to 89.999998)   -> (0 to 45697600)
	Lat_10 = CLng((CDbl(latitude) + 90) * 45697600 / 180)
	
	'(-180 to 179.999996) -> (0 to 45697600)
	Lon_10 = CLng((CDbl(longitude) + 180) * 45697600 / 360)

	
	Lat_A(6) = Int(Lat_10 / 1757600)
	Lat_10 = Lat_10 - Lat_A(6) * 1757600
	Lat_A(5) = Int(Lat_10 / 67600)
	Lat_10 = Lat_10 - Lat_A(5) * 67600
	Lat_A(4) = Int(Lat_10 / 6760)
	Lat_10 = Lat_10 - Lat_A(4) * 6760
	Lat_A(3) = Int(Lat_10 / 260)
	Lat_10 = Lat_10 - Lat_A(3) * 260
	Lat_A(2) = Int(Lat_10 / 10)
	Lat_10 = Lat_10 - Lat_A(2) * 10
	Lat_A(1) = Int(Lat_10)

	Lon_A(6) = Int(Lon_10 / 1757600)
	Lon_10 = Lon_10 - Lon_A(6) * 1757600
	Lon_A(5) = Int(Lon_10 / 67600)
	Lon_10 = Lon_10 - Lon_A(5) * 67600
	Lon_A(4) = Int(Lon_10 / 6760)
	Lon_10 = Lon_10 - Lon_A(4) * 6760
	Lon_A(3) = Int(Lon_10 / 260)
	Lon_10 = Lon_10 - Lon_A(3) * 260
	Lon_A(2) = Int(Lon_10 / 10)
	Lon_10 = Lon_10 - Lon_A(2) * 10
	Lon_A(1) = Int(Lon_10)

	LatLon2LocaPoint = _
				Chr(CLng(Lat_A(6) + 65)) & _
				Chr(CLng(Lat_A(5) + 65)) & _
				Chr(CLng(Lat_A(4) + 48)) & _
				"." & _
				Chr(CLng(Lon_A(6) + 65)) & _
				Chr(CLng(Lon_A(5) + 65)) & _
				Chr(CLng(Lon_A(4) + 48)) & _
				"." & _
				Chr(CLng(Lat_A(3) + 65)) & _
				Chr(CLng(Lat_A(2) + 65)) & _
				Chr(CLng(Lat_A(1) + 48)) & _
				"." & _
				Chr(CLng(Lon_A(3) + 65)) & _
				Chr(CLng(Lon_A(2) + 65)) & _
				Chr(CLng(Lon_A(1) + 48))
	
End Function


�@

�@