// Please leave the link below with the source code, thank you.
// http://www.websmithing.com/portal/Programming/tabid/55/articleType/ArticleView/articleId/6/Google-Map-GPS-Cell-Phone-Tracker-Version-2.aspx
using System;
using System.Configuration;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Net;
using System.Text;
using System.Data.SqlClient;
public partial class GetGoogleMap2 : System.Web.UI.Page {
private MemoryStream stream = null;
private Image image = null;
//private string key = "ABQIAAAAQ35Hu3xqOoeD50UMgBW0cBQEt3eA6mol2Np5q6SKw0EDVXpM9hRExX__LZW3RbLXHuLKZlwC0oypOw"; // websmithing
private string url = "http://maps.google.com/staticmap";
private string height;
private string width;
private string latitude;
private string longitude;
private string zoom;
protected void Page_Load(object sender, EventArgs e) {
height = Request.QueryString["h"];
width = Request.QueryString["w"];
latitude = Request.QueryString["lat"];
longitude = Request.QueryString["lng"];
zoom = Request.QueryString["zm"];
string mph = Request.QueryString["mph"];
string direction = Request.QueryString["dir"];
string distance = Request.QueryString["dis"];
string date = Server.UrlDecode(Request.QueryString["dt"]);
// convert to DateTime format
date = getDateFromJavaDate(date);
string locationMethod = Server.UrlDecode(Request.QueryString["lm"]);
string phoneNumber = Request.QueryString["pn"];
string sessionID = Request.QueryString["sid"];
string accuracy = Request.QueryString["acc"];
string locationIsValid = Request.QueryString["iv"];
string extraInfo = Request.QueryString["info"];
// our helper class to update the database
DbWriter dbw = new DbWriter();
try {
// update the database with our GPS data from the phone
dbw.updateDB("prcSaveGPSLocation2",
new SqlParameter("@lat", latitude),
new SqlParameter("@lng", longitude),
new SqlParameter("@mph", mph),
new SqlParameter("@direction", direction),
new SqlParameter("@distance", distance),
new SqlParameter("@date", date),
new SqlParameter("@locationMethod", locationMethod),
new SqlParameter("@phoneNumber", phoneNumber),
new SqlParameter("@sessionID", sessionID),
new SqlParameter("@accuracy", accuracy),
new SqlParameter("@locationIsValid", locationIsValid),
new SqlParameter("@extraInfo", extraInfo));
image = getMap();
// here we take our Google map image and send it out as a .png
// all phones handle png images
stream = new MemoryStream();
image.Save(stream, ImageFormat.Png);
Response.ContentType = "image/png";
stream.WriteTo(Response.OutputStream);
Response.Flush();
}
catch (Exception ex) {
Response.Write(ex.Message);
}
finally {
if (stream != null) {
stream.Dispose();
}
if (image != null) {
image.Dispose();
}
}
}
// using the parameters from the phone, build a url string and get the Google map image
private Image getMap() {
try {
StringBuilder sb = new StringBuilder(url);
sb.Append("?markers=");
sb.Append(latitude);
sb.Append(",");
sb.Append(longitude);
sb.Append(",blueu&zoom=");
sb.Append(zoom);
sb.Append("&size=");
sb.Append(width.ToString());
sb.Append("x");
sb.Append(height.ToString());
sb.Append("&maptype=mobile&key=");
sb.Append(GetGoogleMapKey());
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(sb.ToString());
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Stream stream = WebResp.GetResponseStream();
Image image = Image.FromStream(stream);
stream.Close();
return image;
}
catch (Exception e) {
throw new Exception(e.Message);
}
}
// parse the date string coming from the phone and convert it to a .net DateTime format
private string getDateFromJavaDate(string date) {
StringBuilder sb;
if (date.IndexOf("G") > 0) // GMT time
{
sb = new StringBuilder(date.Substring(0, date.IndexOf("G")));
}
else if (date.IndexOf("U") > 0) // UTC time
{
sb = new StringBuilder(date.Substring(0, date.IndexOf("U")));
}
else {
sb = new StringBuilder(date);
}
sb.Append(date.Substring(date.Length - 4, 4));
DateTime dt = DateTime.ParseExact(sb.ToString(), "ddd MMM dd HH:mm:ss yyyy",
System.Globalization.CultureInfo.InvariantCulture);
return dt.ToString();
}
private string GetGoogleMapKey() { // stored in web.config
return ConfigurationManager.AppSettings["GoogleMapKey"];
}
}