我想在PHP中編寫一個腳本,它將接受Bing地圖quadkey,然後返回縮放級別,x座標和y座標,以便我可以使用我自己的地圖。我根據我的代碼關閉微軟提供這樣here的C#示例代碼:如何將Bing地圖quadkey轉換爲使用PHP的縮放級別,x座標和y座標?
public static void QuadKeyToTileXY(string quadKey, out int tileX, out int tileY, out int levelOfDetail)
{
tileX = tileY = 0;
levelOfDetail = quadKey.Length;
for (int i = levelOfDetail; i > 0; i--)
{
int mask = 1 << (i - 1);
switch (quadKey[levelOfDetail - i])
{
case '0':
break;
case '1':
tileX |= mask;
break;
case '2':
tileY |= mask;
break;
case '3':
tileX |= mask;
tileY |= mask;
break;
default:
throw new ArgumentException("Invalid QuadKey digit sequence.");
}
}
}
這是使用未運行PHP我的娛樂休閒爲我所期望的:
$quadkey = intval($_GET["quadkey"]);
$zoom = count($quadkey);
for ($i = $zoom; $i > 0; $i--)
{
$mask = 1 << ($i - 1);
$quadkey_array = str_split($quadkey);
switch ($quadkey_array[$zoom - $i])
{
case 0:
break;
case 1:
$x |= $mask;
break;
case 2:
$y |= $mask;
break;
case 3:
$x |= $mask;
$y |= $mask;
break;
default:
echo "Error";
}
echo "/" . $zoom . "/" . $x . "/" . $y . ".png";
}
的例子quadkey我使用和預期結果如下:
Quadkey:120202111102203112
的X座標:134926
的Y座標:86121
變焦:18
任何人都能夠闡明我做錯了什麼嗎?我一直在尋找周圍,無法找到任何其他示例代碼來檢查!謝謝大家!