I spent part of my day trying to decipher how to ask BING for map tiles from its database. You can find a lot of useful information at Bing Maps Tile System. I’m plucking through the logic of how BING handles maps for a project that I am working on. One of the mysteries is how to calculate a tile based on the zoom level and location. I am not going to go through the specifics of how this works. You can read the reference article for that. My objective was to feed a function the X and Y location values and zoom level and get the Quadkey value back. This is not going to be a stand alone function, but inside other code. Here it is.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | Function ConvertQuadKeyTo-String { Param ( $ZoomLevel = 3, $TileX = "3", $TileY = "5" ) $XVaL = [Convert]::ToString("$TileX",2) $YVaL = [Convert]::ToString("$Tiley",2)
# Pad the values based on the zoom level. $XVal = $XVal.Padleft($ZoomLevel,"0") $YVal = $YVal.Padleft($ZoomLevel,"0")
# Joint the 2 values together. # To do this, take the first character of the YVal # and then append the first character of the XVal. Repeat. $LoopControl = 0 $Combined = "" $XVal = $XVal.ToCharArray() $YVal = $YVal.toCharArray() While ($LoopControl -lt $ZoomLevel) { $Combined = $Combined+ $YVal[$LoopControl] + $XVal[$LoopControl] $LoopControl++ }
# Convert the combined number to Base4.
# Determine if there is an even or odd number of digits. # if odd, the prepend a zero. If ($Combined.Length % 2) {$Combined = "0"+$Combined}
# Take each pair of digits and convert them from Base 2 # to Base 10. $QuadKey = "" $Combined = $Combined.ToCharArray() For($X=0;$X -lt $Combined.Length; $X+=2) { $String = $Combined[$X]+$Combined[$X+1] $Int = [Convert]::ToInt32("$String",2) $QuadKey = $QuadKey + $Int.ToString() }
Write-Output $QuadKey } # END: Function ConvertQuadKeyTo-String |
The string that is returned in used in the request for the image. Here is the image from QuadKey “0”. Yes, I have Sapien’s PowerShell Studio 2015 engaged on this project.
Zoom level 2 at QuadKey 02
No error handling for valid values is in this code. That will be handled by another set of code.
Comments