Ошибка отображения с использованием плиточного сервера Google Maps и утилиты Google Maps на PHP

#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:

Изображение 1

Однако для плитки с уровнем масштабирования> 13 происходит следующее:

Изображение 2

Что так странно… кажется, что пиксели идеально выровнены? Сначала я подумал, что это проблема с десятичным разрешением, но разрешение данных довольно хорошее (например, 35.6185989379883 в базе данных mysql, 35.6185989379883, 139.731994628906, а в php плавающие и двойные значения — это одно и то же …)

Может ли кто-нибудь помочь мне решить эту проблему?

Заранее спасибо…

Ответ №1:

Почему вы используете приведение типов к результату запроса к базе данных? В примере книги googlemapsutility ее там нет?

Комментарии:

1. Спасибо за ответ. Изначально этого кастинга не было, я просто хотел проверить, что произойдет, если я добавлю туда кастинг. В любом случае, я получаю тот же результат, независимо от кастинга … 🙁