У меня есть вопрос, касающийся сервера листов карты и преобразования координат в Картах Google с помощью библиотеки служебных программ Google Maps.
Мой сервер плиток обращается к базе данных с тысячами координат GPS (широта, долгота), и для каждой точки (широта, долгота) проверяет, находится ли точка внутри географических границ тайла; в этом случае выполняется преобразование координат (WGS84 -> Mercator -> X, Y смещение внутри плитки) и закрашивание соответствующего пикселя внутри плитки с использованием библиотеки GoogleMapsUtility.
С точки зрения кода, я делаю следующее:
$point = GoogleMapUtility::getOffsetPixelCoords((float)$row['lat'], (float)$row['lng'], $zoom, $X, $Y);
, которая вызывает функцию getOffsetPixelCoords
(и, в свою очередь, функции ниже) из библиотеки:
public static function getOffsetPixelCoords($lat,$lng,$zoom, $X, $Y)
{
$pixelCoords = GoogleMapUtility::getPixelCoords($lat, $lng, $zoom);
return new Point(
$pixelCoords->x - $X * GoogleMapUtility::TILE_SIZE,
$pixelCoords->y - $Y * GoogleMapUtility::TILE_SIZE
);
}
public static function getPixelCoords($lat, $lng, $zoom)
{
$normalised = GoogleMapUtility::_toNormalisedMercatorCoords(GoogleMapUtility::_toMercatorCoords($lat, $lng));
$scale = (1 << ($zoom)) * GoogleMapUtility::TILE_SIZE;
return new Point(
(int)($normalised->x * $scale),
(int)($normalised->y * $scale)
);
}
private static function _toNormalisedMercatorCoords($point)
{
$point->x += 0.5;
$point->y = abs($point->y-0.5);
return $point;
}
Хорошо, теперь результаты. Для уровня масштабирования <13 это прекрасно работает, ниже приведен пример плитки на уровне масштабирования 11: </p>
Изображение1
Однако для плитки с уровнем масштабирования> 13 происходит следующее:
Image2
Что странного ... пиксели выглядят идеально выровненными? Сначала я подумал, что это проблема десятичного разрешения, но разрешение данных довольно хорошее (хранится как double в базе данных mysql, например, 35.6185989379883, 139.731994628906, а в php float и double одинаковые ...)
Может ли кто-нибудь помочь мне с решением этой проблемы?
Заранее спасибо ...