Ошибка отображения с помощью сервера плиток Google Maps и утилиты Google Maps в PHP - PullRequest
0 голосов
/ 08 октября 2011

У меня есть вопрос, касающийся сервера листов карты и преобразования координат в Картах 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 одинаковые ...)

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

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

1 Ответ

0 голосов
/ 08 октября 2011

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

...