Posts Tagged street view

Google street view dissection

I felt like working out how google street view does its stuff today – so here goes!

Here’s the image of the street view interface we’re dealing with

Street View web page

Time to open up wireshark and see how it gets these images!

Looks like there’s lots of tile requests to the server at cbk2.google.com

GET /cbk?output=tile&zoom=3&x=4&y=1&cb_client=maps_sv&fover=2&onerr=3&v=4&panoid=0JTH3YvHt93HUiWezPIRhgHTTP/1.1\r\n

Pats of interest are the zoom, x, y, and panoid tags. I presume x and y are the tile locations in the entire panorama and zoom is the zoom level (0 to 3 in this case). panoid must be a specific identifier for the street view image you’re looking at.

putting this into a browser retrieves this tile


sv tile 1
click image to go to the google version

Nice! now for a play – Lets change the x and y values to (0,0)


street view tile at (0,0) zoom 3

mmm.. don’t know where that is. Lets look down a little at (0,1)


street view tile 0,0

ahh! There’s something interesting. Still, 0 on the x axis doesn’t seem to be “forward”. Lets look at the tile to the left which is at (6,1)


street view tile at 6,1

That explains it… Looks like there’s some overlap at the join. And – taking a closer look at this tile shows that the join is actually on the “back” of the image (as it was captured) because there’s a one way arrow on the ground. Perhaps tile 0 is actually aligned to west? Not sure on this one.

Ok, time to play with zoom. Here’s zoom=4 at (0,0)


street view zoom 4

A value of 4 doesn’t seem to work. It just gives a black tile. I think that’s because this area (in Perth WA) was only covered at a fairly low resolution this time around (it looks like they used ladybug2 cameras for this pass).

Well, here’s zoom = 2 at (0,0) then


sv7

That’s more like it. Interestingly, the join point on the x axis is still the same (i.e. the left of tile 0).

Now for zoom =1


street view zoom=1

and zoom=0


street view zoom=0

So there we go.

Just for fun I stitched all the zoom=1 tiles to generate this

street view zoom=2 stitched

Definitely looks like a Equirectangular_Projection

Out of interest I thought I’d also estimate the total size for each full sized image to be about 750kB. This assumes a tile size of 32kB, 21 full tiles and 7 quarter tiles at the bottom. Say that’s 1MB per image including the lower scales, multiplied by the number of streetview images over the world…. equals a lot!

, , ,

No Comments

Google Latitude + GoogleCar

Everyone has heard about Latitude by now. “See your friends’ locations and status messages and share yours with them.”

Ok, there’s a mountain of privacy issues surrounding it… Simple solution — turn it off. I have no intention to broadcast my location 24 hours a day. That’s just asking for trouble. But it could be very handy when you actually want your location to be known.

Anyway – what I’m interested in is how it finds your location?

Most smart phones have some sort of Location API – Here’s an example using the Symbian Location Acquisition API. Java and iPhone have similar API calls.

The other side of the API presumably uses whatever it can to get a location. GPS (possibly with the help of an A-GPS server) or some form of mobile network based “triangulation” seem to be popular.

But what if your phone doesn’t have a GPS receiver? Or you’re using the Latitude iGoogle app on your laptop? Or a desktop?

This is where things get interesting. The Latitude iGoogle app gets your location through the Google Gears GeolocationAPI which according to google, uses “your computer’s WiFi location”. What the hell is your “WiFi location”?

Well, if you can build up a big enough database of WiFi access point MAC addresses and associate each with a location, you can perform a “reverse” query to associate an AP to a location! viola! Each AP should have a 100m (or so) transmission radius, so if there are multiple APs you can “overlay” these transmission circles to get an even more accurate position.

But this theory only works if you have a lot of entries in your database and it’s regularly updated (as people add/remove/move their personal APs). How do you do this? My ideas:

  1. The Google street view car scans for WiFi signals as it drives around
  2. Every Laitude program updates the Google database while it is being used

The Street view car visits every street which gives Google a good starting point for the database. As soon as possible after this they get users to “give Latitude a try” which corrects the database with any changes since the Google car went past, making it more accurate as more users come on. To back up this Google car collection claim, I’m going to use a quote from the official google blog “Today, Latitude is available in 27 countries, and we hope to add more soon.”. How many countries do you think Google has Street View imagery for or is currently capturing? About 27 perhaps?

It’s all very clever if you ask me.

Just don’t tell anyone what Virtual Observer is currently doing with rubbish trucks…… 😉

, , , , ,

5 Comments