#php #google-maps #google-maps-api-3 #overlay #tile
#php #google-карты #google-maps-api-3 #наложение #плитка
Вопрос:
У меня есть вопрос относительно сервера плиток карт и преобразования координат в Картах Google с использованием библиотеки утилит Google Maps.
Мой сервер плиток обращается к базе данных с тысячами координат gps (широта, lng) и для каждой точки (широта, lng) проверяет, находится ли точка внутри географических границ плитки; если это так, преобразование координат (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:
Однако для плитки с уровнем масштабирования> 13 происходит следующее:
Что так странно… кажется, что пиксели идеально выровнены? Сначала я подумал, что это проблема с десятичным разрешением, но разрешение данных довольно хорошее (например, 35.6185989379883 в базе данных mysql, 35.6185989379883, 139.731994628906, а в php плавающие и двойные значения — это одно и то же …)
Может ли кто-нибудь помочь мне решить эту проблему?
Заранее спасибо…
Ответ №1:
Почему вы используете приведение типов к результату запроса к базе данных? В примере книги googlemapsutility ее там нет?
Комментарии:
1. Спасибо за ответ. Изначально этого кастинга не было, я просто хотел проверить, что произойдет, если я добавлю туда кастинг. В любом случае, я получаю тот же результат, независимо от кастинга … 🙁