http://www.google.com/lochp?hl=en&tab=wl&q=33.4155763733%2C-86.7390106627 http://www.google.com/lochp?hl=en&tab=wl&q=33.4155763733%2C-86.7390106627&t=k You can specify both zoom and lat/long in the query string... The parameter for zoom is simply "z".. so: http://maps.google.com/?sll=37.616%2C-115.816&z=10 You can put latitude and longitude of any place in the world this way: http://maps.google.com/maps?q=&ll=latitude_here,longitude_here&spn=0.043259,0.061455&t=k&hl=en You can actually do all kinds of neat stuff with the URLs for Google maps other than just embed the lat and lon. Here is a sample URL: http://maps.google.com/maps?q=45.895638+-66.589333+(Capital+City+Paintball)&spn=0.05,0.05&hl=en&t=0&iwloc=A and here are the parts: lat and lon: q=45.895638+-66.589333 Comment for info window: (Capital+City+Paintball) Zoom Level (width of map): &spn=0.05,0.05 language of map (en=english, fr=french): &hl=en map type (0=street map, k=satellite, h=hybrid): &t=0 Info window status (A=open, B=closed): &iwloc=A One hack to get google maps to display a marker at a given latitude and longitude is to ask google for driving directions with from and to being the same place: http://maps.google.com/?q=from+40.09086%2c-82.95061+to+40.09086%2c-82.95061 ----------------------------------------------------------- So, after hours of coding and scouring the google source code...here is the code for getting the latest coordinates for the tiles based on lat & lon: first we need to fill a few arrays c = 256 for (d=17;d>=0;--d) { pixelsPerLonDegree[d] = c / 360 pixelsPerLatDegree[d] = c * (2 * Math.Pi) e = c / 2 bitmapOrigin[d] = New Point(e,e) c*=2 } after we fill this we can get the coordinates by plugging in d = New Point(0,0) d.X = Math.Floor(bitmapOrigin[zoom].x + lon * pixelsPerLonDegree[zoom]) e = Math.Sin(x * (Math.Pi/180)) if (e > .9999) e = .9999 if (e < -.9999) e = -.9999 d.Y = Math.Floor(bitmapOrigin[zoom].y + .5 * Math.Log((1+e) / (1-e)) * -pixelsPerLonRadian[zoom]) d.X = Math.Floor(d.x / 256) //tileSize d.Y = Math.Floor(d.y / 256) d.X = the bitmaps X value, d.Y = bitmaps Y value //sorry e = Math.Sin(x * (Math.Pi/180) shoudl read... e = Math.Sin(lat * (Math.PI / 180)) --- It works if you change the address form: http://mt.google.com/mt?v=.1&x=1034&y=35&zoom=4 To this: http://mt.google.com/mt?v=.3&x=1034&y=35&zoom=4 I only change the 'v' value. I think the v is the version. --- While I was searching for program like mine I found a lot of requests for function converts latitude and longitude to image number for kh.google.com. I was surprised, because it's trivial (please do not comment my style, I knowingly write "easy to read" code here): sub latlon2xy { my $x = shift; my $y = shift; my $zoom = shift; my $divx = 2**($zoom-1); my $divy = 2**$zoom; my $stepx = 360 / $divx; my $stepy = 720 / $divy; my $vx = (180 + $x)/$stepx + $divy/2; my $vy = (180 + $y)/$stepy; return sprintf("%.0f", $vy), sprintf("%.0f", $vx); } ---