Я пытаюсь написать скрипт на PHP, который будет принимать четырехъядерные карты Bing, а затем вернуть уровень масштабирования, координату x и координату y, чтобы я мог использовать свои собственные карты. Я основан мой код от C# пример кода, представленной Microsoft в качестве такого here:Как преобразовать четырехъядерные карты Bing в уровень масштабирования, координату x и координату y с помощью PHP?
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
Zoom: 18
Может ли кто-нибудь пролить свет на то, что я делаю неправильно? Я искал все вокруг и не могу найти какой-либо другой пример кода для изучения! Спасибо всем!